PP-工单异常报表(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZPPR006
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-06-26
*& Program Type        :  Report
*& Description         :  工单异常报表
*&---------------------------------------------------------------------*
REPORT ZPPR006.

*&---------------------------------------------------------------------*
*& 包含               ZMMR118_TOP
*&---------------------------------------------------------------------*
TABLES:AFPO,AFKO.

TYPE-POOLS:SLIS,T001W,ICON.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE LVC_S_LAYO,
      GT_FIELDCAT TYPE LVC_T_FCAT,
      IS_VARIANT  TYPE DISVARIANT.

DATAG_TITLE_0200 TYPE STRING,
      LV_SUM       TYPE STRING,
      G_INDEX      TYPE SY-INDEX.

DATA GT_EXDATA TYPE ALSMEX_TABLINE OCCURS WITH HEADER LINE.
DATA IW_CELLCOLOR TYPE LVC_T_SCOL WITH HEADER LINE.
DATA L_FILENAME TYPE STRING .
DATA L_MUBAN TYPE STRING .
DATA GV_FULLPATH TYPE STRING .
DATA GV_PATH TYPE STRING .
DATA GV_NAME TYPE STRING .
DATA:FLAG    TYPE C .
DATA:I_EVENTS        TYPE SLIS_T_EVENT.
DATA:W_EVENTS        LIKE LINE OF I_EVENTS.
DATA REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA OK_CODE         TYPE SY-UCOMM.
DATA OK_SAVE         TYPE SY-UCOMM.

TYPESBEGIN OF GTS_DATA,
         PWERK     TYPE  AFPO-PWERK,                      "工厂
         AUFNR     TYPE  AFPO-AUFNR,                      "工单号码
         OBJNR     TYPE  AUFK-OBJNR,                      "对象号
         MATNR     TYPE  AFPO-MATNR,                      "产品料号
         MAKTX     TYPE  MAKT-MAKTX,                      "物料名称
         DISPO     TYPE  AFKO-DISPO,                      "MRP控制员
         FEVOR     TYPE  AFKO-FEVOR,                      "生产管理员
         GSTRP     TYPE  AFKO-GSTRP,                      "基本开始日期
         GLTRP     TYPE  AFKO-GLTRP,                      "基本完成日期
         PSMNG     TYPE  AFPO-PSMNG,                      "计划数量
         GMNGA     TYPE  AFRU-GMNGA,                      "报工数量
         WEMNG     TYPE  AFPO-WEMNG,                      "收货数量
         MEINS     TYPE  AFPO-MEINS,                      "单位
         LTRMI     TYPE  AFPO-LTRMI,                      "收货日期
         STTXT     TYPE  BSVX-STTXT,                      "工单状态
         TYPE      TYPE  C,                               "标识
         TYPE2     TYPE  C,                               "标识
         CF1       TYPE  CHAR4,                           "发料异常警示
         CF2       TYPE  CHAR4,                           "报工异常警示
         DATUM_JY  TYPE  DATUM,                           "建议月结日期
         DATUM_SJ  TYPE  DATUM,                           "实际月结日期
         ZBEZU     TYPE  CHAR30,                          "原因分析
         CELLCOLOR TYPE  LVC_T_SCOL,                      "单元格颜色
         STYLE     TYPE  LVC_T_STYL,                      "控制不可编辑
       END OF GTS_DATA.

TYPESBEGIN OF GTS_SUB01 ,
         CF1     TYPE  CHAR4,                             "发料异常警示
         PWERK   TYPE  AFPO-PWERK,                        "工厂
         AUFNR   TYPE  AUFK-AUFNR,                        "工单号
         ERDAT   TYPE  AUFK-ERDAT,                        "工单日期
         MATNR   TYPE  AFPO-MATNR,                        "成品项目号
         AUART   TYPE  AUFK-AUART,                        "工单类型
         OBJNR   TYPE  AUFK-OBJNR,                        "工单状态
         STTXT   TYPE  BSVX-STTXT,                        "工单状态
         STLAN   TYPE  AFKO-STLAN,                        "BOM类型
         MAKTX   TYPE  MAKT-MAKTX,                        "成品项目说明
         PSMNG   TYPE  AFPO-PSMNG,                        "成品定单数量
         WEMNG   TYPE  AFPO-WEMNG,                        "成品完工数量
         AMEIN   TYPE  AFPO-AMEIN,                        "成品单位
         MATNR_Z TYPE  RESB-MATNR,                        "子件项目号
         MAKTX_Z TYPE  MAKT-MAKTX,                        "子件项目号说明
         WERKS_Z TYPE  RESB-WERKS,                        "子件发料工厂
         MEINS_S TYPE  RESB-MEINS,                        "子件单位
         MEINS   TYPE  RESB-MEINS,                        "子件单位
         DATUV   TYPE  STPO-DATUV,                        "工单状态
         MENGE   TYPE  STPO-MENGE,                        "子件BOM数量
         BMENG   TYPE  STKO-BMENG,                        "基本数量
         BDMNG   TYPE  RESB-BDMNG,                        "子件计划数量
         MENGE_Y TYPE  MSEG-MENGE,                        "子件已发数量
         MENGE_G TYPE  MSEG-MENGE,                        "工单产出数
         MENGE_T TYPE  MSEG-MENGE,                        "退料数
         MENGE_C TYPE  MSEG-MENGE,                        "差异数
         CYBL_C  TYPE  MSEG-MENGE,                        "差异比例
       END OF GTS_SUB01.

TYPESBEGIN OF GTS_SUB02,
         PWERK TYPE  AFPO-PWERK,                          "工厂
         AUFNR TYPE  AFPO-AUFNR,                          "工单号
         MATNR TYPE  AFPO-MATNR,                          "产品型号
         PSMNG TYPE  AFPO-PSMNG,                          "工单数量
         MEINS TYPE  AFPO-MEINS,                          "单位
         GMNGA TYPE  AFRU-GMNGA,                          "报工数
         VORNR TYPE  AFVC-VORNR,                          "工序
         VGW01 TYPE  AFVV-VGW01,                          "标准准备工时
         VGW02 TYPE  AFVV-VGW02,                          "标准机器工时
         VGW03 TYPE  AFVV-VGW03,                          "标准人工工时
         ISM01 TYPE  AFRU-ISM01,                          "实际准备工时
         ISM02 TYPE  AFRU-ISM02,                          "实际机器工时
         ISM03 TYPE  AFRU-ISM03,                          "实际人工工时

         ZXYZB TYPE  AFVV-VGW01,                          "差异准备工时
         ZXYJQ TYPE  AFVV-VGW01,                          "差异机器工时
         ZXYRG TYPE  AFVV-VGW01,                          "差异人工工时

         AUFPL TYPE  AFKO-AUFPL,                          "工艺路线
         RMZHL TYPE  AFKO-RMZHL,                          "内部计数器
         RUECK TYPE  AFKO-RUECK,                          "操作完成的确认编号
       END OF GTS_SUB02.

DATALV_POP    TYPE MSEG-MENGE VALUE '1'.                "比例系数
DATAGT_S01    TYPE TABLE OF GTS_SUB01 WITH HEADER LINE.
DATAGT_SU01   TYPE TABLE OF GTS_SUB01 WITH HEADER LINE.
DATAGT_SUB01  TYPE TABLE OF GTS_SUB01 WITH HEADER LINE.
DATAGT_SUB01A TYPE TABLE OF GTS_SUB01 WITH HEADER LINE.
DATAGT_S02    TYPE TABLE OF GTS_SUB02 WITH HEADER LINE.
DATAGT_SU02   TYPE TABLE OF GTS_SUB02 WITH HEADER LINE.
DATAGT_SUB02  TYPE TABLE OF GTS_SUB02 WITH HEADER LINE.
DATAGT_SUB02A TYPE TABLE OF GTS_SUB02 WITH HEADER LINE.
DATAGT_DATA   TYPE TABLE OF GTS_DATA  WITH HEADER LINE.
DATAGT_DATA_A TYPE TABLE OF GTS_DATA  WITH HEADER LINE.
DATAJEST      TYPE TABLE OF JEST      WITH HEADER LINE.
DATAMESSAGE   TYPE  BAPI_MSG.                           "报错信息.

DATABEGIN OF STATUS_TMP OCCURS 0,
        STAT LIKE JEST-STAT,
        EXCL LIKE RC27X-FLG_SEL,
      END   OF STATUS_TMP.
DATASTATUS_HDR_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE,
      STATUS_OPR_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE,
      STATUS_CMP_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE.
TYPES:
  BEGIN OF TYP_S_AUFNR,
    AUFNR TYPE AUFNR,
  END OF TYP_S_AUFNR,
  TYP_TS_AUFNR TYPE SORTED TABLE OF TYP_S_AUFNR
               
WITH NON-UNIQUE KEY AUFNR,
  BEGIN OF TYP_S_OBJNR,
    AUFNR TYPE AUFNR,
    AUFPL TYPE CO_AUFPL,
    APLFL TYPE PLNFOLGE,
    PLNFL TYPE PLNFOLGE,
    OBJNR TYPE J_OBJNR,
  END OF TYP_S_OBJNR,
  TYP_TS_AUFNR_OBJNR TYPE SORTED TABLE OF TYP_S_OBJNR
                     
WITH NON-UNIQUE KEY AUFNR OBJNR,
  TYP_TS_AUFPL_OBJNR TYPE SORTED TABLE OF TYP_S_OBJNR
                     
WITH NON-UNIQUE KEY AUFPL OBJNR,
  TYP_TS_OBJNR       TYPE SORTED TABLE OF TYP_S_OBJNR,
  BEGIN OF TYP_S_VBELN,
    VBELN TYPE VBELN,
  END OF TYP_S_VBELN,
  TYP_TS_VBELN TYPE SORTED TABLE OF TYP_S_VBELN
               
WITH NON-UNIQUE KEY VBELN.
DATAYX VALUE 'X'.


*&SPWIZARD: DECLARATION OF TABLECONTROL 'TBC_01' ITSELF
CONTROLSTBC_01 TYPE TABLEVIEW USING SCREEN 0100.

*&SPWIZARD: LINES OF TABLECONTROL 'TBC_01'
DATA:     G_TBC_01_LINES  LIKE SY-LOOPC.

*&SPWIZARD: DECLARATION OF TABLECONTROL 'TBC_02' ITSELF
CONTROLSTBC_02 TYPE TABLEVIEW USING SCREEN 0200.

*&SPWIZARD: LINES OF TABLECONTROL 'TBC_02'
DATA:     G_TBC_02_LINES  LIKE SY-LOOPC.


SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
*PARAMETERS     P_AUFNR TYPE AUFK-AUFNR     MODIF ID MXY .
*PARAMETERS     P_BOX2  TYPE C AS CHECKBOX  MODIF ID MXY .
SELECT-OPTIONS S_PWERK FOR  AFPO-PWERK     MODIF ID MXZ .                        "工厂
SELECT-OPTIONS S_MATNR FOR  AFPO-MATNR     MODIF ID MXZ .                        "物料
SELECT-OPTIONS S_AUFNR FOR  AFPO-AUFNR     MODIF ID MXZ .                        "工单
SELECT-OPTIONS S_GSTRP FOR  AFKO-GSTRP     MODIF ID MXZ .                        "开始日期
SELECT-OPTIONS S_GLTRP FOR  AFKO-GLTRP     MODIF ID MXZ .                        "完成日期
SELECT-OPTIONS S_GLTRI FOR  AFKO-GLTRI     MODIF ID MXZ .                        "工单实际完成日期
SELECT-OPTIONS S_DISPO FOR  AFKO-DISPO     MODIF ID MXZ .                        "MRP控制员
SELECT-OPTIONS S_FEVOR FOR  AFKO-FEVOR     MODIF ID MXZ .                        "生产管理员

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN:
  COMMENT 1(20TEXT-SYS FOR FIELD P_SYST1    MODIF ID C1,
  POSITION 33.
PARAMETERS:
  P_SYST1 LIKE TJ02T-TXT04                    MODIF ID C1,
  P_SYSH1 LIKE JEST-STAT                      NO-DISPLAY.
SELECTION-SCREEN
  POSITION 46.
PARAMETERS:
  P_EXCL1   LIKE RCOSA-EXCL1                  MODIF ID C1.
SELECTION-SCREEN:
  COMMENT 40(5TEXT-EXC FOR FIELD P_EXCL1    MODIF ID C1,
  COMMENT 52(3TEXT-AND FOR FIELD P_SYST2    MODIF ID C1,
    POSITION 58.
PARAMETERS:
  P_SYST2 LIKE TJ02T-TXT04                    MODIF ID C1,
  P_SYSH2 LIKE JEST-STAT                      NO-DISPLAY.
SELECTION-SCREEN
    POSITION 71.
PARAMETERS:
  P_EXCL2   LIKE RCOSA-EXCL1                  MODIF ID C1.
SELECTION-SCREEN:
    COMMENT 65(5TEXT-EXC FOR FIELD P_EXCL2  MODIF ID C1.
SELECTION-SCREEN END   OF LINE.
PARAMETERS:
  P_SELID  LIKE TJ48T-SELID                   NO-DISPLAY.

PARAMETERS     P_BOX   TYPE C AS CHECKBOX  MODIF ID MXZ .
SELECTION-SCREEN END OF BLOCK B2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SYST1.
  PERFORM VAL_REQ_STATUS USING 'P_SYST1' CHANGING P_SYST1 P_SYSH1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SYST2.
  PERFORM VAL_REQ_STATUS USING 'P_SYST2' CHANGING P_SYST2 P_SYSH2.
*&---------------------------------------------------------------------*
*& 包含               ZMMR118_CLASS
*&---------------------------------------------------------------------*
*CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.
    DATAUCOMM TYPE SY-UCOMM.

    METHODS HANDLE_DATA_CHANGED
                  
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
      
IMPORTING ER_DATA_CHANGED.

    METHODS:HANDLE_BUTTON_CLICK
                  
FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
      
IMPORTING ES_ROW_NO ES_COL_ID.

  PRIVATE SECTION.
ENDCLASS.                    "lcl_event_receiver DEFINITION
DATAEVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_DATA_CHANGED.

  ENDMETHOD.                    "handle_data_changed
  METHOD HANDLE_BUTTON_CLICK.
    CLEAR:G_INDEX.
    G_INDEX ES_ROW_NO-ROW_ID.
    READ TABLE GT_DATA[] INTO GT_DATA INDEX ES_ROW_NO-ROW_ID.
    IF ES_COL_ID-FIELDNAME 'CF1'.
      CLEAR GT_SUB01[] .
      LOOP AT GT_SUB01A INTO GT_SUB01A WHERE PWERK GT_DATA-PWERK
                                         
AND AUFNR GT_DATA-AUFNR
                                         
AND MATNR GT_DATA-MATNR
                                         
.
        SELECT SINGLE MAKTX INTO GT_SUB01A-MAKTX FROM MAKT
          
WHERE MATNR GT_SUB01A-MATNR
          
.
        SELECT SINGLE MAKTX INTO GT_SUB01A-MAKTX_Z FROM MAKT
          
WHERE MATNR GT_SUB01A-MATNR_Z
          
.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            INPUT  GT_SUB01A-AUFNR
          
IMPORTING
            OUTPUT GT_SUB01A-AUFNR.

        APPEND GT_SUB01A TO GT_SUB01[] .
        CLEAR GT_SUB01A .
      ENDLOOP.

      CALL SCREEN 0100 STARTING AT 3 3.
    ELSE .
      CLEAR GT_SUB02[] .
      LOOP AT GT_SUB02A INTO GT_SUB02A WHERE PWERK GT_DATA-PWERK
                                         
AND AUFNR GT_DATA-AUFNR
                                         
AND MATNR GT_DATA-MATNR
                                         
.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            INPUT  GT_SUB02A-AUFNR
          
IMPORTING
            OUTPUT GT_SUB02A-AUFNR.

        APPEND GT_SUB02A TO GT_SUB02[] .
        CLEAR GT_SUB02A .
      ENDLOOP.

      CALL SCREEN 0200 STARTING AT 3 3.
    ENDIF.
    PERFORM FRM_REF_ALV.
  ENDMETHOD.

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
*& 包含               ZMMR118_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATALTS_OBJNR TYPE TYP_TS_AUFNR_OBJNR.
  DATAGT_AFRU   TYPE TABLE OF AFRU WITH HEADER LINE.
  DATAGS_AFKO   TYPE AFKO.
  DATAGS_AFVC   TYPE AFVC.
  DATALINE      TYPE BSVX-STTXT.
  DATALV_OBJNR  TYPE JEST-OBJNR.
  DATAGT_MSEG   TYPE TABLE OF MSEG WITH HEADER LINE.
  DATATOPMAT    LIKE CSTMAT .
  DATADSTST     LIKE CSDATA-XFELD .
  DATASTB       LIKE STPOX OCCURS WITH HEADER LINE  .
  DATAMATCAT    LIKE CSCMAT OCCURS WITH HEADER LINE  .
  DATALS_STYLE  TYPE LVC_S_STYL.
  DATALT_STYLE  TYPE TABLE OF LVC_S_STYL.
  DATAGT_AFRU1  TYPE TABLE OF AFRU     WITH HEADER LINE.
  DATAGT_AFVV   TYPE TABLE OF AFVV     WITH HEADER LINE.

* APPEND STATUS TO IMPORTED TABLE FOR HEADER SELECTION
  PERFORM FILL_STATUS_TABLE
          
TABLES STATUS_HDR_TAB
          
USING  P_SYST1
                 P_SYSH1
                 P_EXCL1
                 P_SYST2
                 P_SYSH2
                 P_EXCL2
                 
.

  CLEAR LTS_OBJNR[] .
  SELECT AUFNR OBJNR FROM AUFK
         
INTO CORRESPONDING FIELDS OF TABLE LTS_OBJNR[]
           
WHERE WERKS IN S_PWERK
             
AND AUFNR IN S_AUFNR
             
.

  IF STATUS_HDR_TAB[] IS NOT INITIAL.
    PERFORM REDUCE_AUFNR_OBJNR_BY_STATUS
            
TABLES STATUS_HDR_TAB
            
USING  P_SELID
            
CHANGING LTS_OBJNR[].
  ENDIF.

  IF LTS_OBJNR[] IS NOT INITIAL.

    CLEAR GT_DATA[] .
    SELECT
      AFPO~PWERK
      AFPO
~AUFNR
      AFPO
~MATNR
      AFPO
~PSMNG
      AFPO
~WEMNG
      AFPO
~MEINS
      AFPO
~LTRMI
      AFKO
~DISPO
      AFKO
~FEVOR
      AFKO
~GSTRP
      AFKO
~GLTRP
      AUFK
~OBJNR
      
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
      
FROM AFPO
      INNER 
JOIN AFKO ON AFPO~AUFNR AFKO~AUFNR
      INNER 
JOIN AUFK ON AFPO~AUFNR AUFK~AUFNR
      
FOR ALL ENTRIES IN LTS_OBJNR[]
      
WHERE AFPO~AUFNR  LTS_OBJNR-AUFNR
        
AND AFPO~PWERK IN S_PWERK
        
AND AFPO~MATNR IN S_MATNR
        
AND AFPO~AUFNR IN S_AUFNR
        
AND AFKO~GSTRP IN S_GSTRP
        
AND AFKO~GLTRP IN S_GLTRP
        
AND AFKO~GLTRI IN S_GLTRI
        
AND AFKO~DISPO IN S_DISPO
        
AND AFKO~FEVOR IN S_FEVOR
        
.

    CLEAR GT_SUB01A[] .
    CLEAR GT_SUB02A[] .
    LOOP AT GT_DATA.
      SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
        
WHERE MATNR GT_DATA-MATNR
        
.
最后一道工序
      CLEAR GS_AFKO .
      SELECT SINGLE AUFPL INTO CORRESPONDING FIELDS OF GS_AFKO FROM AFKO
        
WHERE AUFNR GT_DATA-AUFNR
        
.
      CLEAR GS_AFVC .
      SELECT MAXAFVC~VORNR INTO GS_AFVC-VORNR FROM AFVC
        
WHERE AFVC~AUFPL GS_AFKO-AUFPL
        
.
报工数量
      CLEAR GT_AFRU[] .
      SELECT GMNGA INTO CORRESPONDING FIELDS OF TABLE GT_AFRU[] FROM AFRU
        
WHERE AUFNR GT_DATA-AUFNR
          
AND VORNR GS_AFVC-VORNR
          
AND STOKZ ''
          AND STZHL ''
          .
      CLEAR GT_DATA-GMNGA .
      LOOP AT GT_AFRU.
        GT_DATA-GMNGA GT_DATA-GMNGA + GT_AFRU-GMNGA .
        CLEAR GT_AFRU .
      ENDLOOP.

工单状态
      CALL FUNCTION 'STATUS_TEXT_EDIT'
        EXPORTING
          CLIENT      SY-MANDT
          OBJNR       
GT_DATA-OBJNR
          ONLY_ACTIVE 
'X'
          SPRAS       SY-LANGU
        
IMPORTING
          LINE        GT_DATA-STTXT.

建议月结日期
      GT_DATA-DATUM_JY GT_DATA-GLTRP + .

*------------------------------------------------------------------------------
*      发料异常警示
*------------------------------------------------------------------------------
      CLEAR GT_DATA-TYPE .
      CLEAR GT_SU01[] .
      SELECT
        AFPO~PWERK
        AUFK
~AUFNR
        AUFK
~ERDAT
        AUFK
~AUART
        AUFK
~OBJNR
        AFKO
~STLAN
        AFPO
~MATNR
        AFPO
~PSMNG
        AFPO
~WEMNG
        AFPO
~AMEIN
        RESB
~MATNR AS MATNR_Z
        RESB
~WERKS AS WERKS_Z
        RESB
~MEINS
        RESB
~BDMNG
      
INTO CORRESPONDING FIELDS OF TABLE GT_SU01[]
        
FROM RESB
        INNER 
JOIN AFPO ON RESB~AUFNR AFPO~AUFNR AND RESB~BAUGR AFPO~MATNR
        INNER 
JOIN AFKO ON AFPO~AUFNR AFKO~AUFNR
        INNER 
JOIN AUFK ON AFKO~AUFNR AUFK~AUFNR
      
WHERE AFPO~PWERK GT_DATA-PWERK
        
AND AUFK~AUFNR GT_DATA-AUFNR
        
AND AFPO~MATNR GT_DATA-MATNR
        
.

      GT_S01[] GT_SU01[] .
      SORT GT_SU01[] BY PWERK AUFNR MATNR WERKS_Z MATNR_Z .
      DELETE ADJACENT DUPLICATES FROM GT_SU01[] COMPARING PWERK AUFNR MATNR WERKS_Z MATNR_Z.

      LOOP AT GT_SU01.
        CLEAR GT_SU01-BDMNG .
        LOOP AT GT_S01 WHERE PWERK   GT_SU01-PWERK
                         
AND AUFNR   GT_SU01-AUFNR
                         
AND MATNR   GT_SU01-MATNR
                         
AND WERKS_Z GT_SU01-WERKS_Z
                         
AND MATNR_Z GT_SU01-MATNR_Z
                        
.
          GT_SU01-BDMNG GT_SU01-BDMNG + GT_S01-BDMNG .
          CLEAR GT_S01 .
        ENDLOOP.

子件BOM数量:
        CLEAR STB[] .
        CLEAR MATCAT[] .
        CLEAR TOPMAT .
        CLEAR DSTST .
        CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
          EXPORTING
            CAPID                 'PP01'        "应用程序
            DATUV                 SY-DATUM      "系统的当前日期
            MTNRV                 GT_SU01-MATNR "要展开BOM的物料
            WERKS                 GT_SU01-PWERK "工厂
            EMENG                 GT_SU01-PSMNG "需求数量
          IMPORTING
            TOPMAT                TOPMAT
            DSTST                 
DSTST
          
TABLES
            STB                   STB           "展开的BOM存放在该内表
            MATCAT                MATCAT        "下面含有元件的物料存放在该内表
          EXCEPTIONS
            ALT_NOT_FOUND         1
            CALL_INVALID          2
            MATERIAL_NOT_FOUND    3
            MISSING_AUTHORIZATION 4
            NO_BOM_FOUND          5
            NO_PLANT_DATA         6
            NO_SUITABLE_BOM_FOUND 7
            CONVERSION_ERROR      8
            OTHERS                9.

        READ TABLE STB WITH KEY IDNRK GT_SU01-MATNR_Z .
        IF SY-SUBRC .
          GT_SU01-MEINS_S STB-MMEIN .
          GT_SU01-MENGE   STB-MNGLG .
        ENDIF.

单位转换
        IF GT_SU01-MEINS_S <> GT_SU01-MEINS.
          CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
            EXPORTING
              I_MATNR              GT_SU01-MATNR_Z
              I_IN_ME              
GT_SU01-MEINS_S
              I_OUT_ME             
GT_SU01-MEINS
              I_MENGE              
GT_SU01-MENGE
            
IMPORTING
              E_MENGE              GT_SU01-MENGE
            
EXCEPTIONS
              ERROR_IN_APPLICATION 1
              ERROR                2
              OTHERS               3.
        ENDIF.

子件已发数量:
        CLEAR GT_MSEG[] .
        SELECT MENGE MATNR AUFNR BWART INTO CORRESPONDING FIELDS OF TABLE GT_MSEG[] FROM MSEG
          
WHERE BWART IN '261','262' )
            AND MATNR GT_SU01-MATNR_Z
            
AND AUFNR GT_SU01-AUFNR
            
AND WERKS GT_SU01-WERKS_Z
            
.
        CLEAR GT_SU01-MENGE_T .
        LOOP AT GT_MSEG .
          IF GT_MSEG-BWART '262'.
子件退料数量:
            GT_SU01-MENGE_T GT_SU01-MENGE_T + GT_MSEG-MENGE .
            GT_MSEG-MENGE GT_MSEG-MENGE * -.
          ENDIF.
          GT_SU01-MENGE_Y GT_SU01-MENGE_Y + GT_MSEG-MENGE .
          CLEAR GT_MSEG .
        ENDLOOP.

差异数订单BOM用量数 - 已发数
        GT_SU01-MENGE_C GT_SU01-MENGE GT_SU01-MENGE_Y .

差异比例
        IF GT_SU01-MENGE <> 0.
          GT_SU01-CYBL_C GT_SU01-MENGE_C / GT_SU01-MENGE .
        ENDIF.
*         MENGE_C TYPE  MSEG-MENGE,                        "差异数
*         CYBL_C  TYPE  STRING,                            "差异比例

        IF GT_SU01-MENGE_Y < GT_SU01-MENGE * LV_POP.
          GT_DATA-TYPE 'E'.
          GT_SU01-CF1 '@0A@'.
        ELSE .
          GT_SU01-CF1 '@08@'.
        ENDIF.

        MODIFY GT_SU01 .
        CLEAR GT_SU01 .
      ENDLOOP.

      APPEND LINES OF GT_SU01[] TO GT_SUB01A[] .

      CLEAR LT_STYLE[] .
      CLEAR LS_STYLE .
      IF GT_DATA-TYPE 'E'.
        GT_DATA-CF1 '@0A@'.
        LS_STYLE-FIELDNAME 'CF1'.
        LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
        APPEND LS_STYLE TO LT_STYLE.
        GT_DATA-STYLE LT_STYLE.
      ELSE .
        GT_DATA-CF1 '@08@'.
      ENDIF.

*------------------------------------------------------------------------------
*      发料异常警示
*------------------------------------------------------------------------------

*------------------------------------------------------------------------------
*      报工异常警示
*------------------------------------------------------------------------------
      CLEAR GT_DATA-TYPE2 .
      CLEAR GT_SU02[] .
      SELECT
        AFPO~KDAUF
        AFPO
~KDPOS
        AFPO
~PWERK
        AFPO
~AUFNR
        AFPO
~MATNR
        AFPO
~PSMNG
        AFPO
~MEINS
        AFKO
~AUFPL
        AFVC
~VORNR
      
INTO CORRESPONDING FIELDS OF TABLE GT_SU02[]
        
FROM AFPO
        INNER 
JOIN AFKO ON AFPO~AUFNR AFKO~AUFNR
        INNER 
JOIN AFVC ON AFKO~AUFPL AFVC~AUFPL
        
WHERE AFPO~PWERK GT_DATA-PWERK
          
AND AFPO~AUFNR GT_DATA-AUFNR
          
AND AFPO~MATNR GT_DATA-MATNR
          
.

      SORT GT_SU02[] BY PWERK AUFNR MATNR VORNR .
      DELETE ADJACENT DUPLICATES FROM GT_SU02[] COMPARING PWERK AUFNR MATNR VORNR.

      LOOP AT GT_SU02.
*实际人工工时 & 实际机器工时 & 实际准备工时
        CLEAR GT_AFRU1[] .
        SELECT
          AFRU~AUFNR
          AFRU
~BUDAT
          AFRU
~RUECK
          AFRU
~RMZHL
          AFRU
~AUFPL
          AFRU
~APLZL
          AFRU
~ISM01
          AFRU
~ILE01
          AFRU
~ISM02
          AFRU
~ILE02
          AFRU
~ISM03
          AFRU
~ILE03
          AFRU
~STOKZ
          AFRU
~GMNGA
          
INTO CORRESPONDING FIELDS OF TABLE GT_AFRU1[]
          
FROM AFRU
          
WHERE AFRU~AUFNR GT_SU02-AUFNR
            
AND AFRU~AUFPL GT_SU02-AUFPL
            
AND AFRU~VORNR GT_SU02-VORNR
          
.
*标准人工工时 & 标准机器工时 & 标准准备工时
        CLEAR GT_AFVV[] .
        SELECT
          AFVV~AUFPL
          AFVV
~APLZL
          AFVV
~VGE01
          AFVV
~VGW01
          AFVV
~VGE02
          AFVV
~VGW02
          AFVV
~VGE03
          AFVV
~VGW03
          AFVV
~BMSCH
          
INTO CORRESPONDING FIELDS OF TABLE GT_AFVV[]
          
FROM AFVV
          
WHERE AFVV~AUFPL GT_SU02-AUFPL
          
.

        LOOP AT GT_AFRU1  .

          IF GT_AFRU1-STOKZ IS NOT INITIAL.
            GT_AFRU1-GMNGA GT_AFRU1-GMNGA * -.
            GT_AFRU1-ISM01 GT_AFRU1-ISM01 * -.
            GT_AFRU1-ISM02 GT_AFRU1-ISM02 * -.
            GT_AFRU1-ISM03 GT_AFRU1-ISM03 * -.
          ENDIF.

          GT_SU02-GMNGA GT_SU02-GMNGA + GT_AFRU1-GMNGA .

          IF GT_AFRU1-ILE01 'S'.
            GT_AFRU1-ISM01 GT_AFRU1-ISM01 / 3600 .
          ELSEIF GT_AFRU1-ILE01 'MIN'.
            GT_AFRU1-ISM01 GT_AFRU1-ISM01 / 60 .
          ENDIF.
          IF GT_AFRU1-ILE02 'S'.
            GT_AFRU1-ISM02 GT_AFRU1-ISM02 / 3600 .
          ELSEIF GT_AFRU1-ILE02 'MIN'.
            GT_AFRU1-ISM02 GT_AFRU1-ISM02 / 60 .
          ENDIF.
          IF GT_AFRU1-ILE03 'S'.
            GT_AFRU1-ISM03 GT_AFRU1-ISM03 / 3600 .
          ELSEIF GT_AFRU1-ILE03 'MIN'.
            GT_AFRU1-ISM03 GT_AFRU1-ISM03 / 60 .
          ENDIF.
          GT_SU02-ISM01 GT_SU02-ISM01 + GT_AFRU1-ISM01 .
          GT_SU02-ISM02 GT_SU02-ISM02 + GT_AFRU1-ISM02 .
          GT_SU02-ISM03 GT_SU02-ISM03 + GT_AFRU1-ISM03 .

          CLEAR GT_AFVV.
          READ TABLE GT_AFVV WITH KEY AUFPL GT_AFRU1-AUFPL APLZL GT_AFRU1-APLZL .

          IF GT_AFVV-BMSCH <> 0.
            GT_AFVV-VGW01 GT_AFVV-VGW01 .
            GT_AFVV-VGW02 GT_AFVV-VGW02 * GT_AFRU1-GMNGA / GT_AFVV-BMSCH .
            GT_AFVV-VGW03 GT_AFVV-VGW03 * GT_AFRU1-GMNGA / GT_AFVV-BMSCH .
          ENDIF.
          IF GT_AFVV-VGE01 'S'.
            GT_AFVV-VGW01 GT_AFVV-VGW01 / 3600 .
          ELSEIF GT_AFVV-VGE01 'MIN'.
            GT_AFVV-VGW01 GT_AFVV-VGW01 / 60 .
          ENDIF.
          IF GT_AFVV-VGE02 'S'.
            GT_AFVV-VGW02 GT_AFVV-VGW02 / 3600 .
          ELSEIF GT_AFVV-VGE02 'MIN'.
            GT_AFVV-VGW02 GT_AFVV-VGW02 / 60 .
          ENDIF.
          IF GT_AFVV-VGE03 'S'.
            GT_AFVV-VGW03 GT_AFVV-VGW03 / 3600 .
          ELSEIF GT_AFVV-VGE03 'MIN'.
            GT_AFVV-VGW03 GT_AFVV-VGW03 / 60 .
          ENDIF.
          GT_SU02-VGW01 GT_SU02-VGW01 + GT_AFVV-VGW01 .
          GT_SU02-VGW02 GT_SU02-VGW02 + GT_AFVV-VGW02 .
          GT_SU02-VGW03 GT_SU02-VGW03 + GT_AFVV-VGW03 .

          CLEAR GT_AFRU1 .
        ENDLOOP.

差异准备工时
        GT_SU02-ZXYZB GT_SU02-ISM01 GT_SU02-VGW01 .

差异机器工时
        GT_SU02-ZXYJQ GT_SU02-ISM02 GT_SU02-VGW02 .

差异人工工时
        GT_SU02-ZXYRG GT_SU02-ISM03 GT_SU02-VGW03 .

        MODIFY GT_SU02 .
        CLEAR GT_SU02 .
      ENDLOOP.

      APPEND LINES OF GT_SU02[] TO GT_SUB02A[] .

      CLEAR LS_STYLE .
      IF GT_DATA-WEMNG > GT_DATA-GMNGA.
        GT_DATA-CF2 '@0A@'.
        LS_STYLE-FIELDNAME 'CF2'.
        LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
        APPEND LS_STYLE TO LT_STYLE.
        GT_DATA-STYLE LT_STYLE.
      ELSE .
        GT_DATA-CF2 '@08@'.
      ENDIF.

*------------------------------------------------------------------------------
*      报工异常警示
*------------------------------------------------------------------------------

      MODIFY GT_DATA .
      CLEAR GT_DATA .
    ENDLOOP.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_STATUS_TABLE
*&---------------------------------------------------------------------*
FORM FILL_STATUS_TABLE TABLES   STATUS_TAB STRUCTURE STATUS_HDR_TAB
                       
USING    SYST1      LIKE TJ02T-TXT04
                                SYSH1      
LIKE JEST-STAT
                                EXCL1      
LIKE RCOSA-EXCL1
                                SYST2      
LIKE TJ02T-TXT04
                                SYSH2      
LIKE JEST-STAT
                                EXCL2      
LIKE RCOSA-EXCL1.
  DATA STATUS_TMP LIKE STATUS_HDR_TAB.

* Append status from selection screen to imported status table
  IF NOT SYSH1 IS INITIAL.
    STATUS_TMP-STAT SYSH1.
    STATUS_TMP-EXCL EXCL1.
    COLLECT STATUS_TMP INTO STATUS_TAB.
  ELSEIF NOT SYST1 IS INITIAL.
    CALL FUNCTION 'STATUS_TEXT_CONVERSION'
      EXPORTING
        LANGUAGE           SY-LANGU
        TXT04              
SYST1
      
IMPORTING
        STATUS_NUMBER      STATUS_TMP-STAT
      
EXCEPTIONS
        INSUFFICIENT_INPUT 1
        NOT_FOUND          2
        OBJECT_NOT_FOUND   3
        WRONG_MODE         4
        OTHERS             5.
    IF SY-SUBRC EQ 0.
      STATUS_TMP-EXCL EXCL1.
      COLLECT STATUS_TMP INTO STATUS_TAB.
    ENDIF.
  ENDIF.
  IF NOT SYSH2 IS INITIAL.
    STATUS_TMP-STAT SYSH2.
    STATUS_TMP-EXCL EXCL2.
    COLLECT STATUS_TMP INTO STATUS_TAB.
  ELSEIF NOT SYST2 IS INITIAL.
    CALL FUNCTION 'STATUS_TEXT_CONVERSION'
      EXPORTING
        LANGUAGE           SY-LANGU
        TXT04              
SYST2
      
IMPORTING
        STATUS_NUMBER      STATUS_TMP-STAT
      
EXCEPTIONS
        INSUFFICIENT_INPUT 1
        NOT_FOUND          2
        OBJECT_NOT_FOUND   3
        WRONG_MODE         4
        OTHERS             5.
    IF SY-SUBRC EQ 0.
      STATUS_TMP-EXCL EXCL2.
      COLLECT STATUS_TMP INTO STATUS_TAB.
    ENDIF.
  ENDIF.
ENDFORM.                               " FILL_STATUS_TABLE
*&---------------------------------------------------------------------*
*&      Form  REDUCE_AUFNR_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
FORM REDUCE_AUFNR_OBJNR_BY_STATUS
     
TABLES   STATUS_TAB STRUCTURE STATUS_HDR_TAB
     
USING    SELID      LIKE P_SELID
     
CHANGING CTS_OBJNR  TYPE TYP_TS_OBJNR.

* Statusobjekte
  DATA:
    OBJNR_TAB LIKE JSTO_PRE OCCURS WITH HEADER LINE.
  FIELD-SYMBOLS:
    <LS_OBJNR> TYPE TYP_S_OBJNR.

  CHECK NOT SELID        IS INITIAL
  OR    NOT STATUS_TAB[] IS INITIAL.
* preread
  LOOP AT CTS_OBJNR[] ASSIGNING <LS_OBJNR>.
    OBJNR_TAB-OBJNR <LS_OBJNR>-OBJNR.
    APPEND OBJNR_TAB.
  ENDLOOP.
  CALL FUNCTION 'STATUS_PRE_READ'
    TABLES
      JSTO_PRE_TAB OBJNR_TAB.

  DATA OBJECTS_DELETED.
  PERFORM REDUCE_OBJNR_BY_STATUS
          
TABLES   OBJNR_TAB
                   STATUS_TAB
          
USING    SELID
          
CHANGING OBJECTS_DELETED.

  IF OBJECTS_DELETED YX.
* Alle Aufträge entfernen, deren OBJNR nicht mehr in der Tabelle
* OBJNR_TAB enthalten ist.
    IF OBJNR_TAB[] IS INITIAL.
      REFRESH CTS_OBJNR[].
    ELSE.
      SORT OBJNR_TAB BY OBJNR.
      LOOP AT CTS_OBJNR[] ASSIGNING <LS_OBJNR>.
        READ TABLE OBJNR_TAB
             
WITH KEY OBJNR <LS_OBJNR>-OBJNR
             
BINARY SEARCH.
        IF SY-SUBRC <> 0.
          DELETE CTS_OBJNR[].
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.
ENDFORM.                               " REDUCE_AUFNR_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
*&      Form  REDUCE_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
FORM REDUCE_OBJNR_BY_STATUS
     
TABLES   OBJNR_TAB  STRUCTURE OBJNR_TAB
              STATUS_TAB 
STRUCTURE STATUS_HDR_TAB
     
USING    SELID      LIKE P_SELID
     
CHANGING OBJECTS_DELETED.
  DATA OBJNR_CNT LIKE SY-DBCNT.

  CLEAR OBJECTS_DELETED.
  CHECK NOT OBJNR_TAB[]  IS INITIAL.
  DESCRIBE TABLE OBJNR_TAB LINES OBJNR_CNT.
* Statusprüfung gegen Status in Statustabelle
  LOOP AT STATUS_TAB.
    IF OBJNR_TAB[] IS INITIAL.
      EXIT.
    ELSE.
* Alle Objektnummern, bei denen der geforderte Status (nicht) sitzt,
* werden aus der Tabelle OBJNR_TAB gelöscht.
      CALL FUNCTION 'STATUS_CHECK_MULTI'
        EXPORTING
          STATUS      STATUS_TAB-STAT
          FLG_EXCLUDE 
STATUS_TAB-EXCL
        
TABLES
          OBJECTS     OBJNR_TAB.
    ENDIF.
  ENDLOOP.
* Statusprüfung gegen das Selektionsschema
  IF NOT SELID IS INITIAL.
    LOOP AT OBJNR_TAB.
      DATA FLG_STATUS_OK TYPE C.       "Statusprüfung OK
      CALL FUNCTION 'STATUS_CHECK_BY_SELSCHEM'
        EXPORTING
          OBJNR          OBJNR_TAB-OBJNR
          SELID          
SELID
        
IMPORTING
          FULLFILL       FLG_STATUS_OK
        
EXCEPTIONS
          NO_STAT_SCHEME 01
          NO_STAT_TAB    02.
      IF  SY-SUBRC      IS INITIAL
      AND FLG_STATUS_OK IS INITIAL.
        DELETE OBJNR_TAB.
      ENDIF.
    ENDLOOP.
  ENDIF.

  DESCRIBE TABLE OBJNR_TAB LINES SY-DBCNT.
  IF SY-DBCNT <> OBJNR_CNT.
    OBJECTS_DELETED YX.
  ENDIF.

ENDFORM.                               " REDUCE_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-CWIDTH_OPT 'X'.
  S_LAYOUT-CTAB_FNAME 'CELLCOLOR'"单元格颜色内表字段
  S_LAYOUT-STYLEFNAME 'STYLE'.     "内部表字段的字段名称
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  W_EVENTS-NAME 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件
  W_EVENTS-FORM 'FM_BUTTON'.
  APPEND W_EVENTS TO I_EVENTS .

  CLEAR IS_VARIANT .
  IS_VARIANT-REPORT SY-REPID.
  IS_VARIANT-HANDLE '1'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_SAVE                   'A'
      IS_VARIANT               IS_VARIANT
      IS_LAYOUT_LVC            
S_LAYOUT
      IT_FIELDCAT_LVC          
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      IT_EVENTS                
I_EVENTS
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_DATA[].
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  fm_button
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->E_GRID     text
*----------------------------------------------------------------------*
FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.
*  DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.

*  IF ref_grid IS INITIAL.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF_GRID.
*  ENDIF.

** 设置回车事件
*  CALL METHOD ref_grid->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_enter
*    EXCEPTIONS
*      error      = 1
*      OTHERS     = 2.
设置光标焦点移开被修改单元格后触发事件
  CALL METHOD REF_GRID->REGISTER_EDIT_EVENT
    
EXPORTING
      I_EVENT_ID CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
    
EXCEPTIONS
      ERROR      1
      OTHERS     2.

*  CALL METHOD ref_grid->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_modified
*    EXCEPTIONS
*      error      = 1
*      OTHERS     = 2.

  CREATE OBJECT EVENT_RECEIVER.

  SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR REF_GRID.

  SET HANDLER EVENT_RECEIVER->HANDLE_BUTTON_CLICK FOR REF_GRID.

ENDFORM"fm_button

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE LINE OF LVC_T_FCAT.
  DEFINE FILL_FIELD.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-COLTEXT &2.

    IF WA_FIELDCAT-FIELDNAME =  'CKBOX' .
      WA_FIELDCAT-CHECKBOX 'X'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'PLNBEZ'
       OR WA_FIELDCAT-FIELDNAME 'MATNR'
       OR WA_FIELDCAT-FIELDNAME 'MATNR_S'
      .
      WA_FIELDCAT-REF_TABLE 'MARA'.
      WA_FIELDCAT-REF_FIELD 'MATNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'ARKTX' OR WA_FIELDCAT-FIELDNAME 'WAKTX' .
      WA_FIELDCAT-REF_TABLE 'VBAP'.
      WA_FIELDCAT-REF_FIELD 'ARKTX'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'AUFNR' .
      WA_FIELDCAT-REF_TABLE 'AUFK'.
      WA_FIELDCAT-REF_FIELD 'AUFNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'BLDAT'
       OR WA_FIELDCAT-FIELDNAME 'BUDAT'
      .
      WA_FIELDCAT-REF_TABLE 'MATDOC'.
      WA_FIELDCAT-REF_FIELD 'BLDAT'.
*      WA_FIELDCAT-EDIT = 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME =  'MAKTX'
       OR WA_FIELDCAT-FIELDNAME 'MAKTX_S'
       .
      WA_FIELDCAT-REF_TABLE 'MAKT'.
      WA_FIELDCAT-REF_FIELD 'MAKTX'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME 'ZDATUM'.
      WA_FIELDCAT-OUTPUTLEN '15'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'CF1'
     OR WA_FIELDCAT-FIELDNAME 'CF2'.
      WA_FIELDCAT-ICON 'X'.
    ENDIF.

    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    CLEAR WA_FIELDCAT.
  END-OF-DEFINITION.
  FILL_FIELD :
    'PWERK'    '工厂',
    'AUFNR'    '工单号码',
    'MATNR'    '产品料号',
    'MAKTX'    '物料名称',
    'DISPO'    'MRP控制员',
    'FEVOR'    '生产管理员',
    'GSTRP'    '基本开始日期',
    'GLTRP'    '基本完成日期',
    'PSMNG'    '计划数量',
    'GMNGA'    '报工数量',
    'WEMNG'    '收货数量',
    'MEINS'    '单位',
    'LTRMI'    '收货日期',
    'STTXT'    '工单状态',
    'CF1'      '发料异常警示',
    'CF2'      '报工异常警示',
    'DATUM_JY' '建议月结日期',
    'DATUM_SJ' '实际月结日期',
    'ZBEZU'    '原因分析'.
ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.
  DATANEXTNO TYPE CHAR10.
  DATAZRSPOS TYPE ZTGDTL-ZRSPOS .

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN 'ALL'.
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_REF_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_REF_ALV .
  DATA LS_STBL TYPE LVC_S_STBL.
  IF REF_GRID IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        E_GRID REF_GRID.
  ENDIF.
  LS_STBL-ROW ABAP_TRUE.
  LS_STBL-COL ABAP_TRUE.
*  CALL METHOD ref_grid->check_changed_data.
  CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LS_STBL.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  val_req_status
*&---------------------------------------------------------------------*
*       F4-Help to select system status by text, providing also code
*----------------------------------------------------------------------*
*      -->I_DYNPF    Name of dynpro field
*      -->C_TXT04    Status short text
*      -->C_STAT     Status code
*----------------------------------------------------------------------*
FORM VAL_REQ_STATUS USING    I_DYNPF
                    
CHANGING C_TXT04 LIKE TJ02T-TXT04
                             C_STAT  
LIKE JEST-STAT.

  TYPESBEGIN OF TY_VALUE,
           ISTAT TYPE J_ISTAT,
           TXT04 TYPE J_TXT04,
           TXT30 TYPE J_TXT30,
         END OF TY_VALUE.

  DATAL_VALUE   TYPE DYNFIELDVALUE,
        L_REPID   TYPE SY-REPID,
        LS_DYNP   TYPE DYNPREAD,
        LS_TJ02   TYPE TJ02,
        LS_VALUE  TYPE TJ02T,
        LS_RETURN TYPE DDSHRETVAL,
        LT_DYNP   TYPE STANDARD TABLE OF DYNPREAD,
        LT_TJ02   TYPE STANDARD TABLE OF TJ02,
        LT_VALUE  TYPE STANDARD TABLE OF TJ02T,
        LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL.

* personal value key
  DATAL_PVALKEY TYPE DDSHPVKEY.

* Get current value from screen
  LS_DYNP-FIELDNAME I_DYNPF.
  APPEND LS_DYNP TO LT_DYNP.
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      DYNAME     SY-REPID
      DYNUMB     
SY-DYNNR
    
TABLES
      DYNPFIELDS LT_DYNP
    
EXCEPTIONS
      OTHERS     0.
  READ TABLE LT_DYNP INTO LS_DYNP INDEX 1.

* Get all possible values
  SELECT FROM TJ02 INTO TABLE LT_TJ02
                     
WHERE NODIS SPACE.
  IF LT_TJ02 IS NOT INITIAL.
    SELECT FROM TJ02T INTO TABLE LT_VALUE
                      
FOR ALL ENTRIES IN LT_TJ02
                      
WHERE ISTAT LT_TJ02-ISTAT
                        
AND SPRAS SY-LANGU.
  ENDIF.
  IF LINESLT_TJ02 <> LINESLT_VALUE ).
*   Not all status available in current language, try in german
*   as in FORM value_state(saplcoss)
    LOOP AT LT_TJ02 INTO LS_TJ02.
      READ TABLE LT_VALUE INTO LS_VALUE WITH KEY ISTAT LS_TJ02-ISTAT.
      CHECK SY-SUBRC <> 0.
      SELECT SINGLE FROM TJ02T INTO LS_VALUE
                          
WHERE ISTAT LS_TJ02-ISTAT
                            
AND SPRAS 'D'.
      IF SY-SUBRC 0.
        APPEND LS_VALUE TO LT_VALUE.
      ENDIF.
    ENDLOOP.
  ENDIF.
  SORT LT_VALUE BY ISTAT.

* Call own F4-help, not showing internal status number
  L_VALUE LS_DYNP-FIELDVALUE.
  L_REPID 'PPIO_ENTRY'.
* fill key for personal value list
  L_PVALKEY SY-UNAME.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      DDIC_STRUCTURE   'TJ02T'
      RETFIELD         'TXT04'
      PVALKEY          L_PVALKEY
      
VALUE            L_VALUE
      VALUE_ORG        
'S'
      CALLBACK_PROGRAM L_REPID
      CALLBACK_FORM    
'VAL_REQ_STATUS_CALLBACK'
    TABLES
      VALUE_TAB        LT_VALUE
      RETURN_TAB       
LT_RETURN.

* Get selectect value and internal status number
  READ TABLE LT_RETURN INTO LS_RETURN WITH KEY FIELDNAME 'ISTAT'.
  IF SY-SUBRC 0.
    READ TABLE LT_VALUE WITH KEY ISTAT LS_RETURN-FIELDVAL
                        
INTO LS_VALUE.
    CHECK SY-SUBRC 0.
    C_TXT04 LS_VALUE-TXT04.
    C_STAT  LS_VALUE-ISTAT.
  ELSE.
    CLEARC_TXT04C_STAT.
  ENDIF.

ENDFORM.                    "val_req_status

*----------------------------------------------------------------------*
*   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----------------------------------------*
  DATAL_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 STRLENP_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_NAMETO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body
  ASSIGN (L_TABLE_NAMETO <TABLE>.                "not headerline

*&SPWIZARD: get looplines of TableControl                              *
  CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.
  ASSIGN (L_LINES_NAMETO <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> + .
    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_NAMETO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body
  ASSIGN (L_TABLE_NAMETO <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_NAMETO <TC>.
*&SPWIZARD: get looplines of TableControl                              *
  CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
  ASSIGN (L_TC_LINES_NAMETO <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_NAMETO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body
  ASSIGN (L_TABLE_NAMETO <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_NAMETO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body
  ASSIGN (L_TABLE_NAMETO <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
*&---------------------------------------------------------------------*
*& 包含               ZMMR118_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'PF_0100'.
  SET TITLEBAR  'TITLE_0100' WITH G_TITLE_0200.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TBC_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TBC_01_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE GT_SUB01 LINES TBC_01-lines.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TBC_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TBC_01_GET_LINES OUTPUT.
  G_TBC_01_LINES SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
  SET PF-STATUS 'PF_0100'.
  SET TITLEBAR  'TITLE_0200' WITH G_TITLE_0200.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TBC_02'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TBC_02_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE GT_SUB02 LINES TBC_02-lines.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TBC_02'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TBC_02_GET_LINES OUTPUT.
  G_TBC_02_LINES SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含               ZMMR118_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
  LEAVE TO SCREEN .
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  OK_SAVE SY-UCOMM .
  CLEAR SY-UCOMM .
  CLEAR OK_CODE .
  CASE  OK_SAVE.
    WHEN 'BACK'  .
      LEAVE TO SCREEN .
    WHEN OTHERS .
  ENDCASE .
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TC 'TBC_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TBC_01_USER_COMMAND INPUT.
  OK_CODE SY-UCOMM.
  PERFORM USER_OK_TC USING    'TBC_01'
                              'GT_SUB01'
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM OK_CODE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.
  OK_SAVE SY-UCOMM .
  CLEAR SY-UCOMM .
  CLEAR OK_CODE .
  CASE  OK_SAVE.
    WHEN 'BACK'  .
      LEAVE TO SCREEN .
    WHEN OTHERS .
  ENDCASE .
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TC 'TBC_02'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TBC_02_USER_COMMAND INPUT.
  OK_CODE SY-UCOMM.
  PERFORM USER_OK_TC USING    'TBC_02'
                              'GT_SUB02'
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM OK_CODE.
ENDMODULE.
AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
  PERFORM FOM_GETDATA .
  PERFORM FRM_DISPLAY.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值