При выполнении программы могут возникать ситуации, которые необходимо донести до пользователя. Обычно это ошибки, предупреждения или просто сообщение об успешном выполнении процедуры. Эти сообщения не должны возникать по отдельности через команду MESSAGE. Их нужно собрать и отобразить все вместе в нужный момент. Такой набор сообщений называется журналом. Журнал содержит как заголовочную информацию (код транзакции, пользователь, дата и время создания и т.п.), так и позиционную (сами сообщения).
Для ведения журнала приложений SAP предоставляет мощный инструмент, называемый BAL (Basis Application Log). Журнал приложений применяется для отладки, поддержки и разработки как стандартный, так и Z-приложений. Лог особенно необходим при отладки фоновых задачах, веб-сервисов, рабочих процессов, т.е. где не всегда удобно, а иногда даже просто невозможно использовать стандартный отладчик.
Просмотреть журнал приложения можно в тр. SLG1.

Включить отладчик в модальном окне
При возникновении модального окна (сообщение типа I, POPUP-окно и т.п.) поле ввода SAP-команд становится неактивным, поэтому включить отладку через /H напрямую не получится

В подобной ситуации ABAP Debugger можно вызвать путем отправки команды отладки через файл.
Динамические точки остановки в ABAP-отладчике
Все программисты и большинство консультантов используют ABAP отладчик. ABAP Debugger нужен для отладки приложений. Типичная задача для отладчика — найти место возникновения какого-нибудь события. Для поиска нужного места можно использовать пошаговое выполнение программы, а можно установить динамическую точку прерывания. Динамическими (или условными) точками прерывания будем называть такие точки, которые срабатывают при определенном событии.
Наиболее популярные события, с которыми мне приходилось сталкиваться:
- Момент заполнения определенной переменной
- Вывод сообщения через команду MESSAGE
- Возникновение исключения
- Выбора данных из определенной таблицы
Z-программа для редактирования таблиц БД
В предыдущем посте рассматривались стандартные способы редактирования таблиц БД. Однако, политика некоторых компаний категорически запрещает использовать стандартные механизмы редактирования таблиц за исключением создания ракурсов ведения. Работая в одной транспортной компании я испытывал подобные трудности. Мне часто приходилось редактировать настроечные таблицы без ракурсов ведения. Установка флагов GD-EDIT и GD-SAPEDIT в SE16N не давало результата, функциональный модуль SE16N_INTERFACE был закрыт для использования. Эти ограничения мотивировали меня написать аналог SE16N.
Экран выбора таблицы

Ограничение начальных данных

Сохранение данных

Редактирование записей в таблицах БД стандартными средствами
Зачастую у консультантов и у программистов возникает необходимость изменить какие-либо данные в таблицах БД. Есть несколько способов редактирования данных в таблицах БД в GUI режиме. Самые популярные методы редактирования — это ракурсы ведения, изменения данных через SE16N и Z-программы, аналоги SE16N.
Читать дальше…
Автоматический пересчет данных в разрезе выбранных полей ALV Grid
ALV Grid позволяет пользователю отображать отчет в желаемом виде. Пользователю доступны такие операции как: отображение или скрытие указанных полей, изменение порядка вывода столбцов. Зачастую, при изменении списка отображаемых полей, заказчик хочет видеть пересчет данных в разрезе отображаемых столбцов. Ниже описан способ автоматического пересчета данных в таблице, на основе каталога полей ALV Grid.
Читать дальше…
Получение доступа к таблице с данными в ALV Grid
Иногда возникает необходимость необходимость получить доступ к таблице с данными в ALV Grid (класс CL_GUI_ALV_GRID). Ссылка на таблицу с данными лежит в атрибуте MT_OUTTAB. Спецификатор доступа Protected запрещает использование данного атрибута за пределами класса, но разрешает его использование потомкам. Чтобы получить значение данного атрибута, необходимо создать вспомогательный класс, наследованный от CL_GUI_ALV_GRID, и определить в нем статичный метод, извлекающий необходимые данные.
Читать дальше…
Регулярные выражения в ABAP
Регулярное выражение (Regular expression, REGEX) — механизм поиска подстроки в тексте по предопределенному шаблону. Использование регулярных выражений имеет смысл в случаях когда у нас нет четкого понимания того, что нужно найти. К примеру, если стоит задача найти в тексте определенное слово или фразу, то подойдет обычный поиск подстроки. А когда требуется найти неизвестный e-mail или последовательность из 25-ти английских букв или цифр, например XXXXX-XXXXX-XXXXX-XXXXX-XXXXX, то без регулярных выражений просто не обойтись.
Читать дальше…
Вставка содержимого таблицы в запрос
Для переноса данных из БД в системы, обычно используют ракурсы ведения таблиы. Но можно обойтись и без него. Для этого, в системе разработки необходимо:
- Открыть тр. SE11
- Выделить нужные строки
- В меню выбрать «Запись таблицы» -> «Перенос записей»
Динамическая генерация селекционного экрана
Для отображения динамического экрана выбора полей существует набор функциональных модулей, описанных в группе функций SSEL. Простой пример выбора полей из определенной таблицы продемонстрирован в программе DEMO_FREE_SELECTIONS.
Для непосредственной генерации и отображения экрана выбора используются модули FREE_SELECTIONS_INIT и FREE_SELECTIONS_DIALOG. Первый возвращает дескриптор экрана с указанными настройками, второй отображает данный экран и возвращает критерии выбора.
Читать дальше…