SD-批量修改SO数量及交期(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZMMR118
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2020-07-06
*& Program Type        :  Report
*& Description         :  批量修改SO数量及交期
*&---------------------------------------------------------------------*
REPORT ZSDR016.

*&---------------------------------------------------------------------*
*& 包含               ZMMR118_TOP
*&---------------------------------------------------------------------*
TABLES:VBPA,VBAK,ZTGDTL.

TYPE-POOLS:SLIS,T001W,ICON.

DATALS_STYLE TYPE LVC_S_STYL,
      LT_STYLE TYPE TABLE OF LVC_S_STYL.

"定义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,
      LV_POSNR     TYPE VBAP-POSNR,
      G_INDEX      TYPE SY-INDEX.

DATA GOODSMVT_HEADER  LIKE BAPI2017_GM_HEAD_01 .
DATA GOODSMVT_CODE    LIKE BAPI2017_GM_CODE .
DATA GOODSMVT_HEADRET LIKE BAPI2017_GM_HEAD_RET .
DATA MATERIALDOCUMENT LIKE BAPI2017_GM_HEAD_RET-MAT_DOC .
DATA MATDOCUMENTYEAR  LIKE BAPI2017_GM_HEAD_RET-DOC_YEAR .
DATA GOODSMVT_ITEM    LIKE BAPI2017_GM_ITEM_CREATE OCCURS WITH HEADER LINE.
DATA RETURN           LIKE BAPIRET2 OCCURS WITH HEADER LINE.
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:FLAG1   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,
         CKBOX     TYPE  C,                               "选择列
         UPDATE    TYPE  C,                               "更新类型
         POSNR_CF  TYPE  VBAP-POSNR,                      "拆分项目号
         VBELN     TYPE  VBAK-VBELN,                      "销售单号
         AUDAT     TYPE  VBAK-AUDAT,                      "凭证日期
         AUART     TYPE  VBAK-AUART,                      "销售凭证类型
         VKORG     TYPE  VBAK-VKORG,                      "销售组织
         KUNNR     TYPE  VBAK-KUNNR,                      "售达方
         POSNR     TYPE  VBAP-POSNR,                      "项目号
         CF        TYPE  CHAR4,                           "拆分
         WERKS     TYPE  VBAP-WERKS,                      "工厂
         MATNR     TYPE  VBAP-MATNR,                      "物料编号
         MAKTX     TYPE  MAKT-MAKTX,                      "物料描述
         KWMENG    TYPE  VBAP-KWMENG,                     "数量
         VRKME     TYPE  VBAP-VRKME,                      "单位
         EDATU     TYPE  VBEP-EDATU,                      "交货日期
         ETENR     TYPE  VBEP-ETENR,                      "计划行
         ZDAT_YS   TYPE  VBAP-ZDAT_YS,                    "原始订单要求交期
         ZDAT_HF   TYPE  VBAP-ZDAT_HF,                    "回复客户交期
         ZDAT_KH   TYPE  VBAP-ZDAT_KH,                    "客户订单的到达日期

         MESSAGE   TYPE  BAPI_MSG,                        "报错信息
         CELLCOLOR TYPE  LVC_T_SCOL,                      "单元格颜色
         STYLE     TYPE  LVC_T_STYL,                      "控制不可编辑
       END OF GTS_DATA.

TYPESBEGIN OF GTS_ZAUFNR,
         ZAUFNR TYPE  ZTGDTL-ZAUFNR,                   "退料单号
         AUFNR  TYPE  AFKO-AUFNR,                      "工单
       END OF GTS_ZAUFNR.

TYPESBEGIN OF GTS_SUB,
         POSNR_CF TYPE  VBAP-POSNR,                      "拆分项目号
         KWMENG   TYPE  VBAP-KWMENG,                      "数量
         EDATU    TYPE  VBEP-EDATU,                      "交货日期
         ZDAT_YS  TYPE  VBAP-ZDAT_YS,                    "原始订单要求交期
         ZDAT_HF  TYPE  VBAP-ZDAT_HF,                    "回复客户交期
         ZDAT_KH  TYPE  VBAP-ZDAT_KH,                    "客户订单的到达日期
       END OF GTS_SUB.

DATAGT_SUB    TYPE TABLE OF GTS_SUB  WITH HEADER LINE.
DATAGT_ZAUFNR TYPE TABLE OF GTS_ZAUFNR  WITH HEADER LINE.
DATAGT_DATA   TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_SAVE   TYPE TABLE OF ZTGDTL   WITH HEADER LINE.
DATAJEST      TYPE TABLE OF JEST   WITH HEADER LINE.
DATAMESSAGE   TYPE  BAPI_MSG.                          "报错信息.
DATAGT_HEAD   TYPE TABLE OF ZTS_TLDATA_HEAD WITH HEADER LINE.
DATAGT_ITEM   TYPE TABLE OF ZTS_TLDATA_ITEM WITH HEADER LINE.

*&SPWIZARD: DECLARATION OF TABLECONTROL 'TAB_01' ITSELF
CONTROLSTAB_01 TYPE TABLEVIEW USING SCREEN 0100.
*&SPWIZARD: LINES OF TABLECONTROL 'TAB_01'
DATA:     G_TAB_01_LINES  LIKE SY-LOOPC.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONS S_KUNNR FOR VBPA-KUNNR MODIF ID MXY ."客户(售达方)
SELECT-OPTIONS S_AUDAT FOR VBAK-AUDAT MODIF ID MXZ ."凭证日期
SELECT-OPTIONS S_VBELN FOR VBAK-VBELN MODIF ID MXY ."销售单号
SELECT-OPTIONS S_VKORG FOR VBAK-VKORG MODIF ID MXY ."销售组织
SELECT-OPTIONS S_AUART FOR VBAK-AUART MODIF ID MXY ."订单类型
SELECTION-SCREEN END OF BLOCK B1.

INITIALIZATION.
  CLEAR S_AUDAT[].
  S_AUDAT-LOW SY-DATUM(6&& '01'.
  S_AUDAT-HIGH '99991231'.
  APPEND S_AUDAT.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN  .
    IF SCREEN-GROUP1 'MXZ'"
      SCREEN-INPUT '0'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
*&---------------------------------------------------------------------*
*& 包含               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.

  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.
    CLEARGT_SUB[],GT_SUB .
    CLEAR LV_POSNR.
    SELECT MAXPOSNR INTO LV_POSNR FROM VBAP
      
WHERE VBELN GT_DATA-VBELN
      
.

    GT_DATA_A[] GT_DATA[].
    DELETE GT_DATA_A[] WHERE VBELN <> GT_DATA-VBELN.
    SORT GT_DATA_A[] BY VBELN POSNR_CF DESCENDING.
    READ TABLE GT_DATA_A[] INTO GT_DATA_A INDEX 1.

    IF LV_POSNR < GT_DATA_A-POSNR_CF.
      LV_POSNR GT_DATA_A-POSNR_CF .
    ENDIF.

    GT_SUB-POSNR_CF LV_POSNR + 10.

    GT_SUB-KWMENG    GT_DATA-KWMENG.
    GT_SUB-EDATU    GT_DATA-EDATU.
    GT_SUB-ZDAT_YS  GT_DATA-ZDAT_YS.
    GT_SUB-ZDAT_HF  GT_DATA-ZDAT_HF.
    GT_SUB-ZDAT_KH  GT_DATA-ZDAT_KH.
    APPEND GT_SUB TO GT_SUB[].
    CLEARGT_SUB .
*    GT_SUB-MEINS     = GT_DATA-MEINS.
    DO 30 TIMES.
      APPEND GT_SUB TO GT_SUB[].
    ENDDO.
    LV_SUM GT_DATA-KWMENG .
    CALL SCREEN 0100 STARTING AT 50 3.
    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 .

  DATALS_STYLE TYPE LVC_S_STYL,
        LT_STYLE TYPE TABLE OF LVC_S_STYL.
  CLEAR GT_DATA[] .
  SELECT
  VBAK~VBELN
  VBAK
~AUDAT
  VBAK
~AUART
  VBAK
~VKORG
  VBAK
~KUNNR
  VBAP
~POSNR
  VBAP
~WERKS
  VBAP
~MATNR
  VBAP
~KWMENG
  VBAP
~ZIEME
  VBAP
~ZDAT_YS
  VBAP
~ZDAT_HF
  VBAP
~ZDAT_KH
  VBEP
~EDATU
  VBEP
~ETENR
  
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
  
FROM VBAP
  INNER 
JOIN VBEP ON VBAP~VBELN VBEP~VBELN AND VBAP~POSNR VBEP~POSNR
  INNER 
JOIN VBAK ON VBAP~VBELN VBAK~VBELN
  
WHERE VBAK~VBELN IN S_VBELN
    
AND VBAK~KUNNR IN S_KUNNR
    
AND VBAK~AUDAT IN S_AUDAT
    
AND VBAK~VKORG IN S_VKORG
    
AND VBAK~AUART IN S_AUART
      
.

  SORT GT_DATA[] BY VBELN POSNR ETENR.
  DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING VBELN POSNR.

  LOOP AT GT_DATA.
    SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
      
WHERE MATNR GT_DATA-MATNR
      
.

    CLEAR LT_STYLE[] .
    GT_DATA-UPDATE 'U'.
    GT_DATA-CF '@4N@'.
    CLEAR LT_STYLE[] .
    LS_STYLE-FIELDNAME 'CF'.
    LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
    APPEND LS_STYLE TO LT_STYLE.
    GT_DATA-STYLE LT_STYLE.

    LS_STYLE-FIELDNAME 'POSNR_CF'.
    LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
    APPEND LS_STYLE TO LT_STYLE.
    GT_DATA-STYLE LT_STYLE.
    MODIFY GT_DATA .

    MODIFY GT_DATA .
    CLEAR GT_DATA .
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
*  S_LAYOUT-COLWIDTH_OPTIMIZE = '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 'MATNR' .
      WA_FIELDCAT-REF_TABLE 'VBAP'.
      WA_FIELDCAT-REF_FIELD 'MATNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'KUNNR'
      .
      WA_FIELDCAT-REF_TABLE 'VBAK'.
      WA_FIELDCAT-REF_FIELD 'KUNNR'.
*      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 'CF'.
      WA_FIELDCAT-ICON 'X'.
      WA_FIELDCAT-OUTPUTLEN '13'.
    ENDIF.


    IF WA_FIELDCAT-FIELDNAME =  'KWMENG'
       .
      WA_FIELDCAT-REF_TABLE 'VBAP'.
      WA_FIELDCAT-REF_FIELD 'KWMENG'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME =  'KWMENG'
       OR WA_FIELDCAT-FIELDNAME 'EDATU'
       OR WA_FIELDCAT-FIELDNAME 'ZDAT_YS'
       OR WA_FIELDCAT-FIELDNAME 'ZDAT_HF'
       OR WA_FIELDCAT-FIELDNAME 'ZDAT_KH'
       OR WA_FIELDCAT-FIELDNAME 'POSNR_CF'
       .

      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF  WA_FIELDCAT-FIELDNAME 'EDATU'
       OR WA_FIELDCAT-FIELDNAME 'ZDAT_YS'
       OR WA_FIELDCAT-FIELDNAME 'ZDAT_HF'
       OR WA_FIELDCAT-FIELDNAME 'ZDAT_KH'
       OR WA_FIELDCAT-FIELDNAME 'AUDAT'
       .
      WA_FIELDCAT-REF_TABLE 'VBAK'.
      WA_FIELDCAT-REF_FIELD 'AUDAT'.
      WA_FIELDCAT-F4AVAILABL 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'MESSAGE'.
      WA_FIELDCAT-OUTPUTLEN '80'.
    ENDIF.

    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    CLEAR WA_FIELDCAT.
  END-OF-DEFINITION.
  FILL_FIELD :
    'CKBOX'    '选择列',
    'POSNR_CF' '拆分行号',
    'UPDATE'   '更新类型',
    'VBELN'    '销售单号',
    'AUDAT'    '凭证日期',
    'AUART'    '销售凭证类型',
    'VKORG'    '销售组织',
    'KUNNR'    '售达方',
    'POSNR'    '项目号',
*    'ETENR'    '计划行',
    'CF'       '项目拆分',
    'MATNR'    '物料编号',
    'MAKTX'    '物料描述',
    'KWMENG'    '数量',
    'ZIEME'    '单位',
    'EDATU'    '交货日期',
    'ZDAT_YS'  '原始订单要求交期',
    'ZDAT_HF'  '回复客户交期',
    'ZDAT_KH'  '客户订单的到达日期',
    'MESSAGE'  '消息'.

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.
  DATA:   REF TYPE REF TO CL_GUI_ALV_GRID.
  DATA :  LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATAL_BUKRS   TYPE T001K-BUKRS.
  DATANEXTNO    TYPE CHAR10.
  DATAZRSPOS    TYPE ZTGDTL-ZRSPOS .
  DATALV_OBJNR  TYPE JEST-OBJNR.
  DATASTTXT     TYPE STTXT.
  DATAGT_JSTO   TYPE TABLE OF JSTO  WITH HEADER LINE.
  DATAGT_JEST   TYPE TABLE OF JEST  WITH HEADER LINE.
  DATAGT_TJ30   TYPE TABLE OF TJ30  WITH HEADER LINE.
  DATAGT_TJ30T  TYPE TABLE OF TJ30T WITH HEADER LINE.
  DATAFLAG      TYPE C.

  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'.
      LOOP AT GT_DATA.
        GT_DATA-CKBOX 'X'.
        MODIFY GT_DATA.
        CLEAR GT_DATA.
      ENDLOOP.
    WHEN 'SAL'.
      LOOP AT GT_DATA.
        CLEAR GT_DATA-CKBOX .
        MODIFY GT_DATA.
        CLEAR GT_DATA.
      ENDLOOP.
    WHEN 'ZSAVE'.
      PERFORM FOM_CHANGE .
    WHEN 'PRINT'.

  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SPLIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_SPLIT .
  DATALV_SUM01 TYPE MSEG-MENGE.
  DATAFLAG01 TYPE C.
  DATAFLAG02 TYPE C.

  CLEAR LV_SUM01 .
  CLEAR FLAG01 .
  CLEAR FLAG02 .
  LOOP AT GT_SUB WHERE POSNR_CF IS NOT INITIAL .
    LV_SUM01 LV_SUM01 + GT_SUB-KWMENG .
    IF GT_SUB-POSNR_CF IS INITIAL.
      FLAG01 'X'.
    ENDIF.
    IF GT_SUB-EDATU IS INITIAL.
      FLAG02 'X'.
    ENDIF.
    CLEAR GT_SUB .
  ENDLOOP.

  IF LV_SUM01 > LV_SUM.
    MESSAGE '累计的拆分数量不可大于项目总量!'TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF FLAG01 IS NOT INITIAL .
    MESSAGE '拆分项目号不可为空!'TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF FLAG02 IS NOT INITIAL .
    MESSAGE '交货日期不可为空!'TYPE 'S' DISPLAY LIKE 'E'.
  ELSE .

    DATA(L_INDEX) = G_INDEX.
    LOOP AT GT_SUB WHERE POSNR_CF IS NOT INITIAL.
      GT_DATA-POSNR_CF GT_SUB-POSNR_CF.
      GT_DATA-KWMENG   GT_SUB-KWMENG.
      GT_DATA-EDATU    GT_SUB-EDATU.
      GT_DATA-ZDAT_YS  GT_SUB-ZDAT_YS.
      GT_DATA-ZDAT_HF  GT_SUB-ZDAT_HF.
      GT_DATA-ZDAT_KH  GT_SUB-ZDAT_KH.
      GT_DATA-UPDATE   'I'.

      CLEAR GT_DATA-STYLE .
      CLEAR GT_DATA-CF .
*      LOOP AT GT_DATA-STYLE INTO LS_STYLE WHERE FIELDNAME = 'POSNR_CF'..
*        DELETE GT_DATA-STYLE FROM LS_STYLE .
*        CLEAR LS_STYLE.
*      ENDLOOP.

*      IF L_INDEX = G_INDEX.
*        MODIFY GT_DATA INDEX L_INDEX.
*      ELSE.
      INSERT GT_DATA INDEX L_INDEX.
*      ENDIF.
      L_INDEX L_INDEX + 1.
    ENDLOOP.
    LEAVE TO SCREEN 0.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_CHANGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_CHANGE .

  DATALV_VBAP TYPE VBAP.

  DATASALESDOCUMENT    LIKE  BAPIVBELN-VBELN,
        ORDER_HEADER_IN  LIKE  BAPISDH1,
        ORDER_HEADER_INX LIKE  BAPISDH1X,
        ORDER_ITEM_IN    LIKE  BAPISDITM  OCCURS WITH HEADER LINE,
        ORDER_ITEM_INX   LIKE  BAPISDITMX OCCURS WITH HEADER LINE,
        RETURN1          LIKE  BAPIRET2   OCCURS WITH HEADER LINE,
        CONDITIONS_IN    LIKE  BAPICOND   OCCURS WITH HEADER LINE,
        CONDITIONS_INX   LIKE  BAPICONDX   OCCURS WITH HEADER LINE,
        SCHEDULE_LINES   LIKE  BAPISCHDL  OCCURS WITH HEADER LINE,
        SCHEDULE_LINESX  LIKE  BAPISCHDLX OCCURS WITH HEADER LINE.

  LOOP AT GT_DATA WHERE CKBOX IS NOT INITIAL.

    CLEAR:ORDER_HEADER_INX,ORDER_ITEM_IN,ORDER_ITEM_INX,SCHEDULE_LINES,SCHEDULE_LINESX,CONDITIONS_IN,CONDITIONS_INX,LV_VBAP,
          ORDER_ITEM_IN[],ORDER_ITEM_INX[],SCHEDULE_LINES[],SCHEDULE_LINESX[],RETURN1[],CONDITIONS_IN[],CONDITIONS_INX[].

    IF GT_DATA-UPDATE 'U'.

      ORDER_HEADER_INX-UPDATEFLAG 'U'.

      ORDER_ITEM_IN-ITM_NUMBER     =  GT_DATA-POSNR.
      APPEND ORDER_ITEM_IN.

      ORDER_ITEM_INX-ITM_NUMBER    =   GT_DATA-POSNR.
      ORDER_ITEM_INX-UPDATEFLAG    =   'U'.
      APPEND ORDER_ITEM_INX.

      SCHEDULE_LINES-ITM_NUMBER GT_DATA-POSNR.
      SCHEDULE_LINES-SCHED_LINE GT_DATA-ETENR.
      SCHEDULE_LINES-REQ_QTY    GT_DATA-KWMENG"4.  "数量
      SCHEDULE_LINES-REQ_DATE   GT_DATA-EDATU"4.  "交期
      APPEND SCHEDULE_LINES.

      SCHEDULE_LINESX-ITM_NUMBER GT_DATA-POSNR.
      SCHEDULE_LINESX-SCHED_LINE GT_DATA-ETENR.
      SCHEDULE_LINESX-UPDATEFLAG 'U'.
      SCHEDULE_LINESX-REQ_QTY    'X'.
      SCHEDULE_LINESX-REQ_DATE   'X'.
      APPEND SCHEDULE_LINESX.

      LV_VBAP-VBELN GT_DATA-VBELN .
      LV_VBAP-POSNR GT_DATA-POSNR .

    ELSEIF GT_DATA-UPDATE 'I'.

      ORDER_HEADER_INX-UPDATEFLAG 'U'.

      ORDER_ITEM_IN-ITM_NUMBER     GT_DATA-POSNR_CF.
      ORDER_ITEM_IN-MATERIAL_LONG  GT_DATA-MATNR.
      ORDER_ITEM_IN-PLANT          GT_DATA-WERKS.
      APPEND ORDER_ITEM_IN.

      ORDER_ITEM_INX-ITM_NUMBER    GT_DATA-POSNR_CF.
      ORDER_ITEM_INX-UPDATEFLAG    'I'.
      ORDER_ITEM_INX-MATERIAL_LONG 'X'.
      ORDER_ITEM_INX-PLANT         'X'.
      APPEND ORDER_ITEM_INX.

      SCHEDULE_LINES-ITM_NUMBER GT_DATA-POSNR_CF.
      SCHEDULE_LINES-SCHED_LINE 1.
      SCHEDULE_LINES-REQ_QTY    GT_DATA-KWMENG"4.  "数量
      SCHEDULE_LINES-REQ_DATE   GT_DATA-EDATU"4.  "交期
      APPEND SCHEDULE_LINES.

      SCHEDULE_LINESX-ITM_NUMBER GT_DATA-POSNR_CF.
      SCHEDULE_LINESX-SCHED_LINE 1.
      SCHEDULE_LINESX-UPDATEFLAG 'I'.
      SCHEDULE_LINESX-REQ_QTY    'X'.
      SCHEDULE_LINESX-REQ_DATE   'X'.
      APPEND SCHEDULE_LINESX.

      CONDITIONS_IN-ITM_NUMBER GT_DATA-POSNR_CF.  "itm_number
      CONDITIONS_IN-COND_UNIT  GT_DATA-VRKME.  "条件单位
      APPEND CONDITIONS_IN.

      CONDITIONS_INX-ITM_NUMBER GT_DATA-POSNR_CF.
      CONDITIONS_INX-UPDATEFLAG 'U'.
      CONDITIONS_INX-COND_UNIT 'X'.
      APPEND CONDITIONS_INX.

      LV_VBAP-VBELN GT_DATA-VBELN .
      LV_VBAP-POSNR GT_DATA-POSNR_CF .

    ENDIF.

    CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
      EXPORTING
        SALESDOCUMENT    GT_DATA-VBELN
        ORDER_HEADER_INX 
ORDER_HEADER_INX
      
TABLES
        RETURN           RETURN1
        ORDER_ITEM_IN    
ORDER_ITEM_IN
        ORDER_ITEM_INX   
ORDER_ITEM_INX
        SCHEDULE_LINES   
SCHEDULE_LINES
        SCHEDULE_LINESX  
SCHEDULE_LINESX
        CONDITIONS_IN    
CONDITIONS_IN
        CONDITIONS_INX   
CONDITIONS_INX.
    LOOP AT RETURN1 WHERE TYPE 'E' OR TYPE 'I' .
      GT_DATA-MESSAGE GT_DATA-MESSAGE && RETURN1-MESSAGE .
    ENDLOOP.

    IF SY-SUBRC '0'.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT 'X'.
      GT_DATA-MESSAGE '修改成功!'.
    ENDIF.

    UPDATE VBAP SET ZDAT_YS GT_DATA-ZDAT_YS                  "增强字段修改
                    ZDAT_HF GT_DATA-ZDAT_HF
                    ZDAT_KH 
GT_DATA-ZDAT_KH
                
WHERE VBELN LV_VBAP-VBELN
                  
AND POSNR LV_VBAP-POSNR
                  
.

    MODIFY GT_DATA TRANSPORTING MESSAGE.
    CLEAR GT_DATA.
  ENDLOOP.
  IF SY-SUBRC <> 0.
    MESSAGE '请选择条目!'TYPE 'S' DISPLAY LIKE 'W'.
  ENDIF.
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.

*----------------------------------------------------------------------*
*   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 'TAB_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TAB_01_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE GT_SUB LINES TAB_01-lines.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TAB_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TAB_01_GET_LINES OUTPUT.
  G_TAB_01_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 '&OK'.
      PERFORM FRM_SPLIT.
    WHEN OTHERS .
  ENDCASE .
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TC 'TAB_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE TAB_01_MODIFY INPUT.
  MODIFY GT_SUB
    
FROM GT_SUB
    
INDEX TAB_01-CURRENT_LINE.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TC 'TAB_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TAB_01_USER_COMMAND INPUT.
  OK_CODE SY-UCOMM.
  PERFORM USER_OK_TC USING    'TAB_01'
                              'GT_SUB'
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM OK_CODE.
ENDMODULE.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值