Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие авар.doc
Скачиваний:
62
Добавлен:
02.09.2019
Размер:
2.34 Mб
Скачать

Чтение данных инфо-провайдера

Пример ABAP кода для чтения данных инфо-куба.

  TYPE-POOLS: RSD.   DATA: LS_RUNPARAM        LIKE LINE OF LT_RUNPARAM.   DATA: L_T_SEL        TYPE RSDD_T_SEL,         L_TH_SFC       TYPE RSDRI_TH_SFC,         L_TH_SFK       TYPE RSDRI_TH_SFK.   DATA: L_S_RANGE      TYPE RSDRI_S_RANGE,         L_T_RANGE      TYPE RSDRI_T_RANGE.   DATA: L_S_SFC        TYPE RSDRI_S_SFC,         L_S_SFK        TYPE RSDRI_S_SFK.   DATA: L_EOD          TYPE RS_BOOL.   DATA: E_T_MESSAGE    TYPE RSSEM_T_MESSAGE.   DATA: SR_DATA        TYPE REF TO DATA.   DATA: L_HVIEW        TYPE RSD_S_CUBE-VIEWHIOBJNM.   DATA: L_YEAR         TYPE /BI0/OIFISCYEAR.   FIELD-SYMBOLS:         <FS_SCOMP>     TYPE /BIC/OISCOMP,         <FS_SOPXTYPE>  TYPE /BIC/OISOPXTYPE,         <FS_SSEGM>     TYPE /BIC/OISSEGM,         <FS_AMOUNT>    TYPE /BI0/OICS_TRN_GC,         <LS_DATA>      TYPE ANY,         <LT_DATA>      TYPE STANDARD TABLE.   DATA: L_S_DATA       TYPE TS_ALLOCATION_BASE.   DATA: L_T_DATA       TYPE TT_ALLOCATION_BASE.   DATA: L_END_OF_DATA  TYPE RS_BOOL,         L_FIRST_CALL   TYPE RS_BOOL.   DATA: I_VALFROM      TYPE BAPI1022_FIELD.   DATA: IDX TYPE SY-TABIX.   CONSTANTS:     LS_SCS_ITEM TYPE /BIC/OISCS_ITEM VALUE 'C.720.90.00.N'.   CALL FUNCTION 'RSD_TNAMES_GET_FOR_CUBE'     EXPORTING       I_INFOCUBE    = 'S03_R01'     IMPORTING       E_VIEWHIOBJNM = L_HVIEW. * ФОРМИРОВАНИЕ РАЗВЕРТКИ И ФИЛЬТРА ДЛЯ ЧТЕНИЯ ДАННЫХ ИЗ S03_R01   CLEAR L_TH_SFC. * РАЗВЕРТКА ПО КОМПАНИИ   CLEAR L_S_SFC.   L_S_SFC-CHANM    = 'SCOMP'.   L_S_SFC-CHAALIAS = 'SCOMP'.   L_S_SFC-ORDERBY  = 0.   INSERT L_S_SFC INTO TABLE L_TH_SFC. РАЗВЕРТКА ПО ЭЛ-М ЗАТРАТ   CLEAR L_S_SFC.   L_S_SFC-CHANM    = 'SOPXTYPE'.   L_S_SFC-CHAALIAS = 'SOPXTYPE'.   L_S_SFC-ORDERBY  = 0.   INSERT L_S_SFC INTO TABLE L_TH_SFC. РАЗВЕРТКА ПО СЕГМЕНТАМ   CLEAR L_S_SFC.   L_S_SFC-CHANM    = 'SSEGM'.   L_S_SFC-CHAALIAS = 'SSEGM'.   L_S_SFC-ORDERBY  = 0.   INSERT L_S_SFC INTO TABLE L_TH_SFC. ВЫВОДИТЬ ПОКАЗАТЕЛЬ   CLEAR L_TH_SFK.   CLEAR L_S_SFK.   L_S_SFK-KYFNM    = '0CS_TRN_GC'.   L_S_SFK-KYFALIAS = '0CS_TRN_GC'.   L_S_SFK-AGGR     = 'SUM'.   INSERT L_S_SFK INTO TABLE L_TH_SFK.   CLEAR L_T_RANGE. * ФИЛЬТР ПО ВЕРСИИ (ИЗ ПЕРЕМ ДАННЫХ)   CLEAR: L_S_RANGE, LS_RUNPARAM.   L_S_RANGE-CHANM    = 'SVERSION'.   L_S_RANGE-SIGN     = 'I'.   L_S_RANGE-COMPOP   = 'EQ'.   READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = '/BIC/SVERSION' INTO LS_RUNPARAM.   L_S_RANGE-LOW = LS_RUNPARAM-VALUE.   APPEND L_S_RANGE TO L_T_RANGE. * ФИЛЬТР ПО КАТАЛОГУ ПОЗИЦИЙ (ИЗ ПЕРЕМ ДАННЫХ)   CLEAR: L_S_RANGE, LS_RUNPARAM.   L_S_RANGE-CHANM    = '0CS_CHART'.   L_S_RANGE-SIGN     = 'I'.   L_S_RANGE-COMPOP   = 'EQ'.   READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = '/1FB/CS_CHART' INTO LS_RUNPARAM.   L_S_RANGE-LOW = LS_RUNPARAM-VALUE.   APPEND L_S_RANGE TO L_T_RANGE. ФИЛЬТР ПО СЧЕТУ   CLEAR: L_S_RANGE, LS_RUNPARAM.   L_S_RANGE-CHANM    = 'SCS_ITEM'.   L_S_RANGE-SIGN     = 'I'.   L_S_RANGE-COMPOP   = 'EQ'.   L_S_RANGE-LOW = LS_SCS_ITEM.   APPEND L_S_RANGE TO L_T_RANGE. ФИЛЬТР ПО УРОВНЮ КОНТИРОВКИ (00, 01, 10)   CLEAR L_S_RANGE.   L_S_RANGE-CHANM    = '0CS_PLEVEL'.   L_S_RANGE-SIGN     = 'I'.   L_S_RANGE-COMPOP   = 'EQ'.   L_S_RANGE-LOW = '00'.   APPEND L_S_RANGE TO L_T_RANGE.   L_S_RANGE-LOW = '01'.   APPEND L_S_RANGE TO L_T_RANGE.   L_S_RANGE-LOW = '10'.   APPEND L_S_RANGE TO L_T_RANGE. * ФИЛЬТР ПО ГОДУ (ИЗ ПЕРЕМ ДАННЫХ)   CLEAR: L_S_RANGE, LS_RUNPARAM.   L_S_RANGE-CHANM    = '0FISCYEAR'.   L_S_RANGE-SIGN     = 'I'.   L_S_RANGE-COMPOP   = 'EQ'.   READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = 'FISCYEAR' INTO LS_RUNPARAM.   L_S_RANGE-LOW = LS_RUNPARAM-VALUE.   L_YEAR = LS_RUNPARAM-VALUE.   APPEND L_S_RANGE TO L_T_RANGE.   CLEAR: L_S_RANGE, LS_RUNPARAM.   L_S_RANGE-CHANM    = '0FISCPER3'.   L_S_RANGE-SIGN     = 'I'.   L_S_RANGE-COMPOP   = 'BT'.   L_S_RANGE-LOW = '001'.   READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = 'FISCPERIOD' INTO LS_RUNPARAM.   L_S_RANGE-HIGH = LS_RUNPARAM-VALUE.   APPEND L_S_RANGE TO L_T_RANGE.   CREATE DATA SR_DATA TYPE STANDARD TABLE OF (L_HVIEW)                    WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.   ASSIGN SR_DATA->* TO <LT_DATA>.   L_FIRST_CALL = RS_C_TRUE.   WHILE L_EOD IS INITIAL.     CALL FUNCTION 'RSSEM_INFOPROV_READ'       EXPORTING         I_INFOPROV                    = 'S03_R01'         I_AUTHORITY_CHECK             = ''         I_USE_AGGREGATES              = 'X'                 "jhn300106         I_PACKAGESIZE                 = 10000         I_T_SFC                       = L_TH_SFC         I_T_SFK                       = L_TH_SFK         I_T_RANGE                     = L_T_RANGE       IMPORTING         E_END_OF_DATA                 = L_EOD         E_T_DATA                      = <LT_DATA>         E_T_MESSAGE                   = E_T_MESSAGE       CHANGING         C_FIRST_CALL                  = L_FIRST_CALL       EXCEPTIONS         NO_AUTHORIZATION              = 1         SHFC_HIENODE                  = 2         NO_NCUM_QUERY_ALLOWED         = 3         CUBE_LOCKED_DUE_2_COMPRESSION = 4.     LOOP AT <LT_DATA> ASSIGNING <LS_DATA>.       ASSIGN COMPONENT 'SCOMP' OF STRUCTURE <LS_DATA> TO <FS_SCOMP>.       ASSIGN COMPONENT 'SOPXTYPE' OF STRUCTURE <LS_DATA> TO <FS_SOPXTYPE>.       ASSIGN COMPONENT 'SSEGM' OF STRUCTURE <LS_DATA> TO <FS_SSEGM>.       ASSIGN COMPONENT '0CS_TRN_GC' OF STRUCTURE <LS_DATA> TO <FS_AMOUNT>.       READ TABLE L_T_DATA         WITH TABLE KEY           SCOMP              = <FS_SCOMP>           SOPXTYPE           = <FS_SOPXTYPE>           SSEGM              = <FS_SSEGM>         INTO L_S_DATA.       IDX = SY-TABIX.       IF SY-SUBRC = 0.         L_S_DATA-CS_TRN_GC = L_S_DATA-CS_TRN_GC + <FS_AMOUNT>.         MODIFY L_T_DATA FROM L_S_DATA INDEX IDX.       ELSE.         L_S_DATA-SCOMP = <FS_SCOMP>.         L_S_DATA-SOPXTYPE = <FS_SOPXTYPE>.         L_S_DATA-SSEGM = <FS_SSEGM>.         L_S_DATA-CS_TRN_GC = <FS_AMOUNT>.         INSERT L_S_DATA INTO TABLE L_T_DATA.       ENDIF.     ENDLOOP.   ENDWHILE.