Здравствуйте. У меня такая проблема. Мне нужно массово копировать инфотипы с одной системы в другую. Есть ФМ который запускается в системе из которой нужно скопировать и формирует там данные вот сам фм:
Code:
FUNCTION z_rfc_hr_read_infotype.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(TCLAS) TYPE PSPAR-TCLAS DEFAULT 'A'
*" VALUE(PERNR) TYPE PRELP-PERNR
*" VALUE(INFTY) TYPE PRELP-INFTY
*" VALUE(BEGDA) TYPE PRELP-BEGDA DEFAULT '18000101'
*" VALUE(ENDDA) TYPE PRELP-ENDDA DEFAULT '99991231'
*" VALUE(BYPASS_BUFFER) TYPE FLAG DEFAULT ' '
*" VALUE(LEGACY_MODE) TYPE BOOLE_D DEFAULT SPACE
*" EXPORTING
*" VALUE(SUBRC) TYPE SY-SUBRC
*" TABLES
*" INNNN STRUCTURE PRELP
*" EXCEPTIONS
*" INFTY_NOT_FOUND
*"----------------------------------------------------------------------
DATA: d_ref_data TYPE REF TO data,
my_structure_name LIKE dd02l-tabname,
pt_fieldcat TYPE lvc_t_fcat,
i0001 LIKE TABLE OF p0001 WITH HEADER LINE.
* Динамич таблица для хран. данных .
FIELD-SYMBOLS : <it_data> TYPE table,
<prelp> TYPE c,
<pnnnn> TYPE ANY.
* 1. создать таблицу нужной структуры по инфо-типу
* 1.1. создать fieldcatalog по инфо-типу
CONCATENATE 'P'
infty
INTO my_structure_name.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = my_structure_name
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
CHANGING
ct_fieldcat = pt_fieldcat
EXCEPTIONS
inconsistent_interface = 0
program_error = 0
OTHERS = 0.
* 1.2. создать внутр.таблицу по fieldcatalog
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = pt_fieldcat
IMPORTING
ep_table = d_ref_data.
ASSIGN d_ref_data->* TO <it_data>.
*****
* 1.3. чтение ИТ во внутр.таблицу
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
tclas = tclas
pernr = pernr
infty = infty
begda = begda
endda = endda
bypass_buffer = bypass_buffer
legacy_mode = legacy_mode
IMPORTING
subrc = subrc
TABLES
infty_tab = <it_data>
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
subrc = sy-subrc.
EXIT.
ENDIF.
* 1.4. свернуть прочитанные данные ИТ в prelp
LOOP AT <it_data> ASSIGNING <pnnnn>.
ASSIGN <pnnnn> TO <prelp> CASTING.
APPEND <prelp> TO innnn.
ENDLOOP.
ENDFUNCTION.
ФМ работал почти на всех инфотипах, и только на одном вылазит ошибка на моменте:
* 1.2. создать внутр.таблицу по fieldcatalog
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = pt_fieldcat
IMPORTING
ep_table = d_ref_data.
Инфотип Z-всий, но вроде простой без новоротов
Если запускать ФМ в виде:
Code:
DATA it9106 LIKE p9106 OCCURS 0 WITH HEADER LINE.
DATA p_pernr LIKE p0001-pernr VALUE '83000845'.
DATA p_des(6) VALUE 'THR200'.
CALL FUNCTION 'HR_READ_INFOTYPE'
DESTINATION p_des
EXPORTING
pernr = p_pernr
infty = '9106'
bypass_buffer = ' '
TABLES
infty_tab = it9106
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
то он просто возвратит sy-subrc = 2
я так понял что как раз таким образом читать нельзя, не знаете как выйти из положения ?
все работает, только для одного ИТ ничего не работает.
Спасибо