Текущее время: Вс, дек 17 2017, 17:50

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




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

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

Необходимо считывать атрибуты навигации из инфо-провайдера.
Использую стандартный 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
Сообщения: 34
Здравствуйте,
не пробовали передавать в поле CHAALIAS имя атрибута? (без имени признака и двух подчеркиваний)


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

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


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

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

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
Сообщения: 20
Пол: Мужской
Используется 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
Сообщения: 694
Откуда: Сибирь
Пол: Мужской
Посмотрите демо-отчет RSDRI_INFOPROV_READ_DEMO в нем считывается нав атрибут 0MATERIAL__0MATL_GROUP.
Вы тех имя атрибуты навигации (chaalias) в структуре lts_edo3b553 можете написать какой хотите, он не обазятельно должен совпадать с chanm.

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


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

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

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 часа


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

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


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

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