Задача добавить в список выбора для поля с селекционного экрана только необходимые элементы. Например, не выводить несколько определённых элементов или наоборот удалить все оставив только несколько. Разберём решение задачи.
Список выбора для поля селекционного экрана ABAP
Описываем поле селекционного экрана. Описание сделано с использованием строки поскольку часто возникает необходимость вывести на экран параметры селекционного экрана. Имеющие длину более 30 символов. Поэтому приходится объявлять строку и в ней размещать название и элемент с учётом отступа:
1 2 3 4 |
SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 3(15) text-s01 FOR FIELD so_ct. SELECT-OPTIONS: so_ct FOR gs_subssc-typecase. SELECTION-SCREEN END OF LINE. |
Описываем тип внутренней таблицы, в которую будем записывать элементы доступные для выбора и саму таблицу:
1 2 3 4 5 6 |
TYPES: BEGIN OF ts_typecase, casetype TYPE ze_sd_typecase, text TYPE text50, END OF ts_typecase. DATA lt_typecase TYPE STANDARD TABLE OF ts_typecase. |
После этого заполняем таблицу только необходимыми значениями. Например, выбираем код объекта и наименование из базы данных исключая не нужные:
1 2 3 4 5 6 |
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_ct-low. SELECT typecase text INTO TABLE lt_typecase FROM zs_sd_typecase WHERE typecase NOT IN ('02', '05'). |
Будьте осторожны, исключать записи по коду, как показано в этом примере, можно не во всех случаях. Поскольку в разных системах может быть разные коды у одинаковых элементов. После этого передаём данную таблицу в ФМ заполняя так же имя поля:
1 2 3 4 5 6 7 8 9 10 |
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'TYPECASE' value_org = 'S' TABLES value_tab = lt_typecase EXCEPTIONS PARAMETER_ERROR = 1 NO_VALUES_FOUND = 2 OTHERS = 3 . |
Задача решена. В нашем списке выбора селекционного экрана будут выведены только те элементы, которые необходимы.
Итоговый код:
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 |
SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 3(15) text-s01 FOR FIELD so_ct. SELECT-OPTIONS: so_ct FOR gs_subssc-typecase. SELECTION-SCREEN END OF LINE. TYPES: BEGIN OF ts_typecase, casetype TYPE zs_sd_typecase, text TYPE text50, END OF ts_typecase. DATA lt_typecase TYPE STANDARD TABLE OF ts_typecase. AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_ct-low. SELECT typecase text INTO TABLE lt_typecase FROM zs_sd_typecase WHERE typecase NOT IN ('02', '05'). CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'TYPECASE' value_org = 'S' TABLES value_tab = lt_typecase EXCEPTIONS PARAMETER_ERROR = 1 NO_VALUES_FOUND = 2 OTHERS = 3 . |
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
TABLES: zwa_test. DATA: ls_test TYPE zwa_test. SELECTION-SCREEN BEGIN OF BLOCK blk_1 WITH FRAME TITLE TEXT-bl1. SELECT-OPTIONS: s_buk0 FOR ls_test-bukrs, s_buk1 FOR zwa_test-bukrs. SELECTION-SCREEN END OF BLOCK blk_1. " Начальное заполнение SELECTION-SCREEN BEGIN OF BLOCK blk_2 WITH FRAME TITLE TEXT-bl2. SELECT-OPTIONS: s_bukrs1 FOR ls_test-bukrs DEFAULT '1000' TO '1200' OPTION BT SIGN I, s_bukrs2 FOR ls_test-bukrs DEFAULT '1000', s_bukrs3 FOR ls_test-bukrs DEFAULT '1000' TO '1200' OPTION NB SIGN I. SELECTION-SCREEN END OF BLOCK blk_2. " Варианты вывода и ограничений SELECTION-SCREEN BEGIN OF BLOCK blk_3 WITH FRAME TITLE TEXT-bl3. SELECT-OPTIONS: s_werks1 FOR ls_test-werks, s_werks2 FOR ls_test-werks NO INTERVALS, s_werks3 FOR ls_test-werks NO-EXTENSION, s_werks4 FOR ls_test-werks OBLIGATORY. SELECTION-SCREEN END OF BLOCK blk_3. " Как заполнять параметры при вызове нашей программы из другой программы SELECTION-SCREEN BEGIN OF BLOCK blk_4 WITH FRAME TITLE TEXT-bl4. SELECT-OPTIONS s_matnr1 FOR ls_test-matnr MEMORY ID mtnr1. PARAMETERS p_matnr1 TYPE matnr MEMORY ID mtnr2. SELECTION-SCREEN END OF BLOCK blk_4. " Средства поиска на экран и их варианты SELECTION-SCREEN BEGIN OF BLOCK blk_5 WITH FRAME TITLE TEXT-bl5. SELECT-OPTIONS: s_werks0 FOR ls_test-werks, s_lgort1 FOR ls_test-lgort, s_lgort2 FOR ls_test-lgort_sch, s_lgort3 FOR ls_test-lgort MATCHCODE OBJECT h_t001l. SELECTION-SCREEN END OF BLOCK blk_5. " Регистры на селекционном экране LOWER CASE SELECTION-SCREEN BEGIN OF BLOCK blk_6 WITH FRAME TITLE TEXT-bl6. PARAMETERS: p_name1 TYPE char30 LOWER CASE DEFAULT 'YouCoder.ru', p_name2 TYPE char30 DEFAULT 'YouCoder.ru', p_name3 TYPE text30 DEFAULT 'YouCoder.ru'. SELECTION-SCREEN END OF BLOCK blk_6. " Использование полей с селекционного экрана SELECTION-SCREEN BEGIN OF BLOCK blk_7 WITH FRAME TITLE TEXT-bl7. SELECT-OPTIONS s_werks FOR ls_test-werks. PARAMETERS p_werks TYPE werks_d. SELECTION-SCREEN END OF BLOCK blk_7. START-OF-SELECTION. SELECT werks INTO TABLE @DATA(lt_werks) FROM t001w WHERE werks IN @s_werks AND werks = @p_werks. LOOP AT lt_werks TRANSPORTING NO FIELDS WHERE werks IN s_werks. ENDLOOP. WRITE: p_name1. WRITE: p_name2. WRITE: p_name3. |