如下,报表选择屏幕有三个页签:
*----------------------------------------------------------------------* CONSTANTS: gc_push1(5) TYPE C VALUE 'PUSH1', gc_push2(5) TYPE C VALUE 'PUSH2', gc_push3(5) TYPE C VALUE 'PUSH3'. *----------------------------------------------------------------------* *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK B11 WITH FRAME TITLE T011. SELECT-OPTIONS : s_werks FOR vbap-werks, s_matkl FOR t023t-matkl. SELECTION-SCREEN END OF BLOCK B11. SELECTION-SCREEN END OF SCREEN 100. *----------------------------------------------------------------------* *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK B21 WITH FRAME TITLE T021. SELECT-OPTIONS : s_werks2 FOR vbap-werks, s_lgort2 FOR vbap-lgort, s_matkl2 FOR t023t-matkl. SELECTION-SCREEN END OF BLOCK B21. SELECTION-SCREEN END OF SCREEN 200. *----------------------------------------------------------------------* *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK b31 WITH FRAME TITLE T031. SELECT-OPTIONS: s_werks3 FOR vbap-werks, s_matnr3 FOR mara-matnr, s_lgort3 FOR vbap-lgort. SELECTION-SCREEN END OF BLOCK B31. SELECTION-SCREEN END OF SCREEN 300. *----------------------------------------------------------------------* *----------------------------------------------------------------------* SELECTION-SCREEN: BEGIN OF TABBED BLOCK blk1 for 16 LINES, TAB (20) gct_1 USER-COMMAND push1 DEFAULT SCREEN 100, TAB (20) gct_2 USER-COMMAND push2 DEFAULT SCREEN 200, TAB (20) gct_3 USER-COMMAND push3 DEFAULT SCREEN 300, END OF BLOCK blk1. *----------------------------------------------------------------------* *----------------------------------------------------------------------* INITIALIZATION. PERFORM fm_init. *----------------------------------------------------------------------* *----------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. PERFORM fm_set_screen. *----------------------------------------------------------------------* *----------------------------------------------------------------------* AT SELECTION-SCREEN. PERFORM fm_authority_check. PERFORM fm_screen_check. PERFORM fm_process_screen. *----------------------------------------------------------------------* *----------------------------------------------------------------------* START-OF-SELECTION. PERFORM fm_alv. *----------------------------------------------------------------------* *----------------------------------------------------------------------* END-OF-SELECTION. *----------------------------------------------------------------------*
首先,在FORM fm_init中取内存中上次用到的页签,如果是第一次,则默认设置为subscreen:100
*----------------------------------------------------------------------* FORM fm_init. T011 = '检索参数'. T021 = '检索参数'. T031 = '检索参数'. gct_1 = '按单***'. gct_2 = '按单***'. gct_3 = '按库***'. * 获取上次用的子屏幕 IMPORT gv_dynnr TO gv_dynnr FROM MEMORY ID 'ZSDD_025'. blk1-prog = sy-repid. IF gv_dynnr = space. blk1-dynnr = 100. gv_push = gc_push1. blk1-activetab = gc_push1. ELSE. blk1-dynnr = gv_dynnr. IF gv_dynnr = 300. gv_push = gc_push3. blk1-activetab = gc_push3. ENDIF. IF gv_dynnr = 200 . gv_push = gc_push2. blk1-activetab = gc_push2. ENDIF. IF gv_dynnr = 100 . gv_push = gc_push1. blk1-activetab = gc_push1. ENDIF. ENDIF. ENDFORM. *----------------------------------------------------------------------*
然后在FORM fm_screen_check中F8(ONLI)执行的时候,将当前页签编号写入内存:
*----------------------------------------------------------------------* FORM fm_screen_check. IF sscrfields-ucomm = gc_push1 OR sscrfields-ucomm = gc_push2 OR sscrfields-ucomm = gc_push3. gv_push = sscrfields-ucomm. ENDIF. * CHECK sy-fleng = 18. * F8的时候将页签编号存到内存 IF sscrfields-ucomm = 'ONLI'. * 按单*** IF gv_push = gc_push1 OR gv_push = space. gv_dynnr = 100. gv_push = gc_push1. EXPORT gv_dynnr FROM gv_dynnr TO MEMORY ID 'ZSDD_025'. ENDIF. * 按单*** IF gv_push = gc_push2. gv_dynnr = 200. gv_push = gc_push2. EXPORT gv_dynnr FROM gv_dynnr TO MEMORY ID 'ZSDD_025'. ENDIF. * 按库*** IF gv_push = gc_push3. gv_dynnr = 300. gv_push = gc_push3. EXPORT gv_dynnr FROM gv_dynnr TO MEMORY ID 'ZSDD_025'. ENDIF. ENDIF. ENDFORM. *----------------------------------------------------------------------*
完成.