1

我正在尝试根据单选按钮输入切换(隐藏)选择屏幕。但是代码似乎不起作用。

" 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.

屏幕显示所有屏幕。无法使用调试器跟踪问题。

4

1 回答 1

4

默认情况下,单选按钮不会触发任何事件,这是您需要在单选按钮切换(而不是在 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 相关逻辑来检查触发了哪个事件并仅处理来自的事件你的单选按钮。

于 2019-11-21T09:03:32.000 回答