Приемы эффективной работы с отладчиком в SAP

Начнем с азов. SAP ABAP Debugger нужен для отладки приложений, которые разработал вендор или третий производитель (программист). По-русски, это отладчик – инструмент для поиска ошибок в стандартых приложения SAP или наших собственных. Единственная программа, которую можно запустить сразу и без отладчика, это “Hello, world”. Все что сложнее, обычно требует минимальных навыков отладки “дедовскими” способами или современными – с помощью отладчика. 

Запустить отладчик можно по-разному

  • Набрать /h в окне транзакций и нажать Enter или произвести любое действие в системе
  • Поставить точку остановки в исходном коде
  • Подключиться к уже работающей программе в SM50
  • Остановиться в заранее предусмотренных местах в коде

Основные кнопочки

Как только вы попали в отладчик пригодятся основные кнопочки

  • F5 – сделать шаг вперед по коду
  • F6 – сделать шаг вперед по коду, но не входить в процедуры (выполнять их как один шаг)
  • F7 – выйти на уровень выше. Полезно, если вы находитесь внутри процедуры или ФМ
  • F8 – забить на все и поехать дальше

В окне переменных можно ввести переменную и посмотреть ее значение. Там же можно изменить ее значение.

Это вы все и без меня знаете. Давайте попробуем решить типовые для HR задачи с помощью отладчика. Типовые задачи разумеется на мой взгляд, но вы можете накидать своих идей в комментариях, чтобы я сделал отдельную статью или видео по обозначенным вопросам.

Тестирование функционального модуля

Часто при отладке приходится держать в голове множество параметров. Если мы хотим проверить какой-то функциональный модуль на реальных данных, то приходится вводить данные вручную в SE37. Есть более удобный способ сэкономить кучку времени. В отладчике, когда мы отлаживаем реальную программу, можно зайти внутрь функционального модуля и сохранить все параметры, с которыми он был вызван. Эти параметры (а это реальные данные) можно теперь автоматически подставить в SE37 при отладке. Вот как это делается на примере.

Я запустил отчет по дням рождения сотрудников. Мне надо, например, отладить ФМ RPAQ_GET_AF_0002. Я зашел внутрь модуля и перешел на закладку Locals.

Там по правой клавиши мыши сохранил параметры через Save parameters as test data (se37).

Теперь я могу в SE37 открыть этот же ФМ, нажать наверху на кнопочку Test data catalog, выбрать свой вариант с данными.

И вуаля, данные из реального отчета у меня в параметрах. 

Загрузка табличных переменных из файла

Когда отлаживаешь что-то большое и нудное вроде отчетов по заработной плате, то иногда помогает функционал по выгрузке табличных данных, редактирование в MS Excel, и загрузке новых данных обратно. В отладчике открываем таблицу, которую нужно покромсать. У нас есть две опции: выгрузить данные в файл, загрузить данные из файла. Выгрузили, открыли, поменяли, сохранили, обратно загрузили. Очень удобно.

Динамическая отладка с помощью Debug Scripting

Это самое сложное и самое вкусное. По большому счету этот инструмент позволяет менять программу на ходу. Внутри слишком много возможностей, чтобы рассказать за пять минут. Покажу лишь на простом примере, с которым я сам часто сталкиваюсь. У нас есть таблица, которая в цикле обрабатывается. Внутри цикла происходит множество манипуляций. Если мы не можем поймать нужную итерацию цикла с помощью Conditional Breakpoints или Watchpoints, то можно попросить помощь зала. В данном примере я хочу, чтобы отладчик остановился строго на 4-ом табельном номере (у меня совпало, что табельный номер тоже 4-ый). 

В запускаю отладчик через /h. Перехожу на последнюю вкладку Script и создаю вот такой простенький скрипт.

*———————————————————————*
*       CLASS lcl_debugger_script DEFINITION
*———————————————————————*
*
*———————————————————————*
CLASS lcl_debugger_script DEFINITION INHERITING FROM  cl_tpda_script_class_super  .

  PUBLIC SECTION.
    METHODS: prologue  REDEFINITION,
      init    REDEFINITION,
      script  REDEFINITION,
      end     REDEFINITION.
    data line_cnt type i.

ENDCLASS.                    “lcl_debugger_script DEFINITION
*———————————————————————*
*       CLASS lcl_debugger_script IMPLEMENTATION
*———————————————————————*
*
*———————————————————————*
CLASS lcl_debugger_script IMPLEMENTATION.
  METHOD prologue.
*** generate abap_source (source handler for ABAP)
    super->prologue( ).
  ENDMETHOD.                    “prolog

  METHOD init.
*** insert your initialization code here
    line_cnt = 0.
  ENDMETHOD.                    “init
  METHOD script.
    line_cnt = line_cnt + 1.

*** insert your script code here
    if line_cnt = 4.
      me->break( ).
    endif.
  ENDMETHOD.                    “script
  METHOD end.
*** insert your code which shall be executed at the end of the scripting (before trace is saved)
*** here

  ENDMETHOD.                    “end
ENDCLASS.                    “lcl_debugger_script IMPLEMENTATION

Суть скрипта простая. Мы при первом запуске скрипта (метод init()) устанавливаем значение счетчика в 0. Дальше при каждом вызове увеличиваем его на 1. Как только мы дойдем до 4, то нужно вызвать отладчик на экран. 

Теперь нам нужно сказать системе, когда этот скрипт вызывать. Для этого мы создаем точку останова (у меня это сразу после GET PERNR).

Запускаем. На четвертой смене табельного номера система остановится и покажет отладчик. Цель достигнута.

Разумеется, что это примитивное использование скриптов, и система позволяет куда большее. Как только у меня появятся жизненные примеры, я с вами поделюсь. Мне не жалко.

Не забываем делиться, приглашать друзей и всячески комментировать блог! Это мотивирует и стимулирует писать еще. 

Также хочу анонсировать, что на этой неделе появится новый видео-курс по настройке модуля PT “Учет рабочего времени” на udemy. Не отходите от кассы! Можете пока пройти наш с Романом курс по интеграции по ссылке https://saphr.ru/2018/10/10/online-kurs-po-sap-ale/

Я плохого не посоветую 🙂