Учебное пособие по программированию диалоговых окон: пул модулей в SAP ABAP
⚡ Умное резюме
Диалоговое программирование в SAP В ABAP создаются программы модульного пула, которые взаимодействуют с пользователем через экраны и изменяют содержимое базы данных. На этой странице объясняется, что такое коды транзакций, экраны, статус графического интерфейса пользователя, логика потока экранов, динамические экраны и структура модульного пула.

Что такое диалоговое программирование?
SAP-ABAP поддерживает два типа программ: программа отчетов и программа диалога.
Если ваша программа ABAP требует ввода данных пользователем, используется диалоговое программирование.
Диалоговое окно пользователя — это любая форма взаимодействия между пользователем и программой, и оно может представлять собой любой из следующих типов взаимодействия.
- Ввод данных
- Выбор пункта меню
- Нажатие кнопки
- Щелчок или двойной щелчок по записи
Диалоговая программа также используется, когда нам нужно перемещаться между экранами вперед и назад.
Диалоговые программы создаются с типом «М» – пул модулей. Они не могут выполняться независимо и должны быть привязаны хотя бы к одному коду транзакции, в котором вы указываете начальный экран.
Разница между отчетными и диалоговыми программами
Программа доклада:
Отчет — это программа, которая обычно считывает и анализирует данные в таблицах базы данных без изменения база данных.
Диалоговая программа:
Диалоговая программа позволяет интерактивно работать с системой и изменять содержимое таблиц базы данных. Каждая диалоговая программа имеет определенную последовательность экранов, которые обрабатываются системой один за другим.
| Критерии | Отчет о программе | Диалоговая программа |
|---|---|---|
| Тип программы | Тип 1, исполняемый файл | Тип М, модульный пул |
| Доступ к базе данных | Считывает и анализирует данные. | Считывает и изменяет данные. |
| Типы | Работает самостоятельно | Выполняется только через код транзакции. |
| Управление | События, описанные в отчете. | Логика отображения потока данных на каждом экране |
Последовательность экранов диалогового окна проще отследить на примере.
Пример обработки транзакции в диалоговом программировании
Диаграмма отображает одну транзакцию от первого экрана до обновления базы данных. Пользователь вводит данные на экране 100, PAI проверяет введенные данные и определяет следующий экран, экран 200 собирает оставшиеся данные, и задача обновления, наконец, записывает запись. Каждый из этих шагов выполняется компонентами, перечисленными ниже.
Компоненты диалоговой программы
В отличие от докладе что обычно влечет за собой создание одной автономной программы, которая может выполняться независимо от других объектов, разработка диалоговых программ влечет за собой разработку нескольких объектов, ни один из которых не может быть выполнен сам по себе. Вместо этого все объекты иерархически связаны с основной программой и выполняются в последовательности, определяемой основной программой диалога..
Компонентами диалоговой программы являются:
Код транзакции
- Код транзакции запускает последовательность экранов.
- Коды транзакций создаются в браузере репозитория в инструментальных средствах ABAP или с помощью транзакции SE93.
- Код транзакции связан с программой ABAP и начальным экраном.
- Вы можете запустить последовательность экранов из любой программы ABAP, используя оператор CALL SCREEN.
Экраны
- Каждый диалог в SAP система управляется с помощью одного или нескольких экранов.
- Вы создаете экраны с помощью Screen Painter в ABAP Workbench посредством транзакции SE51
- Каждый экран принадлежит ABAP-программа.
- Эти экраны состоят из «маски экрана» или «макета» и логики потока. Экран имеет макет, определяющий положение полей ввода/вывода и других графических элементов, таких как флажки и переключатели. Логика потока определяет логическую обработку на экране.
Статус графического интерфейса
- Каждый экран имеет статус(ы) графического интерфейса, которые являются независимыми компонентами программы.
- Это управляет строками меню, стандартной панелью инструментов, панелью инструментов приложения, с помощью которой пользователь может выбирать функции в приложении.
- Вы создаете их в ABAP Workbench с помощью меню Painter.
ABAP-программа
- Каждый экран и статус графического пользовательского интерфейса в системе R/3 принадлежат одной программе ABAP.
- Программа ABAP содержит диалоговые модули, которые вызываются логикой потока экрана, а также обрабатывают ввод пользователя из состояния графического интерфейса.
- Программы ABAP, использующие экраны, также известны как диалоговые программы.
- В пуле модулей (программа типа М); первый вызываемый блок обработки всегда является диалоговым модулем. Однако вы также можете использовать экраны в других программах ABAP, например, в исполняемых программах или функциональных модулях. Тогда первый блок обработки называется по-другому; например, средой выполнения или вызовом процедуры. Затем последовательность экранов запускается с помощью оператора CALL SCREEN.
Логика потока экрана
Логика Screen Flow в основном разделена на четыре компонента.
- Процесс перед выводом (ПБО) событие: которое обрабатывается перед отображением экрана
- Процесс после ввода (PAI) событие: которое обрабатывается после действия пользователя на экране.
- Обработка запроса на помощь (РОН): который обрабатывается при нажатии F1
- Обработка запроса значения (POV): который обрабатывается при нажатии F4
POH и POV подробно описаны на странице, посвященной... процесс обработки запроса на оценку стоимости и процесс обработки запроса на помощь.
Динпро
- Экран вместе с логикой выполнения называется Dynpro («динамическая программа», поскольку логика выполнения экрана влияет на ход выполнения программы).
- Каждый dynpro контролирует ровно один шаг вашей диалоговой программы.
- Экраны, принадлежащие программе, нумерованныйПоследовательность выполнения экранных операций может быть линейной или циклической. Из цепочки экранных операций можно даже вызвать другую цепочку и после ее обработки вернуться к исходной цепочке. Также можно переопределить статически определенный следующий экран из диалоговых модулей программы ABAP.
Пул модулей ABAP
- При возникновении события PBO или PAI экран Dynpro вызывает диалоговую программу ABAP. Совокупность таких программ называется пулом модулей ABAP.
- Например, модули, вызываемые при событии PAI, используются для проверки ввода пользователя и запуска соответствующих шагов диалога, таких как задача обновления.
- Все динпросы будут вызваны изнутри one транзакции относятся к общему пулу модулей.
Структура диалоговой программы
На структурной диаграмме показано, как код транзакции, экраны, состояние графического интерфейса пользователя и пул модулей связаны с одной и той же основной программой.
Последовательность действий для диалоговой программы
Блок-схема процесса показывает чередование между экраном и программой ABAP: PBO заполняет поля экрана, пользователь выполняет действие, а PAI обрабатывает ввод перед вызовом следующего экрана.
Как создать программу пула модулей
Компоненты, указанные выше, создаются в фиксированном порядке. Шаги, описанные ниже, формируют рабочую транзакцию из пустого пула модулей.
- Создайте пул модулей: В транзакции SE80 или SE38 создайте программу, имя которой начинается с SAPMZ и установите тип программы на М – Модульный пулТип нельзя изменить позже без удаления объекта.
- Объявите глобальные данные: Разместите оператор TABLES и глобальные переменные в верхнем включаемом файле, который сможет прочитать каждый диалоговый модуль пула.
- Создайте дизайн экрана: Создайте экран 100 с помощью Screen Painter (SE51), разместите поля ввода на макете и введите номер следующего экрана в атрибутах экрана.
- Напишите логику выполнения: На вкладке «Логика потока» вызовите один модуль для PBO и один для PAI, как показано ниже.
- Создайте графический интерфейс пользователя для отображения статуса: Создайте статус с помощью меню. Painter (SE41) и установите его в модуле PBO с помощью оператора SET PF-STATUS, чтобы команды Save, Back и Exit выполнялись программой как коды функций.
- Привяжите код транзакции: В транзакции SE93 создайте диалоговое окно, назовите пул модулей и введите 100 в качестве начального экрана.
* Screen 100, flow logic PROCESS BEFORE OUTPUT. MODULE status_0100. PROCESS AFTER INPUT. MODULE user_command_0100. * Module pool SAPMZDEMO MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS_100'. SET TITLEBAR 'TITLE_100'. ENDMODULE. MODULE user_command_0100 INPUT. CASE sy-ucomm. WHEN 'SAVE'. PERFORM save_data. WHEN 'BACK' OR 'EXIT'. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE.
💡 Совет: Команда LEAVE TO SCREEN 0 завершает текущий экран и возвращает к точке вызова, что является стандартным способом корректного завершения диалоговой транзакции.




