BADI. Поиск и использование
Business Add-Ins
User-Exits позволяют клиентам прикрепить дополнительный код для стандартных SAP исходный код без необходимости изменения исходного объекта. Business Add-Ins SAP методика расширений, основанная на ABAP Objects.
Служат для того, чтобы вносить модификацию в алгоритм обработки объекта и свести к минимуму работы при обновлении системы.
Основным преимуществом данной концепции является возможность повторного использования. BAdI может быть реализован несколько раз.
Как найти BADI которая срабатывает при конкретном действии :
В классе cl_exithandler в методе GET_INSTANCE ставим точку останова. В exit_name будет вызываемая в данный момент времени BADI.
Sxv_get_clif_by_name – ставим точку останова. В name будет имя BADI.
Работа с BADI

Если установлена «1» (Рис 1.) – возможно одновременно иметь несколько активных реализаций.
Если установлена «2» (Рис 1.) – срабатывание реализаций зависит от фильтра. Для случаев если фильтр отсутствует необходимо ставить проверки в начале каждого реализованного метода BADI т.к. реализации срабатывают для всех инфо-типов (например).
Работа с реализациями происходит в пункте меню «Внедрение» (Рис2.) При создании внедрения BADI создается класс методы которого необходимо переопределить согласно нашей задачи.

При создании BADI с фильтром есть возможность указать информацию для фильтра. (Рис 3.)


Активные реализации (то есть те которые срабатывают) помечены желтым цветом, деактивированные – синим. (Рис 4.)

1 – активировать реализацию
2 – деактивировать реализацию (в данном состоянии код выполнятся не будет).
Часто используемые BADI в HR
HRBAS00_RELAT – BADI для соединений.
HRPAD00INFTY – BADI для администрирования персонала
HRBAS00INFTY – BADI для инфо-типов организационного менеджмента.
Расширение SAP для начинающих. User-exit, BADi, Enhancement
Несмотря на то, что система многофункциональна и избыточна, все же достаточно часто требуется вносить изменения в ее логику работы. Начинающие консультанты часто спрашивают, как же можно расширить логику работы системы для требований бизнеса? Не все можно сделать галочками, это верно. Иногда мы влезаем в исходные коды вендора, чтобы сделать свое расширение SAP, свою логику работы. Для нас, с точки зрения HR, представляют интерес два вида расширений системы.
User-exit
Самая старая технология, но и наиболее простая и универсальная. Суть заключается в том, что SAP в своих программах делает вызов специальных Includes (программ), которые начинаются с букв ZX и поэтому разрешены для изменения консультантам. То есть, мы находим такой вызов, создаем Include (программу) и в ней пишем любую логику. При компиляции система видит, что появился в базе данных такой объект — Include, вставляет его содержимое на то место, где был вызов. Так получается, с точки зрения системы, что этот кусок кода как будто бы уже был в самой программе. Например, форма Т-2, программа HRULT2_2004, инклуд HRUIT2_PRC_2004. Смотрим событие get pernr:
* user-exit
include zx_hrult2_pernr.
pn-endda = p_datep.
if gf_fill_period_to = ‘X’.
pnpendda = p_datep.
endif.
Что мы видим? В программе есть user-exit с названием zx_hrult2_pernr. Можно два раза на него кликнуть и тем самым создать программу. Теперь мы в этом Include можем писать свой код, который будет подставлен вместо строчки include zx_hrult2_pernr.
Другой пример из того же отчета:
Насколько мне известно, нет какого-либо единого наглядного каталога, где можно было бы посмотреть все user-exits. Каждую программу нужно смотреть индивидуально. Часть user-exit можно посмотреть, создать и документировать через транзакцию CMOD — управление проектами расширений. Запускаем транзакцию CMOD, в меню «Утилиты» выбираем «SAP-расширения». И по ключевым словам ищем доступные расширения. Искать проще по маске по словам PY, PT, PA, HR, OM для поля «Прикладной компонент». К этому полю, почему-то, нет средства поиска.
Это уже новая технология. Расшифровывается как Business Add-Ins (бизнес-дополнения). BAdi состоит из двух сущностей: определение и реализация. Определение — это своего рода описание объекта с указанием, что он может хранить (какие есть атрибуты), что делать (какие есть методы). Это определенная модель, которая описывает, что обязательно должно быть на входе и на выходе, какие параметры могут быть, их типы и правила вызова. Своего рода абстракция: все мы понимаем, что велосипед состоит из колес, педалей, рамы, руля, цепи, которая соединяет педали с колесом через муфту. Но реализация может быть разной. Так и здесь. Концептуальный проект велосипеда — это определение BAdi, а его конкретная реализация в горный, шоссейный или дамский велосипед — это реализация BAdi. Чтобы определить модель велосипеда (какую именно реализацию нужно вызвать в программе) есть понятие фильтра. Фильтр — это элемент данных в определении BAdi. При вызове программа заполняет его каким-то значением (как решит программист). Система смотрит все реализации этого определения BAdi, у которых стоит такое же значение фильтра (или фильтр просто не используется как критерий), и вызывает подходящую реализацию. По этому принципу, например, сделана косвенная оценка видов оплаты. Посмотрите определение HR_INDVAL (тр. SE18) и реализации HR_IV_* (тр. SE19).
Пример вызова данного BAdi с косвенной оценкой можно посмотреть в процедуре indbw в функциональном модуле RP_EVALUATE_INDIRECTLY. В данном случае вызов не совсем очевиден, но понять принцип работы можно.
Транзакции для создания BAdi: SE18 — создание определений, SE19 — создание реализаций.
Практические рекомендации по поиску user-exit-ов (пользовательских расширений) в стандартном коде
Неловкин Александр Николаевич
Chief Software Engineer
Как консультантам, так и разработчикам системы SAP приходится сталкиваться с необходимостью расширить стандартную функциональность системы. Одним из путей расширения функциональности является использование пользовательских расширений (USER-EXIT). Вопросу поиска таких расширений в стандартных приложениях SAP посвящена данная статья.
Как показывает опыт внедрения и сопровождения систем SAP ERP, почти 30-50 % всех ABAP разработок составляют расширения стандартной функциональности при помощи пользовательских расширений (user-exit).
Итак, в рамках данной статьи рассматриваются приёмы поиска в исходном коде user-exit-ов, а именно: customer-exit и BAdi (BusinessAdd-Ins). Новомодные технологии, такие, как Enhancements Spots, рассматривать в данной статье не будем. Их я использую, как правило, в крайнем случае, т.к. не имея рамок, накладываемых интерфейсом во всех вышеупомянутых технологиях, Enhancements Spots провоцирует бесконтрольно вмешательство в логику обработки данных, что может привести к нарушению их целостности.
Применение данной методики является альтернативой применению различных программ, выдающих для заданной программы/транзакции список user-exit-ов. Применение таких программ имеет один существенный недостаток – не даются ответы на вопросы:
Предлагаемая методика (несмотря на её громоздкость) требует меньших трудозатрат за счёт того, что отсекает все «лишние» пользовательские расширения.
Рассмотрим предлагаемую методику на примере решения задачи: при создании в системе кредитора исключить появление двойника.
Для решения этой задачи необходимо поискать в системе дебитора с таким же Номером плательщика налога (т.е. выяснить, не заведена ли в систему информация об этом лице как о дебиторе). Если поиск оказался удачным, то следует заполнить поле «Дебитор» в транзакции ввода кредитора номером найденного дебитора. Для создания кредитора пользователи используют транзакцию XK01 (Ввод кредитора).
Технически, для реализации решения этой задачи нам нужно будет взять из данных создаваемого кредитора (табл. LFA1) значение поля «РегНалогНомер-1» (STCD1), сделать запрос к таблице данных существующих дебиторов (KNA1), попытаться найти в ней запись со значением поля STCD1 равным нашему значению и, если поиск успешен, скопировать из найденной записи поле KNA1-KUNNR в поле LFA1-KUNNR.
1) Запускаем транзакцию (в нашем случае XK01)
3) Непосредственно перед нажатием на кнопку «Сохранить», набираем в строке команд «/h» и нажимаем Enter. В строке состояния (внизу окна) должно появиться сообщение «Отладка включена»
4) Нажимаем «Сохранить» и попадаем в отладчик. (рис.1)
6) На закладке «ABAP команда» вписываем «call customer-function» (рис.3)
Справка: Вызов customer-exit осуществляется оператором CALL CUSTOMER-FUNCTION.
7) На закладке «Метод» заносим «CL_EXITHANDLER» и «GET_INSTANCE» соответственно в поля «Имя класса» и «Имя метода» и нажимаем «Дальше» (кнопка 
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
User exit sap что это
BAdI (или Business Add-Ins) появились уже в 4.7 версии, но я там не был, поэтому то, что я здесь написал, справедливо для версии ERP2005.
Запускаем SE24, указываем класс «cl_exithandler».
Тыкаем «Просмотр», в появившемся списке тыкаем в метод GET INSTANCE 2 (два) раза быстро (double click). Открывается исходный код. Переходим на строку CASE sy-subrc. (Это в начале, у меня это строка 28 ).
Ставим бряк на эту строку.
Запускаем нужную нам транзакцию, например, me21n. Вылезает окно отладчика, смотрим содержимое EXIT_NAME. Для перехода к следующему сработавшему BAdI нажимаем F8.
_________________
Eritis sicut Deus, scientes bonum et malum.
Последний раз редактировалось SAA Чт, авг 14 2008, 07:36, всего редактировалось 3 раз(а).
| Гуру-эксперт |
![]() |
Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
| Вот прога, с помощью которой это ( найти Exit-ы и BADI ) сделать проще (к сожалению не помню откуда ее взял, так что прямой ссылки на источник-оригинал дать не могу): REPORT ZPM_X_EXIT_BADI NO STANDARD PAGE HEADING TABLES : TSTC, DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE. IF NOT P_TCODE IS INITIAL. ELSEIF NOT P_PGMNA IS INITIAL. IF SY-SUBRC EQ 0. MOVE : TADIR-DEVCLASS TO V_DEVCLASS. IF SY-SUBRC NE 0. SELECT SINGLE * FROM ENLFDIR SELECT SINGLE * FROM TADIR MOVE : TADIR-DEVCLASS TO V_DEVCLASS. SELECT * FROM TADIR INTO TABLE JTAB SELECT SINGLE * FROM TSTCT LOOP AT JTAB into wa_tadir. endif. 2 wf_object2, case wa_tadir-object. ELSE. data : wf_object type tadir-object. GET CURSOR FIELD FIELD1. case wf_object. CALL TRANSACTION ‘SMOD’ AND SKIP FIRST SCREEN. Последний раз редактировалось OlegDm Ср, ноя 21 2007, 06:23, всего редактировалось 1 раз. |
| Директор |
![]() |
Зарегистрирован:
Чт, авг 18 2005, 17:00
Сообщения: 1174
Откуда: РФ
| Модератор |
![]() |
Зарегистрирован:
Чт, май 19 2005, 12:34
Сообщения: 1941
Откуда: НК
Пол: Мужской
| _________________ |
| Старший специалист |
![]() |
Зарегистрирован:
Чт, авг 02 2007, 14:26
Сообщения: 442
Откуда: S/4 HANA
Пол: Мужской
| Менеджер |
![]() |
Зарегистрирован:
Вт, авг 17 2004, 10:25
Сообщения: 627
| Начинающий |
![]() |
Зарегистрирован:
Чт, ноя 22 2007, 18:33
Сообщения: 1
| Гуру-эксперт |
![]() |
Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
| Почетный гуру |
![]() |
Зарегистрирован:
Чт, сен 29 2005, 07:34
Сообщения: 1127
Откуда: РОССИЯ
Пол: Мужской
| _________________ |
| Почетный гуру |
![]() |
Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
| Часовой пояс: UTC + 3 часа Кто сейчас на конференцииСейчас этот форум просматривают: нет зарегистрированных пользователей |
| Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…
User exit sap что это
Часовой пояс: UTC + 3 часа
Правила форума
| Старший специалист |
![]() |
Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
| Уже часа 2 капаю гугл в поисках ответа на вопрос: Нашел только что badi может вызываться сколь угодно раз, а user-exit только один. Коллеги может кто поделиться информацией? |
| Гуру-эксперт |
![]() |
Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
| Старший специалист |
![]() |
Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
| А вы не подскажите где можно скачать курс BC425. Разница настолько большая что целый курс существует? |
| Гуру-эксперт |
![]() |
Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
| Уже часа 2 капаю гугл в поисках ответа на вопрос: Нашел только что badi может вызываться сколь угодно раз, а user-exit только один. Коллеги может кто поделиться информацией? |
| Гуру-эксперт |
![]() |
Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
| А вы не подскажите где можно скачать курс BC425. Разница настолько большая что целый курс существует? |
| Старший специалист |
![]() |
Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
| Старший специалист |
![]() |
Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
| Эм. скачал курс 262 страницы. на собеседование через 4 часа Выручайте, в 2 словах в чем разница? |
| Специалист |
![]() |
Зарегистрирован:
Ср, май 04 2011, 23:46
Сообщения: 228
| Старший специалист |
![]() |
Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
| Гуру-эксперт |
![]() |
Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
| Эм. скачал курс 262 страницы. на собеседование через 4 часа Выручайте, в 2 словах в чем разница? |
| Старший специалист |
![]() |
Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
| Мой опыт в sap более года, то есть у меня есть ‘обширные’ поверхностные знания. Если уже коснулись этой темы, не могли бы поделиться опытом встречающихся вопросиков?(или создавать 101 тему про это? где 90% треша) |
| Гуру-эксперт |
![]() |
Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
| Мой опыт в sap более года, то есть у меня есть ‘обширные’ поверхностные знания. Если уже коснулись этой темы, не могли бы поделиться опытом встречающихся вопросиков?(или создавать 101 тему про это? где 90% треша) |
| Старший специалист |
![]() |
Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
| Гуру-эксперт |
![]() |
Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
| Часовой пояс: UTC + 3 часа Кто сейчас на конференцииСейчас этот форум просматривают: нет зарегистрированных пользователей |
| Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…











