Сокрытие полей ввода на селекционном экране

Иногда возникает необходимость скрыть одно или несколько полей (или любой другой элемент) на экране в зависимости от некоторых условий. Существует несколько способов это сделать, как простых и незамысловатых, так и достаточно сложных, но дающих максимальную гибкость настройки экрана. Пойдем от простого к сложному.


NO-DISPLAY для элементов экрана

Для таких элементов экрана, как PARAMETERS и SELECT-OPTIONS есть дополнение NO-DISPLAY, позволяющее скрыть поля на экране. Поле с таким дополнением будет скрыто, но к нему можно будет обратиться, например, при вызове программы с таким полем из другой программы с передачей SET-параметров. Выглядит это так:

 

 

Сокрытие полей экранов инфо-типов HR

Настройка полей инфо-типа производится в таблице T588M, открыть которую можно из транзакции SM30.

Здесь первоначальным экраном служит экран, для которого поле «Переменный ключ» не заполнено. По двойному щелчку можно открыть детальный просмотр:

Как видно из рисунка, для полей экрана можно задать не только невидимость (столбцы выделены красной рамкой), но и сделать поле обязательным (Обяз), необязательным (Необ) или закрытым для редактирования (Вывд). Поле Скрт делает поле невидимым, а поле Иниц вдобавок к невидимости очищает его содержимое.

Сокрытие полей в ABAP

Скрыть поля экрана можно при помощи реализации цикла с использованием специальной структуры SCREEN (её можно найти в словаре данных SE11). Как правило, цикл по структуре включается либо в событие AT SELECTION-SCREEN OUTPUT (для селекционного экрана) либо в PBO-модуль (для селекционного и обычного экранов). Цикл по экрану выглядит как обычный цикл:

Есть одно различие: в данном цикле нельзя использовать дополнительный параметр WHERE, т.к. SCREEN в данном случае выступает в качестве рабочей области, а таблицей является сам экран. Получить доступ по ключу или по номеру строки таблицы к строкам экрана нельзя.

Для того, чтобы скрыть элемент экрана, нужно отредактировать два поля структуры SCREEN:

После этого нужно обязательно сделать MODIFY SCREEN.

Существует несколько способов определения, какой именно объект нужно скрыть на экране.

1 способ – по имени поля

Часто используется для модификации селекционного экрана, из-за простоты обращения. Например, у нас есть параметр на селекционном экране:

Все элементы экрана, такие как, например, сгенерированная подпись, в своём имени будут содержать имя параметра P_PAR1. Соответственно, в цикле по экрану мы можем сделать проверку на присутствие названия параметра в имени элемента:

2 способ – по группе полей

В редакторе экрана для интересующих нас полей можно задать группы:

Этим группам в структуре SCREEN соответствуют поля GROUP1…GROUP4. Проверка групп будет выглядеть следующим образом:

Данный способ больше подходит для обычного экрана, т.к. если мы внесём свои группы в поля селекционного экрана, то, если в будущем произойдёт перегенерация экрана, все группы затрутся.

5 комментариев

  1. Ещё есть способ скрытия через создание системного шаблона по-моему, типа «CUS&…». Пользуюсь таким с логическими базами.

  2. Наверное, вы имели в виду системный вариант? С вариантами, кстати, есть небольшие глюки. Иногда скрытые поля всё равно выводятся видимыми

  3. Если речь идет о Z-абапе, то второй способ изумительно подходит и для селекционного экрана, если использовать в описании параметра дополнение MODIF ID GR1.
    При таком описании в screen-group1 ляжет GR1.
    И все будет в порядке. Как у меня (с)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *