Создадим программу в которой будет экран выбора. Экран выбора Selection screen - один из трех типов экранов в SAP R/3 системе, наряду с диалоговыми экранами и списками. Транзакция SE38. Попадаем в Abap Editor.
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.
Запускаем на выполнение.
Получили Selection screen - экран выбора с 4 полями для ввода значений и двумя кнопками переключателями.
Детальный синтаксис команд можно просмотреть если в редакторе выделить ключевое слово например SELECTION-SCREEN и нажать F1.
В коде программы есть text-001 так называемая текстовая переменная. Пока она еще не создана. Двойной щелчек в тексте программы мышью по text-001 позволит нам создать ее.
Нажав YES, попадаем в следующий экран.
Где мы вводим непосредственно сам текст и устанавливаем длину в 40 символов. Переключившись на вкладку Selections Texts видим что там имеются названия наших элементов на экране выбора.
Здесь можно ввести произвольный текст, а можно отметив галочки справа, тем самым скопировав описание полей автоматом.
Сохраняем и активируем. Запуств на выполнение программу увидим как изменился экран.
Отредактируем текст программы, сделаем поле 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.
Выполняем программу.
Двойной клик по text-bt1 – создадим надпись на кнопке.
Сохраняем и активируем нашу новую текстовую переменную. Теперь на кнопке имеется надпись.
Сделаем кнопку активной, т.е. чтобы при ее нажатии поля экрана выбора очищались. Добавим в код следующий блок.
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"
Виталий
Пересохранился. Заработало. СТранно(
Дмитрий
Добрый день. У меня была такая же проблема:
после REPORT не хватает
TABLES: sscrfields.