TAW10, селекционные экраны и параметры
В данной части курса описывается как использовать в своих программах селекционные экраны и конфигурировать их.
TAW10, селекционные экраны и параметры
В этом посте я хотел бы рассказать о следующем:
- Что такое селекционный экран.
- Что такое параметры селекционного экрана.
- Конфигурирование селекционного экрана.
Хотел бы перейти сразу к делу и показать то, о чем пойдет речь в данном посте:
На рисунке выше вы можете видеть мой отчет по продажам компании, в которой я работаю, а точнее вызванный селекционный экран. Как видно на рисунке имеется группа полей и стандартный набор функций типа «выполнить(F8)», «вернуться на пред. экран(F3)», «выйти из программы(shift+F3)», «отмена(F12)». Селекционные экраны удобны тем, что они имеют очень гибкие настройки и не требуют дополнительно создавать вручную экраны, разрисовывать поля на них и т.д. Предложенный выше вариант может быть описан следующим образом:
На рисунке отображено описание селекционного экрана, т.к. мне было удобно сделать в одном едином блоке все поля ввода, то я начал с описания SELECTION-SCREEN BEGIN OF BLOCK …, если же требуется разнести поля по разным блокам, то достаточно написать SELECT-OPTIONS и описать отдельно каждую опцию. Также по умолчанию у полей указывается интервал значений и расширение для интервала ( критерии отбора ). Для того, чтобы кастомизировать поля можно указать NO INTERVALS NO-EXTENSION, в таком случае будет выводится обычное поле для ввода без расширения:
Для большей красоты отчета можно задать заголовок своему экрану, делается это так WITH FRAME TITLE text-001 – таким образом мы описали заголовочную часть и написали в ней текст. При объявлении text-001 генерируется пустая запись для текста заголовка, в ней я написал «данные для отбора». Если нам требуется уже указанное значение по умолчанию в поле, то делаем так: SELECT-OPTIONS: s_status for zorder-status DEFAULT «1419» - таким образом указали изначальное значение статуса равное числу 1419. Если же нужно указать верхнюю и нижнюю границу, то используем уже модуль инициализации: INTIALIZATION s_status-low = ‘1419’, s_status-high = ‘1501’ - в данном случае у нас будет заполнена верхняя и нижняя граница значений для статуса. Теперь я хотел бы поговорить о параметрах. В качестве параметров обычно используют чекбоксы или радиокнопки. Если поле будет указываться как чекбокс, то используем следующую конструкцию:
p_budat AS CHECKBOX – в данном случае будет чекбокс, в дальнейшем описываем для него логику к примеру через IF … ENDIF. Используем метод что если p_budat = ‘x’ – значит чекбокс нажат и выполняется следующая логика …, если p_budat = ‘’ – пустое значение, значит выполняется часть, писанная в ELSE, к примеру так:
IF p_budat = 'X'.
SELECT zorder~werks
bismt
MAX( kwmeng ) AS max
SUM( kwmeng ) AS sum
COUNT( DISTINCT zorder~vbeln ) AS count
budat
INTO TABLE s_table
FROM zorder JOIN zorderpos ON zorder~vbeln = zorderpos~vbeln
WHERE bismt IN s_bismt AND
zorder~werks IN s_werks AND
budat IN s_budat AND
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 1
Комментарий от
Олег Точенюк
| 11 января 2013, 20:24
И так, переменная объявленная через PARAMETERS это именно переменная которая может принимать одно значение. Например в вашем случае код завода (если это обязательное поле), можно было объявит через PARAMETERS, тогда в операции SELECT в условии WHERE можно было бы написать WERKS = p_werks. А вот переменная объявленная через SELECT-OPTIONS это на самом деле внутренняя таблица фиксированной структуры а именно содержащая поля sign, option, low и high, где:
sign - знак выбора, принимает значения I - включить в выбор или E - исключить из выбора.
option - тип операции сравнения, например если в поле low задать одно значение тогда в операции надо указать константу EQ, кстати если в поле задан маска например 47* тогда тип операции CP и т.д. это уже сами придумайте как узнать все типы операций :-)
low и high переменные содержащие значения, в данном случае введенные с экрана, но можно и сформировать в ручную, что вы кстати попытались сделать, но не правильно в блоке INTIALIZATION, а правильно было бы сделать так:
s_status-sign = 'I'.
s_status-option = 'EQ'.
s_status-low = ‘1419’.
append s_status.
s_status-high = ‘1501’.
append s_status.
тогда ниже в операции WHERE вместо катастрофически не правильного:
( zorderpos~status = '1419' OR zorderpos~status = '1501' )
правильно было бы написать zorderpos~status IN s_status.
и все. В вашем же случае вы видно вообще не поняли как работать и что из себя представляют переменные селекционного экрана объявленного через SELECT-OPTIONS, потому что на экране у вас есть поля для ввода статуса заказа, а вот по тексту программы в объявлении экрана, этого поля нет. Зато в операции выбора данных вы просто вбили константами выбираемый статус для заказов, видно присвоение в INTIALIZATION не отработало, ну а не отработало оно потому что... из курса у вас какая-то каша в голове появилась и мне как то жаль пользователей которые пользуются вашим отчетом по продажам :-(
Кстати я вообще не понимаю как у вас там что-то работает, потому что в описании у вас везде вы сравниваете с маленьким 'x', в таком случае просто скопируйте у себе и выполните вот такую программку:
PARAMETERS p_test AS CHECKBOX.
IF p_test = 'x'.
WRITE: / 'Маленький х'.
ELSEIF p_test = 'X'.
WRITE: / 'Большой Х'.
ELSE.
WRITE: / 'Вообще ничего не отметили'.
ENDIF.
И посмотрите какая ветка кода и по какому условию выполнится. У меня почему-то все время при установке чек-бокса отрабатывает: WRITE: / 'Большой Х'. Если у вас другой результат, то ответ в студию, так как мою парадигму в ABAP? этим ответом вы явно подвинете.