Кстати в системе есть макросы которые определены на уровне системы, наиболее частым из них наверное будет макрос BREAK, который позволяет задать точку останова активную для определенного пользователя. Т.е. в любой своей программе вы можете задать команду break <ваш логин> и система будет попадать в отладку только если программа будет выполняться под вашим логином. Текст данного макроса как и другие системные макросы можно найти в таблице TRMAC. Например для BREAK это будет:
* 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. Так как меня не устраивает в стандартном, то что он вызывается всегда, когда я работаю. Код макроса следующий:
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 и теперь мне не нужно вставлять данный макрос в топ-инклуды программ, он всегда доступен для вызова.