Функциональный модуль SELECT_OPTIONS_RESTRICT позволяет настраивать параметры типа SELECT-OPTIONS на экране выбора, ограничивая параметры SIGN и OPTION.
Например, можно ограничить выбор счёта, допустив указание фиксированного значения либо по маске.
SELECT_OPTIONS_RESTRICT позволяет ограничивать: количество опций выбора (значения параметра OPTION); возможность вводить несколько значений (множественный выбор); возможность вводить значения, которые будут исключены из выбора (SIGN = ‘E’). Функциональный модуль работает как со стандартным селекционным экраном, так и с селекционным экраном логической БД (необходимо указать параметр DB). ФМ может быть вызван только один раз, в событии INITIALIZATION. При повторном вызове возникает исключение REPEATED. Для настройки ограничений необходимо передать параметр RESTRICTION.
В параметре RESTRICTION передается структура типа SCR_RESTRICT (тип определен в пуле типов SSCR):
Поле | Описание |
---|---|
OPT_LIST_TAB | Таблица опций. Каждая строка содержит поле NAME с произвольным именем правила для списка допустимых опций и поле OPTIONS (структура RSOPTIONS). Структура OPTIONS содержит 10 полей-флагов опций выбора (EQ, BT, … ), определяющие возможность установки данной опции. |
ASS_TAB | Таблица ассоциаций. Это таблица, в которой вы назначаете объекты экрана выбора, списки опций и разрешенные знаки. |
Таблица ассоциаций ASS_TAB имеет тип строки SSCR_ASS:
Поле | Описание |
---|---|
KIND | Вид ограничений. Возможные значения: ‘A’ — ограничения применяются ко всем полям SELECT-OPTIONS. ‘B’ — ограничения применяются ко всем полям SELECT-OPTIONS, принадлежащих указанному блоку. Имя блока передаётся в поле NAME. ‘S’ — ограничения применяются к одному конкретному SELECT-OPTIONS. Имя параметра передаётся в поле NAME. |
NAME | Если KIND = ‘B’ или ‘S’, то передаётся имя поля/блока. Если KIND = ‘A’, поле остаётся пустым. |
SG_MAIN | Знак выбора. Возможные значения: ‘*’ — SIGN может принимать как I, так и E. ‘I’ — SIGN может принимать только I. |
SG_ADDY | Множественный выбор. Возможные значения: ‘*’ — Не ограничивать на экране знак множественного выбора. ‘ ‘ — Применить то же ограничение знака множественному выбору что и к основному экрану выбора. ‘N’ — Множественный выбор не допускается, аналогично дополнению NO-EXTENSION. |
OP_MAIN | Имя правила (из RESTRICTION-OPT_LIST_TAB) для основного экрана выбора. |
OP_ADDY | Имя правила (из RESTRICTION-OPT_LIST_TAB) для экрана множественного выбора. На экране множественного выбора всегда есть как минимум столько же параметров, сколько на главном экране выбора. Опции, доступные на экране множественного выбора, представляют собой объединение двух списков OP_MAIN и OP_ADDY. |
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
*&---------------------------------------------------------------------* *& Report Z_SELECT_OPTIONS_RESTRICT *& Конфигурация SELECT-OPTIONS *&---------------------------------------------------------------------* *& Исходный текст программы взят с сайта ABAP4.RU *& http://abap4.ru/?p=430 *&---------------------------------------------------------------------* REPORT z_select_options_restrict. TABLES: acctit, acdoca. SELECT-OPTIONS s_budat FOR acctit-budat. SELECTION-SCREEN BEGIN OF BLOCK block_hkont WITH FRAME TITLE text-001. SELECT-OPTIONS s_hkont FOR acctit-hkont. SELECT-OPTIONS s_racct FOR acdoca-racct. SELECTION-SCREEN END OF BLOCK block_hkont. INITIALIZATION. PERFORM init. FORM init. DATA ls_restrict TYPE sscr_restrict. DATA ls_opt_list TYPE sscr_opt_list. DATA ls_ass TYPE sscr_ass. " Конфигурация для даты проводки CLEAR ls_opt_list. ls_opt_list-name = 'BUDAT_RULE'. " Имя правила для OPTIONS ls_opt_list-options-bt = abap_true. " Разрешен ввод только диапазона APPEND ls_opt_list TO ls_restrict-opt_list_tab. CLEAR ls_ass. ls_ass-kind = 'S'. " Применяется только к параметру S_BUDAT ls_ass-sg_main = 'I'. " Разрешен только SIGN = I ls_ass-sg_addy = 'N'. " Множественный выбор запрещён ls_ass-op_main = 'BUDAT_RULE'. " Имя правила из LS_OPT_LIST-NAME ls_ass-name = 'S_BUDAT'. " Имя параметра SELECT-OPTIONS APPEND ls_ass TO ls_restrict-ass_tab. " Конфигурация для счетов CLEAR ls_opt_list. ls_opt_list-name = 'HKONT_RULE'. " Имя правила для OPTIONS ls_opt_list-options-eq = abap_true. " Разрешен ввод только конкретного значения APPEND ls_opt_list TO ls_restrict-opt_list_tab. CLEAR ls_ass. ls_ass-kind = 'B'. " Применяется ко всем SELECT-OPTIONS в блоке BLOCK_HKONT ls_ass-sg_main = '*'. " Возможно как включать счёт, так и исключать ls_ass-op_main = 'HKONT_RULE'. " Имя правила из LS_OPT_LIST-NAME ls_ass-name = 'BLOCK_HKONT'. " APPEND ls_ass TO ls_restrict-ass_tab. CALL FUNCTION 'SELECT_OPTIONS_RESTRICT' EXPORTING restriction = ls_restrict. ENDFORM. |
Пример демонстрирует возможность ограничения ввода значений на дату проводки и на счета.
При указании даты проводки требуется ввод нижней и верхней границы. Если пользователь ввел параметры, не удовлетворяющие данному условию, то будет ошибка.
На поля блока BLOCK_HKONT наложено ограничение: допустимо выбирать или исключать только отдельное значение. Так как ввод диапазона данных запрещён, то верхняя граница диапазона становится не активной.
Подробную документацию данного функционального модуля можно взять тут.
А как также при выводе сделать русские названия?
«Перейти к» -> «Текстовые элементы» -> «Тексты критериев выбора»