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

Предлагаю Вашему вниманию гостевой пост, блог автора находится по адресу Abaphr.ru.

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


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. Проверка групп будет выглядеть следующим образом:

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

О разработке приложений на ABAP/4, а также о настройке модуля управления персоналом вы можете почитать на сайте abaphr.ru

  • Flex

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

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

    • Flex

      Да, именно системный вариант. Если честно, не встречал пока что глюков.

  • di5temper

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