原帖:http://blog.itpub.net/634491/viewspace-151161
我们都用过选择屏幕和标准屏幕,应该都有想过在标准屏幕上使用选择屏幕的功能吧?如果自己在标准屏幕上实现像选择屏幕上那样的输入功能太麻烦了。其实我们可以把选择屏幕放到标准屏幕上去,这样很方便就能实现我们想要的功能了。
首先,要声明一个SUBSCREEN类型的选择屏幕,这个很重要。
SELECTION-SCREEN BEGIN OF SCRENN 1001 AS SUBSCREEN.
SELECT-OPTIONS: p_matnr FOR mara-matnr.
SELECTION-SCREEN END OF SCREEN 1001.
然后,创建一个标准屏幕,并在屏幕上放置一个子屏幕区域(Subscreen Area),命名为subsel(可以自行命名)。然后在标准屏幕的PBO中添加一行代码
CALL SUBSCREEN subsel INCLUDING sy-repid subscr.
在PAI中添加一行代码
CALL SUBSCRENN subsel.
在这里要注意:在PBO中CALL SUBSCREEN语句最后的选择屏幕号一定要使用变量,不能直接输入屏幕编号,否则会出现错误。
CALL SUBSCREEN subsel INCLUDING sy-repid '1001'. "这样是会出错的
定义一个变量,设定值为选择屏幕的编号就可以了。
DATA: subscr TYPE sy-dynnr VALUE '1001'.
定义为SUBSCREEN的选择屏幕,所有发生的操作,都会在标准屏幕的PAI中那行CALL SUBSCREEN subsel时传回到选择屏幕的事件处理程序中,在选择屏幕上输入的值也会传递到相应的屏幕参数,但是定义为SUBSCREEN的选择屏幕,不会产生 START-OF-SELECTION事件,只会产生AT SELECTION-SCREEN事件,可以在AT SELECTION-SCREEN事件中进行处理。
AT SELECTION-SCREEN.
IF sy-dynnr = '1001'.
"处理语句
ENDIF.
其他AT SELECTION-SCREEN事件也能被处理,如AT SELECTION-SCREEN OUTPUT等。