Текущее время: Чт, авг 16 2018, 08:17

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ
СообщениеДобавлено: Ср, апр 12 2017, 13:45 
Начинающий
Начинающий

Зарегистрирован:
Пт, сен 30 2011, 07:53
Сообщения: 21
Пол: Мужской
Добрый день.

Необходимо считывать атрибуты навигации из инфо-провайдера.
Использую стандартный 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.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ
СообщениеДобавлено: Ср, апр 12 2017, 19:18 
Ассистент
Ассистент

Зарегистрирован:
Ср, апр 02 2014, 19:03
Сообщения: 36
Здравствуйте,
не пробовали передавать в поле CHAALIAS имя атрибута? (без имени признака и двух подчеркиваний)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ
СообщениеДобавлено: Ср, апр 12 2017, 19:32 
Начинающий
Начинающий

Зарегистрирован:
Пт, сен 30 2011, 07:53
Сообщения: 21
Пол: Мужской
Пробовал по разному:
1. Имя признака
2. Имя атрибута
3. Имя признака__Имя атрибута
4. __Имя атрибута
5. Имя атрибута
6. Имя атрибута_имя признака.
7...8...вариант Вместо двух "__" везде при каждом варианте использовал один"_".
везде ошибка 11. если длина превышает 18 символов.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ
СообщениеДобавлено: Ср, апр 12 2017, 20:51 
Ассистент
Ассистент

Зарегистрирован:
Ср, апр 02 2014, 19:03
Сообщения: 36
попробуйте посмотреть, как эту проблему решает САП:

1. поставьте break-point в начале RSDRI_INFOPROV_READ
2. Зайдите в LISTCUBE и выберите проблемный атрибут для показа
3. При вызове просмотра данных должен сработать break-point, так как САП также использует функцию RSDRI_INFOPROV_READ
4. Посмотрите, какие параметры передает в этом случае САП


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ  Тема решена
СообщениеДобавлено: Чт, апр 13 2017, 16:02 
Начинающий
Начинающий

Зарегистрирован:
Пт, сен 30 2011, 07:53
Сообщения: 21
Пол: Мужской
Используется FM RSDRC_INFOPROV_READ в LISTCUBE.

Анализировали версию SAP BW 7.4 и 7.5 там данного FM нет. То есть при переходе на новую версию возможно могут быть проблему.
Может у кого есть исходники считывания данных из куба с использованием FM RSDRC_INFOPROV_READ?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ
СообщениеДобавлено: Пт, апр 14 2017, 06:59 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, фев 09 2011, 08:19
Сообщения: 711
Откуда: Сибирь
Пол: Мужской
Посмотрите демо-отчет RSDRI_INFOPROV_READ_DEMO в нем считывается нав атрибут 0MATERIAL__0MATL_GROUP.
Вы тех имя атрибуты навигации (chaalias) в структуре lts_edo3b553 можете написать какой хотите, он не обазятельно должен совпадать с chanm.

_________________
ешьте рыбу - в ней фосфор.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Считывание атрибутов навигации с использованием FM RSDRI_INFOPROV_READ
СообщениеДобавлено: Пт, апр 14 2017, 15:32 
Начинающий
Начинающий

Зарегистрирован:
Пт, сен 30 2011, 07:53
Сообщения: 21
Пол: Мужской
Спасибо получилось!!!!

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.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB