ABAP基础三——DIALOG整体

本来想模拟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.

不管是主屏幕还是子屏幕,逻辑流处理顺序都是自上而下,从左到右。所以在一些关联控制的时候,需要做好屏幕和处理逻辑的顺序。

^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
原文地址:https://www.cnblogs.com/sapSB/p/14792465.html