在SAP开发中,有用户提出,在输入参数的屏幕中,根据用户的选择对某些输入框进行屏蔽,防止用户在不需要的地方输入参数。这需要用到SELECTION-SCREEN的事件。
下面的选择屏幕中,要求根据用户选择的单选按钮,对不同的参数输入栏进行控制,不允许用户输入。
*//===========================================================//*
*
PARAMETERS
*//===========================================================//*
*
屏幕条件查询显示界面
SELECTION
-
SCREEN BEGIN OF BLOCK blk01
WITH
FRAME TITLE text
-
001
.
PARAMETERS:
p_d1 TYPE c RADIOBUTTON GROUP pz
DEFAULT
'
X'
USER
-
COMMAND
rad_click ,
"
物料凭证
p_d2 TYPE c RADIOBUTTON GROUP pz .
"
预留单
SELECTION
-
SCREEN
END
OF BLOCK blk01 .
SELECTION
-
SCREEN BEGIN OF BLOCK blk02
WITH
FRAME TITLE text
-
002
.
PARAMETERS:
p_mjahr LIKE mkpf
-
mjahr
DEFAULT
sy
-
datum
+
0
(
4
) MODIF ID sa .
"
年度
SELECT
-
OPTIONS:
s_bldat
FOR
mkpf
-
bldat MODIF ID sa ,
"
物料凭证日期
s_mblnr
FOR
mkpf
-
mblnr MODIF ID sa ,
"
物料凭证号码
s_rsdat
FOR
rkpf
-
rsdat MODIF ID sb ,
"
预留单凭证日期
s_rsnum
FOR
rkpf
-
rsnum MODIF ID sb ,
"
预留号
s_matnr
FOR
mseg
-
matnr,
"
物料号码
s_bwart
FOR
mseg
-
bwart.
"
移动类型
SELECTION
-
SCREEN
END
OF BLOCK blk02.
为了方便单选按钮的控制,我们对输入控件进行了分组,使用MODIF ID name(name只能为3个字符以内),对这一组参数进行屏蔽或打开。在本例程中组名为sa/sb。
还需要注意,我们希望屏幕上的radiobutton能够触发事件,因此需要在第一个RadioButton上加上USER-COMMAND name的代码,它会触发屏幕标准的事件。
*
处理输入屏幕的互相锁定
AT SELECTION
-
SCREEN OUTPUT .
LOOP
AT SCREEN .
IF
screen
-
group1
=
'
SA' AND SCREEN-GROUP3 <> 'OPU' AND SCREEN-GROUP3 <> 'TXT'.
IF
p_d1
=
'
X' .
screen
-
input
=
'
1' .
ELSE
.
screen
-
input
=
'
0' .
ENDIF.
ELSEIF
screen
-
group1
=
'
SB' AND SCREEN-GROUP3 <> 'OPU' AND SCREEN-GROUP3 <> 'TXT'.
IF
p_d2
=
'
X' .
screen
-
input
=
'
1' .
ELSE
.
screen
-
input
=
'
0' .
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
AT SELECTION-SCREEN OUTPUT .事件会被单选控件触发。
Screen的Group1是给用户编程使用的,在前面给控件编组以后,这里可以得到控件的组名称。
Group3是保留属性,通过跟踪,猜测它可能是控件的类型属性,对于TXT和OPU的控件,我们不需要改变它的INPUT属性,因此将它们排出在外。
详细可查看http://help.sap.com/saphelp_470/helpdata/EN/9f/dbab6f35c111d1829f0000e829fbfe/frameset.htm
本文介绍如何在SAP开发中使用SELECTION-SCREEN事件,根据用户选择的单选按钮来控制不同参数输入框的可用性。通过分组参数并设置特定事件,实现了根据物料凭证或预留单选项,对相应参数进行屏蔽的功能。
1242

被折叠的 条评论
为什么被折叠?



