Как выбрать несколько диапазонов для параметра БЕЗ предварительного заполнения всех остальных обязательных параметров?

Картинка

Я бы хотел иметь возможность выбора нескольких диапазонов для «Номер заказа на продажу».

Проблема: когда я нажимаю кнопку, отмеченную зеленым, я получаю сообщение об ошибке «Заполните все обязательные поля ввода».

Я помещаю свой основной блок обработки в событие START-OF-SELECTION.

Что делать, чтобы этого не случилось? Мне кажется, что я смогу добавить несколько вариантов выбора без лишних хлопот, связанных с первым заполнением всех остальных обязательных полей.


person vlad-ardelean    schedule 27.07.2012    source источник


Ответы (2)


Если для параметров / select-options установлено значение ОБЯЗАТЕЛЬНО, это не сработает. Некоторое время назад у меня была такая же проблема, и у меня не было возможности заполнить ОБЯЗАТЕЛЬНЫЕ входные параметры полезными значениями по умолчанию, поэтому я сделал следующее:

  • Удалите ОБЯЗАТЕЛЬНУЮ опцию из всех опций и параметров выбора.
  • Выполните проверку обязательного ввода самостоятельно, если не нажата клавиша F4, справка, справка F1 или кнопка рядом с любой опцией выбора:

Код:

AT SELECTION-SCREEN ON s_reswk.

IF sy-ucomm(1) <> '%' AND      " sel screen action request
   sy-ucomm(1) <> '_' AND      " scope option
   s_reswk IS INITIAL.         " Obligatory input missing
   MESSAGE text-e01 TYPE 'E'.  " Error message
ENDIF.
person Hans Hohenfeld    schedule 27.07.2012
comment
... и пока вы это делаете, используйте класс сообщений. Это позволит вам добавить текст документации позже. - person vwegert; 28.07.2012
comment
Что означает % для запроса действия экрана выбора и _ для параметра области действия? - person gkubed; 08.10.2018

Вот что я обнаружил, что полностью воспроизводит поведение, установленное ОБЯЗАТЕЛЬНЫМ дополнением:

1: Уберите "ОБЯЗАТЕЛЬНОЕ" дополнение.

2: в PBO:

LOOP AT SCREEN.
  IF screen-name cs 'name-of-your-select-options-or-parameter'.
    screen-required = 2.
    MODIFY SCREEN.
  ENDIF.

3: в PAI:

if sscrfields-ucomm = 'ONLI'.
    if 'name of your select-option-or-parameter' is initial.
      clear sscrfields.
      message 'Fill in all required fields.'(009) type 'E'.
    endif.
  endif.

Обратите внимание, что первый оператор if содержит логический оператор cs. Это потому, что имя вашего элемента управления также будет содержать другие странные вещи. Например,% _P_MATNR_% SCREEN %% (где ваш параметр был p_matnr).

Также необходимо заявление: TABLES sscrfields..

person vlad-ardelean    schedule 30.07.2012
comment
Это действительно плохая идея. Таким образом, вы принудительно вводите обязательное поле при прямом запуске программы, но пользователь сможет запланировать его как фоновое задание, не вводя тот же параметр. Кроме того, согласно документации, screen-required принимает либо 0, либо 1. Установка значения 2 может работать сейчас, но изменит его эффект или полностью прекратит работу без дальнейшего предупреждения. - person vwegert; 28.09.2012