本来想模拟VA01的,后来想想ME21N也很经典,所以就把一些常见的组建都放上面了。
效果图如下:
1.整体设计就是按 抬头(1) + 项目(N) + 伙伴(N) + 相关数据的tabstrip(N)
2.screen设计如下:
3.主界面设计:SCREEN 9000
主屏幕逻辑流:
PBO中针对是否折叠做逻辑控制,显示对应的屏幕:
PAI处理
下面贴全部代码:
主程序:
PROGRAM ZEXP_SCREEN_TEST. DATA:GT_HEAD TYPE TABLE OF CRMD_ORDERADM_H, GW_HEAD LIKE LINE OF GT_HEAD, GT_ITEM TYPE TABLE OF CRMD_ORDERADM_I, GW_ITEM LIKE LINE OF GT_ITEM, GT_PART TYPE TABLE OF CRMD_PARTNER, GW_PART LIKE LINE OF GT_PART, OK_CODE TYPE SY-UCOMM, GV_FLAG1 TYPE CHAR01, GV_DEC TYPE ZDEC, GV_FLAG2 TYPE CHAR01, GV_FLAG3 TYPE CHAR01. *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_9001' ITSELF CONTROLS: TC_9001 TYPE TABLEVIEW USING SCREEN 9001. DATA:TC_9001_SUB1 TYPE SY-DYNNR. DATA:TC_9001_SUB2 TYPE SY-DYNNR. DATA:TC_9001_SUB3 TYPE SY-DYNNR. DATA:TC_9001_HSUB TYPE SY-DYNNR VALUE '9004'. *&SPWIZARD: LINES OF TABLECONTROL 'TC_9001' DATA: G_TC_9001_LINES LIKE SY-LOOPC. *&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_ITEM' CONSTANTS: BEGIN OF C_TS_ITEM, TAB1 LIKE SY-UCOMM VALUE 'TS_ITEM_FC1', TAB2 LIKE SY-UCOMM VALUE 'TS_ITEM_FC2', TAB3 LIKE SY-UCOMM VALUE 'TS_ITEM_FC3', TAB4 LIKE SY-UCOMM VALUE 'TS_ITEM_FC4', TAB5 LIKE SY-UCOMM VALUE 'TS_ITEM_FC5', TAB6 LIKE SY-UCOMM VALUE 'TS_ITEM_FC6', END OF C_TS_ITEM. *&SPWIZARD: DATA FOR TABSTRIP 'TS_ITEM' CONTROLS: TS_ITEM TYPE TABSTRIP. DATA: BEGIN OF G_TS_ITEM, SUBSCREEN LIKE SY-DYNNR, PROG LIKE SY-REPID VALUE 'ZEXP_SCREEN_TEST', PRESSED_TAB LIKE SY-UCOMM VALUE C_TS_ITEM-TAB1, END OF G_TS_ITEM. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE! *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR MODULE TC_9001_CHANGE_TC_ATTR OUTPUT. DESCRIBE TABLE GT_ITEM LINES TC_9001-LINES. ENDMODULE. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE! *&SPWIZARD: GET LINES OF TABLECONTROL MODULE TC_9001_GET_LINES OUTPUT. G_TC_9001_LINES = SY-LOOPC. IF GW_ITEM-NUMBER_INT IS NOT INITIAL. LOOP AT SCREEN. IF SCREEN-NAME = 'GW_ITEM-ITM_TYPE'. SCREEN-REQUIRED = 1. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF. ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE! *&SPWIZARD: MODIFY TABLE MODULE TC_9001_MODIFY INPUT. PERFORM FRM_9001_FIELD_MODIFY."PAI中更新某内表行数据 MODIFY GT_ITEM FROM GW_ITEM INDEX TC_9001-CURRENT_LINE. IF SY-SUBRC <> 0. APPEND GW_ITEM TO GT_ITEM. ENDIF. ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE! *&SPWIZARD: PROCESS USER COMMAND MODULE TC_9001_USER_COMMAND INPUT. OK_CODE = SY-UCOMM. PERFORM USER_OK_TC USING 'TC_9001' 'GT_ITEM' ' ' CHANGING OK_CODE. SY-UCOMM = OK_CODE. ENDMODULE. *----------------------------------------------------------------------* * INCLUDE TABLECONTROL_FORMS * *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form USER_OK_TC * *&---------------------------------------------------------------------* FORM USER_OK_TC USING P_TC_NAME TYPE DYNFNAM P_TABLE_NAME P_MARK_NAME CHANGING P_OK LIKE SY-UCOMM. *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA: L_OK TYPE SY-UCOMM, L_OFFSET TYPE I. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* *&SPWIZARD: Table control specific operations * *&SPWIZARD: evaluate TC name and operations * SEARCH P_OK FOR P_TC_NAME. IF SY-SUBRC <> 0. EXIT. ENDIF. L_OFFSET = STRLEN( P_TC_NAME ) + 1. L_OK = P_OK+L_OFFSET. *&SPWIZARD: execute general and TC specific operations * CASE L_OK. WHEN 'INSR'. "insert row PERFORM FCODE_INSERT_ROW USING P_TC_NAME P_TABLE_NAME. CLEAR P_OK. WHEN 'DELE'. "delete row PERFORM FCODE_DELETE_ROW USING P_TC_NAME P_TABLE_NAME P_MARK_NAME. CLEAR P_OK. WHEN 'P--' OR "top of list 'P-' OR "previous page 'P+' OR "next page 'P++'. "bottom of list PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME L_OK. CLEAR P_OK. * WHEN 'L--'. "total left * PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME. * * WHEN 'L-'. "column left * PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME. * * WHEN 'R+'. "column right * PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME. * * WHEN 'R++'. "total right * PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME. * WHEN 'MARK'. "mark all filled lines PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME . CLEAR P_OK. WHEN 'DMRK'. "demark all filled lines PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME . CLEAR P_OK. * WHEN 'SASCEND' OR * 'SDESCEND'. "sort column * PERFORM FCODE_SORT_TC USING P_TC_NAME * l_ok. ENDCASE. ENDFORM. " USER_OK_TC *&---------------------------------------------------------------------* *& Form FCODE_INSERT_ROW * *&---------------------------------------------------------------------* FORM FCODE_INSERT_ROW USING P_TC_NAME TYPE DYNFNAM P_TABLE_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_LINES_NAME LIKE FELD-NAME. DATA L_SELLINE LIKE SY-STEPL. DATA L_LASTLINE TYPE I. DATA L_LINE TYPE I. DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <LINES> TYPE I. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: get looplines of TableControl * CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME. ASSIGN (L_LINES_NAME) TO <LINES>. *&SPWIZARD: get current line * GET CURSOR LINE L_SELLINE. IF SY-SUBRC <> 0. " append line to table L_SELLINE = <TC>-LINES + 1. *&SPWIZARD: set top line * IF L_SELLINE > <LINES>. <TC>-TOP_LINE = L_SELLINE - <LINES> + 1 . ELSE. <TC>-TOP_LINE = 1. ENDIF. ELSE. " insert line into table L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1. L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1. ENDIF. *&SPWIZARD: set new cursor line * L_LINE = L_SELLINE - <TC>-TOP_LINE + 1. *&SPWIZARD: insert initial line * INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE. <TC>-LINES = <TC>-LINES + 1. *&SPWIZARD: set cursor * SET CURSOR LINE L_LINE. ENDFORM. " FCODE_INSERT_ROW *&---------------------------------------------------------------------* *& Form FCODE_DELETE_ROW * *&---------------------------------------------------------------------* FORM FCODE_DELETE_ROW USING P_TC_NAME TYPE DYNFNAM P_TABLE_NAME P_MARK_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <WA>. FIELD-SYMBOLS <MARK_FIELD>. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: delete marked lines * DESCRIBE TABLE <TABLE> LINES <TC>-LINES. LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header * ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. IF <MARK_FIELD> = 'X'. DELETE <TABLE> INDEX SYST-TABIX. IF SY-SUBRC = 0. <TC>-LINES = <TC>-LINES - 1. ENDIF. ENDIF. ENDLOOP. ENDFORM. " FCODE_DELETE_ROW *&---------------------------------------------------------------------* *& Form COMPUTE_SCROLLING_IN_TC *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_TC_NAME name of tablecontrol * -->P_OK ok code *----------------------------------------------------------------------* FORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME P_OK. *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_TC_NEW_TOP_LINE TYPE I. DATA L_TC_NAME LIKE FELD-NAME. DATA L_TC_LINES_NAME LIKE FELD-NAME. DATA L_TC_FIELD_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL. FIELD-SYMBOLS <LINES> TYPE I. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get looplines of TableControl * CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME. ASSIGN (L_TC_LINES_NAME) TO <LINES>. *&SPWIZARD: is no line filled? * IF <TC>-LINES = 0. *&SPWIZARD: yes, ... * L_TC_NEW_TOP_LINE = 1. ELSE. *&SPWIZARD: no, ... * CALL FUNCTION 'SCROLLING_IN_TABLE' EXPORTING ENTRY_ACT = <TC>-TOP_LINE ENTRY_FROM = 1 ENTRY_TO = <TC>-LINES LAST_PAGE_FULL = 'X' LOOPS = <LINES> OK_CODE = P_OK OVERLAPPING = 'X' IMPORTING ENTRY_NEW = L_TC_NEW_TOP_LINE EXCEPTIONS * NO_ENTRY_OR_PAGE_ACT = 01 * NO_ENTRY_TO = 02 * NO_OK_CODE_OR_PAGE_GO = 03 OTHERS = 0. ENDIF. *&SPWIZARD: get actual tc and column * GET CURSOR FIELD L_TC_FIELD_NAME AREA L_TC_NAME. IF SYST-SUBRC = 0. IF L_TC_NAME = P_TC_NAME. *&SPWIZARD: et actual column * SET CURSOR FIELD L_TC_FIELD_NAME LINE 1. ENDIF. ENDIF. *&SPWIZARD: set the new top line * <TC>-TOP_LINE = L_TC_NEW_TOP_LINE. ENDFORM. " COMPUTE_SCROLLING_IN_TC *&---------------------------------------------------------------------* *& Form FCODE_TC_MARK_LINES *&---------------------------------------------------------------------* * marks all TableControl lines *----------------------------------------------------------------------* * -->P_TC_NAME name of tablecontrol *----------------------------------------------------------------------* FORM FCODE_TC_MARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME. *&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------* DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <WA>. FIELD-SYMBOLS <MARK_FIELD>. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: mark all filled lines * LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header * ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. <MARK_FIELD> = 'X'. ENDLOOP. ENDFORM. "fcode_tc_mark_lines *&---------------------------------------------------------------------* *& Form FCODE_TC_DEMARK_LINES *&---------------------------------------------------------------------* * demarks all TableControl lines *----------------------------------------------------------------------* * -->P_TC_NAME name of tablecontrol *----------------------------------------------------------------------* FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <WA>. FIELD-SYMBOLS <MARK_FIELD>. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: demark all filled lines * LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header * ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. <MARK_FIELD> = SPACE. ENDLOOP. ENDFORM. "fcode_tc_mark_lines *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_9002' ITSELF CONTROLS: TC_9002 TYPE TABLEVIEW USING SCREEN 9002. *&SPWIZARD: LINES OF TABLECONTROL 'TC_9002' DATA: G_TC_9002_LINES LIKE SY-LOOPC. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE! *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR MODULE TC_9002_CHANGE_TC_ATTR OUTPUT. DESCRIBE TABLE GT_PART LINES TC_9002-LINES. ENDMODULE. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE! *&SPWIZARD: GET LINES OF TABLECONTROL MODULE TC_9002_GET_LINES OUTPUT. G_TC_9002_LINES = SY-LOOPC. ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE! *&SPWIZARD: MODIFY TABLE MODULE TC_9002_MODIFY INPUT. MODIFY GT_PART FROM GW_PART INDEX TC_9002-CURRENT_LINE. IF SY-SUBRC <> 0. APPEND GW_PART TO GT_PART. ENDIF. ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE! *&SPWIZARD: PROCESS USER COMMAND MODULE TC_9002_USER_COMMAND INPUT. OK_CODE = SY-UCOMM. PERFORM USER_OK_TC USING 'TC_9002' 'GT_PART' ' ' CHANGING OK_CODE. SY-UCOMM = OK_CODE. ENDMODULE. *&---------------------------------------------------------------------* *& Module STATUS_9000 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS_9000 OUTPUT. SET PF-STATUS 'ST9000'. * SET TITLEBAR 'xxx'. IF GV_FLAG1 = 'X'. TC_9001_SUB1 = '9101'. ELSE. TC_9001_SUB1 = '9001'. ENDIF. IF GV_FLAG2 = 'X'. TC_9001_SUB2 = '9102'. ELSE. TC_9001_SUB2 = '9002'. ENDIF. IF GV_FLAG3 = 'X'. TC_9001_SUB3 = '9103'. ELSE. TC_9001_SUB3 = '9003'. ENDIF. PERFORM FRM_HEADER_FIELD_VISIABLE. ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_9000 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_9000 INPUT. CASE OK_CODE. WHEN 'BACK'. LEAVE TO SCREEN 0. WHEN 'CANL' OR 'EXIT'. LEAVE PROGRAM. WHEN 'FOLD2'. IF GV_FLAG2 IS INITIAL. GV_FLAG2 = 'X'. ELSE. CLEAR GV_FLAG2. ENDIF. WHEN 'FOLD1'. IF GV_FLAG1 IS INITIAL. GV_FLAG1 = 'X'. ELSE. CLEAR GV_FLAG1. ENDIF. WHEN 'FOLD3'. IF GV_FLAG3 IS INITIAL. GV_FLAG3 = 'X'. ELSE. CLEAR GV_FLAG3. ENDIF. WHEN 'SAVE'. PERFORM FRM_SAVE_CHECK. WHEN OTHERS. ENDCASE. ENDMODULE. *&---------------------------------------------------------------------* *& Module FRM_SET_DISABLE OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE FRM_SET_DISABLE OUTPUT. ENDMODULE. *&---------------------------------------------------------------------* *& Module STATUS_9001 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS_9001 OUTPUT. * SET PF-STATUS 'xxxxxxxx'. * SET TITLEBAR 'xxx'. ENDMODULE. *&SPWIZARD: OUTPUT MODULE FOR TS 'TS_ITEM'. DO NOT CHANGE THIS LINE! *&SPWIZARD: SETS ACTIVE TAB MODULE TS_ITEM_ACTIVE_TAB_SET OUTPUT. TS_ITEM-ACTIVETAB = G_TS_ITEM-PRESSED_TAB. CASE G_TS_ITEM-PRESSED_TAB. WHEN C_TS_ITEM-TAB1. G_TS_ITEM-SUBSCREEN = '9031'. WHEN C_TS_ITEM-TAB2. G_TS_ITEM-SUBSCREEN = '9032'. WHEN C_TS_ITEM-TAB3. G_TS_ITEM-SUBSCREEN = '9033'. WHEN C_TS_ITEM-TAB4. G_TS_ITEM-SUBSCREEN = '9034'. WHEN C_TS_ITEM-TAB5. G_TS_ITEM-SUBSCREEN = '9035'. WHEN C_TS_ITEM-TAB6. G_TS_ITEM-SUBSCREEN = '9036'. WHEN OTHERS. *&SPWIZARD: DO NOTHING ENDCASE. ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TS 'TS_ITEM'. DO NOT CHANGE THIS LINE! *&SPWIZARD: GETS ACTIVE TAB MODULE TS_ITEM_ACTIVE_TAB_GET INPUT. OK_CODE = SY-UCOMM. CASE OK_CODE. WHEN C_TS_ITEM-TAB1. G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB1. WHEN C_TS_ITEM-TAB2. G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB2. WHEN C_TS_ITEM-TAB3. G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB3. WHEN C_TS_ITEM-TAB4. G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB4. WHEN C_TS_ITEM-TAB5. G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB5. WHEN C_TS_ITEM-TAB6. G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB6. WHEN OTHERS. *&SPWIZARD: DO NOTHING ENDCASE. ENDMODULE. *&---------------------------------------------------------------------* *& Module MOD_SET_TAB_VISIABLE OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE MOD_SET_TAB_VISIABLE OUTPUT. IF SY-UNAME = 'LIYUAN'."设置隐藏的TAB页签 LOOP AT SCREEN. IF SCREEN-NAME = 'TS_ITEM_TAB5'. SCREEN-INVISIBLE = 'X'. SCREEN-ACTIVE = 0. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF. ENDMODULE. *&---------------------------------------------------------------------* *& Form FRM_HEADER_FIELD_VISIABLE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_HEADER_FIELD_VISIABLE . LOOP AT SCREEN."设置屏幕字段的隐藏 IF SCREEN-NAME = 'GW_HEAD-OBJECT_ID' OR SCREEN-NAME = 'GW_HEAD-ZZZGROUP'. SCREEN-ACTIVE = 0. MODIFY SCREEN. ENDIF. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_9001_FIELD_MODIFY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_9001_FIELD_MODIFY . IF GW_ITEM-ITM_TYPE = 'ZSPA'."pai中做字段关联逻辑或,字段默认逻辑 GW_ITEM-ZZZBRAND = 'HI'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Module FRM_EXIT INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE FRM_EXIT INPUT. LEAVE PROGRAM. ENDMODULE. *&---------------------------------------------------------------------* *& Form FRM_SAVE_CHECK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_SAVE_CHECK . ENDFORM.
9000逻辑流:
PROCESS BEFORE OUTPUT. MODULE STATUS_9000. CALL SUBSCREEN HSUB INCLUDING SY-REPID TC_9001_HSUB."'9002'. CALL SUBSCREEN SUB1 INCLUDING SY-REPID TC_9001_SUB1."'9001'. CALL SUBSCREEN SUB2 INCLUDING SY-REPID TC_9001_SUB2."'9002'. CALL SUBSCREEN SUB3 INCLUDING SY-REPID TC_9001_SUB3."'9002'. * MODULE FRM_SET_DISABLE. * PROCESS AFTER INPUT. MODULE FRM_EXIT AT EXIT-COMMAND. CALL SUBSCREEN HSUB. CALL SUBSCREEN SUB1. CALL SUBSCREEN SUB2. CALL SUBSCREEN SUB3. MODULE USER_COMMAND_9000.
9001TC逻辑流
PROCESS BEFORE OUTPUT. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_9001' MODULE TC_9001_CHANGE_TC_ATTR. *&SPWIZARD: MODULE TC_9001_CHANGE_COL_ATTR. LOOP AT GT_ITEM INTO GW_ITEM WITH CONTROL TC_9001 CURSOR TC_9001-CURRENT_LINE. MODULE TC_9001_GET_LINES. *&SPWIZARD: MODULE TC_9001_CHANGE_FIELD_ATTR ENDLOOP. MODULE STATUS_9001. * PROCESS AFTER INPUT. *&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_9001' LOOP AT GT_ITEM. CHAIN. FIELD GW_ITEM-NUMBER_INT. FIELD GW_ITEM-ITM_TYPE. FIELD GW_ITEM-ZZZBRAND. FIELD GW_ITEM-ZZZMODENO. FIELD GW_ITEM-ZZZSERIALNO. FIELD GW_ITEM-ZZPLANT. FIELD GW_ITEM-ZZLGORT. FIELD GW_ITEM-ZZSYMP_GROU. FIELD GW_ITEM-ZZSYMP_CODE. MODULE TC_9001_MODIFY ON CHAIN-REQUEST. ENDCHAIN. ENDLOOP. MODULE TC_9001_USER_COMMAND. *&SPWIZARD: MODULE TC_9001_CHANGE_TC_ATTR. *&SPWIZARD: MODULE TC_9001_CHANGE_COL_ATTR. * MODULE USER_COMMAND_9001.
9002TC逻辑流:
PROCESS BEFORE OUTPUT. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_9002' MODULE TC_9002_CHANGE_TC_ATTR. *&SPWIZARD: MODULE TC_9002_CHANGE_COL_ATTR. LOOP AT GT_PART INTO GW_PART WITH CONTROL TC_9002 CURSOR TC_9002-CURRENT_LINE. MODULE TC_9002_GET_LINES. *&SPWIZARD: MODULE TC_9002_CHANGE_FIELD_ATTR ENDLOOP. * MODULE STATUS_9002. * PROCESS AFTER INPUT. *&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_9002' LOOP AT GT_PART. CHAIN. FIELD GW_PART-PARTNER_FCT. FIELD GW_PART-PARTNER_NO. FIELD GW_PART-DISPLAY_TYPE. FIELD GW_PART-NO_TYPE. FIELD GW_PART-ADDR_NP. MODULE TC_9002_MODIFY ON CHAIN-REQUEST. endchain. ENDLOOP. MODULE TC_9002_USER_COMMAND. *&SPWIZARD: MODULE TC_9002_CHANGE_TC_ATTR. *&SPWIZARD: MODULE TC_9002_CHANGE_COL_ATTR. * MODULE USER_COMMAND_9002.
TAB STRIP逻辑流:
PROCESS BEFORE OUTPUT. *&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TS_ITEM' MODULE TS_ITEM_ACTIVE_TAB_SET. CALL SUBSCREEN: 9031_SCA INCLUDING G_TS_ITEM-PROG '9031', 9032_SCA INCLUDING G_TS_ITEM-PROG '9032', 9033_SCA INCLUDING G_TS_ITEM-PROG '9033', 9034_SCA INCLUDING G_TS_ITEM-PROG '9034', 9035_SCA INCLUDING G_TS_ITEM-PROG '9035', 9036_SCA INCLUDING G_TS_ITEM-PROG '9036'. MODULE MOD_SET_TAB_VISIABLE. * MODULE STATUS_9003. * PROCESS AFTER INPUT. *&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TS_ITEM' CALL SUBSCREEN: 9031_SCA, 9032_SCA, 9033_SCA, 9034_SCA, 9035_SCA, 9036_SCA. MODULE TS_ITEM_ACTIVE_TAB_GET. * MODULE USER_COMMAND_9003.
不管是主屏幕还是子屏幕,逻辑流处理顺序都是自上而下,从左到右。所以在一些关联控制的时候,需要做好屏幕和处理逻辑的顺序。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/18660.html