Меню

Системный подход к реализации замещений SAP FI. Часть II

|

Начало статьи >>

Активность задач.

Каждая задача замещения может быть отключена или включена посредством специального интерфейса. Специальный интерфейс включает: таблицу, ракурс ее ведения консультантами со специальными полномочиями, сами полномочия, алгоритмы проверки в пуле подпрограмм ZRGGB_ADD и настроенного протоколирования всех ее изменений посредством документов изменений.

Таблица (например, ztrt0015_active) может выглядеть так (Рис.11):

Row

Field name

Position

Key

Data element

Domain

Datatype

Length

Domain text

1

MANDT

1

X

MANDT

MANDT

CLNT

3

Мандант

2

BUKRS

2

X

BUKRS

BUKRS

CHAR

4

Балансовая единица

3

MISSION

3

X

ZMISGGB

TEXT30

CHAR

30

Область активации

4

CHACTIV

4

 

ACTIV_BF

XFELD

CHAR

1

Продукт активен?

Рис.11. Таблица ведения активности НЕКОТОРЫХ замещений.

Ведение таблицы.

Ведение таблицы осуществляется посредством ракурса ведения (Рис.12). В область активации (MISSION) вносится та или иная задача и ставится метка активности. По умолчанию подразумевается, что все задачи активны. Если в таблице активности в поле MISSION присутствует задача, то она выполняется только в случае, если стоит метка активности.

Рис.12. Ракурс ведения таблицы активности замещений

При инициализации пула подпрограмм ZRGGB_ADD из BTE,RWIN, внешних PERFORM и т.д происходит считывание этой таблицы (ztrt0015_active) в проверочную таблицу gt_check в подпрограмме set_area_activ (Рис.13).

FORM set_area_activ.
  DATA: lt_act TYPE ztrt0015_active OCCURS 0 WITH HEADER LINE.
  DATA: l_cnd(20).
  SELECT * FROM ztrt0015_active INTO TABLE lt_act.
  LOOP AT lt_act.
    CONCATENATE lt_act-mission lt_act-bukrs INTO l_cnd.
    PERFORM set_check_table
    USING l_cnd lt_act-chactiv.
  ENDLOOP.
ENDFORM. "

*

FORM set_check_table USING i_miss i_char.
  gt_check-mission = i_miss.
  gt_check-check   = i_char.
  APPEND gt_check.
  SORT gt_check.
  DELETE ADJACENT DUPLICATES FROM gt_check.
ENDFORM. "

*

FORM get_check_table USING i_miss.
  READ TABLE gt_check WITH KEY mission = i_miss.
ENDFORM.  

Рис.13. Пример работы с таблицей активности замещений.

Реализация проверки активности замещения осуществляется в программе ZRGGB_ADD (подрограмме предпосылок) или в самой задаче замещения:

*Rh0019_9 Задача 1 от 05.05.2014 Замена счетов при реализации
FORM rh0019_09_01.
  DATA: l_check.

  DATA: l_cnd(20).


  CHECK <bkpf> IS ASSIGNED.
*Замещение активно?
  CONCATENATE 'RH0019_09_01' <bkpf>-bukrs INTO l_cnd.
  PERFORM get_check_table USING l_cnd.
  IF sy-subrc = 0.
    CHECK gt_check-check = 'X'.
  ENDIF.

...

ENDFORM. "

Рис.14. Пример вызова проверки активности замещений.

Демонстрационные примеры

Пример 1

Пример демонстрирует структуру вызова задачи замещения, представленную на Рис. 1. Здесь главный вызов - это вызов из события BTE 1025 при g_ch = 'N', где выполняются предпосылки задачи замещения, само замещение счета и сохранение нового значения в таблице памяти GT_MEMRF.

Вспомогательный вызов - это вызовы из конролинга при g_check = '1' и g_check = '2'.

Задача замещения в ZRGGB_ADD (Рис.15):

*Замена счетов при реализации
*Rh0019_8 Задача 4 от 04.04.2014 Иванов Иван.

FORM rh0019_08_04.
  DATA: l_check,

        ...

        ...

        .        
  IF g_ch = 'N'.   "При вызове из 1025 Событие BTE сохранение документа
    CHECK <bkpf> IS ASSIGNED.
    CHECK <tbseg> IS ASSIGNED.


*Предпосылка для заголовка документа
    PERFORM check_precond USING 'RH0019_08_04' CHANGING l_check.
    CHECK l_check = 'X'.
      ...
    LOOP AT <tbseg> ASSIGNING <bseg>.

      l_buzei = sy-tabix.
      CONCATENATE 'RH0019_08_04' l_buzei INTO l_key.

*"Определяем g_check на основе предпосылок для позиций

      PERFORM check_precond USING 'RH0019_08_041' CHANGING l_check.
      CHECK l_check = 'X'.

**В данном случае g_check была определена в предпосылках
      IF g_check = '1'.
         <bseg>-hkont = '0091140111'.
      ELSEIF g_check = '2'.
        <bseg>-hkont = '0091000000'.
      ELSEIF g_check = '3' OR g_check = '4'.
        <bseg>-hkont = '0091131402'.
      ENDIF.

*Сохраняем в таблице памяти (будем потом использовать в подпрограммах rh0019_08_041 и rh0019_08_042 )
      PERFORM set_mem_table USING l_key <bseg>-hkont.
    ENDLOOP.
  ELSEIF g_ch = 'V'. "при вызове из BADI см работа с BADI в публикациях.
    IF g_check = '1'.
      PERFORM rh0019_08_041.
    ELSEIF g_check = '2'.
      PERFORM rh0019_08_042.
    ENDIF.
  ENDIF.
ENDFORM.

Рис.15. Реализованная в пуле подпрограмм ZRGGB_ADD задача замещения.

Вызовы подпрограммы  rh0019_08_04

На рисунке (Рис.16) мы видим один главный вызов из события BTE 1025 и один вспомогательный вызов из BADI

Рис.16. Активные вызовы задачи замещения RH0019_08_04.

Главный вызов

Осуществлен из события BTE 1025 - сохранение документа ссылка на Рис.17

FUNCTION zgf_sbt_interface_00001025.
*"----------------------------------------------------------------------
 

  READ TABLE t_bkpf INDEX 1.
*Инициализация в zrggb_add.

*Привязываем t_bkpf и t_bseg[] к указателям в zrggb_add
  PERFORM pre_init_d USING t_bkpf 'N' CHANGING t_bseg[].

*Привязываем t_bset[] к указателю в zrggb_add
  PERFORM pre_init_bset CHANGING t_bset[].
....

*Идут замещения:

*Замена счетов при реализации
  PERFORM rh0019_08_04(zrggb_add).

*Название замещения ..

  PERFORM rh0019_09_XX(zrggb_add).

*Название замещения ..

  PERFORM rh0019_10_XX(zrggb_add).

*Название замещения ..

  PERFORM rh0019_11_XX(zrggb_add).

  MODIFY t_bkpf INDEX 1.
....
ENDFUNCTION.

******В ГФ где FUNCTION zgf_sbt_interface_00001025********************

FORM pre_init_d USING i_bkpf TYPE bkpf i_ch CHANGING it_bseg TYPE table.
*Заполним BKPF и BSEG в области памяти zrggb_add
  GET REFERENCE OF i_bkpf INTO ref_bkpf.
  GET REFERENCE OF it_bseg[] INTO ref_bseg.
*Установим флаг источника вызова
  PERFORM set_data(zrggb_add) USING 'g_ch' i_ch.
  PERFORM ref_tbl(zrggb_add) USING ref_bkpf ref_bseg.
ENDFORM.                    "pre_init_d

*

FORM pre_init_bset CHANGING it_bset TYPE table.
  GET REFERENCE OF it_bset INTO ref_bset.
  PERFORM ref_bset(zrggb_add) USING ref_bset.
ENDFORM.                    "pre_init_bset

********В программе ZRGGB_ADD*****************************************

FORM ref_tbl USING e_bkpf TYPE REF TO data
                    e_bseg TYPE REF TO data.
  ASSIGN e_bkpf->* TO <bkpf>.
  ASSIGN e_bseg->* TO <tbseg>.
ENDFORM.                    "ref_tbl

*

FORM ref_bset USING e_bset TYPE REF TO data.
  ASSIGN e_bset->* TO <tbset>.
ENDFORM.  

*

FORM set_data USING i_name i_data.
  FIELD-SYMBOLS: <fs> TYPE any.
  ASSIGN (i_name) TO <fs>.
  CHECK sy-subrc = 0.
  <fs> = i_data.
ENDFORM. "set_data

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти