Меню

BTE - Business Transaction Events

BTE – Работа с бизнес событиями транзакций – это техника расширения, позволяющая выполнить дополнительную проверку значений данных в момент ввода документа в систему (1) или выполнить обновление данных в собственных таблицах (2) при выполнении определённых операций (транзакций).

Уважаемые коллеги!

Я продолжаю публикацию на портале SAPLand цикла статей «Техники расширений стандартной системы SAP».

Все статьи цикла приведены внизу публикации.

BTE – Работа с бизнес событиями транзакций – это техника расширения, позволяющая выполнить дополнительную проверку значений данных в момент ввода документа в систему (1) или выполнить обновление данных в собственных таблицах (2) при выполнении определённых операций (транзакций). Появление этой техники должно было решить проблемы использования одной точки расширения разными разработчиками, например, это техника Customer-Exits или UserExits. В некотором виде, эту проблему решили для событий проверки значений, где каждый разработчик получает свою независимую точку входа в бизнес событие, однако реализация события обновления данных, как и для предыдущих техник (Customer-Exits или UserExits), осталась единственной. Все разработчики должны реализовывать свой код в рамках одной программы реализации. Техника BTE используется как разработчиками SAP, партнерами SAP, так и клиентами SAP, хотя для клиентов, по части событий есть ограничения к использованию BTE.

Использование техники BTE стало возможным, начиная с версии SAP ERP 4.0 . Эта техника обеспечивает интерфейс (точку выхода) в стандартной программе с пользовательским расширением (приложением), выполняющим дополнительные пользовательские проверки или обновление пользовательских данных. Технику BTE используют, как правило, для следующих функциональностей SAP:

  • главная книги FI-GL,
  • бухгалтерия поставщиков FI-AP,
  • бухгалтерия клиентов  FI-AR,
  • модуля сбыта SD.

Техника BTE реализуется с помощью предопределенных интерфейсов между стандартной программой и расширением, позволяющих вызвать «дополнительную» (пользовательскую) функциональность. Для реализации бизнес - расширения вы должны создать модуль с предопределенными параметрами и именами, для каждого бизнес-события это будет отдельная реализация со своим набором параметров. Система SAP вызывает функциональные модули OPEN_FI_PERFORM_* или OUTBOUND_CALL_*, которые в свою очередь проверяют: есть ли «активные» BTE – события, из указанных в настройках системы.

Существует два типа интерфейсов (в технике BTE):

  • Publish & Subscribe interfaces (P/S Modules) – в этом типе интерфейса нельзя обновлять данные в БД, но возможно существование нескольких (очередь) активных «инстанций», вызываемых последовательно.
  • Process interfaces (Process Modules) – этот тип интерфейса позволяет выполнять обновление данных в БД, но ограничением его использования является то, что активной может быть одна «инстанция» данного типа.

Для нахождения существующих в коде стандартных программ «триггерных точек» BTE можно пойти следующими путями: 

  • Поиск в тексте стандартной программы вызовов:
    • "OPEN_FI_PERFORM" для нахождения «точки вызова» с интерфейсом P/S Modules;
    • "OUTBOUND_CALL" для нахождения «точки вызова» с интерфейсом Process Modules .
  • Использовать транзакцию FIBF и далее по меню: «Параметры настройки» – «P/S Модули» или «Модули процессов» для соответствующих типов интерфейсов. Рис.1.
  • Использование отладчики системы, для этого необходимо установить точку останова в функциональном модуле BF_FUNCTIONS_FIND.

Рис.1 BTE-1

Для каждого типа интерфейса существует три варианта использования:

  1. Вариант для стандартных событий системы SAP-приложения, изменять которые не рекомендуется, так как это сфера ответственности разработчиков компании SAP.
  2. Вариант для событий партнеров. Среднестатистический разработчик вряд ли является партнером (примеч. автора.)
  3. Вариант для событий «обычных клиентов».

Как мы видим, для практического применения на проекте внедрения или при поддержке остаётся только последний пункт, выбрав который, мы можем приступить к реализации собственных BTE-расширений. Для получения информации по существующим событиями в конкретной транзакции перейдите по меню «Среда» – «Инфо-система P/S» или «Инфо-система (процессы)». После чего получите список всех доступных событий каждого типа, Рис.2.

Рис.2 BTE-2

Примечание: Наиболее «любимый» тип интерфейса для BTE, это событие с номером 1120 – замещение полей в заголовке и позициях документа. Фактически разрешено выполнять изменение полей заголовка и позиций документа, когда он полностью сформирован, это - аналог замещения с типом события «0003 – документ полностью», но в отличии от указанного замещения, событие 1120 имеет место для всех создаваемых FI-документов.

Для получения шаблона реализации функционального модуля, можно скопировать его из окна справки, или же нажать на панели инструментов кнопку  , после нажатия которой будет вызвана транзакция SE37 – создание функционального модуля. В поле ввода имени функции будет подставлен шаблон реализации выбранного интерфейса Рис.3

Рис.3 BTE-4

Если требуется только просмотреть параметры функции, то можно выбрать кнопку   (на Рис.2), при нажатии на которую, будут выведены параметры функционального модуля, Рис.4.

Рис.4 BTE-41

Следует скопировать этот шаблон в собственный функциональный модуль, начинающийся с Z_ или Y_. Например, модуль SAMPLE_INTERFACE_00001120 можно скопировать в модуль Z_SAMPLE_PROCESS_00001120, Рис.5, в собственной группе функций, например, Z_BFFMSMPL2.

Рис.5 BTE-5


В таком случае после копирования мы получим шаблон модуля с входными и выходными параметрами, где можем написать собственную реализацию, пример кода - ниже:

FUNCTION z_sample_process_00001120.
*"--------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(I_BKDF) TYPE  BKDF OPTIONAL
*"  TABLES
*"      T_BKPF STRUCTURE  BKPF
*"      T_BSEG STRUCTURE  BSEG
*"      T_BKPFSUB STRUCTURE  BKPF_SUBST
*"      T_BSEGSUB STRUCTURE  BSEG_SUBST
*"      T_BSEC STRUCTURE  BSEC OPTIONAL
*"  CHANGING
*"     REFERENCE(I_BKDFSUB) TYPE  BKDF_SUBST OPTIONAL
*"--------------------------------------------------------------------
  break tochenyuk.
ENDFUNCTION.

Пока собственную реализацию разрабатывать не будем, а поставим только команду остановки, и перейдем к активации вызова нашей функции. 

Для начала, требуется создать, так называемую, запись кода продукта. Фактически это признак объединения для группы событий, например, если для реализации какого-то процесса вам нужно задействовать несколько бизнес-событий, то таким образом вы можете сгруппировать используемые бизнес функции и проводить активацию разработки одним нажатием мыши, включая или отключая разработку. Для этого в транзакции FIBF переедем по меню: «Параметры настройки» – «Продукты» – «…клиента», Рис.6.

Рис.6 BTE-6

Вполне возможно, что в таблице уже будут другие активные продукты («инстанции»). Если не знаем, что это за продукты, то просто создаем новый собственный тип продукта и «ставим галку» активации, если заранее знаем код продукта, например, это - созданный нами ранее продукт, тогда создавать новый продукт не требуется, он уже создан. Для создания новой группы нажимаем кнопку «Новые записи», Рис.7.

 
Рис.7 BTE-7

Теперь сохраняем собственный продукт и переходим к его связыванию с функциональным модулем, созданным ранее. Так как это был модуль обновления данных, то идем по пути: «Параметры настройки» – «Модули процесса» – «…клиента», где добавляем модуль, созданный ранее с нашим типом продукта, Рис.8, после чего сохраняем данные ввода.

Рис.8 BTE-8

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

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

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

Войти

Обсуждения Количество комментариев2

Комментарий от  

Пётр Ромащенко

  |  14 сентября 2016, 14:59

Уткнулся я тут в ограниченность полей стандартных структур, и уж чуть было не начал сочинять неведомо что, и тут - ТАДАМ! - эта замечательная статья. Сердечное спасибо, uukrul!  :-)

Комментарий от  

Олег Точенюк

  |  15 сентября 2016, 18:21

Уткнулся я тут в ограниченность полей стандартных структур, и уж чуть было не начал сочинять неведомо что, и тут - ТАДАМ! - эта замечательная статья. Сердечное спасибо, uukrul!  :-)

Ну на самом деле сейчас цикл статей, это те материалы, которые читались на мастер классе, по стандартным возможностям расширения системы.