Список выбора ABAP

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

Список выбора для поля селекционного экрана ABAP

Описываем поле селекционного экрана. Описание сделано с использованием строки поскольку часто возникает необходимость вывести на экран параметры селекционного экрана. Имеющие длину более 30 символов. Поэтому приходится объявлять строку и в ней размещать название и элемент с учётом отступа:

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 ze_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').	

Селекционный экран ABAP SELECTION SCREEN

Будьте осторожны, исключать записи по коду, как показано в этом примере, можно не во всех случаях. Поскольку в разных системах может быть разные коды у одинаковых элементов. После этого передаём данную таблицу в ФМ заполняя так же имя поля:

  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 .	

Задача решена. В нашем списке выбора селекционного экрана будут выведены только те элементы, которые необходимы.
Итоговый код:

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 .

Селекционный экран ABAP №2. SELECT OPTIONS ABAP.
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.

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