Иногда при разработке расширений или использовании отладочных скриптов, возникает необходимость в получении определенного уровня в стеке вызовов. В основном для этого используется 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. | 
Добрый день!
А возможно ли получить доступ( на чтение и изменения ) к данным вышестоящего уровня стека?
К примеру
Программа ->
Подпрограмма в которой есть переменная X
Подпрограмма вызывает -> глобальный класс
И вот из этого метода хочу считать то что было в вышестоящей подпрограмме в переменной Х и изменить его
Возможно?
Добрый день! Ну разве что через ASSIGN (‘(ИмяПрограммы)ГлобальнаяПеременная’) TO…
Так только к глобальным переменным.
А что насчет локальных?
Если в отладчике выйти на уровень выше то все переменные доступны, значит наверняка есть способ к ним получить доступ
Они для того и локальные, чтобы никто их не трогал, наверное и не стоит пытаться 🙂
Бейлак, привет!
Скажи, какой смысл в этом финте ушами? Динамический доступ к глобальным переменным стараются не использовать по ряду причин (Михаил ранее привел цитату). А уж к локальным — ни разу в практике не встречал такой необходимости.