16. 4-я программа в SAP. Работа с экранами выбора Selection Screens часть 1

Создадим программу в которой будет экран выбора. Экран выбора Selection screen - один из трех типов экранов в SAP R/3 системе, наряду с диалоговыми экранами и списками. Транзакция SE38. Попадаем в Abap Editor.

image_177

ABAP программы используют экраны для получения входных данных от пользователя. Наиболее общий тип экрана - это диалоговый экран который можно создать средствами ABAP Workbench. ABAP Workbench позволяет создавать экраны для входных и выходных данных, однако эти экраны требуют свою собственную логику.

Часто есть необходимость для ввода только входных данных, для этих целей можно использовать экраны выбора. Экраны выбора предоставляют стандартизированный интерфейс SAP.

Вводим имя программы и нажимаем Создать.  Как обычно задаем стандартные атрибуты, сохраняем в пакет ZKRE_PRO1, назначаем транспортный запрос.  Итак введем такой текст в наш редактор.

*&---------------------------------------------------------------------*
*& Report  ZKRE_HW4
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zkre_hw4.

DATA: gt_products TYPE zkre_t_hw3,
      gs_products LIKE LINE OF gt_products.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS: p_id TYPE zkre_products-id.
PARAMETERS: p_name TYPE zkre_products-name.
SELECT-OPTIONS: p_quant FOR gs_products-quantity.
SELECT-OPTIONS: p_desc FOR gs_products-description NO INTERVALS.
PARAMETERS: p_s1 RADIOBUTTON GROUP uc1,
            p_s2 RADIOBUTTON GROUP uc1.
SELECTION-SCREEN END OF BLOCK bl1.

image_178

Запускаем на выполнение.

Получили Selection screen - экран выбора с 4 полями для ввода значений и двумя кнопками переключателями.

image_179

Детальный синтаксис команд можно просмотреть если в редакторе выделить ключевое слово например SELECTION-SCREEN и нажать F1.

image_180

В коде программы есть text-001 так называемая текстовая переменная. Пока она еще не создана. Двойной щелчек в тексте программы мышью по text-001 позволит нам создать ее.

image_181

image_182

Нажав YES, попадаем в следующий экран.

image_183

Где мы вводим непосредственно сам текст и устанавливаем длину в 40 символов. Переключившись на вкладку Selections Texts видим что там имеются названия наших элементов на экране выбора.

image_184

Здесь можно ввести произвольный текст, а можно отметив галочки справа, тем самым скопировав описание полей автоматом.

image_185

Сохраняем и активируем. Запуств на выполнение программу увидим как изменился экран.

image_186

Отредактируем текст программы, сделаем поле Name обязательным и добавим кнопку.

*&---------------------------------------------------------------------*
*& Report  ZKRE_HW4
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zkre_hw4.

DATA: gt_products TYPE zkre_t_hw3,
      gs_products LIKE LINE OF gt_products.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS: p_id TYPE zkre_products-id.
PARAMETERS: p_name TYPE zkre_products-name MODIF ID m1.
SELECT-OPTIONS: p_quant FOR gs_products-quantity.
SELECT-OPTIONS: p_desc FOR gs_products-description NO INTERVALS.
PARAMETERS: p_s1 RADIOBUTTON GROUP uc1,
            p_s2 RADIOBUTTON GROUP uc1.
SELECTION-SCREEN END OF BLOCK bl1.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN PUSHBUTTON 1(10) bt1 USER-COMMAND uc2.

INITIALIZATION.
  bt1 = text-bt1.

" Делаем поле Name обязательным для заполнения.
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'M1'.
        screen-required = 1.
        MODIFY SCREEN.
    ENDCASE.
  ENDLOOP.

Выполняем программу.

image_187

Двойной клик по text-bt1 – создадим надпись на кнопке.

image_188

image_189

Сохраняем и активируем нашу новую текстовую переменную. Теперь на кнопке имеется надпись.

image_190

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

REPORT  zkre_hw4.
TABLES: sscrfields.
DATA: gt_products TYPE zkre_t_hw3,
      gs_products LIKE LINE OF gt_products.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS: p_id TYPE zkre_products-id.
PARAMETERS: p_name TYPE zkre_products-name MODIF ID m1.
SELECT-OPTIONS: p_quant FOR gs_products-quantity.
SELECT-OPTIONS: p_desc FOR gs_products-description NO INTERVALS.
PARAMETERS: p_s1 RADIOBUTTON GROUP uc1,
            p_s2 RADIOBUTTON GROUP uc1.
SELECTION-SCREEN END OF BLOCK bl1.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN PUSHBUTTON 1(10) bt1 USER-COMMAND uc2.

INITIALIZATION.
  bt1 = text-bt1.

  " Делаем поле Name обязательным для заполнения.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'M1'.
        screen-required = 1.
        MODIFY SCREEN.
    ENDCASE.
  ENDLOOP.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'UC2'.
      CLEAR: p_id, p_name, p_quant[], p_desc[].
  ENDCASE.

Запустив программу на выполнение и введя какие-либо данные в экране выбора при нажатии кнопки они удаляются. В следующей статье - http://fibed.net/M/ , задействуем Range Tables.

Комментарии

  • Виталий
    Виталий

    Ошибка в программе.

    Ругается на функционал кнопки

    CASE sscrfields-ucomm.

    Ошибка:
    Неизвестное поле "SSCRFIELDS-UCOMM". Оно не содержится ни в одной из указанных таблиц, не определено через оператор "DATA"

    on 10.11.2016 13:31
  • Виталий
    Виталий

    Пересохранился. Заработало. СТранно(

    on 10.11.2016 13:34
    Дмитрий
    Дмитрий

    Добрый день. У меня была такая же проблема:
    после REPORT не хватает
    TABLES: sscrfields.

    on 28.02.2017 18:59

Чтобы оставить комментарий, необходимо Войти или Зарегистрироваться.