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

«Опти­ма­льный способ упра­вле­ния про­гра­мма­ми по­льзо­ва­те­ля: гибкий подход»
Галина Чумбарева:
Интересная идея. Может использоваться не только в BI. Было бы хорошо развить идею гибкого подхода в других областях.
«Опти­ма­льный способ упра­вле­ния про­гра­мма­ми по­льзо­ва­те­ля: гибкий подход»
Светлана М:
в компании может быть осуществлен переход к единообразному способу выполнения процесса, что существенно упрощает оперативную поддержку системы.
«Опти­ма­льный способ упра­вле­ния про­гра­мма­ми по­льзо­ва­те­ля: гибкий подход»
Денисов Сергеевич:
Полезная статья для начинающих бивишников. Достаточно грамотно и наглядно представлены основные способы управления программами пользователя. расписаны основные недостатки старых методов и...

Практические рекомендации по поиску user-exit-ов (пользовательских расширений) в стандартном коде

14318

 

Александр Неловкин - ведущий инженер-программист отдела разработки программного обеспечения центра компетенции SAP филиала «Управление «Укргазтехсвязь» ДК «Укртрансгаз». Опыт внедрения и сопровождения систем SAP – более 14 лет. Богатый опыт по консультированию и подготовке разработчиков для SAP систем. Более десятка проектов внедрения и модернизации системы SAP. Навыки и опыт работы со всем инструментарием SAP ABAP Workbench практически во всех модулях системы.

Как показывает опыт внедрения и сопровождения систем SAP ERP, почти 30-50 % всех ABAP разработок составляют расширения стандартной функциональности при помощи пользовательских расширений (user-exit).

Механизмов, позволяющих пользователю влиять на работу стандартных программ (транзакций), - несколько. В данной статье мы рассмотрим только те механизмы, с которыми приходится сталкиваться ABAP-разработчикам в целях расширения исходного кода. Настройки, персонализацию, расширение объектов ABAP-словаря и т.п. мы рассматривать не будем.

Итак, в рамках данной статьи рассматриваются приёмы поиска в исходном коде user-exit-ов, а именно: customer-exit и BAdi (BusinessAdd-Ins). Новомодные технологии, такие, как Enhancements Spots, рассматривать в данной статье не будем. Их я использую, как правило, в крайнем случае, т.к. не имея рамок, накладываемых интерфейсом во всех вышеупомянутых технологиях, Enhancements Spots провоцирует бесконтрольно вмешательство в логику обработки данных, что может привести к нарушению их целостности.

Применение данной методики является альтернативой применению различных программ, выдающих для заданной программы/транзакции список user-exit-ов. Применение таких программ имеет один существенный недостаток – не даются ответы на вопросы:

  1. Какие из перечисленных user-exit-ов вызываются, начиная с интересующего нас места в программе?
  2. В какой последовательности user-exit-ы вызываются?

Предлагаемая методика (несмотря на её громоздкость) требует меньших трудозатрат за счёт того, что отсекает все «лишние» пользовательские расширения.

Рассмотрим предлагаемую методику на примере решения задачи: при создании в системе кредитора исключить появление двойника.

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

Технически, для реализации решения этой задачи нам нужно будет взять из данных создаваемого кредитора (табл. LFA1) значение поля «РегНалогНомер-1» (STCD1), сделать запрос к таблице данных существующих дебиторов (KNA1), попытаться найти в ней запись со значением поля STCD1 равным нашему значению и, если поиск успешен, скопировать из найденной записи поле KNA1-KUNNR в поле LFA1-KUNNR.

Последовательность действий:

1) Запускаем транзакцию (в нашем случае XK01)

2) Выполняем все действия, которые совершают пользователи до «ключевого» действия (в нашем примере - это сохранение данных кредитора)

3) Непосредственно перед нажатием на кнопку «Сохранить», набираем в строке команд «/h» и нажимаем Enter. В строке состояния (внизу окна) должно появиться сообщение «Отладка включена»

4) Нажимаем «Сохранить» и попадаем в отладчик. (рис.1)

Рис. 1

5) В меню выбираем «Точки прерывания» -> «Создание точки прерывания» (или нажимаем F9). Откроется модальное окошко. (рис.2)

Рис. 2

6) На закладке «ABAP команда» вписываем «call customer-function» (рис.3)

Рис. 3

Справка: Вызов customer-exit осуществляется оператором CALL CUSTOMER-FUNCTION.

7) На закладке «Метод» заносим «CL_EXITHANDLER» и «GET_INSTANCE» соответственно в поля «Имя класса» и «Имя метода» и нажимаем

Ограниченный доступ

Для прочтения полной версии статьи необходимо зайти как зарегистрированный пользователь.


Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП»