ABAP:参数输入屏幕SELECTION-SCREEN中的事件

 

在SAP开发中,有用户提出,在输入参数的屏幕中,根据用户的选择对某些输入框进行屏蔽,防止用户在不需要的地方输入参数。这需要用到SELECTION-SCREEN的事件。

下面的选择屏幕中,要求根据用户选择的单选按钮,对不同的参数输入栏进行控制,不允许用户输入。

ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客 *//===========================================================//*
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
*   PARAMETERS
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
*//===========================================================//*
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
* 屏幕条件查询显示界面
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客SELECTION
- SCREEN BEGIN OF BLOCK blk01  WITH  FRAME TITLE text - 001  .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客PARAMETERS:
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客  p_d1 TYPE c RADIOBUTTON GROUP pz 
DEFAULT   ' X'
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
                                   USER - COMMAND  rad_click ,   "  物料凭证
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
  p_d2 TYPE c RADIOBUTTON GROUP pz .                          "  预留单
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
SELECTION - SCREEN   END  OF BLOCK blk01 .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客SELECTION
- SCREEN BEGIN OF BLOCK blk02  WITH  FRAME TITLE text - 002  .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客PARAMETERS:
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客  p_mjahr LIKE mkpf
- mjahr  DEFAULT  sy - datum + 0 ( 4 ) MODIF ID sa . "  年度
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
SELECT - OPTIONS:
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客  s_bldat 
FOR  mkpf - bldat MODIF ID sa ,                        "  物料凭证日期
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
  s_mblnr  FOR  mkpf - mblnr MODIF ID sa ,                        "  物料凭证号码
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
  s_rsdat  FOR  rkpf - rsdat MODIF ID sb ,                        "  预留单凭证日期
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
  s_rsnum  FOR  rkpf - rsnum MODIF ID sb ,                        "  预留号
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
  s_matnr  FOR  mseg - matnr,                                     "  物料号码
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
  s_bwart  FOR  mseg - bwart.                                     "  移动类型
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
SELECTION - SCREEN   END  OF BLOCK blk02.

为了方便单选按钮的控制,我们对输入控件进行了分组,使用MODIF ID name(name只能为3个字符以内),对这一组参数进行屏蔽或打开。在本例程中组名为sa/sb。
还需要注意,我们希望屏幕上的radiobutton能够触发事件,因此需要在第一个RadioButton上加上USER-COMMAND name的代码,它会触发屏幕标准的事件。

ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客 *  处理输入屏幕的互相锁定
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客AT SELECTION
- SCREEN OUTPUT .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客  
LOOP  AT SCREEN .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客    
IF  screen - group1  =   ' SA' AND SCREEN-GROUP3 <> 'OPU' AND SCREEN-GROUP3 <> 'TXT'.
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
       IF  p_d1  =   ' X' .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
        screen - input  =   ' 1' .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
       ELSE .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客        screen
- input  =   ' 0' .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
      ENDIF.
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客    
ELSEIF  screen - group1  =   ' SB' AND SCREEN-GROUP3 <> 'OPU' AND SCREEN-GROUP3 <> 'TXT'.
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
       IF  p_d2  =   ' X' .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
        screen - input  =   ' 1' .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
       ELSE .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客        screen
- input  =   ' 0' .
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客
      ENDIF.
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客    ENDIF.
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客    MODIFY SCREEN.
ABAP:参数输入屏幕SELECTION-SCREEN中的事件  - 亮剑 - 亮剑的博客  ENDLOOP.


AT SELECTION-SCREEN OUTPUT .事件会被单选控件触发。

Screen的Group1是给用户编程使用的,在前面给控件编组以后,这里可以得到控件的组名称。

Group3是保留属性,通过跟踪,猜测它可能是控件的类型属性,对于TXT和OPU的控件,我们不需要改变它的INPUT属性,因此将它们排出在外。

详细可查看http://help.sap.com/saphelp_470/helpdata/EN/9f/dbab6f35c111d1829f0000e829fbfe/frameset.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值