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

Что такое подэкран в SAP АБАП?
Прежде чем читать это руководство, убедитесь, что вы понимаете, что такое... Диалоговая программа есть.
- Подэкран — это независимый экран, который отображается в области другого («главного») экрана.
- Подэкраны позволяют встраивать один экран в другой во время выполнения. Вы можете включить несколько подэкранов на главный экран.
- Термин «подэкран» применяется как к экрану, который вы встраиваете, так и к области главного экрана, в которую вы его помещаете. Этот урок посвящен подэкранным областям. Фактические экраны, созданные с помощью транзакции SE51, называются экранами подэкранов, если они определены в атрибутах экрана.
- Когда вы используете подэкран, логика потока встроенного экрана также встроена в логику потока главного экрана. Следовательно, использование подэкранов на экранах похоже на использование включений в ABAP-программы.
Чтобы использовать подэкран, необходимо выполнить три простых шага
- Определите подэкранные области на экране
- Определите подходящие экраны подэкранов
- Включите экран подэкрана в область подэкрана.
Также вам необходимо настроить рамку подэкрана и главного экрана. Вам нужно дать ему имя в поле имени поля.
Кроме того, вам также необходимо настроить поля на подэкране, чтобы они отображались на главном экране. Если размер подэкрана превышает доступную область на главном экране, будет видна только та часть подэкрана, которая помещается в доступную область. Площадь всегда измеряется от верхнего левого угла экрана. Следовательно, вам следует проявлять должную осторожность при определении областей подэкранов и создании подэкранов.
ВЫЗОВ ПОДЭКРАНА
ПРИМЕР
Например, здесь мы определили две области подэкрана на главном экране и прикрепили два разных подэкрана к соответствующим областям. При каждом вызове главного экрана вызывается PBO главного экрана. Но перед отображением также вызываются PBO каждого экрана, прикрепленные к подэкранным областям на главном экране.
На скриншоте показан главный экран с двумя дополнительными областями, заполненными двумя отдельными дополнительными экранами.
Вы можете включить подэкран с помощью оператора CALL SUBSCREEN в логику потока главного экрана.
Вызов подэкрана в PBO
Чтобы включить подэкран в область подэкрана главного экрана и вызвать его логику потока PBO, используйте следующий оператор в событии PBO главного экрана:
PROCESS BEFORE OUTPUT. CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.
Этот оператор присваивает экрану подэкрана номер в область подэкрана под названием . Вы также можете указать программу, в которой определяется подэкран (необязательно). Если вы не укажете программу явно, система будет искать подэкран в той же программе ABAP, что и основная программа. Если соответствующий подэкран не найден, возникает ошибка времени выполнения. Логика потока PBO подэкрана также включена в тот же момент. Это может вызвать модули PBO программы ABAP, в которых определен подэкран. В конце подэкрана PBO глобальные поля из программы передаются в любые поля экрана с одинаковыми именами на подэкране. Логика потока PBO подэкрана сама может включать в себя дополнительные подэкраны.
Имя области подэкрана необходимо вводить напрямую, без кавычек. Вы можете указать имена и либо как литералы, либо как переменные. Если вы используете переменные, вы должны объявить и заполнить переменные с одинаковыми именами в программе ABAP. Номер экрана должно быть длиной 4 символа. Если вы не назначаете области подэкранный экран, он остается пустым.
Вызов подэкрана в PAI
Чтобы вызвать логику потока PAI подэкрана, используйте следующий оператор в логике потока PAI главного экрана:
PROCESS AFTER INPUT. CALL SUBSCREEN <area>.
Этот оператор включает в себя логику потока PAI экрана подэкрана, включенного в область подэкрана. на мероприятии ПБО. Это может вызвать модули PAI программы ABAP, в которых определен подэкран. Данные передаются между полями с одинаковыми именами на подэкране и в программе ABAP либо при запуске события PAI, либо при соответствующих операторах FIELD в логике потока PAI на подэкране.
Как создать и встроить дополнительный экран
Три описанных ранее шага выполняются на экране. Painter и в логике работы главного экрана. Приведенная ниже последовательность создает один главный экран с одной областью подэкранов.
- Создайте область подэкрана: Откройте главный экран, например, экран 100, в меню «Экран». Painter (SE51). Выберите Подэкран Выберите элемент из панели элементов, нарисуйте его на макете и введите имя, например, SUB_AREA, в поле «Имя». Это имя будет использовано позже в операторе CALL SUBSCREEN.
- Создайте дополнительный экран: Создайте второй экран, например, экран 110, и установите для него тип экрана. Подэкран в атрибутах. Дополнительный экран не имеет поля для ввода кода OK и собственного статуса графического интерфейса пользователя.
- Разместите поля: Нарисуйте поля ввода на экране 110. Размещайте элементы в пределах области подэкрана, поскольку отображается только та часть, которая помещается, отмеряя от верхнего левого угла.
- Объявите глобальные данные: Разместите поля в верхнем включаемом файле пула модулей, чтобы и главный, и дополнительный экраны считывали одни и те же глобальные переменные.
- Вызовите дополнительный экран: Добавьте CALL SUBSCREEN в PBO и в PAI главного экрана, как показано ниже.
- Активируйте и протестируйте: Активируйте экраны и программу, затем начните транзакцию. Область подэкрана заполняется экраном 110, а его модули работают внутри логики потока экрана 100.
* Flow logic of the main screen 100 PROCESS BEFORE OUTPUT. MODULE status_0100. CALL SUBSCREEN sub_area INCLUDING 'SAPMZDEMO' '0110'. PROCESS AFTER INPUT. CALL SUBSCREEN sub_area. MODULE user_command_0100.
💡 Совет: Если в зависимости от ввода пользователя необходимо отображать разные подэкраны, сохраняйте номер экрана в глобальной переменной, а не в литерале. Переменная должна иметь одинаковое имя как в программе, так и в операторе CALL SUBSCREEN.
Вопросы для запоминания
- Имена элементов подэкранов внутри экрана должны быть уникальными.
- У вас не должно быть OK_CODE или FCODE, прикрепленных к подэкрану. OK_CODE главного экрана сам по себе является OK_CODE подэкрана.
- Подэкраны не могут иметь диалоговые модули, содержащие SET TITLBAR, SET PF-STATUS, SET SCREEN, LEAVE SCREEN или LEAVE TO SCREEN. Это приведет к ошибке выполнения.
- Вам нужно вызвать его в логике потока (как PBO, так и PAI) на главном экране.
- CALL SUBSCREEN не разрешен в операторах CHAIN..ENDCHAIN и LOOP ENDLOOP.
- Не может быть модуля AT EXIT-COMMAND
- Поля, которые вы используете, являются глобальными полями. Они должны быть объявлены в верхней части include
- Если вы используете подэкраны из другого диалоговая программа передача данных не произойдет, если вы не добавите определенный код.
⚠️ Предупреждение: Размещение команды CALL SUBSCREEN внутри CHAIN … ENDCHAIN или внутри цикла экрана LOOP приводит к синтаксической ошибке, а вызов несуществующего номера экрана приводит к ошибке выполнения при первом отображении.

