Невозможно переключать экраны выбора, основываясь на вводе переключателя - PullRequest
1 голос
/ 20 ноября 2019

Я пытаюсь переключать (скрывать) экраны выбора, основываясь на вводе переключателя. Но код, кажется, не работает.

" Radio button block

SELECTION-SCREEN BEGIN OF BLOCK search_block WITH FRAME TITLE text-001.
PARAMETER: rad_flt RADIOBUTTON GROUP rgb DEFAULT 'X',
    rad_cus RADIOBUTTON GROUP rgb.
SELECTION-SCREEN END OF BLOCK search_block.


" Selection screen 1

SELECTION-SCREEN BEGIN OF BLOCK flight_block WITH FRAME TITLE text-002.
PARAMETER: carrid TYPE sbook-carrid,
   connid TYPE sbook-connid,
   fldate TYPE sbook-fldate MODIF ID sc1.
SELECTION-SCREEN END OF BLOCK flight_block.

" Selection screen 2

SELECTION-SCREEN BEGIN OF BLOCK customid_block WITH FRAME TITLE text-002.
PARAMETER: customid TYPE sbook-customid MODIF ID sc2.
SELECTION-SCREEN END OF BLOCK customid_block.


AT SELECTION-SCREEN OUTPUT.
*Toggle the selection screens based on radio buttons
LOOP AT SCREEN.
    IF rad_flt = 'X' AND screen-group1 = 'sc2'.
        screen-active = 0.
        MODIFY SCREEN.
    ELSEIF rad_cus = 'X' AND screen-group1 = 'sc1'.
        screen-active = 0.
        MODIFY SCREEN.
    ENDIF.
 ENDLOOP.

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

1 Ответ

4 голосов
/ 21 ноября 2019

По умолчанию переключатели не запускают никаких событий, что необходимо для выполнения некоторых действий с переключателем переключателя (а не при нажатии клавиши Enter или выполнении). Вы можете сделать это, добавив user-command <eventcode> к вашей группе переключателей, а затем обработав эти события в At selection-screen output.

tables: sscrfields. "Only needed if you need to tell different events apart.
select-options:
 so_1_1 for lfa1-lifnr modif id g1, 
 so_1_2 for lfa1-kunnr modif id g1,
 so_2_1 for kna1-lifnr modif id g2,
 so_2_2 for kna1-kunnr modif id g2,

parameters:
  p_1 radiobutton group prct user-command rb_prct default 'X', 
  p_2 radiobutton group prct, 
  p_3 radiobutton group prct.
at selection-screen.
  lv_ucomm = sscrfields-ucomm. "only needed if you need to tell different events apart.
At selection-screen output.
    "In here you can check if lv_ucomm = 'RB_PRCT' before doing anything
    case abap_true.
      when p_1.
        lv_group = 'G1'.
      when p_2.
        lv_group = 'G2'.
      when p_3.
        lv_grou = ' '.
    endcase.
    loop at screen.
      screen-active = boolc( screen-group1 is initial or screen-group1 = lv_group )
      modify screen.
    endloop.

Что-то подобное будет соответствовать вашим потребностям, но если вытребуется больше обработки при нажатии кнопки-переключателя (а не при других действиях), вы можете использовать логику, связанную с SSCRFIELDS, для проверки того, какое событие сработало, и обрабатывать только то, что поступает от переключателей.

...