Добрый день. Необходимо считывать атрибуты навигации из инфо-провайдера. Использую стандартный FM RSDRI_INFOPROV_READ.
Данному FM на вход поступает таблица с перечнем признаков. Данная таблица ссылается на тип таблицы RSDRI_TH_SFC. В данном типе таблицы тип строки структура RSDRI_S_SFC. В структуре RSDRI_S_SFC есть два используемых поля CHANM (char-30)- техническое имя признака. CHAALIAS (char- 18) псевдоним признака.
При чтения данных оба этих поля обязаны быть заполнены техническим наименование признака. При считывания признака проблем не возникает, так как длина признака 9 символов. При считывании Атрибута навигации, FM возвращает ошибку- ТИП 11. Общая ошибка
Опытным путем было установлено следующее, если длина Атрибута навигации и признака не превышает 18 символов (будет добавляться в поля CHAALIAS), то FM отрабатывает без ошибок. Регламент наименование объектов в компании для признаков 9 символом. То есть длина тарибута навигации будет 9+ 2 спец символа ("__") + 9 символов самого атрибута навигации. В итоге длина = 20 символов. Перенастраивать модель очень не хотелось бы, далеко не один атрибут навигации создан в системе. Коллеги, может есть какие -нибудь решения, кто как решал ранее данную проблему? Искали с коллегами ноту для расширения на SCN -не нашли.
Пример считывания :
REPORT ztest_atrnav.
* Типы для таблицы с результатом для куба TYPES: BEGIN OF lts_edo3b553,"<---СТРУКТУРА ВОЗВРАТА ecbem0017 TYPE /bic/oiecbem0017, ectls0010 TYPE /bic/oiectls0010, ecbls0017 TYPE /bic/oiecbls0017, ecbls0094 TYPE /bic/oiecbls0094, ecbls0018 TYPE /bic/oiecbls0018, ecbls0006 TYPE /bic/oiecbls0006, ecbls0016 TYPE /bic/oiecbls0016, ectls0010__etr1 TYPE /bic/oietr1,
*Показатели efi00003 TYPE /bic/oiefi00003, END OF lts_edo3b553 .
TYPES: BEGIN OF lts_edo3b553_ext, "<---СТРУКТУРА расширенная + рассчитанные показатели ecbem0017 TYPE /bic/oiecbem0017, ectls0010 TYPE /bic/oiectls0010, ecbls0017 TYPE /bic/oiecbls0017, ecbls0094 TYPE /bic/oiecbls0094, ecbls0006 TYPE /bic/oiecbls0006, ecbls0016 TYPE /bic/oiecbls0016, ectls0010__etr1 TYPE /bic/oietr1, *Показатели efi00003 TYPE /bic/oiefi00003, END OF lts_edo3b553_ext.
* Тип для таблицы с результатом DATA: lt_edo3b553 TYPE STANDARD TABLE OF lts_edo3b553_ext, " для вывода в EXCEL ls_edo3b553 LIKE LINE OF lt_edo3b553.
DATA: pi_infoprov_edo3b553 TYPE rsinfoprov , pi_th_sfc_edo3b553 TYPE rsdri_th_sfc , pi_th_sfk_edo3b553 TYPE rsdri_th_sfk,
wa1_edo3b553 LIKE LINE OF pi_th_sfc_edo3b553, wa2_edo3b553 LIKE LINE OF pi_th_sfk_edo3b553,
g_end_of_data_edo3b553 TYPE rs_bool, "флаг окончания чтения g_first_call_edo3b553 TYPE rs_bool, "флаг начала чтения
"<---ТАБЛИЦА СО ЗНАЧЕНИЯМИ ПЕРЕДАВАЕМЫХ ПАРАМЕТРОВ g_t_range_edo3b553 TYPE rsdri_t_range,
"<---ПОЛЕ ТАБЛИЦЫ СО ЗНАЧЕНИЯМИ ПАРАМЕТРОВ g_s_range_edo3b553 TYPE rsdri_s_range,
"<---ПЕРЕМЕННЫЕ ДЛЯ СУММИРОВАНИЯ ПРОМЕЖУТОЧНЫХ ИТОГОВ l_efi00003 TYPE /bic/oiefi00003,
" Таблица куда будет возвращен результат из куба e_t_all_edo3b553 TYPE TABLE OF lts_edo3b553, e_t_edo3b553 TYPE TABLE OF lts_edo3b553 .
FIELD-SYMBOLS: <fs_e_t_edo3b553> TYPE lts_edo3b553, "<---ФС ДЛЯ ЦИКЛА СУММИРОВАНИЯ ПРОМЕЖУТОЧНЫХ ИТОГОВ <ls_ds_edo3b553> LIKE LINE OF e_t_edo3b553, <ls_ds_edo3b553_ext> LIKE LINE OF lt_edo3b553.
CLEAR pi_th_sfc_edo3b553. CLEAR pi_th_sfk_edo3b553. CLEAR g_t_range_edo3b553. CLEAR: l_efi00003.
pi_infoprov_edo3b553 = 'EDO3B553'. g_end_of_data_edo3b553 = rs_c_false. g_first_call_edo3b553 = rs_c_true.
wa1_edo3b553-chanm = 'ECBEM0017'. wa1_edo3b553-chaalias = 'ECBEM0017'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
wa1_edo3b553-chanm = 'ECTLS0010'. wa1_edo3b553-chaalias = 'ECTLS0010'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
wa1_edo3b553-chanm = 'ECBLS0017'. wa1_edo3b553-chaalias = 'ECBLS0017'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
wa1_edo3b553-chanm = 'ECBLS0094'. wa1_edo3b553-chaalias = 'ECBLS0094'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
wa1_edo3b553-chanm = 'ECBLS0018'. wa1_edo3b553-chaalias = 'ECBLS0018'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
wa1_edo3b553-chanm = 'ECBLS0006'. wa1_edo3b553-chaalias = 'ECBLS0006'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
wa1_edo3b553-chanm = 'ECBLS0016'. wa1_edo3b553-chaalias = 'ECBLS0016'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
wa1_edo3b553-chanm = 'ECTLS0010__ETR1'.” АТРИБУТ НАВИГАЦИИ КОТОРЫЕ НЕОБХОДИОМ ПОЛУЧИТЬ wa1_edo3b553-chaalias = 'ECTLS0010__ETR'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553.
**++++++++++ Показатели ++ *
wa2_edo3b553-kyfnm = 'EFI00003'. wa2_edo3b553-kyfalias = 'EFI00003'. wa2_edo3b553-aggr = 'SUM'. INSERT wa2_edo3b553 INTO TABLE pi_th_sfk_edo3b553.
" ФМ WHILE g_end_of_data_edo3b553 NE 'X'. "<---ПОКА НЕ ПРИДЕТ ФЛАГ ПОСЛЕДНЕГО ПАКЕТА CALL FUNCTION 'RSDRI_INFOPROV_READ' EXPORTING i_infoprov = pi_infoprov_edo3b553 i_th_sfc = pi_th_sfc_edo3b553 "признаки i_th_sfk = pi_th_sfk_edo3b553 "показатели i_t_range = g_t_range_edo3b553 "ограничения i_reference_date = sy-datum i_save_in_table = rs_c_false i_save_in_file = rs_c_false i_packagesize = 9999999 i_authority_check = rsdrc_c_authchk-read i_use_aggregates = rs_c_true i_use_db_aggregation = rs_c_true * i_rollup_only = rs_c_false * i_read_ods_delta = rs_c_false IMPORTING e_t_data = e_t_edo3b553 e_end_of_data = g_end_of_data_edo3b553 CHANGING c_first_call = g_first_call_edo3b553 EXCEPTIONS ILLEGAL_INPUT = 1 ILLEGAL_INPUT_SFC = 2 ILLEGAL_INPUT_SFK = 3 ILLEGAL_INPUT_RANGE = 4 ILLEGAL_INPUT_TABLESEL = 5 NO_AUTHORIZATION = 6 ILLEGAL_DOWNLOAD = 7 ILLEGAL_TABLENAME = 8 TRANS_NO_WRITE_MODE = 9 INHERITED_ERROR = 10 X_MESSAGE = 11 NO_COMMIT_FREE_READ = 12 OTHERS = 13.
* CHECK SY-SUBRC = 0. "<---ПРОВЕРКА, ЧТО ВСЕ ОК IF sy-subrc <> 0. "<---ПРОВЕРКА, ЧТО ВСЕ ОК * CONCATENATE. MESSAGE e001(zeasez) WITH sy-subrc. EXIT. ENDIF.
LOOP AT e_t_edo3b553 ASSIGNING <fs_e_t_edo3b553>. "<---ЦИКЛ СУММИРОВАНИЯ ПРОМЕЖУТОЧНЫХ ИТОГОВ l_efi00003 = l_efi00003 + <fs_e_t_edo3b553>-efi00003. "EFI00003
ENDLOOP.
APPEND LINES OF e_t_edo3b553 TO e_t_all_edo3b553. BREAK-POINT. ENDWHILE. * **загрузка в расширенную структуру * "e_t[] = e_t_all[]. * LOOP AT e_t_edo3b553[] ASSIGNING <ls_ds_edo3b553>. APPEND INITIAL LINE TO lt_edo3b553 ASSIGNING <ls_ds_edo3b553_ext>. MOVE-CORRESPONDING <ls_ds_edo3b553> TO <ls_ds_edo3b553_ext>. ENDLOOP.
|
|