Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие авар.doc
Скачиваний:
62
Добавлен:
02.09.2019
Размер:
2.34 Mб
Скачать

Определение ссылочных данных

Определение ссылочных данных осуществляется в методе IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~GET_REF_DATA_SEL. Если класс построен на интерфейсе IF_RSPLFA_SRVTYPE_IMP_EXEC, то данный метод будет отсутствовать.

Часто, удобнее присвоить в ограничение на ссылочные данные текущие ограничения на данные для изменения:

E_T_REF_CHARSEL = I_T_DATA_CHARSEL.

А далее вносить новые записи или изменять существующие:

  LOOP AT L_T_CHAARR INTO L_S_CHAARR.     L_R_REF_CHARSER-IOBJNM = L_S_CHAARR-CHANM.     L_R_REF_CHARSER-SIGN = 'I'.     L_R_REF_CHARSER-OPT = 'CP'.     L_R_REF_CHARSER-LOW = '*'.     L_R_REF_CHARSER-HIGH = ''.     APPEND L_R_REF_CHARSER TO E_T_REF_CHARSEL.   ENDLOOP.

Добавление сообщений в спул вывода

Для передачи сообщений в точку вызова необходимо включать следующий код:

DATA:         L_DUMMY TYPE C.

MESSAGE ID 'ZS_S1'         TYPE 'I'         NUMBER '005' WITH 'Параметр 1' INTO L_DUMMY. I_R_MSG->ADD_MSG( ).

Обработка данных для изменения

Обработка данных осуществляется в методе IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~EXECUTE

В качестве параметров метода доступны таблицы с данными для изменения (C_TH_DATA) и таблица со ссылочными данными (I_TH_REF_DATA).

Пример обработки:

METHOD IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~EXECUTE.   FIELD-SYMBOLS:         <0CS_TRN_LC1> TYPE ANY,         <0CS_TRN_LC2> TYPE ANY,         <0CS_TRN_QTY1> TYPE ANY,         <0CS_TRN_QTY2> TYPE ANY,         <L_OU> TYPE ANY,         <L_SOU> TYPE ANY,         <L_LINE_S> TYPE ANY,         <L_LINE> TYPE ANY,         <L_LINE_O> TYPE ANY.   DATA:         SORGUNIT TYPE /BIC/OISORGUNIT,         L_LINE TYPE REF TO DATA,         L_DUMMY TYPE C.   IF L_INIT_OK = 'X'.     CLEAR C_TH_DATA.     CREATE DATA L_LINE LIKE LINE OF C_TH_DATA.     ASSIGN L_LINE->* TO <L_LINE>.     LOOP AT I_TH_REF_DATA ASSIGNING <L_LINE_S>.       MOVE-CORRESPONDING <L_LINE_S> TO <L_LINE>.       ASSIGN COMPONENT 'SORGUNIT' OF STRUCTURE <L_LINE> TO <L_OU>.       ASSIGN COMPONENT 'SSORGUNIT' OF STRUCTURE <L_LINE> TO <L_SOU>.       SORGUNIT = <L_OU>.       <L_SOU> = SORGUNIT.       <L_OU> = L_OU.       INSERT <L_LINE> INTO TABLE C_TH_DATA.       IF SY-SUBRC NE 0. *     ЗНАЧИТ СТРОЧКА С ТАКИМИ ПАРАМЕТРАМИ УЖЕ БЫЛА. НУЖНО АГРЕГИРОВАТЬ         READ TABLE C_TH_DATA FROM <L_LINE> ASSIGNING <L_LINE_O>.         ASSIGN COMPONENT '0CS_TRN_LC' OF STRUCTURE <L_LINE_O> TO <0CS_TRN_LC1>.         ASSIGN COMPONENT '0CS_TRN_LC' OF STRUCTURE <L_LINE> TO <0CS_TRN_LC2>.         ASSIGN COMPONENT '0CS_TRN_QTY' OF STRUCTURE <L_LINE_O> TO <0CS_TRN_QTY1>.         ASSIGN COMPONENT '0CS_TRN_QTY' OF STRUCTURE <L_LINE> TO <0CS_TRN_QTY2>.         <0CS_TRN_LC1> = <0CS_TRN_LC1> + <0CS_TRN_LC2>.         <0CS_TRN_QTY1> = <0CS_TRN_QTY1> + <0CS_TRN_QTY2>.       ENDIF.     ENDLOOP.     MESSAGE ID 'ZS_S1'             TYPE 'I'             NUMBER '005' WITH L_CHILDRENCOUNT INTO L_DUMMY.     I_R_MSG->ADD_MSG( ).     RETURN.   ELSE.     MESSAGE ID 'ZS_S1'             TYPE 'E'             NUMBER '004' INTO L_DUMMY.     I_R_MSG->ADD_MSG( ).     RETURN.   ENDIF. ENDMETHOD.