zoukankan      html  css  js  c++  java
  • 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里,以后还怎么百度呢^_^
  • 相关阅读:
    cereal:C++实现的开源序列化库
    随笔
    我们一起成长
    青岛近代历史和文化资料整理
    Codeforces Round #580 (Div. 2)-D. Shortest Cycle(思维建图+dfs找最小环)
    CodeForces
    PAT甲级1151(由前序和中序确定LCA)
    记录使用vs code两天的心得
    AcWing 285. 没有上司的舞会(树形dp入门)
    POJ-3255-Roadblocks(次短路的另一种求法)
  • 原文地址:https://www.cnblogs.com/sapSB/p/14792465.html
Copyright © 2011-2022 走看看