SAPфорум.RU https://sapboard.ru/forum/ |
|
Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ https://sapboard.ru/forum/viewtopic.php?f=12&t=94696 |
Страница 1 из 1 |
Автор: | operlay [ Ср, апр 12 2017, 12:45 ] |
Заголовок сообщения: | Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ |
Добрый день. Необходимо считывать атрибуты навигации из инфо-провайдера. Использую стандартный 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. |
Автор: | kilaka [ Ср, апр 12 2017, 18:18 ] |
Заголовок сообщения: | Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ |
Здравствуйте, не пробовали передавать в поле CHAALIAS имя атрибута? (без имени признака и двух подчеркиваний) |
Автор: | operlay [ Ср, апр 12 2017, 18:32 ] |
Заголовок сообщения: | Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ |
Пробовал по разному: 1. Имя признака 2. Имя атрибута 3. Имя признака__Имя атрибута 4. __Имя атрибута 5. Имя атрибута 6. Имя атрибута_имя признака. 7...8...вариант Вместо двух "__" везде при каждом варианте использовал один"_". везде ошибка 11. если длина превышает 18 символов. |
Автор: | kilaka [ Ср, апр 12 2017, 19:51 ] |
Заголовок сообщения: | Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ |
попробуйте посмотреть, как эту проблему решает САП: 1. поставьте break-point в начале RSDRI_INFOPROV_READ 2. Зайдите в LISTCUBE и выберите проблемный атрибут для показа 3. При вызове просмотра данных должен сработать break-point, так как САП также использует функцию RSDRI_INFOPROV_READ 4. Посмотрите, какие параметры передает в этом случае САП |
Автор: | operlay [ Чт, апр 13 2017, 15:02 ] |
Заголовок сообщения: | Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ |
Используется FM RSDRC_INFOPROV_READ в LISTCUBE. Анализировали версию SAP BW 7.4 и 7.5 там данного FM нет. То есть при переходе на новую версию возможно могут быть проблему. Может у кого есть исходники считывания данных из куба с использованием FM RSDRC_INFOPROV_READ? |
Автор: | 12ozmdm [ Пт, апр 14 2017, 05:59 ] |
Заголовок сообщения: | Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ |
Посмотрите демо-отчет RSDRI_INFOPROV_READ_DEMO в нем считывается нав атрибут 0MATERIAL__0MATL_GROUP. Вы тех имя атрибуты навигации (chaalias) в структуре lts_edo3b553 можете написать какой хотите, он не обазятельно должен совпадать с chanm. |
Автор: | operlay [ Пт, апр 14 2017, 14:32 ] |
Заголовок сообщения: | Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ |
Спасибо получилось!!!! 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, ATR1 TYPE /bic/oietr1, *Показатели efi00003 TYPE /bic/oiefi00003, END OF lts_edo3b553 . wa1_edo3b553-chanm = 'ECTLS0010__ETR1'.” АТРИБУТ НАВИГАЦИИ КОТОРЫЙ wa1_edo3b553-chaalias = 'ATR1'. wa1_edo3b553-orderby = 0. INSERT wa1_edo3b553 INTO TABLE pi_th_sfc_edo3b553. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |