Иногда при разработке расширений или использовании отладочных скриптов, возникает необходимость в получении определенного уровня в стеке вызовов. В основном для этого используется FM SYSTEM_CALLSTACK, но как правило интересует не весь стек, а лишь определенный его уровень (обычно вызывающая программа или процедура), для получения данных стека относительно уровня можно воспользоваться классом: CL_RECA_SYSTEM_CALLSTACK и его статическим методом — GET_CURRENT_SOURCE_POS.
Пример:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | REPORT zte_system_stack. DATA:   lv_progname   TYPE STRING,   lv_eventname  TYPE STRING,   lv_eventtype  TYPE STRING,   lv_line_num   TYPE I,   lv_symsg1     TYPE symsgv,   lv_symsg2     TYPE symsgv. START-OF-SELECTION. PERFORM get_stack. FORM get_stack.   cl_reca_system_callstack=>get_current_source_pos(   EXPORTING     id_ignore_levels  = 1 " Поднимаемся на 1 уровень вверх (start-of-selection)   IMPORTING     ed_progname       = lv_progname     " Имя программы     ed_eventtype      = lv_eventtype    " Тип события     ed_eventname      = lv_eventname    " Имя события     ed_lineno         = lv_line_num     " Номер строки в исходном коде     ed_formatted_var1 = lv_symsg1       " Сообщение из sy-msgvx     ed_formatted_var2 = lv_symsg1 ).   BREAK-POINT. ENDFORM. |