Автор Тема: Макросы  (Прочитано 5647 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 767
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Макросы
« : Март 03, 2009, 11:12:44 am »
Таки язык абап имеет данное расширение языка как макросы. К сожалению зачастую пользы от них никакой, поэтому их мало кто использует, хотя есть области, где макрос будет очень в тему. Так же в системе уже существует ряд макросов, которые можно использовать. Так что если у кого есть как вам кажется удачные примеры макросов, делимся.

EXT_TO_INT - Макрос для перевода внешнего представления значения во внутренне. Часто приходится такие преобразования использовать, так что вызов через макрос получается более кратким и более понятным.
Код: You are not allowed to view links. Register or Login
DEFINE ext_to_int.
  call function 'CONVERSION_EXIT_ALPHA_INPUT'
       exporting
            input  = &1
       importing
            output = &2.
END-OF-DEFINITION.
Пример вызова:
Код: You are not allowed to view links. Register or Login
ext_to_int: lt_screen_5-kostl goodsmvt_item-costcenter,
            lt_screen_5-konto goodsmvt_item-gl_account.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 767
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Макросы (TRMAC - Типа хозяйке на заметку)
« Ответ #1 : Март 03, 2009, 11:32:34 am »
Кстати в системе есть макросы которые определены на уровне системы, наиболее частым из них наверное будет макрос BREAK, который позволяет задать точку останова активную для определенного пользователя. Т.е. в любой своей программе вы можете задать команду break <ваш логин> и система будет попадать в отладку только если программа будет выполняться под вашим логином. Текст данного макроса как и другие системные макросы можно найти в таблице TRMAC. Например для BREAK это будет:
Код: You are not allowed to view links. Register or Login
* USER specific BREAK-POINT     
if sy-uname = '&1'             
  break-point                     
endif                           

В таблице есть и другие макросы. Кстати, в эту таблицу можно добавить свои  макросы и это избавит вас от вставки описания макроса в каждую свою программу. Хотя тут есть одно ограничение, почему-то строка команды в таблице TRMAC ограничена длиной 40 символов, поэтому к примеру вставить макрос INT_TO_EXT, так просто не получится, там строка вызова ФМ call function 'CONVERSION_EXIT_ALPHA_INPUT' к сожалению 42 символа, поэтому если очень хочется, то нужно этот ФМ обернуть каким-то своим функциональным модулем с более  коротким именем, после чего макрос получится вставить в таблицу. Понять почему 40? А не хотя бы 72, к сожалению при всем уважении к индусам так и не смог.

Кстати, опять же я чуток сделал свой макрос типа UBREAK. Так как меня не устраивает в стандартном, то что он вызывается всегда, когда я работаю. Код макроса следующий:
Код: You are not allowed to view links. Register or Login
DEFINE ubreak.
DATA : yuuk_br(1) TYPE c.
  if sy-uname = &1 and sy-batch <> 'X'.
    get parameter id 'YMYBRK' field yuuk_br.
    if yuuk_br = 'X'. break-point. endif.
  endif.
END-OF-DEFINITION.
Вызов UBREAK 'UUKRUL'.

Затем я создал свой параметр YMYBRK, который могу задавать через данные пользователя (Система - Постоянные значения пользователя - Собственные данные). Соответственно если мне надо где-то провалиться в отладку, я знаю что по моим программам и экзитам рассеяны макросы прерывания программы, я задают значение для YMYBRK = "Х" и я в отладке, в остальное время все работает без прерывания. Кстати,. если программа работает в фоне, то прерывание на отладку игнорируется.

В данном макросе есть один подводный камень, это то что я в нем объявляю переменную, а это значит, что в логическом блоке можно сделать один такой вызов макроса, а иначе получим ошибку дублирования объявления переменной. Ну и самой собой я вставил этот макрос в TRMAC и теперь мне не нужно вставлять данный макрос в топ-инклуды программ, он всегда доступен для вызова.
« Последнее редактирование: Март 03, 2009, 11:34:08 am от Uukrul »