ABAP选择屏幕:动态选择屏幕
导语:在做ALV报表的时候,碰见过用 RADIOBUTTON区分不同页签,或者是区分不同的选择屏幕字段的需求,这里简单的说一下,如何通过RADIOBUTTON来实现动态选择屏幕。
关键元素:
1、 MODIF ID
在需要实现动态的屏幕定义后面定义一下 MODIF ID
TABLES :marc,mara.
SELECT-OPTIONS:s_werks FOR marc-werks,
s_matnr FOR mara-matnr,
s_bismt FOR mara-bismt,
s_mmsta FOR marc-mmsta MODIF ID id1,
s_ekgrp FOR marc-ekgrp MODIF ID id1,
s_cons FOR marc-cons_procg.
2、 USER-COMMAND
在需要触发动态屏幕的RADIOBUTTON后面定义USER-COMMAND组,来实现指令
PARAMETERS: p_tab1 RADIOBUTTON GROUP gp1 DEFAULT 'X' USER-COMMAND rbxx,
p_tab2 RADIOBUTTON GROUP gp1.
3、 AT SELECTION-SCREEN OUTPUT
在 AT SELECTION-SCREEN OUTPUT下面写具体的需要控制的条件,以下示例是说,当p_tab1 = 'X’的时候,屏幕上展示商品状态(S_MMSTA)和采购组(S_EKGRP)
LOOP AT SCREEN .
IF screen-group1 = 'ID1'.
IF p_tab1 = abap_false.
screen-active = '0'.
ELSE.
screen-active = '1'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
4、整段代码展示
TABLES :marc,mara.
SELECTION-SCREEN BEGIN OF BLOCK blc_001 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:s_werks FOR marc-werks,
s_matnr FOR mara-matnr,
s_bismt FOR mara-bismt,
s_mmsta FOR marc-mmsta MODIF ID id1,
s_ekgrp FOR marc-ekgrp MODIF ID id1,
s_cons FOR marc-cons_procg.
PARAMETERS: p_tab1 RADIOBUTTON GROUP gp1 DEFAULT 'X' USER-COMMAND rbxx,
p_tab2 RADIOBUTTON GROUP gp1.
SELECTION-SCREEN END OF BLOCK blc_001.
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_scr_out.
FORM frm_scr_out .
LOOP AT SCREEN .
IF screen-group1 = 'ID1'.
IF p_tab1 = abap_false.
screen-active = '0'.
ELSE.
screen-active = '1'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.
5、注意
动态选择屏幕一般情况下与 OBLIGATORY冲突,所以屏幕必输检查就不能用 OBLIGATORY关键字来控制了,这里我的必输校验放在了 START-OF-SELECTION下面
IF s_werks IS INITIAL.
MESSAGE '请输入【工厂】!' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
IF s_matnr IS INITIAL AND s_bismt AND s_brand IS INITIAL.
MESSAGE '【商品编码】和【供应商商品货号】和【品牌】请至少输入一项!' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
6、结果展示
作者:小飞猪猪猪猪猪猪猪–CSDN
注意:转发请注明作者
post SAP-Garson
原文链接:https://blog.csdn.net/JYH1999/article/details/112004583文章来自于网络,如果侵犯了您的权益,请联系站长删除!