青葱岁月程序收藏

来源:互联网 发布:中汇亿达 知乎 编辑:程序博客网 时间:2024/04/27 18:34

REPORT  ZZBPP_SCTZ_MJ.


TABLES: ZZTPP_ZSTZ_HEAD,
        ZZTPP_ZSTZ_BODY1,
        ZZTPP_ZSTZ_BODY2,
        ZZTPP_ZSTZ_BODY3,
        ZZTPP_ZSTZ_BODY4,
        ZZTPP_ZSTZ_BODY5,
        SSCRFIELDS.
*define listbox pools
TYPE-POOLS: VRM.
DATA: NAME TYPE VRM_ID,
      IT_KC TYPE VRM_VALUES,
      VALUE LIKE LINE OF IT_KC.
DATA: WB_PGEDITOR_INITIAL_SCREEN
              TYPE REF TO CL_WB_PGEDITOR_INITIAL_SCREEN.
TYPES:
    BEGIN OF GY_MKPF,
      MBLNR  TYPE MKPF-MBLNR,
      MJAHR  TYPE MKPF-MJAHR,
      BKTXT  TYPE MKPF-BKTXT,
   END OF GY_MKPF,


   BEGIN OF GY_BZW,
      MATNR  TYPE MSEG-MATNR, "成品代码
      CHARG  TYPE MSEG-CHARG, "批号
      LGORT  TYPE MSEG-LGORT,"库存地点
      AUFNR  TYPE MSEG-AUFNR, "产品订单号
      MENGE  TYPE MSEG-MENGE,"数量
      MBLNR  TYPE MSEG-MBLNR,
      ZEILE  TYPE MSEG-ZEILE,
      MJAHR  TYPE MSEG-MJAHR,
      BWART  TYPE MSEG-BWART,
      SHKZG TYPE MSEG-SHKZG,"借方/贷方标识
    END OF GY_BZW,


     BEGIN OF GY_MSEG,
      MATNR  TYPE MSEG-MATNR, "成品代码
      CHARG  TYPE MSEG-CHARG, "批号
      LGORT  TYPE MSEG-LGORT,"库存地点
      MENGE  TYPE MSEG-MENGE,"数量
      AUFNR  TYPE MSEG-AUFNR, "产品订单号
      MBLNR  TYPE MSEG-MBLNR,
      ZEILE  TYPE MSEG-ZEILE,
      MJAHR  TYPE MSEG-MJAHR,
      BWART  TYPE MSEG-BWART,
      SHKZG TYPE MSEG-SHKZG,"借方/贷方标识
    END OF GY_MSEG.


*    BEGIN OF GY_MSEG,
*      MBLNR  TYPE MSEG-MBLNR,
*      ZEILE  TYPE MSEG-ZEILE,
*      MJAHR  TYPE MSEG-MJAHR,
*      BWART  TYPE MSEG-BWART,
*      MATNR  TYPE MSEG-MATNR, "成品代码
*      CHARG  TYPE MSEG-CHARG, "批号
*      LGORT  TYPE MSEG-LGORT,"库存地点
*      MENGE  TYPE MSEG-MENGE,"数量
*      AUFNR  TYPE MSEG-AUFNR, "产品订单号
*    END OF GY_MSEG.


*定义返工品分配到成本Tab里的比较结构 不同订单
TYPES:BEGIN OF TY_FGDDH,
         FGDDH TYPE ZZTPP_ZSTZ_BODY2-FGDDH,
         LGORT TYPE ZZTPP_ZSTZ_BODY2-LGORT,                 "2014-01-27
         ZL TYPE ZZTPP_ZSTZ_BODY2-ZL,
     END OF TY_FGDDH.
DATA: GW_FGDDH TYPE TY_FGDDH,
      GT_FGDDH TYPE TABLE OF TY_FGDDH.


*定义返工品分配到成本Tab里的比较结构 相同订单
TYPES:BEGIN OF TY_XTDD, "返工品原订单号=返工到订单号时, 成品产量中扣除相应数额
      YDDH  TYPE ZZTPP_ZSTZ_BODY2-YDDH,
      FGDDH TYPE ZZTPP_ZSTZ_BODY2-FGDDH,
      LGORT TYPE ZZTPP_ZSTZ_BODY2-LGORT,                    "2014-01-27
      ZL    TYPE ZZTPP_ZSTZ_BODY2-ZL,
      END OF TY_XTDD.
DATA: GW_XTDD  TYPE TY_XTDD,
      GT_XTDD  TYPE TABLE OF TY_XTDD.


TYPES:BEGIN OF TY_GZ,
      GZ TYPE CHAR01,
      END OF TY_GZ.
DATA: GT_GZ TYPE TABLE OF TY_GZ,
      GW_GZ TYPE TY_GZ.


DATA:
 GT_MKPF  TYPE STANDARD TABLE OF GY_MKPF,
 GT_MSEG  TYPE STANDARD TABLE OF GY_MSEG,
 GT_ZJ_MSEG TYPE STANDARD TABLE OF GY_MSEG,
 GT_BDC TYPE STANDARD TABLE OF BDCDATA,
 GT_TEXT TYPE STANDARD TABLE OF CHAR16,
 GS_TEXT TYPE CHAR16,
 G_STR   TYPE CHAR200,
* 白班 / 夜班 下拉框
 I_LIST TYPE VRM_VALUES,
 G_MYCONTAINER(30) TYPE C.      " string for the containers


DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.
CONSTANTS :
*白班
          C_BB(20) TYPE C VALUE '白班',
*夜班
          C_YB(20) TYPE C VALUE '夜班'.


DATA:
   GV_TITLE    TYPE CHAR40,
   GV_TXT_QA   TYPE CHAR40,
   GV_TXT_BN1  TYPE CHAR4,
   GV_TXT_BN2  TYPE CHAR4,
   GV_ANSWER   TYPE CHAR01,
   GT_HEAD     TYPE TABLE OF ZZTPP_ZSTZ_HEAD,
   GT_BODY1    TYPE TABLE OF ZZTPP_ZSTZ_BODY1,
   GW_BODY1    TYPE ZZTPP_ZSTZ_BODY1,
   GT_BODY2    TYPE TABLE OF ZZTPP_ZSTZ_BODY2,
   GW_BODY2    TYPE ZZTPP_ZSTZ_BODY2,
   GT_BODY3    TYPE TABLE OF ZZTPP_ZSTZ_BODY3,
   GW_HUIZONG  TYPE ZZTPP_ZSTZ_BODY3,
   GT_HUIZONG  TYPE TABLE OF ZZTPP_ZSTZ_BODY3,
   GT_TAB3     TYPE TABLE OF ZZTPP_ZSTZ_BODY3,
   GW_BODY3    TYPE ZZTPP_ZSTZ_BODY3,
   GT_BODY4    TYPE TABLE OF ZZTPP_ZSTZ_BODY4,
   GW_BODY5    TYPE ZZTPP_ZSTZ_BODY5,
   GT_BODY5    TYPE TABLE OF ZZTPP_ZSTZ_BODY5.
DATA: GW_MAKTX  TYPE MAKTX.
DATA: GW_AUFNR  TYPE AUFNR.
DATA: GW_CHARG  TYPE CHARG_D.
DATA: GW_BODY1_SUM TYPE ZZTPP_ZSTZ_BODY1-ZL,
      GW_BODY3_SUM TYPE ZZTPP_ZSTZ_BODY3-YLCCHJ,
      GW_BODY4_SUM TYPE ZZTPP_ZSTZ_BODY4-YLZL.
DATA: GW_CPCLSUM   TYPE ZZTPP_ZSTZ_BODY3-CPCL."计算总产量
DATA: GT_BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE,
      GT_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
TYPES:BEGIN OF TY_MESSAGE,
      MESSAGE(500) TYPE C,
      END OF TY_MESSAGE.
DATA: GT_MESSAGE TYPE TABLE OF TY_MESSAGE,
      GW_MESSAGE TYPE TY_MESSAGE.
DATA: G_SUCCESS(1)  TYPE C.
DATA: GW_CSS_MESSAGE(200).


DATA: PB_CLOSE_OPEN(1),"录入部分是否隐藏的判断
      PB_CLOSE_OPEN1(1),
      PB_CLOSE_OPEN2(1),
      PB_CLOSE_OPEN3(1),
      PB_CLOSE_OPEN4(1).
INCLUDE <ICON>.
**** Data declarations
DATA:
DTAB TYPE REF TO DATA,
NEWSTR2 TYPE REF TO CL_ABAP_TYPEDESCR,
TAB_TYPE1 TYPE REF TO CL_ABAP_TABLEDESCR,
LREF_DITAB TYPE REF TO DATA,
LREF_NEW_LINE TYPE REF TO DATA.
CONSTANTS C_LASI TYPE CHAR04 VALUE 'φ6.5'.


**** Field-Symbols declarations
FIELD-SYMBOLS:
<FS_DYN_TAB1> TYPE ANY TABLE,
<FS_DYN_TAB2> TYPE ANY TABLE,
<FS_DYN_TAB3> TYPE ANY TABLE,
<FS_DYN_TAB4> TYPE ANY TABLE,
<FS_DYN_TAB5> TYPE ANY TABLE,
<FS_DYN_WA> TYPE ANY.
**** Field Catalog declarations
DATA:
LS_FCAT1 TYPE LVC_S_FCAT,
LT_FCAT1 TYPE LVC_T_FCAT,
LS_FCAT2 TYPE LVC_S_FCAT,
LT_FCAT2 TYPE LVC_T_FCAT,
LS_FCAT3 TYPE LVC_S_FCAT,
LT_FCAT3 TYPE LVC_T_FCAT,
LS_FCAT4 TYPE LVC_S_FCAT,
LT_FCAT4 TYPE LVC_T_FCAT,
LS_FCAT5 TYPE LVC_S_FCAT,
LT_FCAT5 TYPE LVC_T_FCAT.
DATA: LS_LAYO TYPE LVC_S_LAYO.
**** Data declarations for ALV Display *
**** Object variable for ALV grid
DATA:
OBJ_MY_ALV_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
OBJ_MY_ALV_GRID2 TYPE REF TO CL_GUI_ALV_GRID,
OBJ_MY_ALV_GRID3 TYPE REF TO CL_GUI_ALV_GRID,
OBJ_MY_ALV_GRID4 TYPE REF TO CL_GUI_ALV_GRID,
OBJ_MY_ALV_GRID5 TYPE REF TO CL_GUI_ALV_GRID.
**** Object variable for ALV Container
DATA:
OBJ_R_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
OBJ_R_CONTAINER2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
OBJ_R_CONTAINER3 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
OBJ_R_CONTAINER4 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
OBJ_R_CONTAINER5 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
*---------------------------------------------------------------
*       CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------
CLASS LCL_EVENT_RECEIVER DEFINITION."定义双击事件
  PUBLIC SECTION.
    METHODS CATCH_DOUBLECLICK1
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW
                E_COLUMN
                ES_ROW_NO .


    METHODS CATCH_DOUBLECLICK2
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW
                E_COLUMN
                ES_ROW_NO .


    METHODS CATCH_DOUBLECLICK4
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW
                E_COLUMN
                ES_ROW_NO .


    METHODS CATCH_DOUBLECLICK5
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW
                E_COLUMN
                ES_ROW_NO .
ENDCLASS.                    "lcl_event_receiver DEFINITION
*---------------------------------------------------------------
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION."事件的执行调用相应的处理过程
  METHOD CATCH_DOUBLECLICK1."双击原料alv容器
    PERFORM ATDOUBLECLICK1 USING E_ROW
                                E_COLUMN
                                ES_ROW_NO.
  ENDMETHOD.                    "catch_doubleclick1
  METHOD CATCH_DOUBLECLICK2."双击返工品alv容器
    PERFORM ATDOUBLECLICK2 USING E_ROW
                                E_COLUMN
                                ES_ROW_NO.
  ENDMETHOD.                    "catch_doubleclick2
  METHOD CATCH_DOUBLECLICK4."双击余料alv容器
    PERFORM ATDOUBLECLICK4 USING E_ROW
                                E_COLUMN
                                ES_ROW_NO.
  ENDMETHOD.                    "catch_doubleclick4
  METHOD CATCH_DOUBLECLICK5."双击余料alv容器
    PERFORM ATDOUBLECLICK5 USING E_ROW
                                E_COLUMN
                                ES_ROW_NO.
  ENDMETHOD.                    "catch_doubleclick5
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
DATA: EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.


START-OF-SELECTION.
  IF PB_CLOSE_OPEN IS INITIAL.
    PB_CLOSE_OPEN = 'Y'.
  ENDIF.
  IF PB_CLOSE_OPEN1 IS INITIAL.
    PB_CLOSE_OPEN1 = 'Y'.
  ENDIF.
  IF PB_CLOSE_OPEN2 IS INITIAL.
    PB_CLOSE_OPEN2 = 'Y'.
  ENDIF.
  IF PB_CLOSE_OPEN3 IS INITIAL.
    PB_CLOSE_OPEN3 = 'Y'.
  ENDIF.
  IF PB_CLOSE_OPEN4 IS INITIAL.
    PB_CLOSE_OPEN4 = 'Y'.
  ENDIF.


  GV_TXT_BN1 = '是'.
  GV_TXT_BN2 = '否'.
* Create Field Catalog
  PERFORM CREATE_FIELD_CATALOG.
* Create Dynamic Table
  PERFORM CREATE_DYNAMIC_TABLE1.
  PERFORM CREATE_DYNAMIC_TABLE2.
  PERFORM CREATE_DYNAMIC_TABLE3.
  PERFORM CREATE_DYNAMIC_TABLE4.
  PERFORM CREATE_DYNAMIC_TABLE5.
* Fill the dynamic tables with data
  PERFORM FILL_DYNAMIC_TABLE.
* Call the screen no.100
  PERFORM CALL_SCREEN.


*&---------------------------------------------------------------------*
*& Form CREATE_FIELD_CATALOG
*&---------------------------------------------------------------------*
FORM CREATE_FIELD_CATALOG .
* Append fields to field catalog table
                                                            "body1
  REFRESH LT_FCAT1.
  LS_FCAT1-FIELDNAME = 'YLDM'.
  LS_FCAT1-REF_FIELD = 'YLDM'.
  LS_FCAT1-OUTPUTLEN = '11'.
  LS_FCAT1-REF_TABLE = 'ZZTPP_ZSTZ_BODY1'.
  APPEND LS_FCAT1 TO LT_FCAT1.
  CLEAR LS_FCAT1.
  LS_FCAT1-FIELDNAME = 'YLMS'.
  LS_FCAT1-REF_FIELD = 'YLMS'.
  LS_FCAT1-OUTPUTLEN = '22'.
  LS_FCAT1-REF_TABLE = 'ZZTPP_ZSTZ_BODY1'.
  APPEND LS_FCAT1 TO LT_FCAT1.
  CLEAR LS_FCAT1.
  LS_FCAT1-FIELDNAME = 'YLPH'.
  LS_FCAT1-REF_FIELD = 'YLPH'.
  LS_FCAT1-OUTPUTLEN = '10'.
  LS_FCAT1-REF_TABLE = 'ZZTPP_ZSTZ_BODY1'.
  APPEND LS_FCAT1 TO LT_FCAT1.
  CLEAR LS_FCAT1.
  LS_FCAT1-FIELDNAME = 'LGORT'.
  LS_FCAT1-REF_FIELD = 'LGORT'.
  LS_FCAT1-OUTPUTLEN = '4'.
  LS_FCAT1-REF_TABLE = 'ZZTPP_ZSTZ_BODY1'.
  APPEND LS_FCAT1 TO LT_FCAT1.
  CLEAR LS_FCAT1.
  LS_FCAT1-FIELDNAME = 'ZL'.
  LS_FCAT1-REF_FIELD = 'ZL'.
  LS_FCAT1-OUTPUTLEN = '10'.
  LS_FCAT1-DO_SUM    = 'X'.
  LS_FCAT1-REF_TABLE = 'ZZTPP_ZSTZ_BODY1'.
  APPEND LS_FCAT1 TO LT_FCAT1.
  CLEAR LS_FCAT1.
  LS_FCAT1-FIELDNAME = 'ROWCOLOR'.
  LS_FCAT1-REF_FIELD = 'ROWCOLOR'.
  LS_FCAT1-OUTPUTLEN = '4'.
  LS_FCAT1-REF_TABLE = 'ZZTPP_ZSTZ_BODY1'.
  APPEND LS_FCAT1 TO LT_FCAT1.
  CLEAR LS_FCAT1.
  LS_FCAT1-FIELDNAME = 'MBLNR'.
  LS_FCAT1-REF_FIELD = 'MBLNR'.
  LS_FCAT1-OUTPUTLEN = '10'.
  LS_FCAT1-REF_TABLE = 'ZZTPP_ZSTZ_BODY1'.
  APPEND LS_FCAT1 TO LT_FCAT1.
                                                            "body2
  REFRESH LT_FCAT2.
  LS_FCAT2-FIELDNAME = 'FGPDM'.
  LS_FCAT2-REF_FIELD = 'FGPDM'.
  LS_FCAT2-OUTPUTLEN = '11'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'FGPMS'.
  LS_FCAT2-REF_FIELD = 'FGPMS'.
  LS_FCAT2-OUTPUTLEN = '22'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'FGOPH'.
  LS_FCAT2-REF_FIELD = 'FGOPH'.
  LS_FCAT2-OUTPUTLEN = '12'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'YDDH'.
  LS_FCAT2-REF_FIELD = 'YDDH'.
  LS_FCAT2-OUTPUTLEN = '12'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'FGDDH'.
  LS_FCAT2-REF_FIELD = 'FGDDH'.
  LS_FCAT2-OUTPUTLEN = '12'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'LGORT'.
  LS_FCAT2-REF_FIELD = 'LGORT'.
  LS_FCAT2-OUTPUTLEN = '4'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'ZL'.
  LS_FCAT2-REF_FIELD = 'ZL'.
  LS_FCAT2-OUTPUTLEN = '8'.
  LS_FCAT2-DO_SUM    = 'X'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'ROWCOLOR'.
  LS_FCAT2-REF_FIELD = 'ROWCOLOR'.
  LS_FCAT2-OUTPUTLEN = '4'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
  CLEAR LS_FCAT2.
  LS_FCAT2-FIELDNAME = 'MBLNR'.
  LS_FCAT2-REF_FIELD = 'MBLNR'.
  LS_FCAT2-OUTPUTLEN = '10'.
  LS_FCAT2-REF_TABLE = 'ZZTPP_ZSTZ_BODY2'.
  APPEND LS_FCAT2 TO LT_FCAT2.
                                                            "BODY3
  REFRESH LT_FCAT3.
  LS_FCAT3-FIELDNAME = 'MATNR'.
  LS_FCAT3-REF_FIELD = 'MATNR'.
  LS_FCAT3-OUTPUTLEN = '11'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'MAKTX'.
  LS_FCAT3-REF_FIELD = 'MAKTX'.
  LS_FCAT3-OUTPUTLEN = '14'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'CPDDH'.
  LS_FCAT3-REF_FIELD = 'CPDDH'.
  LS_FCAT3-OUTPUTLEN = '12'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'LGORT'.
  LS_FCAT3-REF_FIELD = 'LGORT'.
  LS_FCAT3-OUTPUTLEN = '4'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'HGPZL'.
  LS_FCAT3-REF_FIELD = 'HGPZL'.
  LS_FCAT3-OUTPUTLEN = '10'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'BHGPZL'.
  LS_FCAT3-REF_FIELD = 'BHGPZL'.
  LS_FCAT3-OUTPUTLEN = '12'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'DJYPZL'.
  LS_FCAT3-REF_FIELD = 'DJYPZL'.
  LS_FCAT3-OUTPUTLEN = '10'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'CPCCHEJ'.
  LS_FCAT3-REF_FIELD = 'CPCCHEJ'.
  LS_FCAT3-OUTPUTLEN = '12'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'FGP'.
  LS_FCAT3-REF_FIELD = 'FGP'.
  LS_FCAT3-OUTPUTLEN = '10'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'YLCCHJ'.
  LS_FCAT3-REF_FIELD = 'YLCCHJ'.
  LS_FCAT3-OUTPUTLEN = '12'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'CPCL'.
  LS_FCAT3-REF_FIELD = 'CPCL'.
  LS_FCAT3-OUTPUTLEN = '10'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'YLFT'.
  LS_FCAT3-REF_FIELD = 'YLFT'.
  LS_FCAT3-OUTPUTLEN = '12'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'BXFX'.
  LS_FCAT3-REF_FIELD = 'BXFX'.
  LS_FCAT3-OUTPUTLEN = '12'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'JQFT'.
  LS_FCAT3-REF_FIELD = 'JQFT'.
  LS_FCAT3-OUTPUTLEN = '8'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'RGFT'.
  LS_FCAT3-REF_FIELD = 'RGFT'.
  LS_FCAT3-OUTPUTLEN = '8'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
  CLEAR LS_FCAT3.
  LS_FCAT3-FIELDNAME = 'YDFT'.
  LS_FCAT3-REF_FIELD = 'YDFT'.
  LS_FCAT3-OUTPUTLEN = '8'.
  LS_FCAT3-DO_SUM    = 'X'.
  LS_FCAT3-REF_TABLE = 'ZZTPP_ZSTZ_BODY3'.
  APPEND LS_FCAT3 TO LT_FCAT3.
                                                            "BODY4
  REFRESH LT_FCAT4.
  LS_FCAT4-FIELDNAME = 'YLDM'.
  LS_FCAT4-REF_FIELD = 'YLDM'.
  LS_FCAT4-OUTPUTLEN = '12'.
  LS_FCAT4-REF_TABLE = 'ZZTPP_ZSTZ_BODY4'.
  APPEND LS_FCAT4 TO LT_FCAT4.
  CLEAR LS_FCAT4.
  LS_FCAT4-FIELDNAME = 'YLMS'.
  LS_FCAT4-REF_FIELD = 'YLMS'.
  LS_FCAT4-OUTPUTLEN = '26'.
  LS_FCAT4-REF_TABLE = 'ZZTPP_ZSTZ_BODY4'.
  APPEND LS_FCAT4 TO LT_FCAT4.
  CLEAR LS_FCAT4.
  LS_FCAT4-FIELDNAME = 'YLPH'.
  LS_FCAT4-REF_FIELD = 'YLPH'.
  LS_FCAT4-OUTPUTLEN = '10'.
  LS_FCAT4-REF_TABLE = 'ZZTPP_ZSTZ_BODY4'.
  APPEND LS_FCAT4 TO LT_FCAT4.
  CLEAR LS_FCAT4.
  LS_FCAT4-FIELDNAME = 'LGORT'.
  LS_FCAT4-REF_FIELD = 'LGORT'.
  LS_FCAT4-OUTPUTLEN = '4'.
  LS_FCAT4-REF_TABLE = 'ZZTPP_ZSTZ_BODY4'.
  APPEND LS_FCAT4 TO LT_FCAT4.
  CLEAR LS_FCAT4.
  LS_FCAT4-FIELDNAME = 'YLZL'.
  LS_FCAT4-REF_FIELD = 'YLZL'.
  LS_FCAT4-OUTPUTLEN = '10'.
  LS_FCAT4-DO_SUM    = 'X'.
  LS_FCAT4-REF_TABLE = 'ZZTPP_ZSTZ_BODY4'.
  APPEND LS_FCAT4 TO LT_FCAT4.
  CLEAR LS_FCAT4.
  LS_FCAT4-FIELDNAME = 'ROWCOLOR'.
  LS_FCAT4-REF_FIELD = 'ROWCOLOR'.
  LS_FCAT4-OUTPUTLEN = '4'.
  LS_FCAT4-REF_TABLE = 'ZZTPP_ZSTZ_BODY4'.
  APPEND LS_FCAT4 TO LT_FCAT4.
  CLEAR LS_FCAT4.
  LS_FCAT4-FIELDNAME = 'MBLNR'.
  LS_FCAT4-REF_FIELD = 'MBLNR'.
  LS_FCAT4-OUTPUTLEN = '10'.
  LS_FCAT4-REF_TABLE = 'ZZTPP_ZSTZ_BODY4'.
  APPEND LS_FCAT4 TO LT_FCAT4.
                                                            "BODY5
  REFRESH LT_FCAT5.
  LS_FCAT5-FIELDNAME = 'BZWLH'.
  LS_FCAT5-REF_FIELD = 'BZWLH'.
  LS_FCAT5-OUTPUTLEN = '11'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
  CLEAR LS_FCAT5.
  LS_FCAT5-FIELDNAME = 'MAKTX'.
  LS_FCAT5-REF_FIELD = 'MAKTX'.
  LS_FCAT5-OUTPUTLEN = '28'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
  CLEAR LS_FCAT5.
  LS_FCAT5-FIELDNAME = 'BZWPH'.
  LS_FCAT5-REF_FIELD = 'BZWPH'.
  LS_FCAT5-OUTPUTLEN = '10'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
  CLEAR LS_FCAT5.
  LS_FCAT5-FIELDNAME = 'LGORT'.
  LS_FCAT5-REF_FIELD = 'LGORT'.
  LS_FCAT5-OUTPUTLEN = '4'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
  CLEAR LS_FCAT5.
  LS_FCAT5-FIELDNAME = 'BZWSL'.
  LS_FCAT5-REF_FIELD = 'BZWSL'.
  LS_FCAT5-OUTPUTLEN = '10'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
  CLEAR LS_FCAT5.
  LS_FCAT5-FIELDNAME = 'SCDDH'.
  LS_FCAT5-REF_FIELD = 'SCDDH'.
  LS_FCAT5-OUTPUTLEN = '12'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
  CLEAR LS_FCAT5.
  LS_FCAT5-FIELDNAME = 'MBLNR'.
  LS_FCAT5-REF_FIELD = 'MBLNR'.
  LS_FCAT5-OUTPUTLEN = '10'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
  CLEAR LS_FCAT5.
  LS_FCAT5-FIELDNAME = 'ROWCOLOR'.
  LS_FCAT5-REF_FIELD = 'ROWCOLOR'.
  LS_FCAT5-OUTPUTLEN = '4'.
  LS_FCAT5-REF_TABLE = 'ZZTPP_ZSTZ_BODY5'.
  APPEND LS_FCAT5 TO LT_FCAT5.
ENDFORM. " CREATE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& Form CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
FORM CREATE_DYNAMIC_TABLE1 .
** Create dynamic table1
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG           = LT_FCAT1
    IMPORTING
      EP_TABLE                  = LREF_DITAB
    EXCEPTIONS
      GENERATE_SUBPOOL_DIR_FULL = 1
      OTHERS                    = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
** Assign the dynamic table reference to a field-symbol
  ASSIGN LREF_DITAB->* TO <FS_DYN_TAB1>.
** Create a structure similar to the dynamic table created
  CREATE DATA LREF_NEW_LINE LIKE LINE OF <FS_DYN_TAB1>.
  ASSIGN LREF_NEW_LINE->* TO <FS_DYN_WA>.
ENDFORM. " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*& Form CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
FORM CREATE_DYNAMIC_TABLE2 .
** Create dynamic table2
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG           = LT_FCAT2
    IMPORTING
      EP_TABLE                  = LREF_DITAB
    EXCEPTIONS
      GENERATE_SUBPOOL_DIR_FULL = 1
      OTHERS                    = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
** Assign the dynamic table reference to a field-symbol
  ASSIGN LREF_DITAB->* TO <FS_DYN_TAB2>.
** Create a structure similar to the dynamic table created
  CREATE DATA LREF_NEW_LINE LIKE LINE OF <FS_DYN_TAB2>.
  ASSIGN LREF_NEW_LINE->* TO <FS_DYN_WA>.
ENDFORM. " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*&      Form  create_dynamic_table3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CREATE_DYNAMIC_TABLE3 .
** Create dynamic table3
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG           = LT_FCAT3
    IMPORTING
      EP_TABLE                  = LREF_DITAB
    EXCEPTIONS
      GENERATE_SUBPOOL_DIR_FULL = 1
      OTHERS                    = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
** Assign the dynamic table reference to a field-symbol
  ASSIGN LREF_DITAB->* TO <FS_DYN_TAB3>.
** Create a structure similar to the dynamic table created
  CREATE DATA LREF_NEW_LINE LIKE LINE OF <FS_DYN_TAB3>.
  ASSIGN LREF_NEW_LINE->* TO <FS_DYN_WA>.
ENDFORM. " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*&      Form  create_dynamic_table4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CREATE_DYNAMIC_TABLE4 .
** Create dynamic table4
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG           = LT_FCAT4
    IMPORTING
      EP_TABLE                  = LREF_DITAB
    EXCEPTIONS
      GENERATE_SUBPOOL_DIR_FULL = 1
      OTHERS                    = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
** Assign the dynamic table reference to a field-symbol
  ASSIGN LREF_DITAB->* TO <FS_DYN_TAB4>.
** Create a structure similar to the dynamic table created
  CREATE DATA LREF_NEW_LINE LIKE LINE OF <FS_DYN_TAB4>.
  ASSIGN LREF_NEW_LINE->* TO <FS_DYN_WA>.
ENDFORM. " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*&      Form  create_dynamic_table5
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CREATE_DYNAMIC_TABLE5 .
** Create dynamic table4
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG           = LT_FCAT5
    IMPORTING
      EP_TABLE                  = LREF_DITAB
    EXCEPTIONS
      GENERATE_SUBPOOL_DIR_FULL = 1
      OTHERS                    = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
** Assign the dynamic table reference to a field-symbol
  ASSIGN LREF_DITAB->* TO <FS_DYN_TAB5>.
** Create a structure similar to the dynamic table created
  CREATE DATA LREF_NEW_LINE LIKE LINE OF <FS_DYN_TAB5>.
  ASSIGN LREF_NEW_LINE->* TO <FS_DYN_WA>.
ENDFORM. " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*& Form FILL_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
FORM FILL_DYNAMIC_TABLE.
** Fill the dynamic table <fs_dyn_tab1>
  SELECT YLDM YLMS YLPH LGORT ZL ROWCOLOR MBLNR
    FROM ZZTPP_ZSTZ_BODY1 INTO TABLE <FS_DYN_TAB1>
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


** Fill the dynamic table <fs_dyn_tab2>
  SELECT FGPDM FGPMS FGOPH YDDH FGDDH LGORT ZL ROWCOLOR MBLNR
  FROM ZZTPP_ZSTZ_BODY2 INTO TABLE <FS_DYN_TAB2>
  WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


** Fill the dynamic table <fs_dyn_tab3>
  SELECT MATNR MAKTX CPDDH LGORT HGPZL BHGPZL DJYPZL
         CPCCHEJ FGP YLCCHJ CPCL YLFT BXFX JQFT RGFT YDFT
  FROM ZZTPP_ZSTZ_BODY3 INTO TABLE <FS_DYN_TAB3>
  WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


** Fill the dynamic table <fs_dyn_tab4>
  SELECT YLDM YLMS YLPH LGORT YLZL ROWCOLOR MBLNR
  FROM ZZTPP_ZSTZ_BODY4 INTO TABLE <FS_DYN_TAB4>
  WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


** Fill the dynamic table <fs_dyn_tab5>
  SELECT  BZWLH MAKTX BZWPH LGORT BZWSL SCDDH MBLNR ROWCOLOR
  FROM ZZTPP_ZSTZ_BODY5 INTO TABLE <FS_DYN_TAB5>
  WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
ENDFORM. " FILL_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*& Form CALL_SCREEN
*&---------------------------------------------------------------------*
FORM CALL_SCREEN .
  CALL SCREEN 0010.
ENDFORM. " CALL_SCREEN
*&---------------------------------------------------------------------*
*&      Module  STATUS_0010  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0010 OUTPUT.
  DATA LV_DAT TYPE D.


  DATA:
        LV_NAME TYPE STRING ,
        LV_NAME_FIRST LIKE ADRP-NAME_FIRST ,
        LV_NAME_LAST LIKE ADRP-NAME_LAST.


  SELECT SINGLE ADRP~NAME_FIRST ADRP~NAME_LAST
    INTO (LV_NAME_FIRST,LV_NAME_LAST)
    FROM ADRP
    INNER JOIN USR21
    ON ADRP~PERSNUMBER = USR21~PERSNUMBER
    WHERE USR21~BNAME = SY-UNAME .
  IF SY-SUBRC = 0 .
    CONCATENATE LV_NAME_LAST LV_NAME_FIRST INTO LV_NAME .
  ELSE .
    LV_NAME = SY-UNAME .
  ENDIF.
  CLEAR: LV_NAME_FIRST,
         LV_NAME_LAST .


  SET PF-STATUS '0010' EXCLUDING 'BZWLR'.
  SET TITLEBAR 'TITLE0010' WITH LV_NAME.


*白班夜班下拉框
  PERFORM FRM_SET_BBORYB.


  DATA: LS_ST_BUDAT TYPE SY-DATUM.
  SELECT SINGLE BUDAT INTO LS_ST_BUDAT
    FROM ZZTPP_ZSTZ_HEAD
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
     AND GZ = 'Y'.
  IF SY-SUBRC = 0.
    ZZTPP_ZSTZ_HEAD-BUDAT = LS_ST_BUDAT.
*  ELSE.
*    ZZTPP_ZSTZ_HEAD-BUDAT = SY-DATUM.
  ENDIF.
*******Change at + 20120612
  IF ZZTPP_ZSTZ_HEAD-BUDAT IS INITIAL.
*    ZZTPP_ZSTZ_HEAD-BUDAT = SY-DATUM.
    CLEAR : LV_DAT.
    IF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 8.
      CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+2(6) INTO LV_DAT.
    ELSEIF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 10.
      CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+4(6) INTO LV_DAT.
    ENDIF.
    ZZTPP_ZSTZ_HEAD-BUDAT = LV_DAT.
  ENDIF.


  IF ZZTPP_ZSTZ_HEAD-GZ = 'Y'. "如果工时已过帐,总工时栏位只读不能写入
    LOOP AT SCREEN.
      IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BZWZS' .
        SCREEN-INPUT = '0' .
        MODIFY SCREEN.
      ELSEIF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-GZ' .
        SCREEN-INPUT = '0' .
        MODIFY SCREEN.
      ELSEIF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-SBQSJS' .
        SCREEN-INPUT = '0' .
        MODIFY SCREEN.
      ELSEIF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-SBZZJS' .
        SCREEN-INPUT = '0' .
        MODIFY SCREEN.
      ELSEIF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
        SCREEN-INPUT = '0' .
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
*set default storage
  IF ZZTPP_ZSTZ_BODY1-LGORT IS INITIAL.
    ZZTPP_ZSTZ_BODY1-LGORT = 'L001'.
  ENDIF.
  IF ZZTPP_ZSTZ_BODY2-LGORT IS INITIAL.
    ZZTPP_ZSTZ_BODY2-LGORT = 'L001'.
  ENDIF.
  IF ZZTPP_ZSTZ_BODY4-LGORT IS INITIAL.
    ZZTPP_ZSTZ_BODY4-LGORT = 'L001'.
  ENDIF.
  IF ZZTPP_ZSTZ_BODY5-LGORT IS INITIAL.
    ZZTPP_ZSTZ_BODY5-LGORT = 'L001'.
  ENDIF.
*modify screen according predefined screen group
  LOOP AT SCREEN.
    CASE SCREEN-GROUP1.
      WHEN 'GP'.
        IF PB_CLOSE_OPEN = 'Y'.
          SCREEN-ACTIVE = '0'.
        ELSEIF PB_CLOSE_OPEN = 'N'.
          SCREEN-ACTIVE = '1'.
        ENDIF.
        MODIFY SCREEN.
        CASE SCREEN-GROUP2.
          WHEN 'GP1'.
            IF PB_CLOSE_OPEN1 = 'Y'.
              SCREEN-ACTIVE = '0'.
            ELSEIF PB_CLOSE_OPEN1 = 'N'.
              SCREEN-ACTIVE = '1'.
            ENDIF.
            MODIFY SCREEN.
          WHEN 'GP2'.
            IF PB_CLOSE_OPEN2 = 'Y'.
              SCREEN-ACTIVE = '0'.
            ELSEIF PB_CLOSE_OPEN2 = 'N'.
              SCREEN-ACTIVE = '1'.
            ENDIF.
            MODIFY SCREEN.
          WHEN 'GP3'.
            IF PB_CLOSE_OPEN3 = 'Y'.
              SCREEN-ACTIVE = '0'.
            ELSEIF PB_CLOSE_OPEN3 = 'N'.
              SCREEN-ACTIVE = '1'.
            ENDIF.
            MODIFY SCREEN.
          WHEN 'GP4'.
            IF PB_CLOSE_OPEN4 = 'Y'.
              SCREEN-ACTIVE = '0'.
            ELSEIF PB_CLOSE_OPEN4 = 'N'.
              SCREEN-ACTIVE = '1'.
            ENDIF.
            MODIFY SCREEN.
        ENDCASE.
    ENDCASE.
  ENDLOOP.
  LS_LAYO-INFO_FNAME = 'ROWCOLOR'.
  IF OBJ_MY_ALV_GRID1 IS INITIAL.
* Object for container1
    CREATE OBJECT OBJ_R_CONTAINER1
      EXPORTING
        CONTAINER_NAME              = 'YCLC'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5
        OTHERS                      = 6.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
* Object for Alv grid1
    CREATE OBJECT OBJ_MY_ALV_GRID1
      EXPORTING
        I_PARENT          = OBJ_R_CONTAINER1
      EXCEPTIONS
        ERROR_CNTL_CREATE = 1
        ERROR_CNTL_INIT   = 2
        ERROR_CNTL_LINK   = 3
        ERROR_DP_CREATE   = 4
        OTHERS            = 5.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CREATE OBJECT EVENT_RECEIVER.
    SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK1 FOR OBJ_MY_ALV_GRID1."向ALV创建双击事件
* Calling method for displaying the data
    CALL METHOD OBJ_MY_ALV_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        IS_LAYOUT                     = LS_LAYO
      CHANGING
        IT_OUTTAB                     = <FS_DYN_TAB1>
        IT_FIELDCATALOG               = LT_FCAT1
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
*&---------------------------------------------------------------------*
* ALV Display-2nd table
*----------------------------------------------------------------------*
* Object for conatainer2
  IF  OBJ_MY_ALV_GRID2 IS INITIAL.
    CREATE OBJECT OBJ_R_CONTAINER2
      EXPORTING
        CONTAINER_NAME              = 'FGPC'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5
        OTHERS                      = 6.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
* Object for Alv grid2
    CREATE OBJECT OBJ_MY_ALV_GRID2
      EXPORTING
        I_PARENT          = OBJ_R_CONTAINER2
      EXCEPTIONS
        ERROR_CNTL_CREATE = 1
        ERROR_CNTL_INIT   = 2
        ERROR_CNTL_LINK   = 3
        ERROR_DP_CREATE   = 4
        OTHERS            = 5.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CREATE OBJECT EVENT_RECEIVER.
    SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK2 FOR OBJ_MY_ALV_GRID2."向ALV创建双击事件
* Calling method for displaying the data
    CALL METHOD OBJ_MY_ALV_GRID2->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        IS_LAYOUT                     = LS_LAYO
      CHANGING
        IT_OUTTAB                     = <FS_DYN_TAB2>
        IT_FIELDCATALOG               = LT_FCAT2
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
  IF OBJ_MY_ALV_GRID3 IS INITIAL.
* Object for container3
    CREATE OBJECT OBJ_R_CONTAINER3
      EXPORTING
        CONTAINER_NAME              = 'ALVCONTAINER'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5
        OTHERS                      = 6.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
* Object for Alv grid3
    CREATE OBJECT OBJ_MY_ALV_GRID3
      EXPORTING
        I_PARENT          = OBJ_R_CONTAINER3
      EXCEPTIONS
        ERROR_CNTL_CREATE = 1
        ERROR_CNTL_INIT   = 2
        ERROR_CNTL_LINK   = 3
        ERROR_DP_CREATE   = 4
        OTHERS            = 5.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
* Calling method for displaying the data
    CALL METHOD OBJ_MY_ALV_GRID3->SET_TABLE_FOR_FIRST_DISPLAY
      CHANGING
        IT_OUTTAB                     = <FS_DYN_TAB3>
        IT_FIELDCATALOG               = LT_FCAT3
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
*&---------------------------------------------------------------------*
* ALV Display-2nd table
*----------------------------------------------------------------------*
* Object for conatainer4
  IF OBJ_MY_ALV_GRID4 IS INITIAL.
    CREATE OBJECT OBJ_R_CONTAINER4
      EXPORTING
        CONTAINER_NAME              = 'YLC'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5
        OTHERS                      = 6.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
* Object for Alv grid4
    CREATE OBJECT OBJ_MY_ALV_GRID4
      EXPORTING
        I_PARENT          = OBJ_R_CONTAINER4
      EXCEPTIONS
        ERROR_CNTL_CREATE = 1
        ERROR_CNTL_INIT   = 2
        ERROR_CNTL_LINK   = 3
        ERROR_DP_CREATE   = 4
        OTHERS            = 5.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CREATE OBJECT EVENT_RECEIVER.
    SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK4 FOR OBJ_MY_ALV_GRID4."向ALV创建双击事件
* Calling method for displaying the data
    CALL METHOD OBJ_MY_ALV_GRID4->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        IS_LAYOUT                     = LS_LAYO
      CHANGING
        IT_OUTTAB                     = <FS_DYN_TAB4>
        IT_FIELDCATALOG               = LT_FCAT4
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
*&---------------------------------------------------------------------*
* ALV Display-2nd table
*----------------------------------------------------------------------*
* Object for conatainer5
  IF OBJ_MY_ALV_GRID5 IS INITIAL.
    CREATE OBJECT OBJ_R_CONTAINER5
      EXPORTING
        CONTAINER_NAME              = 'BZWC'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5
        OTHERS                      = 6.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
* Object for Alv grid4
    CREATE OBJECT OBJ_MY_ALV_GRID5
      EXPORTING
        I_PARENT          = OBJ_R_CONTAINER5
      EXCEPTIONS
        ERROR_CNTL_CREATE = 1
        ERROR_CNTL_INIT   = 2
        ERROR_CNTL_LINK   = 3
        ERROR_DP_CREATE   = 4
        OTHERS            = 5.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CREATE OBJECT EVENT_RECEIVER.
    SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK5 FOR OBJ_MY_ALV_GRID5."向ALV创建双击事件
* Calling method for displaying the data
    CALL METHOD OBJ_MY_ALV_GRID5->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        IS_LAYOUT                     = LS_LAYO
      CHANGING
        IT_OUTTAB                     = <FS_DYN_TAB5>
        IT_FIELDCATALOG               = LT_FCAT5
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.


*set value for listbox
  IF ZZTPP_ZSTZ_HEAD-BTBHA IS NOT INITIAL.
    PERFORM SET_LISTVALUE.
  ENDIF.
ENDMODULE.                 " STATUS_0010  OUTPUT






*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0010  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0010 INPUT.
  DATA:VAL,
       PRIPAR LIKE PRI_PARAMS,
       ARCPAR LIKE ARC_PARAMS.
  SAVE_OK = OK_CODE.
  CLEAR:OK_CODE.
  CLEAR GV_ANSWER.
  CASE SAVE_OK.
    WHEN 'UPDATE'.
      TRANSLATE ZZTPP_ZSTZ_HEAD-BTBHA TO UPPER CASE.
      PERFORM UPDATE_DATA."更新数据
    WHEN 'SEARCH'.
      TRANSLATE ZZTPP_ZSTZ_HEAD-BTBHA TO UPPER CASE.
      PERFORM SEARCH_DATA."查询数据
    WHEN 'REFRESH'.
      PERFORM FRM_CLEAR_SCREEN.
*    WHEN 'BZWLR'.
*      PERFORM callco11n."依生产订单调用co11n
    WHEN 'OFFSET'."冲销报工
      PERFORM FRM_WRITE_OFF.
    WHEN 'SAVEH'.
      PERFORM HEAD_TRANSLATE_TO_UPPER_CASE.
      PERFORM SAVEH_DATA. "保存头数据
    WHEN 'SAVE1'. "保存原料录入数据
      PERFORM BODY1_TRANSLATE_TO_UPPER_CASE.
      PERFORM SAVE1_DATA.
    WHEN 'SAVE2'."保存返工品录入数据
      PERFORM BODY2_TRANSLATE_TO_UPPER_CASE.
      PERFORM SAVE2_DATA.
    WHEN 'SAVE3'."保存余料录入数据
      PERFORM BODY4_TRANSLATE_TO_UPPER_CASE.
      PERFORM SAVE3_DATA.
    WHEN 'SAVE4'. "保存包装物录入数据
      PERFORM BODY5_TRANSLATE_TO_UPPER_CASE.
      PERFORM SAVE4_DATA.
    WHEN 'DEL1'. "删除原料数据
      PERFORM BODY1_TRANSLATE_TO_UPPER_CASE.
      PERFORM DEL1_DATA.
    WHEN 'DEL2'. "删除返工品数据
      PERFORM BODY2_TRANSLATE_TO_UPPER_CASE.
      PERFORM DEL2_DATA.
    WHEN 'DEL3'. "删除余料数据
      PERFORM BODY4_TRANSLATE_TO_UPPER_CASE.
      PERFORM DEL3_DATA.
    WHEN 'DEL4'. "删除包装物数据
      PERFORM BODY5_TRANSLATE_TO_UPPER_CASE.
      PERFORM DEL4_DATA.
    WHEN 'POSTH'.
      PERFORM POSTH_DATA."过账工时数据
    WHEN 'POST1'.
      PERFORM POST1_DATA."过账原料数据
    WHEN 'POST2'.
      PERFORM POST2_DATA."过账返工品数据
    WHEN 'POST3'.
      PERFORM POST3_DATA."过账余料数据
    WHEN 'POST4'.
      PERFORM POST4_DATA."过账包装物数据
    WHEN 'PB_OC'."折叠录入部分
      IF PB_CLOSE_OPEN = 'Y'.
        PB_CLOSE_OPEN = 'N'.
      ELSEIF PB_CLOSE_OPEN = 'N'.
        PB_CLOSE_OPEN = 'Y'.
      ENDIF.
    WHEN 'PB_OC1'."折叠原料录入部分
      IF PB_CLOSE_OPEN1 = 'Y'.
        PB_CLOSE_OPEN1 = 'N'.
      ELSEIF PB_CLOSE_OPEN1 = 'N'.
        PB_CLOSE_OPEN1 = 'Y'.
      ENDIF.
    WHEN 'PB_OC2'."折叠返工品录入部分
      IF PB_CLOSE_OPEN2 = 'Y'.
        PB_CLOSE_OPEN2 = 'N'.
      ELSEIF PB_CLOSE_OPEN2 = 'N'.
        PB_CLOSE_OPEN2 = 'Y'.
      ENDIF.
    WHEN 'PB_OC3'."折叠余料录入部分
      IF PB_CLOSE_OPEN3 = 'Y'.
        PB_CLOSE_OPEN3 = 'N'.
      ELSEIF PB_CLOSE_OPEN3 = 'N'.
        PB_CLOSE_OPEN3 = 'Y'.
      ENDIF.
    WHEN 'PB_OC4'."折叠包装物录入部分
      IF PB_CLOSE_OPEN4 = 'Y'.
        PB_CLOSE_OPEN4 = 'N'.
      ELSEIF PB_CLOSE_OPEN4 = 'N'.
        PB_CLOSE_OPEN4 = 'Y'.
      ENDIF.
    WHEN '&RNT'.
*      CALL FUNCTION 'GET_PRINT_PARAMETERS'
*        EXPORTING
*          LAYOUT                 = 'X_58_170'
*          LINE_COUNT             = '58'
*          LINE_SIZE              = '170'
*        IMPORTING
*          OUT_PARAMETERS         = PRIPAR
*          OUT_ARCHIVE_PARAMETERS = ARCPAR
*          VALID                  = VAL
*        EXCEPTIONS
*          ARCHIVE_INFO_NOT_FOUND = 1
*          INVALID_PRINT_PARAMS   = 2
*          INVALID_ARCHIVE_PARAMS = 3
*          OTHERS                 = 4.
*      IF VAL <> SPACE AND SY-SUBRC = 0.
*        SUBMIT ZZBPP_SCTZ_MJ TO SAP-SPOOL
*        ARCHIVE PARAMETERS ARCPAR
*        WITHOUT SPOOL DYNPRO.
*      ENDIF.
      "      NEW-PAGE PRINT ON PARAMETERS pripar.


*打印功能
      PERFORM FRM_PRINT_INFO.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0010  INPUT
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*    退出界面
*----------------------------------------------------------------------*
MODULE EXIT INPUT.


  IF OK_CODE = 'SCKQ'.
    CALL TRANSACTION 'ZPP120'.
  ELSEIF OK_CODE = 'ORDER'.
    CALL TRANSACTION 'CO03'.
  ELSEIF OK_CODE =  'MOVE'.
    CALL TRANSACTION 'ZPP102'.
  ELSEIF OK_CODE = 'CONVERT'.
    CALL TRANSACTION 'ZMM004'.
  ELSEIF OK_CODE = 'SYSTEM'.
    CALL TRANSACTION 'COOIS'.
  ELSEIF OK_CODE = 'BALANCE'.
    CALL TRANSACTION 'ZPP130'.
  ELSEIF OK_CODE = 'SALARY'.
    SUBMIT ZWAGE_MAINTAIN VIA SELECTION-SCREEN AND RETURN.
*    CALL TRANSACTION 'ZPP124'.
  ELSE.
    LEAVE TO SCREEN 0.
  ENDIF.
  CLEAR OK_CODE.


ENDMODULE.                    "exit INPUT


*&---------------------------------------------------------------------*
*&      Form  UPDATE_DATA
*&---------------------------------------------------------------------*
*    查询并更新自定义表
*----------------------------------------------------------------------*
FORM UPDATE_DATA .
  TYPES: BEGIN OF TY_AFRU,
         AUFNR TYPE AFRU-AUFNR,
         LTXA1 TYPE AFRU-LTXA1,
         ISM01 TYPE AFRU-ISM01,
         ISM02 TYPE AFRU-ISM02,
         ISM03 TYPE AFRU-ISM03,
         BUDAT TYPE AFRU-BUDAT,
         END OF TY_AFRU.
  DATA:  LT_AFRU TYPE TABLE OF TY_AFRU,
         LT_GS_AFRU TYPE TABLE OF TY_AFRU,
         LW_AFRU TYPE TY_AFRU.


  TYPES:BEGIN OF TY_HEAD_BTBHA,
         BTBHA TYPE ZZTPP_ZSTZ_HEAD-BTBHA,
        END OF TY_HEAD_BTBHA.


  TYPES:BEGIN OF TY_UD_BODY1,
        BTBHA TYPE ZZTPP_ZSTZ_BODY1-BTBHA,
        YLDM  TYPE ZZTPP_ZSTZ_BODY1-YLDM,
        YLPH  TYPE ZZTPP_ZSTZ_BODY1-YLPH,
        LGORT TYPE ZZTPP_ZSTZ_BODY1-LGORT,
*******Change at 2012-05-29
        MBLNR TYPE ZZTPP_ZSTZ_BODY1-MBLNR,
        END OF TY_UD_BODY1.


  TYPES:BEGIN OF TY_UD_BODY2,
        BTBHA TYPE ZZTPP_ZSTZ_BODY2-BTBHA,
        FGPDM TYPE ZZTPP_ZSTZ_BODY2-FGPDM,
        FGOPH TYPE ZZTPP_ZSTZ_BODY2-FGOPH,
        YDDH  TYPE ZZTPP_ZSTZ_BODY2-YDDH,
        FGDDH TYPE ZZTPP_ZSTZ_BODY2-FGDDH,
        LGORT TYPE ZZTPP_ZSTZ_BODY2-LGORT,
*******Change at 2012-05-29
        MBLNR TYPE ZZTPP_ZSTZ_BODY2-MBLNR,
        END OF TY_UD_BODY2.


  TYPES:BEGIN OF TY_UD_BODY4,
        BTBHA TYPE ZZTPP_ZSTZ_BODY4-BTBHA,
        YLDM  TYPE ZZTPP_ZSTZ_BODY4-YLDM,
        YLPH  TYPE ZZTPP_ZSTZ_BODY4-YLPH,
        LGORT TYPE ZZTPP_ZSTZ_BODY4-LGORT,
*******Change at 2012-05-29
        MBLNR TYPE ZZTPP_ZSTZ_BODY4-MBLNR,
        END OF TY_UD_BODY4.


  TYPES:BEGIN OF TY_FT,
        AUFNR TYPE MSEG-AUFNR,
        MENGE TYPE MSEG-MENGE,
        END OF TY_FT.


  DATA: LT_FT1 TYPE TABLE OF TY_FT,
        LT_FT2 TYPE TABLE OF TY_FT,
        LT_FT4 TYPE TABLE OF TY_FT,
        LW_FT  TYPE TY_FT,
        LT_HZ_FT1 TYPE TABLE OF TY_FT,
        LT_HZ_FT2 TYPE TABLE OF TY_FT,
        LT_HZ_FT4 TYPE TABLE OF TY_FT.


  DATA: LT_OLD_BODY1 TYPE TABLE OF TY_UD_BODY1,
        LT_OLD_BODY2 TYPE TABLE OF TY_UD_BODY2,
        LT_OLD_BODY4 TYPE TABLE OF TY_UD_BODY4,
        LT_NEW_BODY1 TYPE TABLE OF TY_UD_BODY1,
        LT_NEW_BODY2 TYPE TABLE OF TY_UD_BODY2,
        LT_NEW_BODY4 TYPE TABLE OF TY_UD_BODY4,
        DEL_1_TAB TYPE TABLE OF TY_UD_BODY1,
        DEL_2_TAB TYPE TABLE OF TY_UD_BODY2,
        DEL_4_TAB TYPE TABLE OF TY_UD_BODY4,
        LR_1 TYPE TY_UD_BODY1,
        LR_2 TYPE TY_UD_BODY2,
        LR_4 TYPE TY_UD_BODY4.
  DATA:  LW_UD_HEAD  TYPE ZZTPP_ZSTZ_HEAD,
         LW_UD_BODY1 TYPE ZZTPP_ZSTZ_BODY1,
         LW_UD_BODY2 TYPE ZZTPP_ZSTZ_BODY2,
         LW_UD_BODY3 TYPE ZZTPP_ZSTZ_BODY3,
         LW_UD_BODY4 TYPE ZZTPP_ZSTZ_BODY4,
         LW_UD_BODY5 TYPE ZZTPP_ZSTZ_BODY5.
  DATA:  LT_UD_HEAD  TYPE TABLE OF ZZTPP_ZSTZ_HEAD,
         LT_UD_BODY1 TYPE TABLE OF ZZTPP_ZSTZ_BODY1,
         LT_UD_BODY2 TYPE TABLE OF ZZTPP_ZSTZ_BODY2,
         LT_UD_BODY3 TYPE TABLE OF ZZTPP_ZSTZ_BODY3,
         LT_UD_BODY4 TYPE TABLE OF ZZTPP_ZSTZ_BODY4,
         LT_UD_BODY5 TYPE TABLE OF ZZTPP_ZSTZ_BODY5.
  DATA   LS_BTBHA TYPE TY_HEAD_BTBHA.
  CLEAR: LW_UD_HEAD.
  DATA:  LS_MKPF    TYPE GY_MKPF,
         LS_MSEG    TYPE GY_MSEG.
  DATA:  LR_STR1(6) VALUE '混凝土',
         LR_STR2(4) VALUE '余料',
         LR_STR6(4) VALUE '废棉',
         LR_STR7(4) VALUE '尾料',
         LR_STR3(4) VALUE '钢丝',
         LR_STR4(6) VALUE '半成品',
         LR_STR5(4) VALUE '棉卷'.


  "专门负责261 262 122 123
  "原材料
  DATA  :
   I_MSEG  TYPE STANDARD TABLE OF GY_MSEG,
   WA_MSEG TYPE  GY_MSEG.


  "包装物
  DATA :
  I_BZW TYPE STANDARD TABLE OF GY_BZW,
  WA_BZW TYPE GY_BZW.


*  DATA LV_READ_FLAG TYPE C.


  CLEAR :
*        LV_READ_FLAG,
        ZZTPP_ZSTZ_BODY1,
        ZZTPP_ZSTZ_BODY2,
        ZZTPP_ZSTZ_BODY4,
        ZZTPP_ZSTZ_BODY5.


  CHECK ZZTPP_ZSTZ_HEAD-BTBHA IS NOT INITIAL.
  CLEAR :
        ZZTPP_ZSTZ_HEAD-JZHAO,
        ZZTPP_ZSTZ_HEAD-DBCCL,
        ZZTPP_ZSTZ_HEAD-DBHSL,
        ZZTPP_ZSTZ_HEAD-DBSHL,
        ZZTPP_ZSTZ_HEAD-BB1YB,
        ZZTPP_ZSTZ_HEAD-BZWZS,
        ZZTPP_ZSTZ_HEAD-AVEJJ,
        ZZTPP_ZSTZ_HEAD-SBQSJS,
        ZZTPP_ZSTZ_HEAD-SBZZJS,
        ZZTPP_ZSTZ_HEAD-SBJXSJ,
        ZZTPP_ZSTZ_HEAD-QTTJSJ,
        ZZTPP_ZSTZ_HEAD-XHZL,
        ZZTPP_ZSTZ_HEAD-ZBBZ,
        ZZTPP_ZSTZ_HEAD-ZJY,
        ZZTPP_ZSTZ_HEAD-SCZG,
        ZZTPP_ZSTZ_HEAD-MDBS,
        ZZTPP_ZSTZ_HEAD-GZ,
        ZZTPP_ZSTZ_HEAD-BUDAT.


  REFRESH: LT_OLD_BODY1,
           LT_OLD_BODY2,
           LT_OLD_BODY4,
           LT_NEW_BODY1,
           LT_NEW_BODY2,
           LT_NEW_BODY4.


*  SELECT BTBHA YLDM YLPH LGORT  INTO TABLE LT_OLD_BODY1
*    FROM ZZTPP_ZSTZ_BODY1
*   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*
*  SELECT BTBHA FGPDM FGOPH YDDH FGDDH LGORT INTO TABLE LT_OLD_BODY2
*    FROM ZZTPP_ZSTZ_BODY2
*   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*
*  SELECT BTBHA YLDM YLPH LGORT INTO TABLE LT_OLD_BODY4
*    FROM ZZTPP_ZSTZ_BODY4
*   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


  REFRESH: GT_MKPF,
           GT_MSEG.
  REFRESH: GT_BODY1,
           GT_BODY2,
           GT_BODY4,
           GT_BODY5,
           GT_BODY3.


*强制每次从数据库表中读取
  DELETE FROM ZZTPP_ZSTZ_BODY1 WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA AND GZ = 'Y'.
  DELETE FROM ZZTPP_ZSTZ_BODY2 WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA AND GZ = 'Y'.
  DELETE FROM ZZTPP_ZSTZ_BODY5 WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA AND GZ = 'Y'.
  DELETE FROM ZZTPP_ZSTZ_BODY4 WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA AND GZ = 'Y'.


  SELECT MBLNR
         MJAHR
         BKTXT
  FROM MKPF
   INTO TABLE GT_MKPF
   WHERE BKTXT = ZZTPP_ZSTZ_HEAD-BTBHA. "台班编号


  IF GT_MKPF IS NOT INITIAL.
    SORT GT_MKPF BY MBLNR MJAHR.
    SELECT MSEG~MBLNR
           MSEG~ZEILE
           MSEG~MJAHR
           MSEG~BWART
           MSEG~MATNR
           MSEG~CHARG  "批号
           MSEG~LGORT  "库存地点
           MSEG~MENGE  "数量
           MSEG~AUFNR  "产品订单号
           MSEG~SHKZG  "借贷标示
   FROM MSEG
    INTO CORRESPONDING FIELDS OF TABLE GT_ZJ_MSEG
    FOR ALL ENTRIES IN GT_MKPF
    WHERE MSEG~MBLNR = GT_MKPF-MBLNR
     AND MSEG~MJAHR  = GT_MKPF-MJAHR.
  ELSE.
    MESSAGE S001(00) WITH '数据不存在!' DISPLAY LIKE 'E'.
  ENDIF.
  IF GT_MKPF IS NOT INITIAL.
    CLEAR LW_UD_HEAD.
    SELECT SINGLE * INTO LW_UD_HEAD
      FROM ZZTPP_ZSTZ_HEAD
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    IF SY-SUBRC = 0.
      ZZTPP_ZSTZ_HEAD-JZHAO = LW_UD_HEAD-JZHAO.
      ZZTPP_ZSTZ_HEAD-DBCCL = LW_UD_HEAD-DBCCL.
      ZZTPP_ZSTZ_HEAD-DBHSL = LW_UD_HEAD-DBHSL.
      ZZTPP_ZSTZ_HEAD-DBSHL = LW_UD_HEAD-DBSHL.
      ZZTPP_ZSTZ_HEAD-BB1YB = LW_UD_HEAD-BB1YB.
      ZZTPP_ZSTZ_HEAD-BZWZS = LW_UD_HEAD-BZWZS.
      ZZTPP_ZSTZ_HEAD-SBQSJS = LW_UD_HEAD-SBQSJS.
      ZZTPP_ZSTZ_HEAD-SBZZJS = LW_UD_HEAD-SBZZJS.
      ZZTPP_ZSTZ_HEAD-SBJXSJ = LW_UD_HEAD-SBJXSJ.
      ZZTPP_ZSTZ_HEAD-QTTJSJ = LW_UD_HEAD-QTTJSJ.
      ZZTPP_ZSTZ_HEAD-XHZL  = LW_UD_HEAD-XHZL.
      ZZTPP_ZSTZ_HEAD-ZBBZ  = LW_UD_HEAD-ZBBZ.
      ZZTPP_ZSTZ_HEAD-ZJY   = LW_UD_HEAD-ZJY.
      ZZTPP_ZSTZ_HEAD-SCZG  = LW_UD_HEAD-SCZG.
      ZZTPP_ZSTZ_HEAD-MDBS  = LW_UD_HEAD-MDBS.
      ZZTPP_ZSTZ_HEAD-GZ    = LW_UD_HEAD-GZ.
      ZZTPP_ZSTZ_HEAD-BUDAT = LW_UD_HEAD-BUDAT.
      ZZTPP_ZSTZ_HEAD-AVEJJ = LW_UD_HEAD-AVEJJ.
    ELSE.
      LW_UD_HEAD-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
      INSERT ZZTPP_ZSTZ_HEAD FROM LW_UD_HEAD.
    ENDIF.
    SORT GT_ZJ_MSEG BY MBLNR MJAHR BWART MATNR CHARG LGORT .
    CLEAR LS_MSEG.


*---------------------------Collect合并相同行次---------------------------------
*无效代码
    LOOP AT GT_ZJ_MSEG INTO LS_MSEG.
      CLEAR: GW_MAKTX.


      SELECT SINGLE MAKTX
        INTO GW_MAKTX
        FROM MAKT
       WHERE MATNR   = LS_MSEG-MATNR.


      SEARCH GW_MAKTX FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤,放到余料表body4中
      IF SY-SUBRC = 0.
        CLEAR LS_MSEG-AUFNR.
        CLEAR LS_MSEG-ZEILE.
        COLLECT LS_MSEG INTO GT_MSEG.
        CONTINUE.
      ENDIF.


      SEARCH GW_MAKTX FOR LR_STR2. "物料描述中含有’余料‘为废线,放到余料表body4中
      IF SY-SUBRC = 0.
        CLEAR LS_MSEG-AUFNR.
        CLEAR LS_MSEG-ZEILE.
        COLLECT LS_MSEG INTO GT_MSEG.
        CONTINUE.
      ENDIF.


      SEARCH GW_MAKTX FOR LR_STR6. "物料描述中含有’废棉‘为废料,放到余料表body4中
      IF SY-SUBRC = 0.
        CLEAR LS_MSEG-AUFNR.
        CLEAR LS_MSEG-ZEILE.
        COLLECT LS_MSEG INTO GT_MSEG.
        CONTINUE.
      ENDIF.


      SEARCH GW_MAKTX FOR LR_STR7. "物料描述中含有’尾料‘为废料,放到余料表body4中
      IF SY-SUBRC = 0.
        CLEAR LS_MSEG-AUFNR.
        CLEAR LS_MSEG-ZEILE.
        COLLECT LS_MSEG INTO GT_MSEG.
        CONTINUE.
      ENDIF.


      IF LS_MSEG-MATNR+8(1) = '1'. "原材料
        SEARCH GW_MAKTX FOR LR_STR3. "物料描述中含有’钢丝‘
        IF SY-SUBRC <> 0.
          IF LS_MSEG-MATNR+8 <> '1521015603' AND "紫铜棒的切割作业
            LS_MSEG-MATNR+8 <> '1521015604'.
            CLEAR LS_MSEG-AUFNR.
            CLEAR LS_MSEG-ZEILE.
            COLLECT LS_MSEG INTO GT_MSEG.
            CONTINUE.
          ENDIF.
        ENDIF.


      ELSEIF LS_MSEG-MATNR+8(1) = '3' OR LS_MSEG-MATNR+8(1) = '4'.
        IF LS_MSEG-BWART = '261' OR LS_MSEG-BWART = '262'.
          SEARCH GW_MAKTX FOR LR_STR4 . "物料描述中含有’半成品‘,则为原料
          IF SY-SUBRC = 0.
            IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'T'.
              CLEAR LS_MSEG-AUFNR.
              CLEAR LS_MSEG-ZEILE.
              COLLECT LS_MSEG INTO GT_MSEG.
              CONTINUE.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
*其它
      CLEAR LS_MSEG-ZEILE.
      COLLECT LS_MSEG INTO GT_MSEG.
    ENDLOOP.


    "modify at 20121019 by maojian -- 不可以删除 包括309移库
*    DELETE GT_MSEG WHERE BWART+0(1) = '3' OR BWART+0(1) = '4'.


*合并262 261
    REFRESH I_MSEG.
    LOOP AT GT_MSEG INTO LS_MSEG.
      "原料
      IF ( LS_MSEG-BWART = '261'
        OR LS_MSEG-BWART = '262' )
        AND LS_MSEG-MATNR+8(1) <> '5'
        AND LS_MSEG-CHARG+0(1) <> '#'
        AND LS_MSEG-CHARG+0(1) <> '^'.
*        IF LS_MSEG-MATNR+8(1) = '3' AND ZZTPP_ZSTZ_HEAD-BTBHA+0(2) <> 'GI'.
*          CONTINUE.
*        ENDIF.
        IF LS_MSEG-BWART = '261'.
          LS_MSEG-MENGE = LS_MSEG-MENGE .
        ELSEIF  LS_MSEG-BWART = '262'.
          LS_MSEG-MENGE = - LS_MSEG-MENGE .
        ENDIF.
        APPEND LS_MSEG TO I_MSEG.


        "包装物
      ELSEIF ( LS_MSEG-BWART = '261'
      OR LS_MSEG-BWART = '262' )
        AND LS_MSEG-MATNR+8(1) = '5'.
        IF LS_MSEG-BWART = '261'.
          LS_MSEG-MENGE = LS_MSEG-MENGE .
        ELSEIF  LS_MSEG-BWART = '262'.
          LS_MSEG-MENGE = - LS_MSEG-MENGE .
        ENDIF.
        CLEAR WA_BZW.
        MOVE-CORRESPONDING LS_MSEG TO WA_BZW.
        APPEND WA_BZW TO I_BZW.
      ENDIF.
    ENDLOOP.


    DELETE GT_MSEG WHERE ( BWART = '261' OR BWART = '262' )
      AND MATNR+8(1) <> '5'
      AND CHARG+0(1) <> '#'
      AND CHARG+0(1) <> '^'.


    DELETE GT_MSEG WHERE ( BWART = '261' OR BWART = '262' )
      AND MATNR+8(1) = '5'.


*      MATNR  TYPE MSEG-MATNR, "成品代码
*      CHARG  TYPE MSEG-CHARG, "批号
*      LGORT  TYPE MSEG-LGORT,"库存地点
*      MENGE  TYPE MSEG-MENGE,"数量
*      AUFNR  TYPE MSEG-AUFNR, "产品订单号
*      MBLNR  TYPE MSEG-MBLNR,
*      ZEILE  TYPE MSEG-ZEILE,
*      MJAHR  TYPE MSEG-MJAHR,
*      BWART  TYPE MSEG-BWART,
    SORT I_MSEG BY MATNR CHARG LGORT MBLNR ZEILE.


    LOOP AT I_MSEG INTO WA_MSEG.
      MOVE-CORRESPONDING WA_MSEG TO LS_MSEG.
      AT END OF LGORT.
        SUM.
        WA_MSEG-MATNR  = LS_MSEG-MATNR.
        WA_MSEG-CHARG  = LS_MSEG-CHARG.
        WA_MSEG-LGORT  = LS_MSEG-LGORT.
*      wa_mseg-MENGE  = LS_MSEG-MENGE.
*      wa_mseg-AUFNR  = LS_MSEG-AUFNR.
        "是成品但不是GI班的发料的情况下,属于261的返工扣料。
        IF LS_MSEG-MATNR+8(1) = '3' AND ZZTPP_ZSTZ_HEAD-BTBHA+0(2) <> 'GI'.
          WA_MSEG-AUFNR  = LS_MSEG-AUFNR.
        ENDIF.
        WA_MSEG-MBLNR  = LS_MSEG-MBLNR.
        WA_MSEG-ZEILE  = LS_MSEG-ZEILE.
        WA_MSEG-MJAHR  = LS_MSEG-MJAHR.
*      wa_mseg-BWART  = LS_MSEG-BWART.
        IF WA_MSEG-MENGE > 0.
          WA_MSEG-BWART = '261'.
        ELSE.
          WA_MSEG-BWART = '262'.
        ENDIF.
        WA_MSEG-MENGE = ABS( WA_MSEG-MENGE ).
        IF WA_MSEG-MENGE <> 0.
          APPEND WA_MSEG TO GT_MSEG.
        ENDIF.
      ENDAT.
    ENDLOOP.


    SORT I_BZW BY MATNR CHARG LGORT AUFNR MBLNR ZEILE.


    LOOP AT I_BZW INTO WA_BZW.
      MOVE-CORRESPONDING WA_BZW TO LS_MSEG.
      AT END OF AUFNR.
        SUM.
        WA_BZW-MATNR  = LS_MSEG-MATNR.
        WA_BZW-CHARG  = LS_MSEG-CHARG.
        WA_BZW-LGORT  = LS_MSEG-LGORT.
        WA_BZW-AUFNR  = LS_MSEG-AUFNR.
        WA_BZW-MBLNR  = LS_MSEG-MBLNR.
        WA_BZW-ZEILE  = LS_MSEG-ZEILE.
        WA_BZW-MJAHR  = LS_MSEG-MJAHR.
        IF WA_BZW-MENGE > 0.
          WA_BZW-BWART = '261'.
        ELSE.
          WA_BZW-BWART = '262'.
        ENDIF.
        WA_BZW-MENGE = ABS( WA_BZW-MENGE ).
        IF WA_BZW-MENGE <> 0.
          CLEAR WA_MSEG.
          MOVE-CORRESPONDING WA_BZW TO WA_MSEG.
          APPEND WA_MSEG TO GT_MSEG.
        ENDIF.
      ENDAT.
    ENDLOOP.


*-----------------------------------------------------------------*
*   处理显示
*-----------------------------------------------------------------*
    LOOP AT GT_MSEG INTO LS_MSEG.
      CLEAR: GW_MAKTX.
      CLEAR: LW_UD_HEAD,
             LW_UD_BODY1,
             LW_UD_BODY2,
             LW_UD_BODY3,
             LW_UD_BODY4.
*取物料描述
      SELECT SINGLE MAKTX
        INTO GW_MAKTX
        FROM MAKT
       WHERE MATNR   = LS_MSEG-MATNR.


*---------------波纤----------------------
      SEARCH GW_MAKTX FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤,放到余料表body4中
      IF SY-SUBRC = 0.
        LW_UD_BODY4-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA. "台班班号
        LW_UD_BODY4-YLDM  = LS_MSEG-MATNR.         "余料代码
        LW_UD_BODY4-YLPH  = LS_MSEG-CHARG.         "余料批号
        LW_UD_BODY4-YLMS  = GW_MAKTX.              "余料描述
        IF LS_MSEG-BWART = '531' OR LS_MSEG-BWART = '101'.
          LW_UD_BODY4-YLZL  = LS_MSEG-MENGE.         "余料重量
        ELSEIF LS_MSEG-BWART = '532' OR LS_MSEG-BWART = '102'.
          LW_UD_BODY4-YLZL  = - LS_MSEG-MENGE.
          "考虑到309转移的情况...
        ELSEIF LS_MSEG-SHKZG = 'S'.
          LW_UD_BODY4-YLZL  = LS_MSEG-MENGE.
        ELSE.
          LW_UD_BODY4-YLZL  = - LS_MSEG-MENGE.
        ENDIF.
        LW_UD_BODY4-MBLNR = LS_MSEG-MBLNR.         "物料凭证编号
        IF LS_MSEG-MBLNR IS NOT INITIAL.
          LW_UD_BODY4-GZ = 'Y'.                    "过账标示
        ENDIF.
        LW_UD_BODY4-LGORT = LS_MSEG-LGORT.         "库存地点


        LW_FT-AUFNR = LS_MSEG-AUFNR.               "生产订单号
        LW_FT-MENGE = LS_MSEG-MENGE.               "数量
        APPEND LW_FT TO LT_FT4.


        SELECT BTBHA YLDM YLPH LGORT
          INTO TABLE  LT_UD_BODY4
          FROM ZZTPP_ZSTZ_BODY4
         WHERE BTBHA = LW_UD_BODY4-BTBHA
           AND YLDM  = LW_UD_BODY4-YLDM
           AND YLPH  = LW_UD_BODY4-YLPH
           AND LGORT = LW_UD_BODY4-LGORT
*******Change at 2012-05-28  -------------------添加为主键
            AND MBLNR = LW_UD_BODY4-MBLNR
          .
        IF SY-SUBRC = 0 .
          UPDATE ZZTPP_ZSTZ_BODY4
          SET BTBHA = LW_UD_BODY4-BTBHA
              YLDM  = LW_UD_BODY4-YLDM
              YLMS  = LW_UD_BODY4-YLMS
              YLPH  = LW_UD_BODY4-YLPH
              YLZL  = LW_UD_BODY4-YLZL
              GZ    = LW_UD_BODY4-GZ
              MBLNR = LW_UD_BODY4-MBLNR
              LGORT = LW_UD_BODY4-LGORT
        WHERE BTBHA = LW_UD_BODY4-BTBHA
          AND YLDM  = LW_UD_BODY4-YLDM
          AND YLPH  = LW_UD_BODY4-YLPH
          AND LGORT = LW_UD_BODY4-LGORT
           AND  GZ  <> 'Y'.
        ELSE.
*不同物料凭证的也可以进行添加
          INSERT ZZTPP_ZSTZ_BODY4 FROM LW_UD_BODY4 .
        ENDIF.
        APPEND LW_UD_BODY4 TO GT_BODY4.
        CONTINUE.
      ENDIF.


*---------------尾料----------------------
      SEARCH GW_MAKTX FOR LR_STR7. "物料描述中含有’尾料‘为废线,放到余料表body4中
      IF SY-SUBRC = 0.
        LW_UD_BODY4-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
        LW_UD_BODY4-YLDM  = LS_MSEG-MATNR.
        LW_UD_BODY4-YLPH  = LS_MSEG-CHARG.
        LW_UD_BODY4-YLMS  = GW_MAKTX.


        IF LS_MSEG-BWART = '531'.
          LW_UD_BODY4-YLZL  = LS_MSEG-MENGE .
        ELSEIF LS_MSEG-BWART = '532'.
          LW_UD_BODY4-YLZL  = - LS_MSEG-MENGE .
        ENDIF.


        LW_UD_BODY4-MBLNR = LS_MSEG-MBLNR.
        IF LS_MSEG-MBLNR IS NOT INITIAL.
          LW_UD_BODY4-GZ = 'Y'.
        ENDIF.
        LW_UD_BODY4-LGORT = LS_MSEG-LGORT.


        LW_FT-AUFNR = LS_MSEG-AUFNR.
        LW_FT-MENGE = LS_MSEG-MENGE.
        APPEND LW_FT TO LT_FT4.


        SELECT BTBHA YLDM YLPH LGORT
          INTO TABLE  LT_UD_BODY4
          FROM ZZTPP_ZSTZ_BODY4
         WHERE BTBHA = LW_UD_BODY4-BTBHA
           AND YLDM  = LW_UD_BODY4-YLDM
           AND YLPH  = LW_UD_BODY4-YLPH
           AND LGORT = LW_UD_BODY4-LGORT
            AND MBLNR = LW_UD_BODY4-MBLNR
          .
        IF SY-SUBRC = 0 .
          UPDATE ZZTPP_ZSTZ_BODY4
          SET BTBHA = LW_UD_BODY4-BTBHA
              YLDM  = LW_UD_BODY4-YLDM
              YLMS  = LW_UD_BODY4-YLMS
              YLPH  = LW_UD_BODY4-YLPH
              YLZL  = LW_UD_BODY4-YLZL
              GZ    = LW_UD_BODY4-GZ
              MBLNR = LW_UD_BODY4-MBLNR
              LGORT = LW_UD_BODY4-LGORT
        WHERE BTBHA = LW_UD_BODY4-BTBHA
          AND YLDM  = LW_UD_BODY4-YLDM
          AND YLPH  = LW_UD_BODY4-YLPH
          AND LGORT = LW_UD_BODY4-LGORT
          AND  GZ  <> 'Y'.
        ELSE.
          INSERT ZZTPP_ZSTZ_BODY4 FROM LW_UD_BODY4.
        ENDIF.
        APPEND LW_UD_BODY4 TO GT_BODY4.
        CONTINUE.
      ENDIF.


*---------------余料----------------------
      SEARCH GW_MAKTX FOR LR_STR2. "物料描述中含有’余料‘为废线,放到余料表body4中
      IF SY-SUBRC = 0.
        LW_UD_BODY4-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
        LW_UD_BODY4-YLDM  = LS_MSEG-MATNR.
        LW_UD_BODY4-YLPH  = LS_MSEG-CHARG.
        LW_UD_BODY4-YLMS  = GW_MAKTX.


        IF LS_MSEG-BWART = '531'.
          LW_UD_BODY4-YLZL  = LS_MSEG-MENGE .
        ELSEIF LS_MSEG-BWART = '532'.
          LW_UD_BODY4-YLZL  = - LS_MSEG-MENGE .
        ENDIF.


        LW_UD_BODY4-MBLNR = LS_MSEG-MBLNR.
        IF LS_MSEG-MBLNR IS NOT INITIAL.
          LW_UD_BODY4-GZ = 'Y'.
        ENDIF.
        LW_UD_BODY4-LGORT = LS_MSEG-LGORT.


        LW_FT-AUFNR = LS_MSEG-AUFNR.
        LW_FT-MENGE = LS_MSEG-MENGE.
        APPEND LW_FT TO LT_FT4.


        SELECT BTBHA YLDM YLPH LGORT
          INTO TABLE  LT_UD_BODY4
          FROM ZZTPP_ZSTZ_BODY4
         WHERE BTBHA = LW_UD_BODY4-BTBHA
           AND YLDM  = LW_UD_BODY4-YLDM
           AND YLPH  = LW_UD_BODY4-YLPH
           AND LGORT = LW_UD_BODY4-LGORT
            AND MBLNR = LW_UD_BODY4-MBLNR
          .
        IF SY-SUBRC = 0 .
          UPDATE ZZTPP_ZSTZ_BODY4
          SET BTBHA = LW_UD_BODY4-BTBHA
              YLDM  = LW_UD_BODY4-YLDM
              YLMS  = LW_UD_BODY4-YLMS
              YLPH  = LW_UD_BODY4-YLPH
              YLZL  = LW_UD_BODY4-YLZL
              GZ    = LW_UD_BODY4-GZ
              MBLNR = LW_UD_BODY4-MBLNR
              LGORT = LW_UD_BODY4-LGORT
        WHERE BTBHA = LW_UD_BODY4-BTBHA
          AND YLDM  = LW_UD_BODY4-YLDM
          AND YLPH  = LW_UD_BODY4-YLPH
          AND LGORT = LW_UD_BODY4-LGORT
          AND  GZ  <> 'Y'.
        ELSE.
          INSERT ZZTPP_ZSTZ_BODY4 FROM LW_UD_BODY4.
        ENDIF.
        APPEND LW_UD_BODY4 TO GT_BODY4.
        CONTINUE.
      ENDIF.


*---------------废棉----------------------
      IF LS_MSEG-MATNR+8 = '3010300000'
        OR LS_MSEG-MATNR+8 = '3010400000'
        OR LS_MSEG-MATNR+8 = '3100100000'
        OR LS_MSEG-MATNR+8 = '3100300000'
        OR LS_MSEG-MATNR+8 = '3100900000'.
        LW_UD_BODY4-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
        LW_UD_BODY4-YLDM  = LS_MSEG-MATNR.
        LW_UD_BODY4-YLPH  = LS_MSEG-CHARG.
        LW_UD_BODY4-YLMS  = GW_MAKTX.


        IF LS_MSEG-BWART = '531'.
          LW_UD_BODY4-YLZL  = LS_MSEG-MENGE .
        ELSEIF LS_MSEG-BWART = '532'.
          LW_UD_BODY4-YLZL  = - LS_MSEG-MENGE .
        ENDIF.


        LW_UD_BODY4-MBLNR = LS_MSEG-MBLNR.
        IF LS_MSEG-MBLNR IS NOT INITIAL.
          LW_UD_BODY4-GZ = 'Y'.
        ENDIF.
        LW_UD_BODY4-LGORT = LS_MSEG-LGORT.


        LW_FT-AUFNR = LS_MSEG-AUFNR.
        LW_FT-MENGE = LS_MSEG-MENGE.
        APPEND LW_FT TO LT_FT4.


        SELECT BTBHA YLDM YLPH LGORT
          INTO TABLE  LT_UD_BODY4
          FROM ZZTPP_ZSTZ_BODY4
         WHERE BTBHA = LW_UD_BODY4-BTBHA
           AND YLDM  = LW_UD_BODY4-YLDM
           AND YLPH  = LW_UD_BODY4-YLPH
           AND LGORT = LW_UD_BODY4-LGORT
            AND MBLNR = LW_UD_BODY4-MBLNR
          .
        IF SY-SUBRC = 0 .
          UPDATE ZZTPP_ZSTZ_BODY4
          SET BTBHA = LW_UD_BODY4-BTBHA
              YLDM  = LW_UD_BODY4-YLDM
              YLMS  = LW_UD_BODY4-YLMS
              YLPH  = LW_UD_BODY4-YLPH
              YLZL  = LW_UD_BODY4-YLZL
              GZ    = LW_UD_BODY4-GZ
              MBLNR = LW_UD_BODY4-MBLNR
              LGORT = LW_UD_BODY4-LGORT
        WHERE BTBHA = LW_UD_BODY4-BTBHA
          AND YLDM  = LW_UD_BODY4-YLDM
          AND YLPH  = LW_UD_BODY4-YLPH
          AND LGORT = LW_UD_BODY4-LGORT
          AND  GZ  <> 'Y'.
        ELSE.
          INSERT ZZTPP_ZSTZ_BODY4 FROM LW_UD_BODY4.
        ENDIF.
        APPEND LW_UD_BODY4 TO GT_BODY4.
        CONTINUE.
      ENDIF.


*---------------包装物----------------------
      IF LS_MSEG-MATNR+8(1) = '5'.
        LW_UD_BODY5-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
        LW_UD_BODY5-SCDDH = LS_MSEG-AUFNR.        "生产订单号
        LW_UD_BODY5-BZWLH = LS_MSEG-MATNR.        "物料代码
        LW_UD_BODY5-MAKTX = GW_MAKTX.             "物料描述
        LW_UD_BODY5-BZWPH = LS_MSEG-CHARG.        "批号


        IF LS_MSEG-BWART = '261'.
          LW_UD_BODY5-BZWSL = LS_MSEG-MENGE.        "数量
        ELSE.
          LW_UD_BODY5-BZWSL = - LS_MSEG-MENGE.        "数量
        ENDIF.


        LW_UD_BODY5-MBLNR = LS_MSEG-MBLNR.        "物料凭证编号
        IF LS_MSEG-MBLNR IS NOT INITIAL.
          LW_UD_BODY5-GZ = 'Y'.                   "过账标示
        ENDIF.
        LW_UD_BODY5-LGORT = LS_MSEG-LGORT.        "库存地点
        APPEND LW_UD_BODY5 TO GT_BODY5.


        SELECT BTBHA SCDDH BZWLH BZWPH LGORT
          INTO TABLE  LT_UD_BODY5
          FROM ZZTPP_ZSTZ_BODY5
         WHERE BTBHA = LW_UD_BODY5-BTBHA
           AND SCDDH = LW_UD_BODY5-SCDDH
           AND BZWLH = LW_UD_BODY5-BZWLH
           AND BZWPH = LW_UD_BODY5-BZWPH
           AND LGORT = LW_UD_BODY5-LGORT
          .
        IF SY-SUBRC = 0 .
          UPDATE ZZTPP_ZSTZ_BODY5
          SET BTBHA = LW_UD_BODY5-BTBHA
              SCDDH = LW_UD_BODY5-SCDDH
              BZWLH = LW_UD_BODY5-BZWLH
              MAKTX = LW_UD_BODY5-MAKTX
              BZWPH = LW_UD_BODY5-BZWPH
              BZWSL = LW_UD_BODY5-BZWSL
              MBLNR = LW_UD_BODY5-MBLNR
              LGORT = LW_UD_BODY5-LGORT
              GZ    = 'Y'
        WHERE BTBHA = LW_UD_BODY5-BTBHA
          AND SCDDH = LW_UD_BODY5-SCDDH
          AND BZWLH = LW_UD_BODY5-BZWLH
          AND BZWPH = LW_UD_BODY5-BZWPH
          AND LGORT = LW_UD_BODY5-LGORT.
        ELSE.
          INSERT ZZTPP_ZSTZ_BODY5 FROM LW_UD_BODY5 .
        ENDIF.
        CONTINUE.
      ENDIF.




*---------------------切割紫铜棒工艺--------------------------
      IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'Q'.
        IF LS_MSEG-MATNR+8 = '1521015602'.
*原材料:紫铜棒3000mm
          LW_UD_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
          LW_UD_BODY1-YLDM = LS_MSEG-MATNR.         "原料代码
          LW_UD_BODY1-YLMS = GW_MAKTX.              "原料描述
          LW_UD_BODY1-YLPH = LS_MSEG-CHARG.         "原料批号


          IF LS_MSEG-BWART = '261'.
            LW_UD_BODY1-ZL = LS_MSEG-MENGE.           "重量
          ELSE.
            LW_UD_BODY1-ZL = - LS_MSEG-MENGE.           "重量
          ENDIF.


          LW_UD_BODY1-MBLNR = LS_MSEG-MBLNR.        "物料凭证编号
          IF LS_MSEG-MBLNR IS NOT INITIAL.
            LW_UD_BODY1-GZ = 'Y'.                   "过账标示
          ENDIF.
          LW_UD_BODY1-LGORT = LS_MSEG-LGORT.        "库存地点


          CLEAR LW_FT.
          LW_FT-AUFNR = LS_MSEG-AUFNR.
          LW_FT-MENGE = LS_MSEG-MENGE.
          APPEND LW_FT TO LT_FT1.
          APPEND LW_UD_BODY1 TO GT_BODY1.


          SELECT BTBHA YLDM YLPH LGORT
              INTO TABLE  LT_UD_BODY1
              FROM ZZTPP_ZSTZ_BODY1
             WHERE BTBHA = LW_UD_BODY1-BTBHA
               AND YLDM  = LW_UD_BODY1-YLDM
               AND YLPH  = LW_UD_BODY1-YLPH
               AND LGORT = LW_UD_BODY1-LGORT
               AND MBLNR = LW_UD_BODY1-MBLNR
            .
          IF SY-SUBRC = 0 .
            UPDATE ZZTPP_ZSTZ_BODY1
            SET BTBHA = LW_UD_BODY1-BTBHA
                YLDM  = LW_UD_BODY1-YLDM
                YLMS  = LW_UD_BODY1-YLMS
                YLPH  = LW_UD_BODY1-YLPH
                ZL  = LW_UD_BODY1-ZL
                GZ    = LW_UD_BODY1-GZ
                MBLNR = LW_UD_BODY1-MBLNR
                LGORT = LW_UD_BODY1-LGORT
          WHERE BTBHA = LW_UD_BODY1-BTBHA
            AND YLDM  = LW_UD_BODY1-YLDM
            AND YLPH  = LW_UD_BODY1-YLPH
            AND LGORT = LW_UD_BODY1-LGORT
            AND  GZ  <> 'Y'.
          ELSE.
            INSERT ZZTPP_ZSTZ_BODY1 FROM LW_UD_BODY1 .
          ENDIF.
          CONTINUE.
        ELSEIF LS_MSEG-MATNR+8 = '1521015603' OR
           LS_MSEG-MATNR+8 = '1521015604'.
*切割后的半成品紫铜棒
          IF  LS_MSEG-BWART = '101'.
            IF LS_MSEG-CHARG+0(1) ='#'.                  "待检品批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-DJYPZL = LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT  = LS_MSEG-LGORT.
            ELSEIF LS_MSEG-CHARG+0(1) ='^'.             "不合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-BHGPZL = LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ELSE.                                        "合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-HGPZL = LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ENDIF.
          ELSEIF  LS_MSEG-BWART = '102'.
            IF LS_MSEG-CHARG+0(1) ='#'.                  "待检品批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-DJYPZL = - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT  = LS_MSEG-LGORT.
            ELSEIF LS_MSEG-CHARG+0(1) ='^'.             "不合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-BHGPZL = - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ELSE.                                        "合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-HGPZL = - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ENDIF.
          ENDIF.
          LW_UD_BODY3-CPCCHEJ = LW_UD_BODY3-HGPZL + LW_UD_BODY3-BHGPZL + LW_UD_BODY3-DJYPZL.
          APPEND LW_UD_BODY3 TO GT_BODY3.
          CONTINUE.
        ENDIF.
      ENDIF.


*-------------------------拉丝--------------------------------
      IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'L'.
        SEARCH GW_MAKTX FOR C_LASI.
        IF SY-SUBRC = 0.
*原材料
          LW_UD_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
          LW_UD_BODY1-YLDM = LS_MSEG-MATNR.         "原料代码
          LW_UD_BODY1-YLMS = GW_MAKTX.              "原料描述
          LW_UD_BODY1-YLPH = LS_MSEG-CHARG.         "原料批号


          IF LS_MSEG-BWART = '261'.
            LW_UD_BODY1-ZL = LS_MSEG-MENGE.           "重量
          ELSE.
            LW_UD_BODY1-ZL = - LS_MSEG-MENGE.           "重量
          ENDIF.


          LW_UD_BODY1-MBLNR = LS_MSEG-MBLNR.        "物料凭证编号
          IF LS_MSEG-MBLNR IS NOT INITIAL.
            LW_UD_BODY1-GZ = 'Y'.                   "过账标示
          ENDIF.
          LW_UD_BODY1-LGORT = LS_MSEG-LGORT.        "库存地点


          CLEAR LW_FT.
          LW_FT-AUFNR = LS_MSEG-AUFNR.
          LW_FT-MENGE = LS_MSEG-MENGE.
          APPEND LW_FT TO LT_FT1.
          APPEND LW_UD_BODY1 TO GT_BODY1.


          SELECT BTBHA YLDM YLPH LGORT
              INTO TABLE  LT_UD_BODY1
              FROM ZZTPP_ZSTZ_BODY1
             WHERE BTBHA = LW_UD_BODY1-BTBHA
               AND YLDM  = LW_UD_BODY1-YLDM
               AND YLPH  = LW_UD_BODY1-YLPH
               AND LGORT = LW_UD_BODY1-LGORT
*----------------Add at 20120722
               AND MBLNR = LW_UD_BODY1-MBLNR
            .
          IF SY-SUBRC = 0 .
            UPDATE ZZTPP_ZSTZ_BODY1
            SET BTBHA = LW_UD_BODY1-BTBHA
                YLDM  = LW_UD_BODY1-YLDM
                YLMS  = LW_UD_BODY1-YLMS
                YLPH  = LW_UD_BODY1-YLPH
                ZL  = LW_UD_BODY1-ZL
                GZ    = LW_UD_BODY1-GZ
                MBLNR = LW_UD_BODY1-MBLNR
                LGORT = LW_UD_BODY1-LGORT
          WHERE BTBHA = LW_UD_BODY1-BTBHA
            AND YLDM  = LW_UD_BODY1-YLDM
            AND YLPH  = LW_UD_BODY1-YLPH
            AND LGORT = LW_UD_BODY1-LGORT
            AND  GZ  <> 'Y'.
          ELSE.
            INSERT ZZTPP_ZSTZ_BODY1 FROM LW_UD_BODY1 .
          ENDIF.
          CONTINUE.
        ELSE.
*合格品
          IF  LS_MSEG-BWART = '101'.
            IF LS_MSEG-CHARG+0(1) ='#'.                  "待检品批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-DJYPZL = LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT  = LS_MSEG-LGORT.
            ELSEIF LS_MSEG-CHARG+0(1) ='^'.             "不合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-BHGPZL = LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ELSE.                                        "合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-HGPZL = LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ENDIF.
          ELSEIF  LS_MSEG-BWART = '102'.
            IF LS_MSEG-CHARG+0(1) ='#'.                  "待检品批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-DJYPZL = - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT  = LS_MSEG-LGORT.
            ELSEIF LS_MSEG-CHARG+0(1) ='^'.             "不合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-BHGPZL = - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ELSE.                                        "合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-HGPZL = - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ENDIF.
          ENDIF.
          LW_UD_BODY3-CPCCHEJ = LW_UD_BODY3-HGPZL + LW_UD_BODY3-BHGPZL + LW_UD_BODY3-DJYPZL.
          APPEND LW_UD_BODY3 TO GT_BODY3.
          CONTINUE.
        ENDIF.
      ENDIF.


*-------------------------------------------------------------


*---------------原材料----------------------
      IF LS_MSEG-MATNR+8(1) = '1'.
*        SEARCH GW_MAKTX FOR LR_STR3. "物料描述中含有’钢丝‘
*        IF SY-SUBRC <> 0.
*          IF LS_MSEG-BWART = '101'    "GR直接收货
*            OR LS_MSEG-BWART = '102'  "冲销直接收货
*            OR LS_MSEG-BWART = '122'. "向供应商退货
*
*            IF LS_MSEG-CHARG+0(1) ='#'.                 "待检品批号
*              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
*              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.        "成品代码
*              LW_UD_BODY3-MAKTX = GW_MAKTX.             "成品描述
*              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.        "产品订单号
*              LW_UD_BODY3-DJYPZL = LS_MSEG-MENGE .      "待检品重量
*              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.        "库存地点
*            ELSEIF   LS_MSEG-CHARG+0(1) ='^'.          "不合格批号
*              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
*              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.        "成品代码
*              LW_UD_BODY3-MAKTX = GW_MAKTX.             "成品描述
*              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.        "产品订单号
*              LW_UD_BODY3-BHGPZL = LS_MSEG-MENGE .      "不合格品重量
*              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.        "库存地点
*            ELSE.                                       "合格批号
*              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
*              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.        "成品代码
*              LW_UD_BODY3-MAKTX = GW_MAKTX.             "成品描述
*              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.        "产品订单号
*              LW_UD_BODY3-HGPZL = LS_MSEG-MENGE .       "合格品重量
*              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.        "库存地点
*            ENDIF.
*            LW_UD_BODY3-CPCCHEJ = LW_UD_BODY3-HGPZL + LW_UD_BODY3-BHGPZL + LW_UD_BODY3-DJYPZL.
*            APPEND LW_UD_BODY3 TO GT_BODY3.
*          ENDIF.
*          CONTINUE.
*        ENDIF.
*原材料
        LW_UD_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
        LW_UD_BODY1-YLDM = LS_MSEG-MATNR.         "原料代码
        LW_UD_BODY1-YLMS = GW_MAKTX.              "原料描述
        LW_UD_BODY1-YLPH = LS_MSEG-CHARG.         "原料批号


        IF LS_MSEG-BWART = '261'.
          LW_UD_BODY1-ZL = LS_MSEG-MENGE.           "重量
        ELSE.
          LW_UD_BODY1-ZL = - LS_MSEG-MENGE.           "重量
        ENDIF.


        LW_UD_BODY1-MBLNR = LS_MSEG-MBLNR.        "物料凭证编号
        IF LS_MSEG-MBLNR IS NOT INITIAL.
          LW_UD_BODY1-GZ = 'Y'.                   "过账标示
        ENDIF.
        LW_UD_BODY1-LGORT = LS_MSEG-LGORT.        "库存地点


        CLEAR LW_FT.
        LW_FT-AUFNR = LS_MSEG-AUFNR.
        LW_FT-MENGE = LS_MSEG-MENGE.
        APPEND LW_FT TO LT_FT1.
        APPEND LW_UD_BODY1 TO GT_BODY1.


        SELECT BTBHA YLDM YLPH LGORT
            INTO TABLE  LT_UD_BODY1
            FROM ZZTPP_ZSTZ_BODY1
           WHERE BTBHA = LW_UD_BODY1-BTBHA
             AND YLDM  = LW_UD_BODY1-YLDM
             AND YLPH  = LW_UD_BODY1-YLPH
             AND LGORT = LW_UD_BODY1-LGORT
*----------------Add at 20120722
             AND MBLNR = LW_UD_BODY1-MBLNR
          .
        IF SY-SUBRC = 0 .
          UPDATE ZZTPP_ZSTZ_BODY1
          SET BTBHA = LW_UD_BODY1-BTBHA
              YLDM  = LW_UD_BODY1-YLDM
              YLMS  = LW_UD_BODY1-YLMS
              YLPH  = LW_UD_BODY1-YLPH
              ZL  = LW_UD_BODY1-ZL
              GZ    = LW_UD_BODY1-GZ
              MBLNR = LW_UD_BODY1-MBLNR
              LGORT = LW_UD_BODY1-LGORT
        WHERE BTBHA = LW_UD_BODY1-BTBHA
          AND YLDM  = LW_UD_BODY1-YLDM
          AND YLPH  = LW_UD_BODY1-YLPH
          AND LGORT = LW_UD_BODY1-LGORT
          AND  GZ  <> 'Y'.
        ELSE.
          INSERT ZZTPP_ZSTZ_BODY1 FROM LW_UD_BODY1 .
        ENDIF.


*---------------原料 返工品 成品----------------------
      ELSEIF LS_MSEG-MATNR+8(1) = '3' OR LS_MSEG-MATNR+8(1) = '4'.
        IF LS_MSEG-BWART = '261'    "工单领料
          OR LS_MSEG-BWART = '262'. "工单退料


          SEARCH GW_MAKTX FOR LR_STR4 . "物料描述中含有’半成品‘,则为原料
*退火棉 半成品 -- 原材料
          IF SY-SUBRC = 0.
*原材料
            IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'T'. "退火棉
              LW_UD_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY1-YLDM = LS_MSEG-MATNR.
              LW_UD_BODY1-YLMS = GW_MAKTX.
              LW_UD_BODY1-YLPH = LS_MSEG-CHARG.


              IF LS_MSEG-BWART = '261'.
                LW_UD_BODY1-ZL = LS_MSEG-MENGE.
              ELSE.
                LW_UD_BODY1-ZL = - LS_MSEG-MENGE.
              ENDIF.


              LW_UD_BODY1-MBLNR = LS_MSEG-MBLNR.
              IF LS_MSEG-MBLNR IS NOT INITIAL.
                LW_UD_BODY1-GZ = 'Y'.
              ENDIF.
              LW_UD_BODY1-LGORT = LS_MSEG-LGORT.


              CLEAR LW_FT.
              LW_FT-AUFNR = LS_MSEG-AUFNR.
              LW_FT-MENGE = LS_MSEG-MENGE.
              APPEND LW_FT TO LT_FT1.
              APPEND LW_UD_BODY1 TO GT_BODY1.


              SELECT BTBHA YLDM YLPH LGORT
                INTO TABLE  LT_UD_BODY1
                FROM ZZTPP_ZSTZ_BODY1
               WHERE BTBHA = LW_UD_BODY1-BTBHA
                 AND YLDM  = LW_UD_BODY1-YLDM
                 AND YLPH  = LW_UD_BODY1-YLPH
                 AND LGORT = LW_UD_BODY1-LGORT
******Change at 2012-05-28
                 AND MBLNR = LW_UD_BODY1-MBLNR
                .
              IF SY-SUBRC = 0 .
                UPDATE ZZTPP_ZSTZ_BODY1
                   SET BTBHA = LW_UD_BODY1-BTBHA
                       YLDM  = LW_UD_BODY1-YLDM
                       YLMS  = LW_UD_BODY1-YLMS
                       YLPH  = LW_UD_BODY1-YLPH
                       ZL  = LW_UD_BODY1-ZL
                       GZ    = LW_UD_BODY1-GZ
                       MBLNR = LW_UD_BODY1-MBLNR
                       LGORT = LW_UD_BODY1-LGORT
                 WHERE BTBHA = LW_UD_BODY1-BTBHA
                   AND YLDM  = LW_UD_BODY1-YLDM
                   AND YLPH  = LW_UD_BODY1-YLPH
                   AND LGORT = LW_UD_BODY1-LGORT
                   AND  GZ  <> 'Y'.
              ELSE.
                INSERT ZZTPP_ZSTZ_BODY1 FROM LW_UD_BODY1 .
              ENDIF.
              CONTINUE.
            ELSE.
*返工品
              LW_UD_BODY2-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
              LW_UD_BODY2-FGPDM = LS_MSEG-MATNR.        "返工品代码
              LW_UD_BODY2-FGOPH = LS_MSEG-CHARG.        "返工品批号
              LW_UD_BODY2-FGPMS = GW_MAKTX.             "返工品描述
              CLEAR GW_AUFNR.
              SELECT SINGLE AUFNR
                FROM MSEG
                INTO GW_AUFNR
               WHERE MATNR = LS_MSEG-MATNR
                 AND BWART = '101'
                 AND CHARG = LS_MSEG-CHARG.
              IF SY-SUBRC <> 0.
                "转储的情况考虑在内
                CLEAR GW_CHARG.
                SELECT SINGLE UMCHA
                  FROM MSEG
                  INTO GW_CHARG
                 WHERE MATNR = LS_MSEG-MATNR
                   AND BWART = '309'
                   AND CHARG = LS_MSEG-CHARG.
                CLEAR GW_AUFNR.
                SELECT SINGLE AUFNR
                  FROM MSEG
                  INTO GW_AUFNR
                 WHERE MATNR = LS_MSEG-MATNR
                   AND BWART = '101'
                   AND CHARG = GW_CHARG.
              ENDIF.
              LW_UD_BODY2-YDDH  = GW_AUFNR.            "原订单号
              LW_UD_BODY2-FGDDH = LS_MSEG-AUFNR.       "返工到订单号


              IF LS_MSEG-BWART = '261' OR LS_MSEG-BWART = '122'.
                LW_UD_BODY2-ZL  = LS_MSEG-MENGE .        "重量
              ELSE.
                LW_UD_BODY2-ZL  = - LS_MSEG-MENGE .        "重量
              ENDIF.


              LW_UD_BODY2-MBLNR = LS_MSEG-MBLNR.       "物料凭证编号
              IF LS_MSEG-MBLNR IS NOT INITIAL.
                LW_UD_BODY2-GZ = 'Y'.                  "过账标示
              ENDIF.
              LW_UD_BODY2-LGORT = LS_MSEG-LGORT.       "库存地点


              CLEAR LW_FT.
              LW_FT-AUFNR = LS_MSEG-AUFNR.
              LW_FT-MENGE = LS_MSEG-MENGE.
              APPEND LW_FT TO LT_FT2.


              SELECT BTBHA FGPDM FGOPH FGDDH LGORT
                INTO TABLE  LT_UD_BODY2
                FROM ZZTPP_ZSTZ_BODY2
               WHERE BTBHA = LW_UD_BODY2-BTBHA
                 AND FGPDM  = LW_UD_BODY2-FGPDM
                 AND FGOPH  = LW_UD_BODY2-FGOPH
                 AND YDDH   = LW_UD_BODY2-YDDH
                 AND FGDDH  = LW_UD_BODY2-FGDDH
                 AND LGORT  = LW_UD_BODY2-LGORT
******Change at 2012-09-28
                 AND MBLNR  = LW_UD_BODY2-MBLNR
                .
              IF SY-SUBRC = 0 .
                UPDATE ZZTPP_ZSTZ_BODY2
                   SET BTBHA = LW_UD_BODY2-BTBHA
                      FGPDM  = LW_UD_BODY2-FGPDM
                      FGPMS  = LW_UD_BODY2-FGPMS
                      FGOPH  = LW_UD_BODY2-FGOPH
                      FGDDH  = LW_UD_BODY2-FGDDH
                      YDDH   = LW_UD_BODY2-YDDH
                       ZL    = LW_UD_BODY2-ZL
                       GZ    = LW_UD_BODY2-GZ
                      MBLNR  = LW_UD_BODY2-MBLNR
                      LGORT  = LW_UD_BODY2-LGORT
                 WHERE BTBHA = LW_UD_BODY2-BTBHA
                  AND FGPDM  = LW_UD_BODY2-FGPDM
                  AND FGOPH  = LW_UD_BODY2-FGOPH
                  AND YDDH   = LW_UD_BODY2-YDDH
                  AND FGDDH  = LW_UD_BODY2-FGDDH
                  AND LGORT  = LW_UD_BODY2-LGORT
                  AND GZ     <> 'Y'.
              ELSE.
                INSERT ZZTPP_ZSTZ_BODY2 FROM LW_UD_BODY2.
              ENDIF.
              APPEND LW_UD_BODY2 TO GT_BODY2.
              CONTINUE.
            ENDIF.
          ELSE.
*返工品
            IF LS_MSEG-CHARG+0(1) = '#' OR LS_MSEG-CHARG+0(1) = '^'.


              LW_UD_BODY2-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
              LW_UD_BODY2-FGPDM = LS_MSEG-MATNR.        "返工品代码
              LW_UD_BODY2-FGOPH = LS_MSEG-CHARG.        "返工品批号
              LW_UD_BODY2-FGPMS = GW_MAKTX.             "返工品描述
              CLEAR GW_AUFNR.
              SELECT SINGLE AUFNR
                FROM MSEG
                INTO GW_AUFNR
               WHERE MATNR = LS_MSEG-MATNR
                 AND BWART = '101'
                 AND CHARG = LS_MSEG-CHARG.
              IF SY-SUBRC <> 0.
                "转储的情况考虑在内
                CLEAR GW_CHARG.
                SELECT SINGLE UMCHA
                  FROM MSEG
                  INTO GW_CHARG
                 WHERE MATNR = LS_MSEG-MATNR
                   AND BWART = '309'
                   AND CHARG = LS_MSEG-CHARG.
                CLEAR GW_AUFNR.
                SELECT SINGLE AUFNR
                  FROM MSEG
                  INTO GW_AUFNR
                 WHERE MATNR = LS_MSEG-MATNR
                   AND BWART = '101'
                   AND CHARG = GW_CHARG.
              ENDIF.
              LW_UD_BODY2-YDDH  = GW_AUFNR.            "原订单号
              LW_UD_BODY2-FGDDH = LS_MSEG-AUFNR.       "返工到订单号


              IF LS_MSEG-BWART = '261' OR LS_MSEG-BWART = '122'.
                LW_UD_BODY2-ZL  = LS_MSEG-MENGE .        "重量
              ELSE.
                LW_UD_BODY2-ZL  = - LS_MSEG-MENGE .        "重量
              ENDIF.


              LW_UD_BODY2-MBLNR = LS_MSEG-MBLNR.       "物料凭证编号
              IF LS_MSEG-MBLNR IS NOT INITIAL.
                LW_UD_BODY2-GZ = 'Y'.                  "过账标示
              ENDIF.
              LW_UD_BODY2-LGORT = LS_MSEG-LGORT.       "库存地点


              CLEAR LW_FT.
              LW_FT-AUFNR = LS_MSEG-AUFNR.
              LW_FT-MENGE = LS_MSEG-MENGE.
              APPEND LW_FT TO LT_FT2.


              SELECT BTBHA FGPDM FGOPH FGDDH LGORT
                INTO TABLE  LT_UD_BODY2
                FROM ZZTPP_ZSTZ_BODY2
               WHERE BTBHA = LW_UD_BODY2-BTBHA
                 AND FGPDM  = LW_UD_BODY2-FGPDM
                 AND FGOPH  = LW_UD_BODY2-FGOPH
                 AND YDDH   = LW_UD_BODY2-YDDH
                 AND FGDDH  = LW_UD_BODY2-FGDDH
                 AND LGORT  = LW_UD_BODY2-LGORT
******Change at 2012-09-28
                 AND MBLNR  = LW_UD_BODY2-MBLNR
                .
              IF SY-SUBRC = 0 .
                UPDATE ZZTPP_ZSTZ_BODY2
                   SET BTBHA = LW_UD_BODY2-BTBHA
                      FGPDM  = LW_UD_BODY2-FGPDM
                      FGPMS  = LW_UD_BODY2-FGPMS
                      FGOPH  = LW_UD_BODY2-FGOPH
                      FGDDH  = LW_UD_BODY2-FGDDH
                      YDDH   = LW_UD_BODY2-YDDH
                       ZL    = LW_UD_BODY2-ZL
                       GZ    = LW_UD_BODY2-GZ
                      MBLNR  = LW_UD_BODY2-MBLNR
                      LGORT  = LW_UD_BODY2-LGORT
                 WHERE BTBHA = LW_UD_BODY2-BTBHA
                  AND FGPDM  = LW_UD_BODY2-FGPDM
                  AND FGOPH  = LW_UD_BODY2-FGOPH
                  AND YDDH   = LW_UD_BODY2-YDDH
                  AND FGDDH  = LW_UD_BODY2-FGDDH
                  AND LGORT  = LW_UD_BODY2-LGORT
                  AND GZ     <> 'Y'.
              ELSE.
                INSERT ZZTPP_ZSTZ_BODY2 FROM LW_UD_BODY2.
              ENDIF.
              APPEND LW_UD_BODY2 TO GT_BODY2.
              CONTINUE.
            ELSE.
*原材料 GI 班 棉卷
              IF  ZZTPP_ZSTZ_HEAD-BTBHA+0(2) = 'GI'.
                LW_UD_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
                LW_UD_BODY1-YLDM = LS_MSEG-MATNR.
                LW_UD_BODY1-YLMS = GW_MAKTX.
                LW_UD_BODY1-YLPH = LS_MSEG-CHARG.


                IF LS_MSEG-BWART = '261'.
                  LW_UD_BODY1-ZL = LS_MSEG-MENGE.
                ELSE.
                  LW_UD_BODY1-ZL = - LS_MSEG-MENGE.
                ENDIF.


                LW_UD_BODY1-MBLNR = LS_MSEG-MBLNR.
                IF LS_MSEG-MBLNR IS NOT INITIAL.
                  LW_UD_BODY1-GZ = 'Y'.
                ENDIF.
                LW_UD_BODY1-LGORT = LS_MSEG-LGORT.


                CLEAR LW_FT.
                LW_FT-AUFNR = LS_MSEG-AUFNR.
                LW_FT-MENGE = LS_MSEG-MENGE.
                APPEND LW_FT TO LT_FT1.
                APPEND LW_UD_BODY1 TO GT_BODY1.


                SELECT BTBHA YLDM YLPH LGORT
                  INTO TABLE  LT_UD_BODY1
                  FROM ZZTPP_ZSTZ_BODY1
                 WHERE BTBHA = LW_UD_BODY1-BTBHA
                   AND YLDM  = LW_UD_BODY1-YLDM
                   AND YLPH  = LW_UD_BODY1-YLPH
                   AND LGORT = LW_UD_BODY1-LGORT
*----------------Add at 20120722
                   AND MBLNR = LW_UD_BODY1-MBLNR
                  .
                IF SY-SUBRC = 0 .
                  UPDATE ZZTPP_ZSTZ_BODY1
                     SET BTBHA = LW_UD_BODY1-BTBHA
                         YLDM  = LW_UD_BODY1-YLDM
                         YLMS  = LW_UD_BODY1-YLMS
                         YLPH  = LW_UD_BODY1-YLPH
                         ZL  = LW_UD_BODY1-ZL
                         GZ    = LW_UD_BODY1-GZ
                         MBLNR = LW_UD_BODY1-MBLNR
                         LGORT = LW_UD_BODY1-LGORT
                   WHERE BTBHA = LW_UD_BODY1-BTBHA
                     AND YLDM  = LW_UD_BODY1-YLDM
                     AND YLPH  = LW_UD_BODY1-YLPH
                     AND LGORT = LW_UD_BODY1-LGORT
                     AND  GZ  <> 'Y'.
                ELSE.
                  INSERT ZZTPP_ZSTZ_BODY1 FROM LW_UD_BODY1 .
                ENDIF.
                CONTINUE.
              ELSE.
*返工品
*                LW_UD_BODY2-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*                LW_UD_BODY2-FGPDM = LS_MSEG-MATNR.
*                LW_UD_BODY2-FGOPH = LS_MSEG-CHARG.
*                LW_UD_BODY2-FGPMS = GW_MAKTX.
*                CLEAR GW_AUFNR.
*                SELECT SINGLE AUFNR
*                  FROM MSEG
*                  INTO GW_AUFNR
*                 WHERE MATNR = LS_MSEG-MATNR
*                   AND BWART = '101'
*                   AND CHARG = LS_MSEG-CHARG.
*                LW_UD_BODY2-YDDH  = GW_AUFNR.
*                LW_UD_BODY2-FGDDH = LS_MSEG-AUFNR.
*
*                IF LS_MSEG-BWART = '261' OR LS_MSEG-BWART = '122'.
*                  LW_UD_BODY2-ZL  = LS_MSEG-MENGE .
*                ELSE.
*                  LW_UD_BODY2-ZL  = - LS_MSEG-MENGE .
*                ENDIF.
*
*                LW_UD_BODY2-MBLNR = LS_MSEG-MBLNR.
*                IF LS_MSEG-MBLNR IS NOT INITIAL.
*                  LW_UD_BODY2-GZ = 'Y'.
*                ENDIF.
*                LW_UD_BODY2-LGORT = LS_MSEG-LGORT.
*
*                CLEAR LW_FT.
*                LW_FT-AUFNR = LS_MSEG-AUFNR.
*                LW_FT-MENGE = LS_MSEG-MENGE.
*                APPEND LW_FT TO LT_FT2.
*
*                SELECT BTBHA FGPDM FGOPH FGDDH LGORT
*                  INTO TABLE  LT_UD_BODY2
*                  FROM ZZTPP_ZSTZ_BODY2
*                 WHERE BTBHA = LW_UD_BODY2-BTBHA
*                   AND FGPDM  = LW_UD_BODY2-FGPDM
*                   AND FGOPH  = LW_UD_BODY2-FGOPH
*                   AND YDDH   = LW_UD_BODY2-YDDH
*                   AND FGDDH  = LW_UD_BODY2-FGDDH
*                   AND LGORT  = LW_UD_BODY2-LGORT
*******Change at 2012-09-28
*                   AND MBLNR  = LW_UD_BODY2-MBLNR
*                  .
*                IF SY-SUBRC = 0 .
*                  UPDATE ZZTPP_ZSTZ_BODY2
*                     SET BTBHA = LW_UD_BODY2-BTBHA
*                        FGPDM  = LW_UD_BODY2-FGPDM
*                        FGPMS  = LW_UD_BODY2-FGPMS
*                        FGOPH  = LW_UD_BODY2-FGOPH
*                        FGDDH  = LW_UD_BODY2-FGDDH
*                        YDDH   = LW_UD_BODY2-YDDH
*                         ZL    = LW_UD_BODY2-ZL
*                         GZ    = LW_UD_BODY2-GZ
*                         MBLNR = LW_UD_BODY2-MBLNR
*                         LGORT = LW_UD_BODY2-LGORT
*                   WHERE BTBHA = LW_UD_BODY2-BTBHA
*                    AND FGPDM  = LW_UD_BODY2-FGPDM
*                    AND FGOPH  = LW_UD_BODY2-FGOPH
*                    AND YDDH   = LW_UD_BODY2-YDDH
*                    AND FGDDH  = LW_UD_BODY2-FGDDH
*                    AND LGORT  = LW_UD_BODY2-LGORT
*                    AND GZ     <> 'Y'.
*                ELSE.
*                  INSERT ZZTPP_ZSTZ_BODY2 FROM LW_UD_BODY2.
*                ENDIF.
*                APPEND LW_UD_BODY2 TO GT_BODY2.
*                CONTINUE.


*这样的情况2014-03-19修改,算成原材料
                LW_UD_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
                LW_UD_BODY1-YLDM = LS_MSEG-MATNR.
                LW_UD_BODY1-YLMS = GW_MAKTX.
                LW_UD_BODY1-YLPH = LS_MSEG-CHARG.


                IF LS_MSEG-BWART = '261'.
                  LW_UD_BODY1-ZL = LS_MSEG-MENGE.
                ELSE.
                  LW_UD_BODY1-ZL = - LS_MSEG-MENGE.
                ENDIF.


                LW_UD_BODY1-MBLNR = LS_MSEG-MBLNR.
                IF LS_MSEG-MBLNR IS NOT INITIAL.
                  LW_UD_BODY1-GZ = 'Y'.
                ENDIF.
                LW_UD_BODY1-LGORT = LS_MSEG-LGORT.


                CLEAR LW_FT.
                LW_FT-AUFNR = LS_MSEG-AUFNR.
                LW_FT-MENGE = LS_MSEG-MENGE.
                APPEND LW_FT TO LT_FT1.
                APPEND LW_UD_BODY1 TO GT_BODY1.


                SELECT BTBHA YLDM YLPH LGORT
                  INTO TABLE  LT_UD_BODY1
                  FROM ZZTPP_ZSTZ_BODY1
                 WHERE BTBHA = LW_UD_BODY1-BTBHA
                   AND YLDM  = LW_UD_BODY1-YLDM
                   AND YLPH  = LW_UD_BODY1-YLPH
                   AND LGORT = LW_UD_BODY1-LGORT
*----------------Add at 20120722
                   AND MBLNR = LW_UD_BODY1-MBLNR
                  .
                IF SY-SUBRC = 0 .
                  UPDATE ZZTPP_ZSTZ_BODY1
                     SET BTBHA = LW_UD_BODY1-BTBHA
                         YLDM  = LW_UD_BODY1-YLDM
                         YLMS  = LW_UD_BODY1-YLMS
                         YLPH  = LW_UD_BODY1-YLPH
                         ZL  = LW_UD_BODY1-ZL
                         GZ    = LW_UD_BODY1-GZ
                         MBLNR = LW_UD_BODY1-MBLNR
                         LGORT = LW_UD_BODY1-LGORT
                   WHERE BTBHA = LW_UD_BODY1-BTBHA
                     AND YLDM  = LW_UD_BODY1-YLDM
                     AND YLPH  = LW_UD_BODY1-YLPH
                     AND LGORT = LW_UD_BODY1-LGORT
                     AND  GZ  <> 'Y'.
                ELSE.
                  INSERT ZZTPP_ZSTZ_BODY1 FROM LW_UD_BODY1 .
                ENDIF.
                CONTINUE.


              ENDIF.
            ENDIF.
          ENDIF.


        ELSEIF LS_MSEG-BWART = '102' "冲销直接收货
           OR LS_MSEG-BWART = '123'  "冲销退货
          OR LS_MSEG-BWART = '122'.   "像供应商退货


          IF
             LS_MSEG-BWART = '123' AND
            ( LS_MSEG-CHARG+0(1) = '#' OR LS_MSEG-CHARG+0(1) = '^' )
            OR
             LS_MSEG-BWART = '122' AND
            ( LS_MSEG-CHARG+0(1) = '#' OR LS_MSEG-CHARG+0(1) = '^' ).
*返工品
            LW_UD_BODY2-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
            LW_UD_BODY2-FGPDM = LS_MSEG-MATNR.
            LW_UD_BODY2-FGOPH = LS_MSEG-CHARG.
            LW_UD_BODY2-FGPMS = GW_MAKTX.
            CLEAR GW_AUFNR.
            SELECT SINGLE AUFNR
              FROM MSEG
              INTO GW_AUFNR
             WHERE MATNR = LS_MSEG-MATNR
               AND BWART = '101'
               AND CHARG = LS_MSEG-CHARG.
            IF SY-SUBRC <> 0.
              "转储的情况考虑在内
              CLEAR GW_CHARG.
              SELECT SINGLE UMCHA
                FROM MSEG
                INTO GW_CHARG
               WHERE MATNR = LS_MSEG-MATNR
                 AND BWART = '309'
                 AND CHARG = LS_MSEG-CHARG.
              CLEAR GW_AUFNR.
              SELECT SINGLE AUFNR
                FROM MSEG
                INTO GW_AUFNR
               WHERE MATNR = LS_MSEG-MATNR
                 AND BWART = '101'
                 AND CHARG = GW_CHARG.
            ENDIF.
            LW_UD_BODY2-YDDH  = GW_AUFNR.
            LW_UD_BODY2-FGDDH = LS_MSEG-AUFNR.


            IF LS_MSEG-BWART = '261' OR LS_MSEG-BWART = '122'.
              LW_UD_BODY2-ZL  = LS_MSEG-MENGE .
            ELSE.
              LW_UD_BODY2-ZL  = - LS_MSEG-MENGE .
            ENDIF.


            LW_UD_BODY2-MBLNR = LS_MSEG-MBLNR.
            IF LS_MSEG-MBLNR IS NOT INITIAL.
              LW_UD_BODY2-GZ = 'Y'.
            ENDIF.
            LW_UD_BODY2-LGORT = LS_MSEG-LGORT.


            CLEAR LW_FT.
            LW_FT-AUFNR = LS_MSEG-AUFNR.
            LW_FT-MENGE = LS_MSEG-MENGE.
            APPEND LW_FT TO LT_FT2.


            SELECT BTBHA FGPDM FGOPH FGDDH LGORT
              INTO TABLE  LT_UD_BODY2
              FROM ZZTPP_ZSTZ_BODY2
             WHERE BTBHA = LW_UD_BODY2-BTBHA
               AND FGPDM  = LW_UD_BODY2-FGPDM
               AND FGOPH  = LW_UD_BODY2-FGOPH
               AND YDDH   = LW_UD_BODY2-YDDH
               AND FGDDH  = LW_UD_BODY2-FGDDH
               AND LGORT  = LW_UD_BODY2-LGORT
******Change at 2012-09-28
               AND MBLNR  = LW_UD_BODY2-MBLNR
              .
            IF SY-SUBRC = 0 .
              UPDATE ZZTPP_ZSTZ_BODY2
                 SET BTBHA = LW_UD_BODY2-BTBHA
                    FGPDM  = LW_UD_BODY2-FGPDM
                    FGPMS  = LW_UD_BODY2-FGPMS
                    FGOPH  = LW_UD_BODY2-FGOPH
                    FGDDH  = LW_UD_BODY2-FGDDH
                    YDDH   = LW_UD_BODY2-YDDH
                     ZL    = LW_UD_BODY2-ZL
                     GZ    = LW_UD_BODY2-GZ
                     MBLNR = LW_UD_BODY2-MBLNR
                     LGORT = LW_UD_BODY2-LGORT
               WHERE BTBHA = LW_UD_BODY2-BTBHA
                AND FGPDM  = LW_UD_BODY2-FGPDM
                AND FGOPH  = LW_UD_BODY2-FGOPH
                AND YDDH   = LW_UD_BODY2-YDDH
                AND FGDDH  = LW_UD_BODY2-FGDDH
                AND LGORT  = LW_UD_BODY2-LGORT
                AND GZ     <> 'Y'.
            ELSE.
              INSERT ZZTPP_ZSTZ_BODY2 FROM LW_UD_BODY2.
            ENDIF.
            APPEND LW_UD_BODY2 TO GT_BODY2.
            CONTINUE.
          ELSE.
*冲销的!!!
            IF LS_MSEG-CHARG+0(1) ='#'.                  "待检品批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-DJYPZL = 0 - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT  = LS_MSEG-LGORT.
            ELSEIF LS_MSEG-CHARG+0(1) ='^'.             "不合格批号
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
              LW_UD_BODY3-MAKTX = GW_MAKTX.
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
              LW_UD_BODY3-BHGPZL = 0 - LS_MSEG-MENGE .
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
            ELSE.
              LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA."台班班号
              LW_UD_BODY3-MATNR = LS_MSEG-MATNR.        "成品代码
              LW_UD_BODY3-MAKTX = GW_MAKTX.             "成品描述
              LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.        "产品订单号
              LW_UD_BODY3-HGPZL = 0 - LS_MSEG-MENGE .   "合格品重量
              LW_UD_BODY3-LGORT = LS_MSEG-LGORT.        "库存地点
            ENDIF.
            LW_UD_BODY3-CPCCHEJ =
                LW_UD_BODY3-HGPZL + LW_UD_BODY3-BHGPZL + LW_UD_BODY3-DJYPZL. "成品产出合计
            APPEND LW_UD_BODY3 TO GT_BODY3.
            CONTINUE.
          ENDIF.


        ELSE.
*成品
          IF LS_MSEG-CHARG+0(1) ='#'.                  "待检品批号
            LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
            LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
            LW_UD_BODY3-MAKTX = GW_MAKTX.
            LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
*            LW_UD_BODY3-DJYPZL = LS_MSEG-MENGE .
            IF LS_MSEG-SHKZG = 'S'.
              LW_UD_BODY3-DJYPZL  = LS_MSEG-MENGE.
            ELSE.
              LW_UD_BODY3-DJYPZL  = - LS_MSEG-MENGE.
            ENDIF.
            LW_UD_BODY3-LGORT  = LS_MSEG-LGORT.
          ELSEIF LS_MSEG-CHARG+0(1) ='^'.             "不合格批号
            LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
            LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
            LW_UD_BODY3-MAKTX = GW_MAKTX.
            LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
*            LW_UD_BODY3-BHGPZL = LS_MSEG-MENGE .
            IF LS_MSEG-SHKZG = 'S'.
              LW_UD_BODY3-BHGPZL  = LS_MSEG-MENGE.
            ELSE.
              LW_UD_BODY3-BHGPZL  = - LS_MSEG-MENGE.
            ENDIF.
            LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
          ELSE.                                        "合格批号
            LW_UD_BODY3-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
            LW_UD_BODY3-MATNR = LS_MSEG-MATNR.
            LW_UD_BODY3-MAKTX = GW_MAKTX.
            LW_UD_BODY3-CPDDH = LS_MSEG-AUFNR.
*            LW_UD_BODY3-HGPZL = LS_MSEG-MENGE .
            IF LS_MSEG-SHKZG = 'S'.
              LW_UD_BODY3-HGPZL  = LS_MSEG-MENGE.
            ELSE.
              LW_UD_BODY3-HGPZL  = - LS_MSEG-MENGE.
            ENDIF.
            LW_UD_BODY3-LGORT = LS_MSEG-LGORT.
          ENDIF.
          LW_UD_BODY3-CPCCHEJ = LW_UD_BODY3-HGPZL + LW_UD_BODY3-BHGPZL + LW_UD_BODY3-DJYPZL.
          APPEND LW_UD_BODY3 TO GT_BODY3.
          CONTINUE.
        ENDIF.
      ENDIF.


    ENDLOOP.


*---------------------------------玻纤冲销问题
    IF GT_BODY4 IS NOT INITIAL.
      TYPES : BEGIN OF T_BODY4,
              BTBHA TYPE ZTBBH,"台班班号
              YLDM  TYPE ZBFDM,"波纤/废线代码
              YLPH  TYPE ZBFPH,"批号
              LGORT TYPE LGORT_D,"库存地点
              GZ    TYPE ZGZF,"过账
              ROWCOLOR  TYPE CHAR04,"数据类型
              YLZL  TYPE ZBFZL,"重量
              MBLNR TYPE MBLNR,"物料凭证编号
              YLMS  TYPE ZYLMS2,"余料描述
        END OF T_BODY4.


      DATA : I_BODY4 TYPE STANDARD TABLE OF T_BODY4,
             I_AFTER TYPE STANDARD TABLE OF T_BODY4,
             I_INSERT_BODY4 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY4,
             WA_BODY4 TYPE T_BODY4.


      "MOVE GT_BODY4 TO I_BODY4.
      REFRESH I_BODY4.
      LOOP AT GT_BODY4 INTO LW_UD_BODY4.
        MOVE-CORRESPONDING LW_UD_BODY4 TO WA_BODY4.
        CLEAR : WA_BODY4-MBLNR,
                WA_BODY4-YLMS.
        APPEND WA_BODY4 TO I_BODY4.
      ENDLOOP.
      "已过帐的相同行次合并,为了剔除冲销行项目
      LOOP AT I_BODY4 INTO WA_BODY4.
        COLLECT WA_BODY4 INTO I_AFTER.
      ENDLOOP.


      DELETE I_AFTER WHERE YLZL = 0.
      CLEAR  WA_BODY4.
      LOOP AT I_AFTER INTO WA_BODY4.
        CLEAR LW_UD_BODY4.
        READ TABLE GT_BODY4 INTO LW_UD_BODY4 WITH KEY BTBHA = WA_BODY4-BTBHA
                                                      YLDM = WA_BODY4-YLDM
                                                      YLPH = WA_BODY4-YLPH
                                                      LGORT = WA_BODY4-LGORT
                                                      GZ = WA_BODY4-GZ.
        IF SY-SUBRC = 0.
          WA_BODY4-MBLNR = LW_UD_BODY4-MBLNR.
          WA_BODY4-YLMS = LW_UD_BODY4-YLMS.
        ENDIF.
        MODIFY I_AFTER FROM WA_BODY4.
      ENDLOOP.


      REFRESH I_INSERT_BODY4.
      LOOP AT I_AFTER INTO WA_BODY4.
        MOVE-CORRESPONDING WA_BODY4 TO LW_UD_BODY4.
        APPEND LW_UD_BODY4 TO I_INSERT_BODY4.
      ENDLOOP.


      DELETE FROM ZZTPP_ZSTZ_BODY4 WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
                                    AND   YLDM <> '000000003010300000' AND
                                          YLDM <> '000000003010400000' AND
                                          YLDM <> '000000003100300000' AND
                                          YLDM <> '000000003100100000' AND
                                          YLDM <> '000000003100900000' AND
                                          GZ <> ''.
      IF SY-SUBRC = 0.
        MODIFY ZZTPP_ZSTZ_BODY4 FROM  TABLE I_INSERT_BODY4.
        IF SY-SUBRC = 0.
          COMMIT WORK.
        ELSE.
          ROLLBACK WORK.
        ENDIF.
      ENDIF.
    ENDIF.


*  系统抓取数据与自定义表中数据对比
*    LOOP AT GT_BODY1 INTO LW_UD_BODY1.
*      MOVE-CORRESPONDING LW_UD_BODY1 TO LR_1.
*      APPEND LR_1 TO LT_NEW_BODY1.
*    ENDLOOP.
*    LOOP AT GT_BODY2 INTO LW_UD_BODY2  .
*      MOVE-CORRESPONDING LW_UD_BODY2 TO LR_2.
*      APPEND LR_2 TO LT_NEW_BODY2.
*    ENDLOOP.
*    LOOP AT GT_BODY4 INTO LW_UD_BODY4 .
*      MOVE-CORRESPONDING LW_UD_BODY4 TO LR_4.
*      APPEND LR_4 TO LT_NEW_BODY4.
*    ENDLOOP.
********Change at 2012-05-29 添加    MBLNR
*    SORT LT_NEW_BODY1 BY BTBHA YLDM YLPH LGORT MBLNR.
*    DELETE ADJACENT DUPLICATES FROM LT_NEW_BODY1 COMPARING BTBHA YLDM YLPH LGORT MBLNR.
*    SORT LT_NEW_BODY2 BY BTBHA FGPDM FGOPH YDDH FGDDH LGORT MBLNR.
*    DELETE ADJACENT DUPLICATES FROM LT_NEW_BODY2 COMPARING BTBHA FGPDM FGOPH YDDH FGDDH LGORT MBLNR.
*    SORT LT_NEW_BODY4 BY BTBHA YLDM YLPH LGORT MBLNR.
*    DELETE ADJACENT DUPLICATES FROM LT_NEW_BODY4 COMPARING BTBHA YLDM YLPH LGORT MBLNR.
*
**比较两个内表,得出第二个内表不同于第一个内表的部分
*    CALL FUNCTION 'CTVB_COMPARE_TABLES'
*      EXPORTING
*        TABLE_OLD  = LT_OLD_BODY1[]
*        TABLE_NEW  = LT_NEW_BODY1[]
*        KEY_LENGTH = 22
*      IMPORTING
*        TABLE_DEL  = DEL_1_TAB[].
*    IF DEL_1_TAB[] IS NOT INITIAL.
*      LOOP AT DEL_1_TAB INTO LR_1 .
*        UPDATE ZZTPP_ZSTZ_BODY1
*           SET GZ = ''
*         WHERE BTBHA = LR_1-BTBHA
*           AND YLDM  = LR_1-YLDM
*           AND YLPH  = LR_1-YLPH
*           AND LGORT = LR_1-LGORT
*           AND GZ    = 'Y'.
*        IF SY-SUBRC = 0.
*          IF ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
*            "过账日期写入head不能修改
*            UPDATE ZZTPP_ZSTZ_HEAD
*               SET BUDAT = SY-DATUM
*                   GZ    = ''
*             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*            LOOP AT SCREEN.
*              IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*                SCREEN-INPUT = '1' .
*                MODIFY SCREEN.
*              ENDIF.
*            ENDLOOP.
*          ENDIF.
*        ENDIF.
*      ENDLOOP.
*    ENDIF.
*
*    CALL FUNCTION 'CTVB_COMPARE_TABLES'
*      EXPORTING
*        TABLE_OLD  = LT_OLD_BODY2[]
*        TABLE_NEW  = LT_NEW_BODY2[]
*        KEY_LENGTH = 22
*      IMPORTING
*        TABLE_DEL  = DEL_2_TAB[].
*    IF DEL_2_TAB[] IS NOT INITIAL.
*      LOOP AT DEL_2_TAB INTO LR_2 .
*        UPDATE ZZTPP_ZSTZ_BODY2
*           SET GZ = ''
*         WHERE BTBHA = LR_2-BTBHA
*           AND FGPDM = LR_2-FGPDM
*           AND FGOPH = LR_2-FGOPH
*           AND YDDH  = LR_2-YDDH
*           AND FGDDH = LR_2-FGDDH
*           AND LGORT = LR_2-LGORT
*           AND GZ    = 'Y'.
*        IF SY-SUBRC = 0.
*          IF ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
*            "过账日期写入head不能修改
*            UPDATE ZZTPP_ZSTZ_HEAD
*               SET BUDAT = SY-DATUM
*                   GZ    = ''
*             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*            LOOP AT SCREEN.
*              IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*                SCREEN-INPUT = '1' .
*                MODIFY SCREEN.
*              ENDIF.
*            ENDLOOP.
*          ENDIF.
*        ENDIF.
*      ENDLOOP.
*    ENDIF.
*
*    CALL FUNCTION 'CTVB_COMPARE_TABLES'
*      EXPORTING
*        TABLE_OLD  = LT_OLD_BODY4[]
*        TABLE_NEW  = LT_NEW_BODY4[]
*        KEY_LENGTH = 22
*      IMPORTING
*        TABLE_DEL  = DEL_4_TAB[].
*    IF DEL_4_TAB[] IS NOT INITIAL.
*      LOOP AT DEL_4_TAB INTO LR_4 .
*        UPDATE ZZTPP_ZSTZ_BODY4
*           SET GZ = ''
*         WHERE BTBHA = LR_4-BTBHA
*           AND YLDM  = LR_4-YLDM
*           AND YLPH  = LR_4-YLPH
*           AND LGORT = LR_4-LGORT
*           AND GZ    = 'Y'.
*        IF SY-SUBRC = 0.
*          IF ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
*            "过账日期写入head不能修改
*            UPDATE ZZTPP_ZSTZ_HEAD
*               SET BUDAT = SY-DATUM
*                   GZ    = ''
*             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*            LOOP AT SCREEN.
*              IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*                SCREEN-INPUT = '1' .
*                MODIFY SCREEN.
*              ENDIF.
*            ENDLOOP.
*          ENDIF.
*        ENDIF.
*      ENDLOOP.
*    ENDIF.


    SORT GT_BODY3 BY BTBHA MATNR CPDDH LGORT.
    CLEAR LW_UD_BODY3.
    REFRESH GT_HUIZONG.
    LOOP AT GT_BODY3 INTO LW_UD_BODY3.  "对成品表中相同数据汇总
      GW_HUIZONG-BTBHA = LW_UD_BODY3-BTBHA.
      GW_HUIZONG-MATNR = LW_UD_BODY3-MATNR.
      GW_HUIZONG-MAKTX = LW_UD_BODY3-MAKTX.
      GW_HUIZONG-CPDDH = LW_UD_BODY3-CPDDH.
      GW_HUIZONG-LGORT = LW_UD_BODY3-LGORT.
      GW_HUIZONG-HGPZL = LW_UD_BODY3-HGPZL.
      GW_HUIZONG-BHGPZL = LW_UD_BODY3-BHGPZL.
      GW_HUIZONG-DJYPZL = LW_UD_BODY3-DJYPZL.
      GW_HUIZONG-CPCCHEJ = LW_UD_BODY3-CPCCHEJ.
      COLLECT GW_HUIZONG INTO GT_HUIZONG.
    ENDLOOP.


*Delete vlild order
    DELETE GT_HUIZONG WHERE HGPZL = 0
                        AND BHGPZL = 0
                        AND DJYPZL = 0
                        AND CPCCHEJ = 0.


*删除多余的收货行次--------用于收货时录错了台班班号的情况
    REFRESH GT_BODY3.
    CLEAR LW_UD_BODY3.
    SELECT * INTO TABLE GT_BODY3
      FROM ZZTPP_ZSTZ_BODY3
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    IF LINES( GT_BODY3 ) > 0.
      LOOP AT GT_BODY3 INTO LW_UD_BODY3.
        CLEAR : GW_HUIZONG.
        READ TABLE GT_HUIZONG INTO GW_HUIZONG WITH KEY MATNR = LW_UD_BODY3-MATNR
                                                       CPDDH = LW_UD_BODY3-CPDDH
                                                       LGORT = LW_UD_BODY3-LGORT.
        IF SY-SUBRC <> 0.
          DELETE ZZTPP_ZSTZ_BODY3 FROM LW_UD_BODY3.
          CONTINUE.
        ENDIF.
      ENDLOOP.
    ENDIF.
    REFRESH GT_BODY3.
    CLEAR LW_UD_BODY3.


    LOOP AT GT_HUIZONG INTO GW_HUIZONG.
      MODIFY ZZTPP_ZSTZ_BODY3 FROM GW_HUIZONG.
      "      UPDATE zztpp_zstz_body3
      "         SET maktx = gw_huizong-maktx
      "             hgpzl = gw_huizong-hgpzl
      "             bhgpzl = gw_huizong-bhgpzl
      "             djypzl = gw_huizong-djypzl
      "             cpcchej = gw_huizong-cpcchej
      "       WHERE btbha = gw_huizong-btbha
      "         AND matnr = gw_huizong-matnr
      "         AND cpddh = gw_huizong-cpddh.
    ENDLOOP.


*使用返工品比较内表,给成品订单分配返工品
    REFRESH GT_BODY2.
    REFRESH GT_FGDDH.
    REFRESH GT_XTDD.
*取当前台班的已存返工品信息
    SELECT *
      FROM ZZTPP_ZSTZ_BODY2
      INTO TABLE GT_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR LW_UD_BODY2.
*区分相同订单或者不同订单的返工品
    LOOP AT GT_BODY2 INTO LW_UD_BODY2.      "返工品订单与原订单相同时,将数据分到成品表中对应字段
      IF LW_UD_BODY2-YDDH = LW_UD_BODY2-FGDDH.
        GW_XTDD-YDDH  = LW_UD_BODY2-YDDH.
        GW_XTDD-FGDDH = LW_UD_BODY2-FGDDH.
        GW_XTDD-LGORT = LW_UD_BODY2-LGORT.                  "2014-01-27
        GW_XTDD-ZL    = LW_UD_BODY2-ZL.
        COLLECT GW_XTDD INTO GT_XTDD.
      ENDIF.
      GW_FGDDH-FGDDH = LW_UD_BODY2-FGDDH.
      GW_FGDDH-LGORT = LW_UD_BODY2-LGORT.                   "2014-01-27
      GW_FGDDH-ZL    = LW_UD_BODY2-ZL.
      COLLECT GW_FGDDH INTO GT_FGDDH.
    ENDLOOP.


*原料产出合计 -  多余步骤
    CLEAR LW_UD_BODY3.
    LOOP AT GT_HUIZONG INTO LW_UD_BODY3.
      LW_UD_BODY3-YLCCHJ = LW_UD_BODY3-CPCCHEJ - LW_UD_BODY3-FGP.
      UPDATE ZZTPP_ZSTZ_BODY3
         SET YLCCHJ = LW_UD_BODY3-YLCCHJ
          WHERE BTBHA  = LW_UD_BODY3-BTBHA
            AND MATNR  = LW_UD_BODY3-MATNR
            AND CPDDH  = LW_UD_BODY3-CPDDH
            AND LGORT  = LW_UD_BODY3-LGORT.
    ENDLOOP.


*计算原料产出
    CLEAR LW_UD_BODY3.
    LOOP AT GT_FGDDH INTO GW_FGDDH.   "不同订单
      SELECT SINGLE * INTO LW_UD_BODY3
       FROM ZZTPP_ZSTZ_BODY3
      WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
        AND CPDDH  = GW_FGDDH-FGDDH
        AND LGORT  = GW_FGDDH-LGORT.                        "2014-01-27
      IF SY-SUBRC = 0.
        LW_UD_BODY3-FGP = GW_FGDDH-ZL.
        LW_UD_BODY3-YLCCHJ = LW_UD_BODY3-CPCCHEJ - LW_UD_BODY3-FGP."不同订单的需要减去
        "如果为负数为没有原料的情况,纯返工订单,此项目为0 --修改 :2013-11-15
        IF  LW_UD_BODY3-YLCCHJ <= 0.
          LW_UD_BODY3-YLCCHJ = 0.
        ENDIF.
      ELSE.
*要是比如不同订单的L001返工至L002就不能将库位条件加入选择项
*要是有L001和L002的同时返工到一个仓位中,需要累加处理     --修改 :2014-09-15
        SELECT SINGLE * INTO LW_UD_BODY3
          FROM ZZTPP_ZSTZ_BODY3
         WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
           AND CPDDH  = GW_FGDDH-FGDDH.
        IF SY-SUBRC = 0.
          LW_UD_BODY3-FGP = LW_UD_BODY3-FGP + GW_FGDDH-ZL.
          LW_UD_BODY3-YLCCHJ = LW_UD_BODY3-CPCCHEJ - LW_UD_BODY3-FGP."不同订单的需要减去
          "如果为负数为没有原料的情况,纯返工订单,此项目为0 --修改 :2013-11-15
          IF  LW_UD_BODY3-YLCCHJ <= 0.
            LW_UD_BODY3-YLCCHJ = 0.
          ENDIF.
        ENDIF.
      ENDIF.


*更新数据库表返工品重量和原来产出合计
      UPDATE ZZTPP_ZSTZ_BODY3
        SET FGP  = LW_UD_BODY3-FGP
            YLCCHJ = LW_UD_BODY3-YLCCHJ
      WHERE BTBHA  = LW_UD_BODY3-BTBHA
        AND MATNR  = LW_UD_BODY3-MATNR
        AND CPDDH  = LW_UD_BODY3-CPDDH
        AND LGORT  = LW_UD_BODY3-LGORT.
    ENDLOOP.


*成品产量 = 成品产出合计
    REFRESH GT_BODY3."成品信息Tab表
    SELECT * INTO TABLE GT_BODY3
      FROM ZZTPP_ZSTZ_BODY3
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*计算产品产量
    LOOP AT GT_BODY3 INTO LW_UD_BODY3 .
      LW_UD_BODY3-CPCL = LW_UD_BODY3-CPCCHEJ.
      UPDATE ZZTPP_ZSTZ_BODY3
         SET CPCL   = LW_UD_BODY3-CPCL
       WHERE BTBHA  = LW_UD_BODY3-BTBHA
         AND MATNR  = LW_UD_BODY3-MATNR
         AND CPDDH  = LW_UD_BODY3-CPDDH
         AND LGORT  = LW_UD_BODY3-LGORT.
    ENDLOOP.


*同一订单的报工扣减
    CLEAR LW_UD_BODY3.
    CLEAR GW_XTDD."同一订单的分配表
    LOOP AT GT_XTDD INTO GW_XTDD.
      SELECT SINGLE * INTO LW_UD_BODY3
        FROM ZZTPP_ZSTZ_BODY3
       WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
         AND CPDDH  = GW_XTDD-FGDDH
         AND LGORT  = GW_XTDD-LGORT.                        "2014-01-27
*如果是同一订单的话报工产量需要扣减,因为之前的台班肯定报工过了
      IF SY-SUBRC = 0.
        LW_UD_BODY3-CPCL = LW_UD_BODY3-CPCCHEJ - GW_XTDD-ZL.
      ELSE.
        SELECT SINGLE * INTO LW_UD_BODY3
          FROM ZZTPP_ZSTZ_BODY3
         WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
           AND CPDDH  = GW_XTDD-FGDDH.
        IF SY-SUBRC = 0.
          LW_UD_BODY3-CPCL = LW_UD_BODY3-CPCCHEJ - GW_XTDD-ZL.
        ENDIF.
      ENDIF.
      UPDATE ZZTPP_ZSTZ_BODY3
        SET CPCL   = LW_UD_BODY3-CPCL
      WHERE BTBHA  = LW_UD_BODY3-BTBHA
        AND MATNR  = LW_UD_BODY3-MATNR
        AND CPDDH  = LW_UD_BODY3-CPDDH
        AND LGORT  = LW_UD_BODY3-LGORT.
    ENDLOOP.


*原材料投入数量合计
    REFRESH GT_BODY1."原料信息Tab表
    SELECT * INTO TABLE GT_BODY1
      FROM ZZTPP_ZSTZ_BODY1
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR : LW_UD_BODY1,
            GW_BODY1_SUM.
    IF GT_BODY1 IS NOT INITIAL.
      LOOP AT GT_BODY1 INTO LW_UD_BODY1.
        GW_BODY1_SUM = GW_BODY1_SUM + LW_UD_BODY1-ZL."投入总量
      ENDLOOP.
    ENDIF.


*原料产出合计
    REFRESH GT_BODY3."成品信息Tab表
    SELECT * INTO TABLE GT_BODY3
      FROM ZZTPP_ZSTZ_BODY3
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR : LW_UD_BODY3,
            GW_BODY3_SUM,
            GW_CPCLSUM.
    IF GT_BODY3 IS NOT INITIAL.
      LOOP AT GT_BODY3 INTO LW_UD_BODY3.
        GW_BODY3_SUM = GW_BODY3_SUM + LW_UD_BODY3-YLCCHJ. "原料产出总量
        GW_CPCLSUM = GW_CPCLSUM + LW_UD_BODY3-CPCL.       "产量
      ENDLOOP.
    ENDIF.


*波纤产出合计
    REFRESH GT_BODY4."玻纤/余料信息Tab表
    SELECT * INTO TABLE GT_BODY4
      FROM ZZTPP_ZSTZ_BODY4
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR : LW_UD_BODY4,
            GW_BODY4_SUM.
    IF GT_BODY3 IS NOT INITIAL.
      LOOP AT GT_BODY4 INTO LW_UD_BODY4.
        GW_BODY4_SUM = GW_BODY4_SUM + LW_UD_BODY4-YLZL.
      ENDLOOP.
    ENDIF.


    SORT LT_FT1 BY AUFNR.
    CLEAR LW_FT.
    LOOP AT LT_FT1 INTO LW_FT.
      COLLECT LW_FT INTO LT_HZ_FT1.
    ENDLOOP.


    SORT LT_FT2 BY AUFNR.
    CLEAR LW_FT.
    LOOP AT LT_FT2 INTO LW_FT.
      COLLECT LW_FT INTO LT_HZ_FT2.
    ENDLOOP.


    SORT LT_FT4 BY AUFNR.
    CLEAR LW_FT.
    LOOP AT LT_FT4 INTO LW_FT.
      COLLECT LW_FT INTO LT_HZ_FT4.
    ENDLOOP.


*过账日期
    DATA LV_DAT TYPE D.
    DATA LV_BTBHA TYPE BKTXT.
    TYPES : BEGIN OF T_LAP.
            INCLUDE STRUCTURE  ZZTPP_ZSTZ_BODY3.
    TYPES :  STDWAGE  TYPE ZSTDWAGE.",班组计件工资标准(元/吨)
    TYPES : END OF T_LAP.
    DATA :
        LV_SUM TYPE ZZTPP_ZSTZ_BODY3-CPCL,
        I_LAP TYPE STANDARD TABLE OF T_LAP,
        WA_LAP TYPE  T_LAP.


    IF ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
      IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'M'.
        REFRESH I_LAP.
        CLEAR : LV_SUM.
        LOOP AT GT_BODY3 INTO LW_UD_BODY3.
          CLEAR : WA_LAP.
          MOVE-CORRESPONDING LW_UD_BODY3 TO WA_LAP.
          SELECT SINGLE STDWAGE
            FROM ZWAGE
            INTO WA_LAP-STDWAGE
            WHERE MATNR = WA_LAP-MATNR.


          LV_SUM = LV_SUM + WA_LAP-STDWAGE * WA_LAP-CPCL / 1000.
          APPEND WA_LAP TO I_LAP.
        ENDLOOP.
      ENDIF.
    ENDIF.


    LOOP AT GT_BODY3 INTO LW_UD_BODY3.
*机器工时人工工时分摊
      REFRESH LT_AFRU.
      SELECT AUFNR LTXA1 ISM01 ISM02 ISM03 BUDAT
        INTO TABLE LT_AFRU
        FROM AFRU
       WHERE AUFNR = LW_UD_BODY3-CPDDH
         AND LTXA1 = ZZTPP_ZSTZ_HEAD-BTBHA
         AND STOKZ <> 'X'
         AND STZHL = ''.
      CLEAR : LV_DAT ,LV_BTBHA .
      IF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 8.
        CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+2(6) INTO LV_DAT.
        LV_BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA+0(2).
      ELSEIF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 10.
        CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+4(6) INTO LV_DAT.
        LV_BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA+0(4).
      ENDIF.


      SELECT AUFNR LTXA1 BUDAT ISM01 ISM02 ISM03
         APPENDING CORRESPONDING FIELDS OF TABLE LT_AFRU
        FROM AFRU
       WHERE BUDAT = LV_DAT
         AND AUFNR = LW_UD_BODY3-CPDDH
         AND LTXA1 = ''
         AND LOGRP = LV_BTBHA
         AND STOKZ <> 'X'
         AND STZHL = ''.


      IF ZZTPP_ZSTZ_HEAD-GZ = 'Y' AND LT_AFRU IS NOT INITIAL.
        IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'M'. " -----------棉卷班的分摊法则
          CLEAR : WA_LAP.
          READ TABLE I_LAP INTO WA_LAP WITH KEY MATNR = LW_UD_BODY3-MATNR
                                                CPDDH = LW_UD_BODY3-CPDDH
                                                LGORT = LW_UD_BODY3-LGORT.
          IF SY-SUBRC = 0.
            "机器工时
            LW_UD_BODY3-JQFT = ( ZZTPP_ZSTZ_HEAD-QTTJSJ * WA_LAP-CPCL * WA_LAP-STDWAGE / 1000 ) / LV_SUM.
            "人工工时
            LW_UD_BODY3-RGFT = ( ZZTPP_ZSTZ_HEAD-BZWZS * WA_LAP-CPCL * WA_LAP-STDWAGE / 1000 )  / LV_SUM.
            "用电工时
            LW_UD_BODY3-YDFT = ( ZZTPP_ZSTZ_HEAD-QTTJSJ * WA_LAP-CPCL * WA_LAP-STDWAGE / 1000 ) / LV_SUM.
          ENDIF.
        ELSE.                "-------------------其余班的分摊法则
          LW_UD_BODY3-JQFT = ( ZZTPP_ZSTZ_HEAD-QTTJSJ / GW_CPCLSUM ) * LW_UD_BODY3-CPCL. "机器
          LW_UD_BODY3-RGFT = ( ZZTPP_ZSTZ_HEAD-BZWZS / GW_CPCLSUM ) * LW_UD_BODY3-CPCL."人工
          LW_UD_BODY3-YDFT = ( ZZTPP_ZSTZ_HEAD-QTTJSJ / GW_CPCLSUM ) * LW_UD_BODY3-CPCL."用电
        ENDIF.


        MODIFY ZZTPP_ZSTZ_BODY3 FROM LW_UD_BODY3.


      ELSE.
*抓取各工时分摊  ------ZPP110报工作成
        REFRESH LT_AFRU.
        SELECT AUFNR LTXA1 ISM01 ISM02 ISM03 BUDAT
          INTO TABLE LT_AFRU
          FROM AFRU
         WHERE AUFNR = LW_UD_BODY3-CPDDH
           AND LTXA1 = ZZTPP_ZSTZ_HEAD-BTBHA
           AND STOKZ <> 'X'
           AND STZHL = ''.


        IF LT_AFRU IS NOT INITIAL.


          CLEAR : LV_DAT ,LV_BTBHA .
          IF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 8.
            CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+2(6) INTO LV_DAT.
            LV_BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA+0(2).
          ELSEIF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 10.
            CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+4(6) INTO LV_DAT.
            LV_BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA+0(4).
          ENDIF.


          SELECT AUFNR LTXA1 BUDAT ISM01 ISM02 ISM03
             APPENDING CORRESPONDING FIELDS OF TABLE LT_AFRU
            FROM AFRU
           WHERE BUDAT = LV_DAT
             AND AUFNR = LW_UD_BODY3-CPDDH
             AND LTXA1 = ''
             AND LOGRP = LV_BTBHA
             AND STOKZ <> 'X'
             AND STZHL = ''.


          LOOP AT LT_AFRU INTO LW_AFRU.
*          COLLECT LW_AFRU INTO LT_GS_AFRU.
            LW_UD_BODY3-JQFT = LW_UD_BODY3-JQFT + LW_AFRU-ISM01.
            LW_UD_BODY3-RGFT = LW_UD_BODY3-RGFT + LW_AFRU-ISM02.
            LW_UD_BODY3-YDFT = LW_UD_BODY3-YDFT + LW_AFRU-ISM03.
          ENDLOOP.
          CLEAR LW_AFRU.
*        READ TABLE LT_GS_AFRU INTO LW_AFRU INDEX 1.
*        LW_UD_BODY3-JQFT = LW_AFRU-ISM02.
*        LW_UD_BODY3-RGFT = LW_AFRU-ISM01.
*        LW_UD_BODY3-YDFT = LW_AFRU-ISM03.
*******Change at + 20120611
*        LW_UD_BODY3-JQFT = LW_AFRU-ISM01.
*        LW_UD_BODY3-RGFT = LW_AFRU-ISM02.
*        LW_UD_BODY3-YDFT = LW_AFRU-ISM03.


          MODIFY ZZTPP_ZSTZ_BODY3 FROM LW_UD_BODY3.


          IF ZZTPP_ZSTZ_HEAD-GZ = ''.
            ZZTPP_ZSTZ_HEAD-BUDAT = LW_AFRU-BUDAT.
            ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
            REFRESH:GT_HEAD.
            APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
            MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
          ENDIF.


        ELSE.


*******Change at + 20120613
*抓取各工时分摊  ------CO12报工作成
          CLEAR : LV_DAT , LV_BTBHA .
          IF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 8.
            CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+2(6) INTO LV_DAT.
            LV_BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA+0(2).
          ELSEIF STRLEN( ZZTPP_ZSTZ_HEAD-BTBHA ) = 10.
            CONCATENATE '20' ZZTPP_ZSTZ_HEAD-BTBHA+4(6) INTO LV_DAT.
            LV_BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA+0(4).
          ENDIF.


          SELECT AUFNR LTXA1 BUDAT ISM01 ISM02 ISM03
             INTO CORRESPONDING FIELDS OF TABLE LT_AFRU
            FROM AFRU
           WHERE BUDAT = LV_DAT
             AND AUFNR = LW_UD_BODY3-CPDDH
             AND LTXA1 = ''
             AND LOGRP = LV_BTBHA
             AND STOKZ <> 'X'
             AND STZHL = ''.


          IF LT_AFRU IS NOT INITIAL.
            LOOP AT LT_AFRU INTO LW_AFRU.
              LW_UD_BODY3-JQFT = LW_UD_BODY3-JQFT + LW_AFRU-ISM01.
              LW_UD_BODY3-RGFT = LW_UD_BODY3-RGFT + LW_AFRU-ISM02.
              LW_UD_BODY3-YDFT = LW_UD_BODY3-YDFT + LW_AFRU-ISM03.
            ENDLOOP.
            CLEAR LW_AFRU.


            MODIFY ZZTPP_ZSTZ_BODY3 FROM LW_UD_BODY3.


            IF ZZTPP_ZSTZ_HEAD-GZ = ''.
              ZZTPP_ZSTZ_HEAD-BUDAT = LW_AFRU-BUDAT.
              ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
              REFRESH:GT_HEAD.
              APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
              MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
            ENDIF.


          ELSE.
*******Change at + 20120614
*          CLEAR: ZZTPP_ZSTZ_HEAD-GZ .
*          REFRESH:GT_HEAD.
*          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
*          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.


            IF ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
              ZZTPP_ZSTZ_HEAD-BUDAT = LV_DAT.
              ZZTPP_ZSTZ_HEAD-GZ = ''.
              REFRESH:GT_HEAD.
              APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
              MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
              CLEAR : LV_DAT.
            ENDIF.


          ENDIF.
        ENDIF.
      ENDIF.


      "原料分摊
      LW_UD_BODY3-YLFT = GW_BODY1_SUM *  (  LW_UD_BODY3-YLCCHJ / GW_BODY3_SUM ).
      UPDATE ZZTPP_ZSTZ_BODY3
         SET YLFT = LW_UD_BODY3-YLFT
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
         AND MATNR = LW_UD_BODY3-MATNR
         AND CPDDH = LW_UD_BODY3-CPDDH
         AND LGORT = LW_UD_BODY3-LGORT.


      "余料分摊
      LW_UD_BODY3-BXFX = GW_BODY4_SUM *  (  LW_UD_BODY3-YLCCHJ / GW_BODY3_SUM  ).
      UPDATE ZZTPP_ZSTZ_BODY3
         SET BXFX = LW_UD_BODY3-BXFX
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
         AND MATNR = LW_UD_BODY3-MATNR
         AND CPDDH = LW_UD_BODY3-CPDDH
         AND LGORT = LW_UD_BODY3-LGORT.
      "        "原料分摊
      "        clear lw_ft.
      "        loop at lt_hz_ft1 into lw_ft where aufnr = lw_ud_body3-cpddh.
      "           UPDATE zztpp_zstz_body3
      "              SET ylft =  lw_ft-menge
      "            WHERE btbha = zztpp_zstz_head-btbha
      "              AND matnr = lw_ud_body3-matnr
      "              AND cpddh = lw_ud_body3-cpddh
      "              AND lgort = lw_ud_body3-lgort.
      "        endloop.
      "        "返工品分摊
      "        clear lw_ft.
      "        loop at lt_hz_ft2 into lw_ft where aufnr = lw_ud_body3-cpddh.
      "           UPDATE zztpp_zstz_body3
      "              SET fgp   =  lw_ft-menge
      "            WHERE btbha = zztpp_zstz_head-btbha
      "              AND matnr = lw_ud_body3-matnr
      "              AND cpddh = lw_ud_body3-cpddh
      "              AND lgort = lw_ud_body3-lgort.
      "        endloop.
      "        "余料分摊
      "        clear lw_ft.
      "        loop at lt_hz_ft4 into lw_ft where aufnr = lw_ud_body3-cpddh.
      "           UPDATE zztpp_zstz_body3
      "              SET bxfx  =  lw_ft-menge
      "            WHERE btbha = zztpp_zstz_head-btbha
      "              AND matnr = lw_ud_body3-matnr
      "              AND cpddh = lw_ud_body3-cpddh
      "              AND lgort = lw_ud_body3-lgort.
      "        endloop.
      MODIFY GT_BODY3 FROM LW_UD_BODY3.
    ENDLOOP.
*    ENDIF.


*报工确认AFRU中取得的班组出勤总工时跟机器运行时间
    IF ZZTPP_ZSTZ_HEAD-BZWZS IS INITIAL.
      CLEAR :ZZTPP_ZSTZ_HEAD-BZWZS.
      LOOP AT GT_BODY3 INTO LW_UD_BODY3.
        ZZTPP_ZSTZ_HEAD-BZWZS = ZZTPP_ZSTZ_HEAD-BZWZS + LW_UD_BODY3-RGFT.
      ENDLOOP.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-QTTJSJ IS INITIAL.
      CLEAR :ZZTPP_ZSTZ_HEAD-QTTJSJ.
      LOOP AT GT_BODY3 INTO LW_UD_BODY3.
        ZZTPP_ZSTZ_HEAD-QTTJSJ = ZZTPP_ZSTZ_HEAD-QTTJSJ + LW_UD_BODY3-JQFT.
      ENDLOOP.
    ENDIF.




    REFRESH:GT_HEAD.
* 当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
    PERFORM CL_SL_SL_DATA .
    APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
    MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.


* 已过帐行变色
    PERFORM FILL_ROWCOLOR.


* Fill the dynamic tables with data
    PERFORM FILL_DYNAMIC_TABLE.
    CALL METHOD OBJ_MY_ALV_GRID1->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID2->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID3->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID4->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID5->REFRESH_TABLE_DISPLAY.
  ENDIF.


ENDFORM.                    " UPDATE_DATA
*&---------------------------------------------------------------------*
*&      Form  SEARCH_DATA
*&---------------------------------------------------------------------*
*    查询数据
*----------------------------------------------------------------------*
FORM SEARCH_DATA .
  DATA: LW_HEAD  TYPE ZZTPP_ZSTZ_HEAD.
  DATA LW_SH_BUDAT(8).
  CLEAR: LW_HEAD.
  CHECK ZZTPP_ZSTZ_HEAD-BTBHA IS NOT INITIAL.
  SELECT SINGLE *
    INTO LW_HEAD
    FROM ZZTPP_ZSTZ_HEAD
    WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA. "台班编号
  IF SY-SUBRC = 0.
    ZZTPP_ZSTZ_HEAD-BUDAT = LW_HEAD-BUDAT.
    PERFORM FILL_DYNAMIC_TABLE.
    CALL METHOD OBJ_MY_ALV_GRID1->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID2->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID3->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID4->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID5->REFRESH_TABLE_DISPLAY.
    ZZTPP_ZSTZ_HEAD-JZHAO = LW_HEAD-JZHAO.
    ZZTPP_ZSTZ_HEAD-DBCCL = LW_HEAD-DBCCL.
    ZZTPP_ZSTZ_HEAD-DBHSL = LW_HEAD-DBHSL.
    ZZTPP_ZSTZ_HEAD-DBSHL = LW_HEAD-DBSHL.
    ZZTPP_ZSTZ_HEAD-BB1YB = LW_HEAD-BB1YB.
    ZZTPP_ZSTZ_HEAD-BZWZS = LW_HEAD-BZWZS.
    ZZTPP_ZSTZ_HEAD-SBQSJS = LW_HEAD-SBQSJS.
    ZZTPP_ZSTZ_HEAD-SBZZJS = LW_HEAD-SBZZJS.
    ZZTPP_ZSTZ_HEAD-SBJXSJ = LW_HEAD-SBJXSJ.
    ZZTPP_ZSTZ_HEAD-QTTJSJ = LW_HEAD-QTTJSJ.
    ZZTPP_ZSTZ_HEAD-XHZL  = LW_HEAD-XHZL.
    ZZTPP_ZSTZ_HEAD-ZBBZ  = LW_HEAD-ZBBZ.
    ZZTPP_ZSTZ_HEAD-ZJY   = LW_HEAD-ZJY.
    ZZTPP_ZSTZ_HEAD-SCZG  = LW_HEAD-SCZG.
    ZZTPP_ZSTZ_HEAD-MDBS  = LW_HEAD-MDBS.
    ZZTPP_ZSTZ_HEAD-GZ    = LW_HEAD-GZ.
  ELSE.
*    查询数据失败
    MESSAGE S001(00) WITH '数据不存在!' DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.                    " SEARCH_DATA
*&---------------------------------------------------------------------*
*&      Form  SAVEH_DATA
*&---------------------------------------------------------------------*
*    保存头数据
*----------------------------------------------------------------------*
FORM SAVEH_DATA .
  DATA: STRT1(7) TYPE C,"设备起始计时整数部分
        STRT2(7) TYPE C,"设备终止计时整数部分
        STRF1    TYPE P DECIMALS 2,"设备起始计时小数部分
        STRF2    TYPE P DECIMALS 2."设备终止计时小数部分
  DATA: LW_SH_HEAD TYPE ZZTPP_ZSTZ_HEAD.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  CHECK ZZTPP_ZSTZ_HEAD-BTBHA IS NOT INITIAL.


  "设备运行时间计算
*  STRT1 = TRUNC( ZZTPP_ZSTZ_HEAD-SBQSJS ) .
*  STRT2 = TRUNC( ZZTPP_ZSTZ_HEAD-SBZZJS ) .
*  STRF1 = ( FRAC( ZZTPP_ZSTZ_HEAD-SBQSJS ) * 100 ) / 60.
*  STRF2 = ( FRAC( ZZTPP_ZSTZ_HEAD-SBZZJS ) * 100 ) / 60.
*  ZZTPP_ZSTZ_HEAD-QTTJSJ =  STRT2 + STRF2 - STRT1 - STRF1.
  ZZTPP_ZSTZ_HEAD-QTTJSJ = ZZTPP_ZSTZ_HEAD-SBZZJS - ZZTPP_ZSTZ_HEAD-SBQSJS.


*班组平均计件工时
  IF ZZTPP_ZSTZ_HEAD-AVEJJ IS INITIAL AND ZZTPP_ZSTZ_HEAD-BTBHA+(1) = 'G'.
    ZZTPP_ZSTZ_HEAD-AVEJJ = ZZTPP_ZSTZ_HEAD-BZWZS / 5.
  ENDIF.


  SELECT  SINGLE * INTO LW_SH_HEAD
   FROM ZZTPP_ZSTZ_HEAD
  WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  IF LW_SH_HEAD-GZ = 'Y'.
*******Change at + 20120613
*    IF LW_SH_HEAD-BZWZS <> ZZTPP_ZSTZ_HEAD-BZWZS
*      OR LW_SH_HEAD-SBQSJS <> ZZTPP_ZSTZ_HEAD-SBQSJS
*      OR LW_SH_HEAD-SBZZJS <> ZZTPP_ZSTZ_HEAD-SBZZJS.
    MESSAGE S001(00) WITH '收货已过帐!' DISPLAY LIKE 'E'.
    EXIT.
*    ELSE.
*      REFRESH:GT_HEAD.
*      "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
*      PERFORM CL_SL_SL_DATA .
*    ENDIF.
  ELSE.
    IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'V'"铁铬铝车间暂时不做控制
      AND ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'S'"烧结车间暂时不做控制
      AND ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'P'."铺毡车间暂时不做控制
      IF ZZTPP_ZSTZ_HEAD-BZWZS > 200.
        MESSAGE S001(00) WITH '班组出勤总工时不能大于200!' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
*******Change at + 20120612
      IF ZZTPP_ZSTZ_HEAD-BTBHA+(1) <> 'Z'. "振切铜棉
        IF ZZTPP_ZSTZ_HEAD-QTTJSJ  > 20 OR ZZTPP_ZSTZ_HEAD-QTTJSJ < 0  .
          MESSAGE S001(00) WITH '设备终止计时间与设备起始计时间之差应在0~20之间!' DISPLAY LIKE 'E'.
          EXIT.
        ELSE.
        ENDIF.
      ENDIF.


      IF ZZTPP_ZSTZ_HEAD-SBQSJS IS NOT INITIAL AND ZZTPP_ZSTZ_HEAD-SBZZJS IS INITIAL.
        CLEAR ZZTPP_ZSTZ_HEAD-QTTJSJ.
        SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-SBZZJS'.
        MESSAGE S001(00) WITH '请输入设备终止计时间!' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    ENDIF.


*******Change at + 20120612
    IF ZZTPP_ZSTZ_HEAD-BB1YB IS INITIAL.
      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-BB1YB'.
      MESSAGE '请输入白班/夜班!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BZWZS IS INITIAL.
      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-BZWZS'.
      MESSAGE '请输入班组出勤总工时!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BTBHA+(1) <> 'Q'.
      IF ZZTPP_ZSTZ_HEAD-JZHAO IS INITIAL.
        SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-JZHAO'.
        MESSAGE '请务必正确输入机组号!' TYPE 'S' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'G' AND ZZTPP_ZSTZ_HEAD-AVEJJ IS INITIAL.
      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-AVEJJ'.
      MESSAGE '钢棉班组需要录入平均计件小时!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'V'"铁铬铝车间暂时不做控制
      AND ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'S'"烧结车间暂时不做控制
      AND ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'P'."铺毡车间暂时不做控制
      IF ZZTPP_ZSTZ_HEAD-QTTJSJ = 0 OR ZZTPP_ZSTZ_HEAD-QTTJSJ IS INITIAL.
        SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-QTTJSJ'.
        MESSAGE '当设备运行时间为0时,不能过账!' TYPE 'S' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    ENDIF.


*    IF ZZTPP_ZSTZ_HEAD-SBQSJS IS INITIAL.
*      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-SBQSJS'.
*      MESSAGE '请输入设备起始时间!' TYPE 'S' DISPLAY LIKE 'E'.
*      EXIT.
*    ENDIF.


*    IF ZZTPP_ZSTZ_HEAD-SBZZJS IS INITIAL.
*      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-SBZZJS'.
*      MESSAGE '请输入设备结束时间!' TYPE 'S' DISPLAY LIKE 'E'.
*      EXIT.
*    ENDIF.


*  确认是否保存数据
    PERFORM COFIRM_ACTION USING GV_TITLE
                       GV_TXT_QA
                       GV_TXT_BN1
                       GV_TXT_BN2
                 CHANGING GV_ANSWER.
    IF GV_ANSWER = '1'. "是
      REFRESH:GT_HEAD.
      "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
      PERFORM CL_SL_SL_DATA .
      APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
      MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
      IF SY-SUBRC = 0 .
        COMMIT WORK.
*    数据保存成功
        MESSAGE S001(00) WITH '数据保存成功'.
      ELSE.
        ROLLBACK WORK.
*    数据保存失败
        MESSAGE S001(00) WITH '数据保存失败' DISPLAY LIKE 'E'.
      ENDIF.
    ENDIF.
*    ENDIF.
  ENDIF.
ENDFORM.                    " SAVEH_DATA
*&---------------------------------------------------------------------*
*&      Form  SAVE1_DATA
*&---------------------------------------------------------------------*
*    保存原料数据
*----------------------------------------------------------------------*
FORM SAVE1_DATA .
  DATA: LW_S1_BODY1 TYPE ZZTPP_ZSTZ_BODY1,
        LW_S1_BODY2 TYPE ZZTPP_ZSTZ_BODY2,
        LW_S1_BODY3 TYPE ZZTPP_ZSTZ_BODY3,
        LW_S1_BODY4 TYPE ZZTPP_ZSTZ_BODY4.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY1-YLDM IS INITIAL
    OR ZZTPP_ZSTZ_BODY1-YLPH IS INITIAL
    OR ZZTPP_ZSTZ_BODY1-LGORT IS INITIAL
    OR ZZTPP_ZSTZ_BODY1-ZL IS INITIAL.
    MESSAGE S001(00) WITH '请输入所有内容!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    CLEAR LW_S1_BODY1.
    SELECT SINGLE * INTO LW_S1_BODY1
      FROM ZZTPP_ZSTZ_BODY1
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND YLDM  = ZZTPP_ZSTZ_BODY1-YLDM
       AND YLPH  = ZZTPP_ZSTZ_BODY1-YLPH
       AND LGORT = ZZTPP_ZSTZ_BODY1-LGORT.
    IF LW_S1_BODY1-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过帐!' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
*  确认是否保存数据
      PERFORM COFIRM_ACTION USING GV_TITLE
                             GV_TXT_QA
                             GV_TXT_BN1
                             GV_TXT_BN2
                       CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        REFRESH:GT_BODY1.
        ZZTPP_ZSTZ_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
        CLEAR: GW_MAKTX.
        SELECT SINGLE MAKTX
         INTO GW_MAKTX
         FROM MAKT
        WHERE MATNR = ZZTPP_ZSTZ_BODY1-YLDM.
        ZZTPP_ZSTZ_BODY1-YLMS = GW_MAKTX.
        APPEND ZZTPP_ZSTZ_BODY1 TO GT_BODY1.
        MODIFY ZZTPP_ZSTZ_BODY1 FROM TABLE GT_BODY1.
        IF SY-SUBRC = 0 .
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
          " Fill the dynamic table <fs_dyn_tab1>
*          SELECT YLDM YLMS YLPH LGORT ZL
*            FROM ZZTPP_ZSTZ_BODY1 INTO TABLE <FS_DYN_TAB1>
*           WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*          CALL METHOD OBJ_MY_ALV_GRID1->REFRESH_TABLE_DISPLAY.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID1->REFRESH_TABLE_DISPLAY.
*    数据保存成功
          MESSAGE S001(00) WITH '数据保存成功'.
        ELSE.
          ROLLBACK WORK.
*    数据保存失败
          MESSAGE S001(00) WITH '数据保存失败' DISPLAY LIKE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " SAVE1_DATA
*&---------------------------------------------------------------------*
*&      Form  SAVE2_DATA
*&---------------------------------------------------------------------*
*    保存返工品数据
*----------------------------------------------------------------------*
FORM SAVE2_DATA .
  DATA: LW_S2_BODY1 TYPE ZZTPP_ZSTZ_BODY1,
        LW_S2_BODY2 TYPE ZZTPP_ZSTZ_BODY2,
        LW_S2_BODY3 TYPE ZZTPP_ZSTZ_BODY3,
        LW_S2_BODY4 TYPE ZZTPP_ZSTZ_BODY4.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY2-FGPDM IS INITIAL
    OR ZZTPP_ZSTZ_BODY2-FGOPH IS INITIAL
    OR ZZTPP_ZSTZ_BODY2-FGDDH IS INITIAL
    OR ZZTPP_ZSTZ_BODY2-LGORT IS INITIAL
    OR ZZTPP_ZSTZ_BODY2-ZL IS INITIAL.
    MESSAGE S001(00) WITH '请输入所有内容!' DISPLAY LIKE 'E'.
  ELSE.
    ZZTPP_ZSTZ_BODY2-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR: GW_MAKTX.
    SELECT SINGLE MAKTX
      INTO GW_MAKTX
      FROM MAKT
     WHERE MATNR = ZZTPP_ZSTZ_BODY2-FGPDM.
    ZZTPP_ZSTZ_BODY2-FGPMS = GW_MAKTX.
    CLEAR GW_AUFNR.
    SELECT SINGLE AUFNR
      FROM MSEG
      INTO GW_AUFNR
     WHERE MATNR = ZZTPP_ZSTZ_BODY2-FGPDM
       AND BWART = '101'
       AND CHARG = ZZTPP_ZSTZ_BODY2-FGOPH.
*******Change at 2012-05-11
    IF SY-SUBRC <> 0 . "没有收货
      CLEAR GW_AUFNR.
      SELECT SINGLE AUFNR
        FROM MSEG
        INTO GW_AUFNR
       WHERE MATNR = ZZTPP_ZSTZ_BODY2-FGPDM
         AND BWART = '311'
         AND CHARG = ZZTPP_ZSTZ_BODY2-FGOPH.
      IF SY-SUBRC <> 0.
        MESSAGE '原订单收货未录入,无法保存!' TYPE 'S' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    ENDIF.
    ZZTPP_ZSTZ_BODY2-YDDH  = GW_AUFNR.
    CLEAR LW_S2_BODY2.
    SELECT SINGLE * INTO LW_S2_BODY2
      FROM ZZTPP_ZSTZ_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND FGPDM = ZZTPP_ZSTZ_BODY2-FGPDM
       AND FGOPH = ZZTPP_ZSTZ_BODY2-FGOPH
       AND YDDH  = ZZTPP_ZSTZ_BODY2-YDDH
       AND FGDDH = ZZTPP_ZSTZ_BODY2-FGDDH
       AND LGORT = ZZTPP_ZSTZ_BODY2-LGORT.
    IF LW_S2_BODY2-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过账!' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
*  确认是否保存数据
      PERFORM COFIRM_ACTION USING GV_TITLE
                                GV_TXT_QA
                                GV_TXT_BN1
                                GV_TXT_BN2
                          CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        REFRESH:GT_BODY2.
        APPEND ZZTPP_ZSTZ_BODY2 TO GT_BODY2.
        MODIFY ZZTPP_ZSTZ_BODY2 FROM TABLE GT_BODY2.
        IF SY-SUBRC = 0 .
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
** Fill the dynamic table <fs_dyn_tab2>
*          SELECT FGPDM FGPMS FGOPH YDDH FGDDH LGORT ZL
*            FROM ZZTPP_ZSTZ_BODY2 INTO TABLE <FS_DYN_TAB2>
*           WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID2->REFRESH_TABLE_DISPLAY.
*    数据保存成功
          MESSAGE S001(00) WITH '数据保存成功'.
        ELSE.
          ROLLBACK WORK.
*    数据保存失败
          MESSAGE S001(00) WITH '数据保存失败' DISPLAY LIKE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " SAVE2_DATA
*&---------------------------------------------------------------------*
*&      Form  SAVE3_DATA
*&---------------------------------------------------------------------*
*    保存余料数据
*----------------------------------------------------------------------*
FORM SAVE3_DATA .
  DATA  LW_S3_BODY4 TYPE ZZTPP_ZSTZ_BODY4.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY4-YLDM IS INITIAL
    OR ZZTPP_ZSTZ_BODY4-YLPH IS INITIAL
    OR ZZTPP_ZSTZ_BODY4-LGORT IS INITIAL
    OR ZZTPP_ZSTZ_BODY4-YLZL IS INITIAL.
    MESSAGE S001(00) WITH '请输入所有内容!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    CLEAR LW_S3_BODY4.
    SELECT SINGLE * INTO LW_S3_BODY4
      FROM ZZTPP_ZSTZ_BODY4
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND YLDM  = ZZTPP_ZSTZ_BODY4-YLDM
       AND YLPH  = ZZTPP_ZSTZ_BODY4-YLPH
       AND LGORT = ZZTPP_ZSTZ_BODY4-LGORT.
    IF LW_S3_BODY4-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过帐!' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
*  确认是否保存数据
      PERFORM COFIRM_ACTION USING GV_TITLE
                            GV_TXT_QA
                            GV_TXT_BN1
                            GV_TXT_BN2
                      CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        REFRESH:GT_BODY4.
        ZZTPP_ZSTZ_BODY4-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
        CLEAR: GW_MAKTX.
        SELECT SINGLE MAKTX
          INTO GW_MAKTX
          FROM MAKT
         WHERE MATNR = ZZTPP_ZSTZ_BODY4-YLDM.
        ZZTPP_ZSTZ_BODY4-YLMS = GW_MAKTX.
*        IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'H' AND ( ZZTPP_ZSTZ_BODY4-YLDM+8 = '3010300000' OR
*                                                  ZZTPP_ZSTZ_BODY4-YLDM+8 = '3010400000' OR
*                                                  ZZTPP_ZSTZ_BODY4-YLDM+8 = '3100300000' OR
*                                                  ZZTPP_ZSTZ_BODY4-YLDM+8 = '3100100000' OR
*                                                  ZZTPP_ZSTZ_BODY4-YLDM+8 = '3100900000' ).
*          ZZTPP_ZSTZ_BODY4-ROWCOLOR = 'C410'.
*        ENDIF.
        APPEND ZZTPP_ZSTZ_BODY4 TO GT_BODY4.
        MODIFY ZZTPP_ZSTZ_BODY4 FROM TABLE GT_BODY4.
        IF SY-SUBRC = 0 .
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
** Fill the dynamic table <fs_dyn_tab3>
*          SELECT YLDM YLMS YLPH LGORT YLZL
*           FROM ZZTPP_ZSTZ_BODY4 INTO TABLE <FS_DYN_TAB4>
*          WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID4->REFRESH_TABLE_DISPLAY.
*    数据保存成功
          MESSAGE S001(00) WITH '数据保存成功'.
        ELSE.
          ROLLBACK WORK.
*    数据保存失败
          MESSAGE S001(00) WITH '数据保存失败' DISPLAY LIKE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " SAVE3_DATA
*&---------------------------------------------------------------------*
*&      Form  SAVE4_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVE4_DATA .
  DATA  LW_S4_BODY5 TYPE ZZTPP_ZSTZ_BODY5.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY5-SCDDH IS INITIAL OR
     ZZTPP_ZSTZ_BODY5-BZWLH IS INITIAL OR
     ZZTPP_ZSTZ_BODY5-BZWPH IS INITIAL OR
     ZZTPP_ZSTZ_BODY5-LGORT IS INITIAL OR
     ZZTPP_ZSTZ_BODY5-BZWSL IS INITIAL.
    MESSAGE S001(00) WITH '请输入所有内容!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    CLEAR LW_S4_BODY5.
    SELECT SINGLE * INTO LW_S4_BODY5
    FROM ZZTPP_ZSTZ_BODY5
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND SCDDH = ZZTPP_ZSTZ_BODY5-SCDDH
       AND BZWLH = ZZTPP_ZSTZ_BODY5-BZWLH
       AND BZWPH = ZZTPP_ZSTZ_BODY5-BZWPH
       AND LGORT = ZZTPP_ZSTZ_BODY5-LGORT.
    IF SY-SUBRC = 0 AND LW_S4_BODY5-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过帐!' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
*      CLEAR LW_S4_BODY5.
*      SELECT SINGLE * INTO LW_S4_BODY5
*      FROM ZZTPP_ZSTZ_BODY5
*       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
*         AND GZ = 'Y'.
*      IF SY-SUBRC = 0.
*        MESSAGE '包装物已经过账!' TYPE 'S' DISPLAY LIKE 'E'.
*        EXIT.
*      ENDIF.
*  确认是否保存数据
      PERFORM COFIRM_ACTION USING GV_TITLE
                            GV_TXT_QA
                            GV_TXT_BN1
                            GV_TXT_BN2
                      CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        REFRESH:GT_BODY5.
        ZZTPP_ZSTZ_BODY5-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
        CLEAR: GW_MAKTX.
        SELECT SINGLE MAKTX
          INTO GW_MAKTX
          FROM MAKT
         WHERE MATNR = ZZTPP_ZSTZ_BODY5-BZWLH.
        ZZTPP_ZSTZ_BODY5-MAKTX = GW_MAKTX.
        APPEND ZZTPP_ZSTZ_BODY5 TO GT_BODY5.
        MODIFY ZZTPP_ZSTZ_BODY5 FROM TABLE GT_BODY5.
        IF SY-SUBRC = 0 .
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.


** Fill the dynamic table <fs_dyn_tab5>
*          SELECT  BZWLH MAKTX BZWPH LGORT BZWSL SCDDH MBLNR ROWCOLOR
*             FROM ZZTPP_ZSTZ_BODY5 INTO TABLE <FS_DYN_TAB5>
*             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID5->REFRESH_TABLE_DISPLAY.
*    数据保存成功
          MESSAGE S001(00) WITH '数据保存成功'.
        ELSE.
          ROLLBACK WORK.
*    数据保存失败
          MESSAGE S001(00) WITH '数据保存失败' DISPLAY LIKE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " SAVE4_DATA


*&---------------------------------------------------------------------*
*&      Form  POSTH_DATA
*&---------------------------------------------------------------------*
*    工时过账
*----------------------------------------------------------------------*
FORM POSTH_DATA .
  TYPES:BEGIN OF TY_RMZHL,
        RMZHL TYPE AFRU-RMZHL,
        END OF TY_RMZHL.
  DATA: LT_RMZHL TYPE TABLE OF TY_RMZHL,
        LW_RMZHL TYPE TY_RMZHL.
  DATA: LW_PH_BODY3 TYPE ZZTPP_ZSTZ_BODY3,
        LW_PH_HEAD  TYPE ZZTPP_ZSTZ_HEAD.
  DATA:
*        LW_FENTAN1  TYPE P DECIMALS 10,"机时分摊和电时分摊
*        LW_FENTAN2  TYPE P DECIMALS 10,"工时分摊
        LW_PH_JQ TYPE AFRUD-ISM01,
        LW_PH_RG TYPE AFRUD-ISM02,
        LW_PH_YD TYPE AFRUD-ISM03,
        LW_JQ(018) ,"AFRUD-ISM01,
        LW_RG(018) ,"AFRUD-ISM02,
        LW_YD(018) ."AFRUD-ISM03.
  DATA: LW_CPCL(018)."AFRUD-LMNGA.
  DATA: LW_BUDAT(010).
  DATA: LW_CPDDH(012).
  DATA: LW_LTXA1 TYPE CO_RTEXT."确认文本
  DATA: LW_CC_CL(018).


  DATA : LV_FLAG  TYPE C.   "过账失败标记
  DATA: LV_MESSTAB(250).    "错误提示
*******Change at + 20120613
*-----------------------先保存----------------------------------
  DATA:   STRT1(7) TYPE C,"设备起始计时整数部分
          STRT2(7) TYPE C,"设备终止计时整数部分
          STRF1    TYPE P DECIMALS 2,"设备起始计时小数部分
          STRF2    TYPE P DECIMALS 2."设备终止计时小数部分
  DATA: LW_SH_HEAD TYPE ZZTPP_ZSTZ_HEAD.


*******Change at + 20121114
*---------------------棉卷班的处理定义--------------------------
  TYPES : BEGIN OF T_LAP.
          INCLUDE STRUCTURE  ZZTPP_ZSTZ_BODY3.
  TYPES :  STDWAGE  TYPE ZSTDWAGE.",班组计件工资标准(元/吨)
  TYPES : END OF T_LAP.
  DATA :
        LV_SUM TYPE ZZTPP_ZSTZ_BODY3-CPCL,
        I_LAP TYPE STANDARD TABLE OF T_LAP,
        WA_LAP TYPE  T_LAP.


  CHECK ZZTPP_ZSTZ_HEAD-BTBHA IS NOT INITIAL.
  "设备运行时间计算
*  STRT1 = TRUNC( ZZTPP_ZSTZ_HEAD-SBQSJS ) .
*  STRT2 = TRUNC( ZZTPP_ZSTZ_HEAD-SBZZJS ) .
*  STRF1 = ( FRAC( ZZTPP_ZSTZ_HEAD-SBQSJS ) * 100 ) / 60.
*  STRF2 = ( FRAC( ZZTPP_ZSTZ_HEAD-SBZZJS ) * 100 ) / 60.
*  ZZTPP_ZSTZ_HEAD-QTTJSJ =  STRT2 + STRF2 - STRT1 - STRF1.
  ZZTPP_ZSTZ_HEAD-QTTJSJ = ZZTPP_ZSTZ_HEAD-SBZZJS - ZZTPP_ZSTZ_HEAD-SBQSJS.


  IF ZZTPP_ZSTZ_HEAD-AVEJJ IS INITIAL AND ZZTPP_ZSTZ_HEAD-BTBHA+(1) = 'G'.
    ZZTPP_ZSTZ_HEAD-AVEJJ = ZZTPP_ZSTZ_HEAD-BZWZS / 5.
  ENDIF.


  SELECT  SINGLE * INTO LW_SH_HEAD
   FROM ZZTPP_ZSTZ_HEAD
  WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  IF LW_SH_HEAD-GZ = 'Y'.
    MESSAGE S001(00) WITH '收货已过帐!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'V' "铁铬铝车间暂时不做控制
      AND  ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'S'"烧结车间暂时不做控制
      AND  ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'P'."铺毡车间暂时不做控制
      IF ZZTPP_ZSTZ_HEAD-BZWZS > 200.
        MESSAGE S001(00) WITH '班组出勤总工时不能大于200!' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.


      IF ZZTPP_ZSTZ_HEAD-BTBHA+(1) <> 'Z'. "振切铜棉
        IF ZZTPP_ZSTZ_HEAD-QTTJSJ  > 20 OR ZZTPP_ZSTZ_HEAD-QTTJSJ < 0  .
          MESSAGE S001(00) WITH '设备终止计时与设备起始计时之差应在0~20之间!' DISPLAY LIKE 'E'.
          EXIT.
        ELSE.
        ENDIF.
      ENDIF.


      IF ZZTPP_ZSTZ_HEAD-SBQSJS IS NOT INITIAL AND ZZTPP_ZSTZ_HEAD-SBZZJS IS INITIAL.
        CLEAR ZZTPP_ZSTZ_HEAD-QTTJSJ.
        SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-SBZZJS'.
        MESSAGE S001(00) WITH '请输入设备终止计时间!' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BB1YB IS INITIAL.
      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-BB1YB'.
      MESSAGE '请输入白班/夜班!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BZWZS IS INITIAL.
      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-BZWZS'.
      MESSAGE '请输入班组出勤总工时!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BTBHA+(1) <> 'Q'.
      IF ZZTPP_ZSTZ_HEAD-JZHAO IS INITIAL.
        SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-JZHAO'.
        MESSAGE '请务必正确输入机组号!' TYPE 'S' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'G' AND ZZTPP_ZSTZ_HEAD-AVEJJ IS INITIAL.
      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-AVEJJ'.
      MESSAGE '钢棉班组需要录入平均计件小时!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.


    IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'V'"铁铬铝车间暂时不做控制
      AND ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'S' "烧结车间暂时不做控制
      AND ZZTPP_ZSTZ_HEAD-BTBHA+0(1) <> 'P'."铺毡车间暂时不做控制
      IF ZZTPP_ZSTZ_HEAD-QTTJSJ = 0 OR ZZTPP_ZSTZ_HEAD-QTTJSJ IS INITIAL.
        SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-QTTJSJ'.
        MESSAGE '当设备运行时间为0时,不能过账!' TYPE 'S' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    ENDIF.


*    IF ZZTPP_ZSTZ_HEAD-SBQSJS IS INITIAL.
*      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-SBQSJS'.
*      MESSAGE '请输入设备起始时间!' TYPE 'S' DISPLAY LIKE 'E'.
*      EXIT.
*    ENDIF.


*    IF ZZTPP_ZSTZ_HEAD-SBZZJS IS INITIAL.
*      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-SBZZJS'.
*      MESSAGE '请输入设备结束时间!' TYPE 'S' DISPLAY LIKE 'E'.
*      EXIT.
*    ENDIF.


    REFRESH:GT_HEAD.
    "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
    PERFORM CL_SL_SL_DATA .
    APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
    MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
    IF SY-SUBRC = 0 .
      COMMIT WORK.
    ELSE.
      ROLLBACK WORK.
      MESSAGE S001(00) WITH '数据保存失败' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.
  ENDIF.


*-------------------------过账----------------------------
*返工品变动,成品中 ‘返工品’ ‘原料产出合计’ ‘产量’ 均随之发生改变
  PERFORM FRM_FGP_UPDATE.


  SELECT SINGLE * INTO LW_PH_HEAD
    FROM ZZTPP_ZSTZ_HEAD
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  IF LW_PH_HEAD-GZ = 'Y'.
    MESSAGE S001(00) WITH '工时已经过账!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    GV_TITLE = '过账确认'.
    GV_TXT_QA = '是否过账'.
*  确认是否过账数据
    PERFORM COFIRM_ACTION USING GV_TITLE
                             GV_TXT_QA
                             GV_TXT_BN1
                             GV_TXT_BN2
                       CHANGING GV_ANSWER.
    IF GV_ANSWER = '1'. "是


      REFRESH GT_BODY3.
      CLEAR:GW_CPCLSUM,
            LW_PH_BODY3.
      SELECT * INTO TABLE GT_BODY3
        FROM ZZTPP_ZSTZ_BODY3
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
      LOOP AT GT_BODY3 INTO LW_PH_BODY3.
        GW_CPCLSUM = GW_CPCLSUM + LW_PH_BODY3-CPCL. "计算出总产量
      ENDLOOP.


      "棉卷班的特殊处理
      IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'M'.
        REFRESH I_LAP.
        CLEAR : LV_SUM,LV_FLAG.
        LOOP AT GT_BODY3 INTO LW_PH_BODY3.
          CLEAR : WA_LAP.
          MOVE-CORRESPONDING LW_PH_BODY3 TO WA_LAP.
*          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*            EXPORTING
*              INPUT  = WA_LAP-MATNR
*            IMPORTING
*              OUTPUT = WA_LAP-MATNR.
          SELECT SINGLE STDWAGE
            FROM ZWAGE
            INTO WA_LAP-STDWAGE
            WHERE MATNR = WA_LAP-MATNR.
          IF SY-SUBRC <> 0
            OR WA_LAP-STDWAGE < 0.
*            WA_LAP-WAGE = 0.
*            MESSAGE '没有维护该物料的工时分配计件工资标准,请立即维护!' TYPE 'I'.
            CLEAR LV_MESSTAB.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
              EXPORTING
                INPUT  = WA_LAP-MATNR
              IMPORTING
                OUTPUT = LV_MESSTAB.
            CONCATENATE '没有维护物料' LV_MESSTAB '的工时分配计件工资标准,请立即维护(详情:ZPP124)。'
            INTO LV_MESSTAB.
            MESSAGE LV_MESSTAB TYPE 'I'.
            LV_FLAG = 'X'.
            EXIT.
          ENDIF.


          LV_SUM = LV_SUM + WA_LAP-STDWAGE * WA_LAP-CPCL / 1000.
          APPEND WA_LAP TO I_LAP.
        ENDLOOP.
      ENDIF.


      IF LV_FLAG = 'X'.
        EXIT.
      ENDIF.


*成品总量不可为零
      CHECK GW_CPCLSUM <> 0.
*      LW_FENTAN1 = LW_PH_HEAD-QTTJSJ / GW_CPCLSUM .
*      LW_FENTAN2 = LW_PH_HEAD-BZWZS  / GW_CPCLSUM .


      CLEAR:LW_PH_BODY3.
      CLEAR : LV_FLAG.


*BDC报工
      LOOP AT GT_BODY3 INTO LW_PH_BODY3.
        REFRESH GT_BDCDATA[].
        REFRESH GT_MESSTAB[].
        CLEAR  :GT_BDCDATA,GT_MESSTAB.
*        CLEAR  :GT_BDCDATA,GT_MESSTAB.


*报工的产品订单号
        LW_CPDDH = LW_PH_BODY3-CPDDH.


*确认计数器
        REFRESH LT_RMZHL.
        SELECT RMZHL INTO TABLE LT_RMZHL
          FROM AFRU
         WHERE AUFNR = LW_CPDDH.
        SORT LT_RMZHL BY RMZHL DESCENDING .
        CLEAR LW_RMZHL.
        READ TABLE LT_RMZHL INTO LW_RMZHL INDEX 1.
        ADD 1 TO LW_RMZHL-RMZHL.


*分摊
        IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'M'. " -----------棉卷班的分摊法则
          CLEAR : WA_LAP.
          READ TABLE I_LAP INTO WA_LAP WITH KEY MATNR = LW_PH_BODY3-MATNR
                                                CPDDH = LW_PH_BODY3-CPDDH
                                                LGORT = LW_PH_BODY3-LGORT.
          IF SY-SUBRC = 0.
            "机器工时
            LW_PH_JQ = ( LW_PH_HEAD-QTTJSJ * WA_LAP-CPCL * WA_LAP-STDWAGE / 1000 ) / LV_SUM.
            "人工工时
            LW_PH_RG = ( LW_PH_HEAD-BZWZS * WA_LAP-CPCL * WA_LAP-STDWAGE / 1000 )  / LV_SUM.
            "用电工时
            LW_PH_YD = ( LW_PH_HEAD-QTTJSJ * WA_LAP-CPCL * WA_LAP-STDWAGE / 1000 ) / LV_SUM.
          ENDIF.
        ELSE.                "-------------------其余班的分摊法则
          LW_PH_JQ = ( LW_PH_HEAD-QTTJSJ / GW_CPCLSUM ) * LW_PH_BODY3-CPCL. "机器
          LW_PH_RG = ( LW_PH_HEAD-BZWZS / GW_CPCLSUM ) * LW_PH_BODY3-CPCL."人工
          LW_PH_YD = ( LW_PH_HEAD-QTTJSJ / GW_CPCLSUM ) * LW_PH_BODY3-CPCL."用电
        ENDIF.


        LW_PH_BODY3-JQFT = LW_PH_JQ.
        LW_PH_BODY3-RGFT = LW_PH_RG.
        LW_PH_BODY3-YDFT = LW_PH_YD.


*更新自定义表分摊到的工时
        UPDATE ZZTPP_ZSTZ_BODY3
           SET JQFT = LW_PH_BODY3-JQFT
               RGFT = LW_PH_BODY3-RGFT
               YDFT = LW_PH_BODY3-YDFT
         WHERE BTBHA = LW_PH_BODY3-BTBHA
           AND MATNR = LW_PH_BODY3-MATNR
           AND CPDDH = LW_PH_BODY3-CPDDH
           AND LGORT = LW_PH_BODY3-LGORT.


*报工的各项工时
        LW_JQ = LW_PH_JQ.
        LW_RG = LW_PH_RG.
        LW_YD = LW_PH_YD.
*报工的过账日期
        LW_BUDAT = ZZTPP_ZSTZ_HEAD-BUDAT.
*报工成品产量
        LW_CC_CL = LW_PH_BODY3-CPCL.


*调用bdc程序
        PERFORM BDC1_DYNPRO      USING 'SAPLCORU_S' '0100'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                         '/00'.
        PERFORM BDC1_FIELD       USING 'BDC_CURSOR'
                                         'AFRUD-AUFNR'.
        PERFORM BDC1_FIELD       USING 'AFRUD-AUFNR'
                                         LW_CPDDH.
        PERFORM BDC1_DYNPRO      USING 'SAPLCORU_S' '0100'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
        PERFORM BDC1_FIELD       USING 'AFRUD-AUFNR'
                                        LW_CPDDH.
        PERFORM BDC1_FIELD       USING 'BDC_CURSOR'
                                       'AFRUD-LMNGA'.
        PERFORM BDC1_FIELD       USING 'AFRUD-LMNGA'
                                       LW_CC_CL.
*                                       '0.00'.
        PERFORM BDC1_DYNPRO      USING 'SAPLCORU_S' '0100'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                       '/00'.
        PERFORM BDC1_FIELD       USING 'AFRUD-AUFNR'
                                       LW_CPDDH.
        PERFORM BDC1_FIELD       USING 'AFRUD-LMNGA'
                                       LW_CC_CL.
*                                       '0.00'.
        PERFORM BDC1_FIELD       USING 'BDC_CURSOR'
                                       'AFRUD-ISM03'.


        PERFORM BDC1_FIELD       USING 'AFRUD-ISM01'
                                       LW_JQ.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE01'
                                       'H'.


        PERFORM BDC1_FIELD       USING 'AFRUD-ISM02'
                                       LW_RG.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE02'
                                       'H'.


        PERFORM BDC1_FIELD       USING 'AFRUD-ISM03'
                                       LW_YD.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE03'
                                       'H'.


        PERFORM BDC1_DYNPRO      USING 'SAPLCORU_S' '0100'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                       '=MB03'.
        PERFORM BDC1_FIELD       USING 'AFRUD-AUFNR'
                                       LW_CPDDH.
        PERFORM BDC1_FIELD       USING 'AFRUD-LMNGA'
                                       LW_CC_CL.
*                                       '0.00'.
        PERFORM BDC1_FIELD       USING 'AFRUD-ISM01'
                                       LW_JQ.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE01'
                                       'H'.
        PERFORM BDC1_FIELD       USING 'AFRUD-ISM02'
                                       LW_RG.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE02'
                                       'H'.
        PERFORM BDC1_FIELD       USING 'AFRUD-ISM03'
                                       LW_YD.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE03'
                                       'H'.
        PERFORM BDC1_FIELD       USING 'BDC_CURSOR'
                                       'AFRUD-BUDAT'.
        PERFORM BDC1_FIELD       USING 'AFRUD-BUDAT'
                                       LW_BUDAT.
        PERFORM BDC1_DYNPRO      USING 'SAPLCOWB' '0130'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                       '=MALL'.
        PERFORM BDC1_FIELD       USING 'BDC_CURSOR'
                                       'CAUFVD-AUFNR'.
        PERFORM BDC1_DYNPRO      USING 'SAPLCOWB' '0130'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                       '=DELE'.
        PERFORM BDC1_FIELD       USING 'BDC_CURSOR'
                                       'CAUFVD-AUFNR'.
        PERFORM BDC1_DYNPRO      USING 'SAPLCOWB' '0130'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                       '=BACK'.
        PERFORM BDC1_FIELD       USING 'BDC_CURSOR'
                                       'CAUFVD-AUFNR'.
        PERFORM BDC1_DYNPRO      USING 'SAPLCORU_S' '0100'.
        PERFORM BDC1_FIELD       USING 'BDC_OKCODE'
                                       '=BU'.
        PERFORM BDC1_FIELD       USING 'AFRUD-AUFNR'
                                       LW_CPDDH.
        PERFORM BDC1_FIELD       USING 'AFRUD-LMNGA'
                                       LW_CC_CL.
*                                       '0.00'.
        PERFORM BDC1_FIELD       USING 'AFRUD-ISM01'
                                       LW_JQ.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE01'
                                       'H'.
        PERFORM BDC1_FIELD       USING 'AFRUD-ISM02'
                                       LW_RG.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE02'
                                       'H'.
        PERFORM BDC1_FIELD       USING 'AFRUD-ISM03'
                                       LW_YD.
        "modify 2012-10-18 by maojian
        PERFORM BDC1_FIELD       USING 'AFRUD-ILE03'
                                       'H'.
        PERFORM BDC1_FIELD       USING 'AFRUD-BUDAT'
                                       LW_BUDAT.
        CLEAR:GT_MESSTAB[],GT_MESSTAB.
        "实际模式
        CALL TRANSACTION 'CO11N' USING GT_BDCDATA MODE 'N' UPDATE 'S' MESSAGES
          INTO GT_MESSTAB.


        "调试模式
*        CALL TRANSACTION 'CO11N' USING GT_BDCDATA MODE 'A' UPDATE 'S' MESSAGES
*          INTO GT_MESSTAB.


        IF SY-SUBRC = 0.
*更新AFRU确认文本-台班班号
          UPDATE AFRU
             SET LTXA1 = ZZTPP_ZSTZ_HEAD-BTBHA
*                 LOGRP = ZZTPP_ZSTZ_HEAD-BTBHA+0(2)
           WHERE AUFNR = LW_CPDDH
             AND RMZHL = LW_RMZHL-RMZHL.
        ELSE.
          LV_FLAG = 'X'.
          ROLLBACK WORK.
          CALL FUNCTION 'FORMAT_MESSAGE'
            EXPORTING
              ID        = SY-MSGID
              LANG      = SY-LANGU
              NO        = SY-MSGNO
              V1        = SY-MSGV1
              V2        = SY-MSGV2
              V3        = SY-MSGV3
              V4        = SY-MSGV4
            IMPORTING
              MSG       = LV_MESSTAB
            EXCEPTIONS
              NOT_FOUND = 1
              OTHERS    = 2.
          IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.
          MESSAGE LV_MESSTAB TYPE 'I'.
*          MESSAGE '错误:工时未成功过账!' TYPE 'I'.
          EXIT.
        ENDIF.
      ENDLOOP.


      IF LV_FLAG = 'X'.
        EXIT.
      ENDIF.


*更新头信息
      ZZTPP_ZSTZ_HEAD-GZ = 'Y'.
      UPDATE ZZTPP_ZSTZ_HEAD
         SET GZ = 'Y'
             BUDAT = ZZTPP_ZSTZ_HEAD-BUDAT
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
      LOOP AT SCREEN.
        IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
          SCREEN-INPUT = '1' .
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.


      COMMIT WORK.
      MESSAGE '工时过账成功!' TYPE 'S'.
      " Fill the dynamic table <fs_dyn_tab3>
      SELECT MATNR MAKTX CPDDH LGORT HGPZL BHGPZL DJYPZL
        CPCCHEJ FGP YLCCHJ CPCL YLFT BXFX JQFT RGFT YDFT
        FROM ZZTPP_ZSTZ_BODY3 INTO TABLE <FS_DYN_TAB3>
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
      CALL METHOD OBJ_MY_ALV_GRID3->REFRESH_TABLE_DISPLAY.


    ENDIF.
  ENDIF.
ENDFORM.                    " POSTH_DATA


*&---------------------------------------------------------------------*
*&      Form  POST1_DATA
*&---------------------------------------------------------------------*
*    原料数据过账
*----------------------------------------------------------------------*
FORM POST1_DATA .
  DATA:LW_GOODSMVT_HEADER  TYPE BAPI2017_GM_HEAD_01,
       LW_GOODSMVT_CODE    TYPE BAPI2017_GM_CODE,
       LW_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
       LW_MATERIALDOCUMENT TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
       LW_MATDOCUMENTYEAR  TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
       LT_GOODSMVT_ITEM    TYPE STANDARD TABLE OF   BAPI2017_GM_ITEM_CREATE,
       LW_GOODSMVT_ITEM    TYPE BAPI2017_GM_ITEM_CREATE,
       LT_RETURN           TYPE STANDARD TABLE OF   BAPIRET2,
       LW_RETURN           TYPE BAPIRET2.
  DATA:LW_P1_BODY1 TYPE ZZTPP_ZSTZ_BODY1,
       LW_P1_BODY3 TYPE ZZTPP_ZSTZ_BODY3.
  DATA:LW_AUFNR TYPE AUFNR.
  DATA:LW_YLZL TYPE ZZLMS.


*------------------------------
  DATA :
        LV_RECORDS TYPE I,   "订单数
        LV_TIMES TYPE I,     "循环次数
        LV_AMOUNT TYPE ERFMG."重量累计
*------------------------------


  GV_TITLE = '过账确认'.
  GV_TXT_QA = '是否过账'.


  IF ZZTPP_ZSTZ_HEAD-GZ <> 'Y'.
    MESSAGE S001(00) WITH '工时未过帐!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    REFRESH GT_BODY2.
    SELECT * INTO TABLE GT_BODY2
      FROM ZZTPP_ZSTZ_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND GZ = ''.
    IF SY-SUBRC =  0.
      MESSAGE S001(00) WITH '返工品未过帐!' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
      REFRESH GT_BODY4.
      SELECT * INTO TABLE GT_BODY4
        FROM ZZTPP_ZSTZ_BODY4
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
         AND GZ = ''.
      IF SY-SUBRC = 0.
        MESSAGE S001(00) WITH '余料未过帐!' DISPLAY LIKE 'E'.
        EXIT.
      ELSE.
        REFRESH GT_BODY5.
        SELECT * INTO TABLE GT_BODY5
          FROM ZZTPP_ZSTZ_BODY5
          WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
            AND GZ = ''.
        IF SY-SUBRC = 0.
          MESSAGE S001(00) WITH '包装物未过账!' DISPLAY LIKE 'E'.
          EXIT.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.


*  确认是否过账数据
  PERFORM COFIRM_ACTION USING GV_TITLE
                              GV_TXT_QA
                              GV_TXT_BN1
                              GV_TXT_BN2
                        CHANGING GV_ANSWER.
  IF GV_ANSWER = '1'. "是
    "过账日期写入head不能修改
*******Change at + 20120613
*    UPDATE ZZTPP_ZSTZ_HEAD
*       SET BUDAT = ZZTPP_ZSTZ_HEAD-BUDAT
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*    LOOP AT SCREEN.
*      IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*        SCREEN-INPUT = '1' .
*        MODIFY SCREEN.
*      ENDIF.
*    ENDLOOP.


*原料
    REFRESH GT_BODY1.
    SELECT * INTO TABLE GT_BODY1
      FROM ZZTPP_ZSTZ_BODY1
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR :LW_P1_BODY1,
           GW_BODY1_SUM.
    LOOP AT GT_BODY1 INTO LW_P1_BODY1.
      GW_BODY1_SUM = GW_BODY1_SUM + LW_P1_BODY1-ZL.
    ENDLOOP.
*成品
    REFRESH GT_BODY3.
    SELECT * INTO TABLE GT_BODY3
      FROM ZZTPP_ZSTZ_BODY3
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR: LW_P1_BODY3,
           GW_BODY3_SUM.
    LOOP AT GT_BODY3 INTO LW_P1_BODY3.
      GW_BODY3_SUM = GW_BODY3_SUM + LW_P1_BODY3-YLCCHJ.
    ENDLOOP.


    REFRESH LT_RETURN.
    REFRESH GT_MESSAGE.
    CLEAR GW_MESSAGE.
    CLEAR LW_P1_BODY1.
    "bapi抬头参数
    CLEAR LW_GOODSMVT_HEADER.
    LW_GOODSMVT_HEADER-PSTNG_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_GOODSMVT_HEADER-DOC_DATE   = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_GOODSMVT_HEADER-PR_UNAME   = SY-UNAME.
    LW_GOODSMVT_HEADER-HEADER_TXT = ZZTPP_ZSTZ_HEAD-BTBHA."台班编号


    CLEAR:LW_GOODSMVT_HEADRET,
          LW_MATERIALDOCUMENT,
          LW_MATDOCUMENTYEAR,
          LW_GOODSMVT_ITEM.
    REFRESH LT_GOODSMVT_ITEM.


    CLEAR : LV_RECORDS.
    DESCRIBE TABLE GT_BODY3 LINES LV_RECORDS.


    LOOP AT GT_BODY1 INTO LW_P1_BODY1 WHERE GZ <> 'Y'.
*mb1a,移动类型261
      CLEAR LW_P1_BODY3.
      CLEAR LV_AMOUNT.
      CLEAR LV_TIMES.


*分摊原料到订单
      LOOP AT GT_BODY3 INTO LW_P1_BODY3.
        LV_TIMES = LV_TIMES + 1.
        IF LW_P1_BODY3-YLCCHJ = 0 OR LW_P1_BODY3-YLCCHJ IS INITIAL.
          CONTINUE.
        ENDIF.


        IF LV_TIMES = LV_RECORDS.


          LW_GOODSMVT_ITEM-PLANT     = '1201'."工厂
          LW_GOODSMVT_ITEM-STGE_LOC  = LW_P1_BODY1-LGORT."库存地点
          LW_GOODSMVT_ITEM-MOVE_TYPE = '261'."移动类型
          LW_GOODSMVT_ITEM-ENTRY_QNT = LW_P1_BODY1-ZL - LV_AMOUNT.
          LW_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
          LW_GOODSMVT_ITEM-ORDERID   = LW_P1_BODY3-CPDDH."订单号
          LW_GOODSMVT_ITEM-MATERIAL  = LW_P1_BODY1-YLDM."原料代码
          LW_GOODSMVT_ITEM-BATCH     = LW_P1_BODY1-YLPH."原料批号
          SELECT SINGLE RSNUM RSPOS                 " 预留编号,预留项目编号
            INTO (LW_GOODSMVT_ITEM-RESERV_NO,LW_GOODSMVT_ITEM-RES_ITEM)
            FROM RESB
           WHERE AUFNR = LW_P1_BODY3-CPDDH
             AND MATNR = LW_P1_BODY1-YLDM
             AND XWAOK = 'X'."可移动过账的预留才可以扣除
          "modify by maojian at 2012-10-25
          IF SY-SUBRC <> 0.
            CLEAR : LW_GOODSMVT_ITEM-RESERV_NO,
                    LW_GOODSMVT_ITEM-RES_ITEM.
          ENDIF.
          APPEND LW_GOODSMVT_ITEM TO LT_GOODSMVT_ITEM.


        ELSE.


          LW_GOODSMVT_ITEM-PLANT     = '1201'."工厂
          LW_GOODSMVT_ITEM-STGE_LOC  = LW_P1_BODY1-LGORT."库存地点
          LW_GOODSMVT_ITEM-MOVE_TYPE = '261'."移动类型
*----------------------分摊数量------------------------
*        LW_YLZL = LW_P1_BODY1-ZL * (  LW_P1_BODY3-YLCCHJ / GW_BODY3_SUM  ).
*        LW_GOODSMVT_ITEM-ENTRY_QNT = LW_YLZL  ."数量
          LW_GOODSMVT_ITEM-ENTRY_QNT =
            LW_P1_BODY1-ZL * (  LW_P1_BODY3-YLCCHJ / GW_BODY3_SUM  ).
          LV_AMOUNT = LV_AMOUNT + LW_GOODSMVT_ITEM-ENTRY_QNT. "分摊重量累加
          LW_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
          LW_GOODSMVT_ITEM-ORDERID   = LW_P1_BODY3-CPDDH."订单号
          LW_GOODSMVT_ITEM-MATERIAL  = LW_P1_BODY1-YLDM."原料代码
          LW_GOODSMVT_ITEM-BATCH     = LW_P1_BODY1-YLPH."原料批号
          SELECT SINGLE RSNUM RSPOS                 " 预留编号,预留项目编号
            INTO (LW_GOODSMVT_ITEM-RESERV_NO,LW_GOODSMVT_ITEM-RES_ITEM)
            FROM RESB
           WHERE AUFNR = LW_P1_BODY3-CPDDH
             AND MATNR = LW_P1_BODY1-YLDM
             AND XWAOK = 'X'. "可移动过账的预留才可以扣除
          "modify by maojian at 2012-10-25
          IF SY-SUBRC <> 0.
            CLEAR : LW_GOODSMVT_ITEM-RESERV_NO,
                    LW_GOODSMVT_ITEM-RES_ITEM.
          ENDIF.
          APPEND LW_GOODSMVT_ITEM TO LT_GOODSMVT_ITEM.


        ENDIF.
      ENDLOOP.


    ENDLOOP.


    IF LT_GOODSMVT_ITEM IS NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_GOODSMVT_HEADER
          GOODSMVT_CODE    = '03'
        IMPORTING
          GOODSMVT_HEADRET = LW_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_GOODSMVT_ITEM
          RETURN           = LT_RETURN.
      IF LW_MATERIALDOCUMENT IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        LOOP AT GT_BODY1 INTO LW_P1_BODY1 WHERE GZ <> 'Y'.
          UPDATE ZZTPP_ZSTZ_BODY1
             SET GZ = 'Y'
                 ROWCOLOR = 'C410'
                 MBLNR = LW_MATERIALDOCUMENT
           WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
             AND YLDM  = LW_P1_BODY1-YLDM
             AND YLPH  = LW_P1_BODY1-YLPH
             AND LGORT = LW_P1_BODY1-LGORT.
        ENDLOOP.
        IF GW_MESSAGE IS INITIAL.
          CONCATENATE '凭证'LW_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ELSE.
          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ENDIF.
*******Change at + 20120613
*        LOOP AT SCREEN.
*          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*            SCREEN-INPUT = '0' .
*            MODIFY SCREEN.
*          ENDIF.
*        ENDLOOP.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        SORT LT_RETURN BY TYPE ID NUMBER.
        DELETE ADJACENT DUPLICATES FROM LT_RETURN COMPARING TYPE ID NUMBER.
        CLEAR LW_RETURN.
        LOOP AT LT_RETURN INTO LW_RETURN .
          IF GW_MESSAGE IS INITIAL.
            GW_MESSAGE-MESSAGE =  LW_RETURN-MESSAGE.
          ELSE.
            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_RETURN-MESSAGE
                 INTO GW_MESSAGE-MESSAGE  .
          ENDIF.
        ENDLOOP.
        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
        EXIT.
      ENDIF.
    ENDIF.


*原料分摊
    CLEAR LW_P1_BODY3.
    LOOP AT GT_BODY3 INTO LW_P1_BODY3.
      LW_P1_BODY3-YLFT = GW_BODY1_SUM * ( LW_P1_BODY3-YLCCHJ / GW_BODY3_SUM ).
      UPDATE ZZTPP_ZSTZ_BODY3
         SET YLFT = LW_P1_BODY3-YLFT
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
         AND MATNR = LW_P1_BODY3-MATNR
         AND CPDDH = LW_P1_BODY3-CPDDH
         AND LGORT = LW_P1_BODY3-LGORT.
    ENDLOOP.


    REFRESH:GT_HEAD.
    "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
    PERFORM CL_SL_SL_DATA .
    APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
    MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.


    COMMIT WORK.
    " Fill the dynamic table <fs_dyn_tab1>
*    SELECT YLDM YLMS YLPH LGORT ZL
*      FROM ZZTPP_ZSTZ_BODY1 INTO TABLE <FS_DYN_TAB1>
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    " Fill the dynamic table <fs_dyn_tab3>
*    SELECT MATNR MAKTX CPDDH LGORT HGPZL BHGPZL DJYPZL
*      CPCCHEJ FGP YLCCHJ CPCL YLFT BXFX JQFT RGFT YDFT
*      FROM ZZTPP_ZSTZ_BODY3 INTO TABLE <FS_DYN_TAB3>
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    PERFORM FILL_DYNAMIC_TABLE.


*    SORT LT_RETURN BY TYPE ID NUMBER.
*    DELETE ADJACENT DUPLICATES FROM LT_RETURN COMPARING TYPE ID NUMBER.
*    CLEAR LW_RETURN.
*    LOOP AT LT_RETURN INTO LW_RETURN .
*      CONCATENATE GW_MESSAGE LW_RETURN-MESSAGE
*             INTO GW_MESSAGE SEPARATED BY ';'  .
*    ENDLOOP.
    MESSAGE  GW_MESSAGE-MESSAGE TYPE 'S'.
    "刷新数据
    CALL METHOD OBJ_MY_ALV_GRID1->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID3->REFRESH_TABLE_DISPLAY.
  ENDIF.
ENDFORM.                    " POST1_DATA
*&---------------------------------------------------------------------*
*&      Form  POST2_DATA
*&---------------------------------------------------------------------*
*    返工品数据过账
*----------------------------------------------------------------------*
FORM POST2_DATA .
  DATA: LW_P2_BODY2 TYPE ZZTPP_ZSTZ_BODY2,
        LW_P2_BODY3 TYPE ZZTPP_ZSTZ_BODY3.
  DATA:LW_P2_GOODSMVT_HEADER  TYPE BAPI2017_GM_HEAD_01,
       LW_P2_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
       LW_P2_MATERIALDOCUMENT TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
       LW_P2_MATDOCUMENTYEAR  TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
       LT_P2_GOODSMVT_ITEM    TYPE STANDARD TABLE OF   BAPI2017_GM_ITEM_CREATE,
       LW_P2_GOODSMVT_ITEM    TYPE BAPI2017_GM_ITEM_CREATE,
       LT_P2_RETURN           TYPE STANDARD TABLE OF   BAPIRET2,
       LW_P2_RETURN           TYPE BAPIRET2.
  DATA: LW_P2_POSNR TYPE CO_POSNR.
  IF ZZTPP_ZSTZ_HEAD-GZ <> 'Y'.
    MESSAGE S001(00) WITH '工时未过帐!' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.


  GV_TITLE = '过账确认'.
  GV_TXT_QA = '是否过账'.
*  确认是否过账数据
  PERFORM COFIRM_ACTION USING GV_TITLE
                              GV_TXT_QA
                              GV_TXT_BN1
                              GV_TXT_BN2
                        CHANGING GV_ANSWER.
  IF GV_ANSWER = '1'. "是
    "过账日期写入head不能修改
*******Change at + 20120613
*    UPDATE ZZTPP_ZSTZ_HEAD
*       SET BUDAT = ZZTPP_ZSTZ_HEAD-BUDAT
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*    LOOP AT SCREEN.
*      IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*        SCREEN-INPUT = '1' .
*        MODIFY SCREEN.
*      ENDIF.
*    ENDLOOP.


    REFRESH GT_MESSAGE.
    CLEAR GW_MESSAGE.
*bapi抬头参数
    CLEAR LW_P2_GOODSMVT_HEADER.
    LW_P2_GOODSMVT_HEADER-PSTNG_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_P2_GOODSMVT_HEADER-DOC_DATE   = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_P2_GOODSMVT_HEADER-PR_UNAME   = SY-UNAME.
    LW_P2_GOODSMVT_HEADER-HEADER_TXT = ZZTPP_ZSTZ_HEAD-BTBHA."台班编号


*取返工品信息
    REFRESH GT_BODY2.
    SELECT * INTO TABLE GT_BODY2
      FROM ZZTPP_ZSTZ_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


    REFRESH LT_P2_GOODSMVT_ITEM.
    CLEAR:LW_P2_BODY2,
          LW_P2_GOODSMVT_HEADRET,
          LW_P2_MATERIALDOCUMENT,
          LW_P2_MATDOCUMENTYEAR,
          LW_P2_GOODSMVT_ITEM.


*----------------------同订单,MB31,移动类型122---------------------
    LOOP AT GT_BODY2 INTO LW_P2_BODY2 WHERE GZ <> 'Y'.
      IF LW_P2_BODY2-YDDH = LW_P2_BODY2-FGDDH.
        "同订单,MB31,移动类型122
        LW_P2_GOODSMVT_ITEM-PLANT = '1201'."工厂别
        LW_P2_GOODSMVT_ITEM-STGE_LOC = LW_P2_BODY2-LGORT.  "库位
        LW_P2_GOODSMVT_ITEM-MOVE_TYPE = '122'.  "移动类型
        LW_P2_GOODSMVT_ITEM-BATCH = LW_P2_BODY2-FGOPH."批号
        LW_P2_GOODSMVT_ITEM-ENTRY_QNT = LW_P2_BODY2-ZL."数量
        LW_P2_GOODSMVT_ITEM-ENTRY_UOM = 'KG'.            "单位
        LW_P2_GOODSMVT_ITEM-ORDERID = LW_P2_BODY2-FGDDH.    "订单号
        SELECT SINGLE POSNR INTO LW_P2_POSNR
           FROM AFPO
          WHERE AUFNR = LW_P2_BODY2-FGDDH
            AND MATNR = LW_P2_BODY2-FGPDM.
        LW_P2_GOODSMVT_ITEM-ORDER_ITNO = LW_P2_POSNR."订单项目编号
        LW_P2_GOODSMVT_ITEM-MOVE_REAS = '0002'."移动原因
        LW_P2_GOODSMVT_ITEM-MVT_IND = 'F'.     "移动标识
        APPEND LW_P2_GOODSMVT_ITEM TO LT_P2_GOODSMVT_ITEM.
      ENDIF.
    ENDLOOP.
    IF LT_P2_GOODSMVT_ITEM IS NOT INITIAL .
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_P2_GOODSMVT_HEADER
          GOODSMVT_CODE    = '02'
        IMPORTING
          GOODSMVT_HEADRET = LW_P2_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_P2_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_P2_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_P2_GOODSMVT_ITEM
          RETURN           = LT_P2_RETURN.
      IF LW_P2_MATERIALDOCUMENT IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        LOOP AT GT_BODY2 INTO LW_P2_BODY2 WHERE GZ <> 'Y'.
          IF LW_P2_BODY2-YDDH = LW_P2_BODY2-FGDDH.
            UPDATE ZZTPP_ZSTZ_BODY2
               SET GZ = 'Y'
                   ROWCOLOR = 'C410'
                   MBLNR = LW_P2_MATERIALDOCUMENT
             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
               AND FGPDM  = LW_P2_BODY2-FGPDM
               AND FGOPH  = LW_P2_BODY2-FGOPH
               AND LGORT  = LW_P2_BODY2-LGORT.
          ENDIF.
        ENDLOOP.
*******Change at + 20120613
*        LOOP AT SCREEN.
*          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*            SCREEN-INPUT = '0' .
*            MODIFY SCREEN.
*          ENDIF.
*        ENDLOOP.


        IF GW_MESSAGE IS INITIAL.
          CONCATENATE '凭证'LW_P2_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ELSE.
          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P2_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ENDIF.
        CALL FUNCTION 'DEQUEUE_ALL'
*         EXPORTING
*           _SYNCHRON       = ' '
                  .


*******Change at + 20120614
      ELSE.
        ROLLBACK WORK .
        CLEAR : GW_MESSAGE-MESSAGE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        SORT LT_P2_RETURN BY TYPE ID NUMBER.
        DELETE ADJACENT DUPLICATES FROM LT_P2_RETURN COMPARING TYPE ID NUMBER.
        CLEAR LW_P2_RETURN.
        LOOP AT LT_P2_RETURN INTO LW_P2_RETURN .
          IF GW_MESSAGE IS INITIAL.
            GW_MESSAGE-MESSAGE =  LW_P2_RETURN-MESSAGE.
          ELSE.
            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P2_RETURN-MESSAGE
                 INTO GW_MESSAGE-MESSAGE  .
          ENDIF.
        ENDLOOP.
        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
        EXIT.
      ENDIF.
    ENDIF.


*-----------------------不同订单,MB1A,移动类型261-------------------------
    REFRESH LT_P2_GOODSMVT_ITEM.
    CLEAR:LW_P2_BODY2,
          LW_P2_GOODSMVT_HEADRET,
          LW_P2_MATERIALDOCUMENT,
          LW_P2_MATDOCUMENTYEAR,
          LW_P2_GOODSMVT_ITEM.
    LOOP AT GT_BODY2 INTO LW_P2_BODY2 WHERE GZ <> 'Y' ."不同订单,MB1A,移动类型261
      IF LW_P2_BODY2-YDDH <> LW_P2_BODY2-FGDDH.
        LW_P2_GOODSMVT_ITEM-PLANT     = '1201'."工厂
        LW_P2_GOODSMVT_ITEM-STGE_LOC  = LW_P2_BODY2-LGORT."库存地点
        LW_P2_GOODSMVT_ITEM-MOVE_TYPE = '261'."移动类型
        LW_P2_GOODSMVT_ITEM-ENTRY_QNT = LW_P2_BODY2-ZL  ."数量
        LW_P2_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
        LW_P2_GOODSMVT_ITEM-ORDERID   = LW_P2_BODY2-FGDDH."订单号
        LW_P2_GOODSMVT_ITEM-MATERIAL  = LW_P2_BODY2-FGPDM."代码
        LW_P2_GOODSMVT_ITEM-BATCH     = LW_P2_BODY2-FGOPH."批号
        SELECT SINGLE RSNUM RSPOS                " 预留编号,预留项目编号
          INTO (LW_P2_GOODSMVT_ITEM-RESERV_NO,LW_P2_GOODSMVT_ITEM-RES_ITEM)
          FROM RESB
         WHERE AUFNR = LW_P2_BODY2-FGDDH
           AND MATNR = LW_P2_BODY2-FGPDM
           AND XWAOK = 'X'.
*           AND XWAOK = 'X'."允许物料移动
        "modify by maojian at 2012-10-25
        IF SY-SUBRC <> 0.
          CLEAR : LW_P2_GOODSMVT_ITEM-RESERV_NO,
                  LW_P2_GOODSMVT_ITEM-RES_ITEM.
        ENDIF.
        APPEND LW_P2_GOODSMVT_ITEM TO LT_P2_GOODSMVT_ITEM.
      ENDIF.
    ENDLOOP.
    IF LT_P2_GOODSMVT_ITEM IS NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_P2_GOODSMVT_HEADER
          GOODSMVT_CODE    = '03'
        IMPORTING
          GOODSMVT_HEADRET = LW_P2_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_P2_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_P2_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_P2_GOODSMVT_ITEM
          RETURN           = LT_P2_RETURN.
      IF LW_P2_MATERIALDOCUMENT IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        LOOP AT GT_BODY2 INTO LW_P2_BODY2 WHERE GZ <> 'Y'.
          IF LW_P2_BODY2-YDDH <> LW_P2_BODY2-FGDDH.
            UPDATE ZZTPP_ZSTZ_BODY2
               SET GZ = 'Y'
                   ROWCOLOR = 'C410'
                   MBLNR = LW_P2_MATERIALDOCUMENT
             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
               AND FGPDM  = LW_P2_BODY2-FGPDM
               AND FGOPH  = LW_P2_BODY2-FGOPH
               AND LGORT  = LW_P2_BODY2-LGORT.
          ENDIF.
        ENDLOOP.
*******Change at + 20120613
*        LOOP AT SCREEN.
*          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*            SCREEN-INPUT = '0' .
*            MODIFY SCREEN.
*          ENDIF.
*        ENDLOOP.


        IF GW_MESSAGE IS INITIAL.
          CONCATENATE '凭证'LW_P2_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ELSE.
          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P2_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ENDIF.
*******Change at + 20120614
      ELSE.
        ROLLBACK WORK .
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        SORT LT_P2_RETURN BY TYPE ID NUMBER.
        DELETE ADJACENT DUPLICATES FROM LT_P2_RETURN COMPARING TYPE ID NUMBER.
        CLEAR LW_P2_RETURN.
        LOOP AT LT_P2_RETURN INTO LW_P2_RETURN .
          IF GW_MESSAGE IS INITIAL.
            GW_MESSAGE-MESSAGE =  LW_P2_RETURN-MESSAGE.
          ELSE.
            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P2_RETURN-MESSAGE
                 INTO GW_MESSAGE-MESSAGE  .
          ENDIF.
        ENDLOOP.
        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
        EXIT.
      ENDIF.
    ENDIF.


*返工品变动,成品中 ‘返工品’ ‘原料产出合计’ ‘产量’ 均随之发生改变
    PERFORM FRM_FGP_UPDATE.
*    REFRESH GT_BODY2.
*    REFRESH GT_FGDDH."返工品汇总表
*    REFRESH GT_XTDD."返工品原订单号=返工到订单号时, 成品产量中扣除相应数额
*
**取返工品信息
*    SELECT *
*      FROM ZZTPP_ZSTZ_BODY2
*      INTO TABLE GT_BODY2
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*
**汇总
*    CLEAR LW_P2_BODY2.
*    LOOP AT GT_BODY2 INTO LW_P2_BODY2.
*      IF LW_P2_BODY2-YDDH = LW_P2_BODY2-FGDDH.
*        GW_XTDD-YDDH  = LW_P2_BODY2-YDDH.
*        GW_XTDD-FGDDH = LW_P2_BODY2-FGDDH.
*        GW_XTDD-ZL  = LW_P2_BODY2-ZL.
*        COLLECT GW_XTDD INTO GT_XTDD.
*      ENDIF.
*      GW_FGDDH-FGDDH = LW_P2_BODY2-FGDDH.
*      GW_FGDDH-ZL  = LW_P2_BODY2-ZL.
*      COLLECT GW_FGDDH INTO GT_FGDDH.
*    ENDLOOP.
*
*    CLEAR LW_P2_BODY3.
*    LOOP AT GT_FGDDH INTO GW_FGDDH.
*      SELECT SINGLE * INTO LW_P2_BODY3
*       FROM ZZTPP_ZSTZ_BODY3
*      WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
*        AND CPDDH  = GW_FGDDH-FGDDH.
*      IF SY-SUBRC = 0.
*        LW_P2_BODY3-FGP = GW_FGDDH-ZL.
**原料产出合计 = 成品产出合计 - 返工品重量
*        LW_P2_BODY3-YLCCHJ = LW_P2_BODY3-CPCCHEJ - LW_P2_BODY3-FGP.
*      ENDIF.
*      UPDATE ZZTPP_ZSTZ_BODY3
*        SET FGP  = LW_P2_BODY3-FGP
*            YLCCHJ = LW_P2_BODY3-YLCCHJ
*      WHERE BTBHA  = LW_P2_BODY3-BTBHA
*        AND MATNR  = LW_P2_BODY3-MATNR
*        AND CPDDH  = LW_P2_BODY3-CPDDH
*        AND LGORT  = LW_P2_BODY3-LGORT.
*    ENDLOOP.
*
*    CLEAR LW_P2_BODY3.
*    CLEAR GW_XTDD.
*    REFRESH GT_BODY3.
**取成品信息
*    SELECT * INTO TABLE GT_BODY3
*      FROM ZZTPP_ZSTZ_BODY3
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
**返工品原订单号 = 返工到订单号
*    IF GT_XTDD IS INITIAL .
*      LOOP AT GT_BODY3 INTO LW_P2_BODY3 .
*        LW_P2_BODY3-CPCL = LW_P2_BODY3-CPCCHEJ.
*        UPDATE ZZTPP_ZSTZ_BODY3
*           SET CPCL   = LW_P2_BODY3-CPCL
*         WHERE BTBHA  = LW_P2_BODY3-BTBHA
*           AND MATNR  = LW_P2_BODY3-MATNR
*           AND CPDDH  = LW_P2_BODY3-CPDDH
*           AND LGORT  = LW_P2_BODY3-LGORT.
*      ENDLOOP.
*    ELSE.
*      LOOP AT GT_XTDD INTO GW_XTDD.
*        SELECT SINGLE * INTO LW_P2_BODY3
*          FROM ZZTPP_ZSTZ_BODY3
*         WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
*           AND CPDDH  = GW_XTDD-YDDH.
*        IF SY-SUBRC = 0.
*          LW_P2_BODY3-CPCL = LW_P2_BODY3-CPCCHEJ - GW_XTDD-ZL.
*        ELSE.
*          LW_P2_BODY3-CPCL = LW_P2_BODY3-CPCCHEJ.
*        ENDIF.
*        UPDATE ZZTPP_ZSTZ_BODY3
*          SET CPCL   = LW_P2_BODY3-CPCL
*        WHERE BTBHA  = LW_P2_BODY3-BTBHA
*          AND MATNR  = LW_P2_BODY3-MATNR
*          AND CPDDH  = LW_P2_BODY3-CPDDH
*          AND LGORT  = LW_P2_BODY3-LGORT.
*      ENDLOOP.
*    ENDIF.


*更新头信息
    REFRESH:GT_HEAD.
    "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
    PERFORM CL_SL_SL_DATA .
    APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
    MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.


    COMMIT WORK.
** Fill the dynamic table <fs_dyn_tab2>
*    SELECT FGPDM FGPMS FGOPH YDDH FGDDH LGORT ZL
*      FROM ZZTPP_ZSTZ_BODY2 INTO TABLE <FS_DYN_TAB2>
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
** Fill the dynamic table <fs_dyn_tab3>
*    SELECT MATNR MAKTX CPDDH LGORT HGPZL BHGPZL DJYPZL
*      CPCCHEJ FGP YLCCHJ CPCL YLFT BXFX JQFT RGFT YDFT
*      FROM ZZTPP_ZSTZ_BODY3 INTO TABLE <FS_DYN_TAB3>
*    WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


    PERFORM FILL_DYNAMIC_TABLE.


*******Change at + 20120614
*    SORT LT_P2_RETURN BY TYPE ID NUMBER.
*    DELETE ADJACENT DUPLICATES FROM LT_P2_RETURN COMPARING TYPE ID NUMBER.
*    LOOP AT LT_P2_RETURN INTO LW_P2_RETURN .
*      CONCATENATE GW_MESSAGE LW_P2_RETURN-MESSAGE
*             INTO GW_MESSAGE SEPARATED BY ';'  .
*    ENDLOOP.
    MESSAGE  GW_MESSAGE-MESSAGE TYPE 'S'.
    "刷新alv
    CALL METHOD OBJ_MY_ALV_GRID2->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID3->REFRESH_TABLE_DISPLAY.
  ENDIF.
ENDFORM.                    " POST2_DATA
*&---------------------------------------------------------------------*
*&      Form  POST3_DATA
*&---------------------------------------------------------------------*
*    余料数据过账
*----------------------------------------------------------------------*
FORM POST3_DATA .
  DATA: LW_P3_BODY3 TYPE ZZTPP_ZSTZ_BODY3,
        LW_P3_BODY4 TYPE ZZTPP_ZSTZ_BODY4.
  DATA:LW_P3_GOODSMVT_HEADER  TYPE BAPI2017_GM_HEAD_01,
       LW_P3_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
       LW_P3_MATERIALDOCUMENT TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
       LW_P3_MATDOCUMENTYEAR  TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
       LT_P3_GOODSMVT_ITEM    TYPE STANDARD TABLE OF   BAPI2017_GM_ITEM_CREATE,
       LW_P3_GOODSMVT_ITEM    TYPE BAPI2017_GM_ITEM_CREATE,
       LT_P3_RETURN           TYPE STANDARD TABLE OF   BAPIRET2,
       LW_P3_RETURN           TYPE BAPIRET2.
  DATA:LW_P3_YLZL TYPE ZZLMS,
       LW_P3_POSNR TYPE CO_POSNR.
  DATA:LR_STR1(6) VALUE '混凝土',
       LR_STR2(4) VALUE '余料',
       LR_STR3(4) VALUE '尾料'.
*******Change at + 20120613
  DATA:LV_STATUS TYPE C.
  DATA:LV_I_TAB TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY4,
       LV_WA_TAB TYPE ZZTPP_ZSTZ_BODY4.




  GV_TITLE = '过账确认'.
  GV_TXT_QA = '是否过账'.


  IF ZZTPP_ZSTZ_HEAD-GZ <> 'Y'.
    MESSAGE S001(00) WITH '工时未过帐!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    REFRESH GT_BODY2.
    SELECT * INTO TABLE GT_BODY2
      FROM ZZTPP_ZSTZ_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND GZ = ''.
    IF SY-SUBRC = 0.
      MESSAGE S001(00) WITH '返工品未过帐!' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.
  ENDIF.


*  确认是否过账数据
  PERFORM COFIRM_ACTION USING GV_TITLE
                              GV_TXT_QA
                              GV_TXT_BN1
                              GV_TXT_BN2
                        CHANGING GV_ANSWER.
  IF GV_ANSWER = '1'. "是
    "过账日期写入head不能修改
*******Change at + 20120613
*    UPDATE ZZTPP_ZSTZ_HEAD
*       SET BUDAT = ZZTPP_ZSTZ_HEAD-BUDAT
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*    LOOP AT SCREEN.
*      IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*        SCREEN-INPUT = '1' .
*        MODIFY SCREEN.
*      ENDIF.
*    ENDLOOP.


    REFRESH GT_BODY4.
    SELECT * INTO TABLE GT_BODY4
      FROM ZZTPP_ZSTZ_BODY4
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*余料/波纤合计
    CLEAR LW_P3_BODY4.
    CLEAR GW_BODY4_SUM.
    LOOP AT GT_BODY4 INTO LW_P3_BODY4.
* 铜棉扣除废料
*      IF  LW_P3_BODY4-YLDM+8 = '3010300000' OR
*          LW_P3_BODY4-YLDM+8 = '3010400000' OR
*          LW_P3_BODY4-YLDM+8 = '3100300000' OR
*          LW_P3_BODY4-YLDM+8 = '3100100000' OR
*          LW_P3_BODY4-YLDM+8 = '3100900000'  .
*        CONTINUE.
*      ENDIF.


      GW_BODY4_SUM = GW_BODY4_SUM + LW_P3_BODY4-YLZL.
    ENDLOOP.


    REFRESH GT_BODY3.
    SELECT * INTO TABLE GT_BODY3
      FROM ZZTPP_ZSTZ_BODY3
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
* 原料产出合计
    CLEAR: LW_P3_BODY3,GW_BODY3_SUM.
    LOOP AT GT_BODY3 INTO LW_P3_BODY3.
      GW_BODY3_SUM = GW_BODY3_SUM + LW_P3_BODY3-YLCCHJ.
    ENDLOOP.


*Bapi抬头参数
    CLEAR LW_P3_GOODSMVT_HEADER.
    LW_P3_GOODSMVT_HEADER-PSTNG_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_P3_GOODSMVT_HEADER-DOC_DATE   = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_P3_GOODSMVT_HEADER-PR_UNAME   = SY-UNAME.
    LW_P3_GOODSMVT_HEADER-HEADER_TXT = ZZTPP_ZSTZ_HEAD-BTBHA."台班编号


***********************************有订单项目**************************************************
*    CLEAR : LV_STATUS.
*    REFRESH LT_P3_RETURN.
*    CLEAR LW_P3_RETURN.
*    CLEAR GW_MESSAGE.
*    CLEAR LW_P3_BODY4.
*    REFRESH LT_P3_GOODSMVT_ITEM.
*    CLEAR:LW_P3_GOODSMVT_HEADRET,
*          LW_P3_MATERIALDOCUMENT,
*          LW_P3_MATDOCUMENTYEAR,
*          LW_P3_GOODSMVT_ITEM.
*
*    LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
**      IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'H' AND ( LW_P3_BODY4-YLDM+8 = '3010300000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3010400000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3100300000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3100100000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3100900000' ).
**        CONTINUE.
**      ENDIF.
*      IF  LW_P3_BODY4-YLDM+8 = '3010300000' OR
*          LW_P3_BODY4-YLDM+8 = '3010400000' OR
*          LW_P3_BODY4-YLDM+8 = '3100300000' OR
*          LW_P3_BODY4-YLDM+8 = '3100100000' OR
*          LW_P3_BODY4-YLDM+8 = '3100900000'  .
*        CONTINUE.
*      ENDIF.
*      SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤,mb31
*      IF SY-SUBRC = 0.
*        CLEAR LW_P3_BODY3.
*        LOOP AT GT_BODY3 INTO LW_P3_BODY3.
**订单项目编号 :在订单组件中存在,根据项目编号进行MB31 101的收货
*          SELECT SINGLE POSNR INTO LW_P3_POSNR
*            FROM AFPO
*           WHERE AUFNR = LW_P3_BODY3-CPDDH
*             AND MATNR =  LW_P3_BODY4-YLDM.
*          IF SY-SUBRC = 0.
*            LW_P3_GOODSMVT_ITEM-ORDER_ITNO = LW_P3_POSNR."订单项目编号
*            LW_P3_GOODSMVT_ITEM-PLANT = '1201'."工厂
*            LW_P3_GOODSMVT_ITEM-STGE_LOC  = LW_P3_BODY4-LGORT."库存地点
*            LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '101'."移动类型
**--------------------------------------------------------
**            LW_P3_YLZL = LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
**            LW_P3_GOODSMVT_ITEM-ENTRY_QNT = LW_P3_YLZL."数量
*            LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
*              LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
*            LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
*            LW_P3_GOODSMVT_ITEM-ORDERID   = LW_P3_BODY3-CPDDH."订单号
*            LW_P3_GOODSMVT_ITEM-BATCH  = LW_P3_BODY4-YLPH."批号
*            LW_P3_GOODSMVT_ITEM-MVT_IND = 'F'."移动标示
*            APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
*          ELSE.
**订单无此项目的情况
*            LV_STATUS = 'X'.
*          ENDIF.
*        ENDLOOP.
*      ENDIF.
*    ENDLOOP.
*
*    IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
*      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
*        EXPORTING
*          GOODSMVT_HEADER  = LW_P3_GOODSMVT_HEADER
*          GOODSMVT_CODE    = '02'
*        IMPORTING
*          GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
*          MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
*          MATDOCUMENTYEAR  = LW_P3_MATDOCUMENTYEAR
*        TABLES
*          GOODSMVT_ITEM    = LT_P3_GOODSMVT_ITEM
*          RETURN           = LT_P3_RETURN.
*      IF LW_P3_MATERIALDOCUMENT IS NOT INITIAL.
*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
*        IF LV_STATUS <> 'X'.
*          LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
*            SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤,mb31
*            IF SY-SUBRC = 0.
**            SELECT SINGLE POSNR INTO LW_P3_POSNR
**              FROM AFPO
**             WHERE AUFNR = LW_P3_BODY3-CPDDH
**               AND MATNR =  LW_P3_BODY4-YLDM.
**            IF SY-SUBRC = 0.
*              UPDATE ZZTPP_ZSTZ_BODY4
*                 SET
*                     GZ = 'Y'
*                     ROWCOLOR = 'C410'
*                     MBLNR = LW_P3_MATERIALDOCUMENT
*               WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
*                 AND YLDM  = LW_P3_BODY4-YLDM
*                 AND YLPH  = LW_P3_BODY4-YLPH
*                 AND LGORT = LW_P3_BODY4-LGORT.
**            ENDIF.
*            ENDIF.
*          ENDLOOP.
*        ENDIF.
********Change at + 20120613
**        LOOP AT SCREEN.
**          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
**            SCREEN-INPUT = '0' .
**            MODIFY SCREEN.
**          ENDIF.
**        ENDLOOP.
*        IF GW_MESSAGE IS INITIAL.
*          CONCATENATE '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
*                 INTO GW_MESSAGE-MESSAGE.
*        ELSE.
*          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
*                 INTO GW_MESSAGE-MESSAGE.
*        ENDIF.
*        CALL FUNCTION 'DEQUEUE_ALL'
**         EXPORTING
**           _SYNCHRON       = ' '
*                  .
*      ELSE.
*        ROLLBACK WORK.
*        CLEAR : GW_MESSAGE-MESSAGE.
*        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*        SORT LT_P3_RETURN BY TYPE ID NUMBER.
*        DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
*        CLEAR LW_P3_RETURN.
*        LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
*          IF GW_MESSAGE IS INITIAL.
*            GW_MESSAGE-MESSAGE =  LW_P3_RETURN-MESSAGE.
*          ELSE.
*            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
*                 INTO GW_MESSAGE-MESSAGE  .
*          ENDIF.
*        ENDLOOP.
*        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
*        EXIT.
*      ENDIF.
*    ENDIF.
*
*********************************无此订单项目***************************************************
********Change at + 20120601
*    IF LV_STATUS = 'X'.
*      REFRESH LT_P3_RETURN.
*      CLEAR LW_P3_RETURN.
*      CLEAR LW_P3_BODY4.
*      REFRESH LT_P3_GOODSMVT_ITEM.
*      CLEAR:LW_P3_GOODSMVT_HEADRET,
*            LW_P3_MATERIALDOCUMENT,
*            LW_P3_MATDOCUMENTYEAR,
*            LW_P3_GOODSMVT_ITEM.
*
*      LOOP AT GT_BODY4 INTO LW_P3_BODY4  WHERE GZ <> 'Y' .
**        IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'H' AND ( LW_P3_BODY4-YLDM+8 = '3010300000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3010400000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3100300000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3100100000' OR
**                                                LW_P3_BODY4-YLDM+8 = '3100900000' ).
**          CONTINUE.
**        ENDIF.
*        IF  LW_P3_BODY4-YLDM+8 = '3010300000' OR
*          LW_P3_BODY4-YLDM+8 = '3010400000' OR
*          LW_P3_BODY4-YLDM+8 = '3100300000' OR
*          LW_P3_BODY4-YLDM+8 = '3100100000' OR
*          LW_P3_BODY4-YLDM+8 = '3100900000'  .
*          CONTINUE.
*        ENDIF.
*        SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤 ,MB1C
*        IF SY-SUBRC = 0.
*          CLEAR LW_P3_BODY3.
*          LOOP AT GT_BODY3 INTO LW_P3_BODY3.
**订单项目编号 :在订单组件中不存在,MB1C 531收货
*            SELECT SINGLE POSNR INTO LW_P3_POSNR
*              FROM AFPO
*             WHERE AUFNR = LW_P3_BODY3-CPDDH
*               AND MATNR =  LW_P3_BODY4-YLDM.
*            IF SY-SUBRC <> 0.
*              LW_P3_GOODSMVT_ITEM-PLANT = '1201'."工厂
*              LW_P3_GOODSMVT_ITEM-STGE_LOC  = LW_P3_BODY4-LGORT."库存地点
*              LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '531'."移动类型
*              LW_P3_GOODSMVT_ITEM-MATERIAL  = LW_P3_BODY4-YLDM."代码
**              LW_P3_YLZL = LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
**              LW_P3_GOODSMVT_ITEM-ENTRY_QNT = LW_P3_YLZL."数量
*              LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
*                LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
*              LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
*              LW_P3_GOODSMVT_ITEM-ORDERID   = LW_P3_BODY3-CPDDH."订单号
*              LW_P3_GOODSMVT_ITEM-BATCH  = LW_P3_BODY4-YLPH."批号
*              APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
*            ENDIF.
*          ENDLOOP.
*        ENDIF.
*      ENDLOOP.
*
*      IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
*        CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
*          EXPORTING
*            GOODSMVT_HEADER  = LW_P3_GOODSMVT_HEADER
*            GOODSMVT_CODE    = '05'
*          IMPORTING
*            GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
*            MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
*            MATDOCUMENTYEAR  = LW_P3_MATDOCUMENTYEAR
*          TABLES
*            GOODSMVT_ITEM    = LT_P3_GOODSMVT_ITEM
*            RETURN           = LT_P3_RETURN.
*        IF LW_P3_MATERIALDOCUMENT IS NOT INITIAL.
*          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
*          LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
*            SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤
*            IF SY-SUBRC = 0.
**              SELECT SINGLE POSNR INTO LW_P3_POSNR
**                FROM AFPO
**               WHERE AUFNR = LW_P3_BODY3-CPDDH
**                 AND MATNR =  LW_P3_BODY4-YLDM.
**              IF SY-SUBRC <> 0.
*              UPDATE ZZTPP_ZSTZ_BODY4
*                 SET
**                     GZ = 'Y'
*                     ROWCOLOR = 'C410'
*                     MBLNR = LW_P3_MATERIALDOCUMENT
*               WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
*                 AND YLDM  = LW_P3_BODY4-YLDM
*                 AND YLPH  = LW_P3_BODY4-YLPH
*                 AND LGORT = LW_P3_BODY4-LGORT.
**              ENDIF.
*            ENDIF.
*          ENDLOOP.
********Change at + 20120613
**        LOOP AT SCREEN.
**          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
**            SCREEN-INPUT = '0' .
**            MODIFY SCREEN.
**          ENDIF.
**        ENDLOOP.
*          IF GW_MESSAGE IS INITIAL.
*            CONCATENATE '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
*                   INTO GW_MESSAGE-MESSAGE.
*          ELSE.
*            CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
*                   INTO GW_MESSAGE-MESSAGE.
*          ENDIF.
*        ELSE.
*          CLEAR : GW_MESSAGE-MESSAGE.
*          ROLLBACK WORK.
*          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*          SORT LT_P3_RETURN BY TYPE ID NUMBER.
*          DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
*          CLEAR LW_P3_RETURN.
*          LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
*            IF GW_MESSAGE IS INITIAL.
*              GW_MESSAGE-MESSAGE =  LW_P3_RETURN-MESSAGE.
*            ELSE.
*              CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
*                   INTO GW_MESSAGE-MESSAGE  .
*            ENDIF.
*          ENDLOOP.
*          MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
*          EXIT.
*        ENDIF.
*      ENDIF.
*    ENDIF.


**********************************有订单项目**************************************************
    CLEAR : LV_STATUS.
    REFRESH LT_P3_RETURN.
    CLEAR LW_P3_RETURN.
    CLEAR LW_P3_BODY4.
    REFRESH LT_P3_GOODSMVT_ITEM.
    CLEAR:LW_P3_GOODSMVT_HEADRET,
          LW_P3_MATERIALDOCUMENT,
          LW_P3_MATDOCUMENTYEAR,
          LW_P3_GOODSMVT_ITEM.


    LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
      IF  LW_P3_BODY4-YLDM+8 = '3010300000' OR
          LW_P3_BODY4-YLDM+8 = '3010400000' OR
          LW_P3_BODY4-YLDM+8 = '3100300000' OR
          LW_P3_BODY4-YLDM+8 = '3100100000' OR
          LW_P3_BODY4-YLDM+8 = '3100900000'  .
        CONTINUE.
      ENDIF.
      SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤,mb31
      IF SY-SUBRC = 0.
        CLEAR LW_P3_BODY3.
        LOOP AT GT_BODY3 INTO LW_P3_BODY3.
*订单项目编号 :在订单组件中存在,根据项目编号进行MB31 101的收货
          SELECT SINGLE POSNR INTO LW_P3_POSNR
            FROM AFPO
           WHERE AUFNR = LW_P3_BODY3-CPDDH
             AND MATNR =  LW_P3_BODY4-YLDM.
          IF SY-SUBRC = 0.
            LW_P3_GOODSMVT_ITEM-ORDER_ITNO = LW_P3_POSNR."订单项目编号
            LW_P3_GOODSMVT_ITEM-PLANT = '1201'."工厂
            LW_P3_GOODSMVT_ITEM-STGE_LOC  = LW_P3_BODY4-LGORT."库存地点
            LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '101'."移动类型
*--------------------------------------------------------
*            LW_P3_YLZL = LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
*            LW_P3_GOODSMVT_ITEM-ENTRY_QNT = LW_P3_YLZL."数量
            LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
              LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
            LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
            LW_P3_GOODSMVT_ITEM-ORDERID   = LW_P3_BODY3-CPDDH."订单号
            LW_P3_GOODSMVT_ITEM-BATCH  = LW_P3_BODY4-YLPH."批号
            LW_P3_GOODSMVT_ITEM-MVT_IND = 'F'."移动标示
            APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
          ELSE.
            LV_STATUS = 'X'.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDLOOP.


    IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_P3_GOODSMVT_HEADER
          GOODSMVT_CODE    = '02'
        IMPORTING
          GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_P3_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_P3_GOODSMVT_ITEM
          RETURN           = LT_P3_RETURN.
      IF LW_P3_MATERIALDOCUMENT IS NOT INITIAL.
*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
         EXPORTING
           WAIT          = 'X'
*         IMPORTING
*           RETURN        =
                  .


        IF LV_STATUS <> 'X'.
          LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
            SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤,mb31
            IF SY-SUBRC = 0.
*            SELECT SINGLE POSNR INTO LW_P3_POSNR
*              FROM AFPO
*             WHERE AUFNR = LW_P3_BODY3-CPDDH
*               AND MATNR =  LW_P3_BODY4-YLDM.
*            IF SY-SUBRC = 0.
              IF LV_STATUS = ''.
                UPDATE ZZTPP_ZSTZ_BODY4
                   SET
                       GZ = 'Y'
                       ROWCOLOR = 'C410'
                       MBLNR = LW_P3_MATERIALDOCUMENT
                 WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
                   AND YLDM  = LW_P3_BODY4-YLDM
                   AND YLPH  = LW_P3_BODY4-YLPH
                   AND LGORT = LW_P3_BODY4-LGORT.
              ENDIF.
*            ENDIF.
            ENDIF.
          ENDLOOP.


        ELSE.
          LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
            SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤,mb31
            IF SY-SUBRC = 0.
*            SELECT SINGLE POSNR INTO LW_P3_POSNR
*              FROM AFPO
*             WHERE AUFNR = LW_P3_BODY3-CPDDH
*               AND MATNR =  LW_P3_BODY4-YLDM.
*            IF SY-SUBRC = 0.
              UPDATE ZZTPP_ZSTZ_BODY4
                 SET
*                     GZ = 'Y'
                     ROWCOLOR = 'C410'
                     MBLNR = LW_P3_MATERIALDOCUMENT
               WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
                 AND YLDM  = LW_P3_BODY4-YLDM
                 AND YLPH  = LW_P3_BODY4-YLPH
                 AND LGORT = LW_P3_BODY4-LGORT.
*            ENDIF.
            ENDIF.
          ENDLOOP.
        ENDIF.
*******Change at + 20120613
*        LOOP AT SCREEN.
*          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*            SCREEN-INPUT = '0' .
*            MODIFY SCREEN.
*          ENDIF.
*        ENDLOOP.
        IF GW_MESSAGE IS INITIAL.
          CONCATENATE '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ELSE.
          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ENDIF.
        CALL FUNCTION 'DEQUEUE_ALL'
*         EXPORTING
*           _SYNCHRON       = ' '
                  .
      ELSE.
        ROLLBACK WORK.
        CLEAR : GW_MESSAGE-MESSAGE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        SORT LT_P3_RETURN BY TYPE ID NUMBER.
        DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
        CLEAR LW_P3_RETURN.
        LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
          IF GW_MESSAGE IS INITIAL.
            GW_MESSAGE-MESSAGE =  LW_P3_RETURN-MESSAGE.
          ELSE.
            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
                 INTO GW_MESSAGE-MESSAGE  .
          ENDIF.
        ENDLOOP.
        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
        EXIT.
      ENDIF.
    ENDIF.


*******************************无此订单项目***************************************************
    CLEAR : LV_STATUS.
    REFRESH LT_P3_RETURN.
    CLEAR LW_P3_RETURN.
*    CLEAR GW_MESSAGE.
    CLEAR LW_P3_BODY4.
    REFRESH LT_P3_GOODSMVT_ITEM.
    CLEAR:LW_P3_GOODSMVT_HEADRET,
          LW_P3_MATERIALDOCUMENT,
          LW_P3_MATDOCUMENTYEAR,
          LW_P3_GOODSMVT_ITEM.


    LOOP AT GT_BODY4 INTO LW_P3_BODY4  WHERE GZ <> 'Y' .
      IF  LW_P3_BODY4-YLDM+8 = '3010300000' OR
        LW_P3_BODY4-YLDM+8 = '3010400000' OR
        LW_P3_BODY4-YLDM+8 = '3100300000' OR
        LW_P3_BODY4-YLDM+8 = '3100100000' OR
        LW_P3_BODY4-YLDM+8 = '3100900000'  .
        CONTINUE.
      ENDIF.
      SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤 ,MB1C
      IF SY-SUBRC = 0.
        CLEAR LW_P3_BODY3.
        LOOP AT GT_BODY3 INTO LW_P3_BODY3.
*订单项目编号 :在订单组件中不存在,MB1C 531收货
          SELECT SINGLE POSNR INTO LW_P3_POSNR
            FROM AFPO
           WHERE AUFNR = LW_P3_BODY3-CPDDH
             AND MATNR =  LW_P3_BODY4-YLDM.
          IF SY-SUBRC <> 0.
            LW_P3_GOODSMVT_ITEM-PLANT = '1201'."工厂
            LW_P3_GOODSMVT_ITEM-STGE_LOC  = LW_P3_BODY4-LGORT."库存地点
            LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '531'."移动类型
            LW_P3_GOODSMVT_ITEM-MATERIAL  = LW_P3_BODY4-YLDM."代码
*              LW_P3_YLZL = LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
*              LW_P3_GOODSMVT_ITEM-ENTRY_QNT = LW_P3_YLZL."数量
            LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
              LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
            LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
            LW_P3_GOODSMVT_ITEM-ORDERID   = LW_P3_BODY3-CPDDH."订单号
            LW_P3_GOODSMVT_ITEM-BATCH  = LW_P3_BODY4-YLPH."批号
            APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
            LV_STATUS = 'X'.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDLOOP.


    IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_P3_GOODSMVT_HEADER
          GOODSMVT_CODE    = '05'
        IMPORTING
          GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_P3_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_P3_GOODSMVT_ITEM
          RETURN           = LT_P3_RETURN.


      IF LW_P3_MATERIALDOCUMENT IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
          SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤
          IF SY-SUBRC = 0.
*              SELECT SINGLE POSNR INTO LW_P3_POSNR
*                FROM AFPO
*               WHERE AUFNR = LW_P3_BODY3-CPDDH
*                 AND MATNR =  LW_P3_BODY4-YLDM.
*              IF SY-SUBRC <> 0.
            UPDATE ZZTPP_ZSTZ_BODY4
               SET
                    GZ = 'Y'
                   ROWCOLOR = 'C410'
                   MBLNR = LW_P3_MATERIALDOCUMENT
             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
               AND YLDM  = LW_P3_BODY4-YLDM
               AND YLPH  = LW_P3_BODY4-YLPH
               AND LGORT = LW_P3_BODY4-LGORT.
*              ENDIF.
          ENDIF.
        ENDLOOP.
*******Change at + 20120613
*        LOOP AT SCREEN.
*          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*            SCREEN-INPUT = '0' .
*            MODIFY SCREEN.
*          ENDIF.
*        ENDLOOP.
        IF GW_MESSAGE IS INITIAL.
          CONCATENATE '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ELSE.
          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ENDIF.
        CALL FUNCTION 'DEQUEUE_ALL'
*         EXPORTING
*           _SYNCHRON       = ' '
                  .
      ELSE.
        CLEAR : GW_MESSAGE-MESSAGE.
        ROLLBACK WORK.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        SORT LT_P3_RETURN BY TYPE ID NUMBER.
        DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
        CLEAR LW_P3_RETURN.
        LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
          IF GW_MESSAGE IS INITIAL.
            GW_MESSAGE-MESSAGE =  LW_P3_RETURN-MESSAGE.
          ELSE.
            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
                 INTO GW_MESSAGE-MESSAGE  .
          ENDIF.
        ENDLOOP.
        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
        EXIT.
      ENDIF.
    ENDIF.


*************************************玻纤*********************************************
*    CLEAR : LV_STATUS.
*    REFRESH LT_P3_RETURN.
*    CLEAR LW_P3_RETURN.
*    CLEAR GW_MESSAGE.
*    CLEAR LW_P3_BODY4.
*    REFRESH LT_P3_GOODSMVT_ITEM.
*
*    CLEAR:LW_P3_GOODSMVT_HEADRET,
*          LW_P3_MATERIALDOCUMENT,
*          LW_P3_MATDOCUMENTYEAR,
*          LW_P3_GOODSMVT_ITEM.
*
*    LOOP AT GT_BODY4 INTO LW_P3_BODY4  WHERE GZ <> 'Y' .
*      IF  LW_P3_BODY4-YLDM+8 = '3010300000' OR
*        LW_P3_BODY4-YLDM+8 = '3010400000' OR
*        LW_P3_BODY4-YLDM+8 = '3100300000' OR
*        LW_P3_BODY4-YLDM+8 = '3100100000' OR
*        LW_P3_BODY4-YLDM+8 = '3100900000'  .
*        CONTINUE.
*      ENDIF.
*      SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤 ,MB1C
*      IF SY-SUBRC = 0.
*        CLEAR LW_P3_BODY3.
*        LOOP AT GT_BODY3 INTO LW_P3_BODY3.
**订单项目编号 :在订单组件中不存在,MB1C 531收货
**          SELECT SINGLE POSNR INTO LW_P3_POSNR
**            FROM AFPO
**           WHERE AUFNR = LW_P3_BODY3-CPDDH
**             AND MATNR =  LW_P3_BODY4-YLDM.
**          IF SY-SUBRC <> 0.
*          LW_P3_GOODSMVT_ITEM-PLANT = '1201'."工厂
*          LW_P3_GOODSMVT_ITEM-STGE_LOC  = LW_P3_BODY4-LGORT."库存地点
*          LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '531'."移动类型
*          LW_P3_GOODSMVT_ITEM-MATERIAL  = LW_P3_BODY4-YLDM."代码
**              LW_P3_YLZL = LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
**              LW_P3_GOODSMVT_ITEM-ENTRY_QNT = LW_P3_YLZL."数量
*          LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
*            LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
*          LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
*          LW_P3_GOODSMVT_ITEM-ORDERID   = LW_P3_BODY3-CPDDH."订单号
*          LW_P3_GOODSMVT_ITEM-BATCH  = LW_P3_BODY4-YLPH."批号
*          APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
**            LV_STATUS = 'X'.
**          ENDIF.
*        ENDLOOP.
*      ENDIF.
*    ENDLOOP.
*
*    IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
*      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
*        EXPORTING
*          GOODSMVT_HEADER  = LW_P3_GOODSMVT_HEADER
*          GOODSMVT_CODE    = '05' " MB1C - Enter Other Goods Receipt
*        IMPORTING
*          GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
*          MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
*          MATDOCUMENTYEAR  = LW_P3_MATDOCUMENTYEAR
*        TABLES
*          GOODSMVT_ITEM    = LT_P3_GOODSMVT_ITEM
*          RETURN           = LT_P3_RETURN.
*
*      IF LW_P3_MATERIALDOCUMENT IS NOT INITIAL.
*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
*        LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
*          SEARCH LW_P3_BODY4-YLMS FOR LR_STR1 . "物料描述中含有‘混凝土’为波纤
*          IF SY-SUBRC = 0.
**              SELECT SINGLE POSNR INTO LW_P3_POSNR
**                FROM AFPO
**               WHERE AUFNR = LW_P3_BODY3-CPDDH
**                 AND MATNR =  LW_P3_BODY4-YLDM.
**              IF SY-SUBRC <> 0.
*            UPDATE ZZTPP_ZSTZ_BODY4
*               SET
*                   GZ = 'Y'
*                   ROWCOLOR = 'C410'
*                   MBLNR = LW_P3_MATERIALDOCUMENT
*             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
*               AND YLDM  = LW_P3_BODY4-YLDM
*               AND YLPH  = LW_P3_BODY4-YLPH
*               AND LGORT = LW_P3_BODY4-LGORT.
**              ENDIF.
*          ENDIF.
*        ENDLOOP.
********Change at + 20120613
**        LOOP AT SCREEN.
**          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
**            SCREEN-INPUT = '0' .
**            MODIFY SCREEN.
**          ENDIF.
**        ENDLOOP.
*        IF GW_MESSAGE IS INITIAL.
*          CONCATENATE '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
*                 INTO GW_MESSAGE-MESSAGE.
*        ELSE.
*          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
*                 INTO GW_MESSAGE-MESSAGE.
*        ENDIF.
**        CALL FUNCTION 'DEQUEUE_ALL'
***         EXPORTING
***           _SYNCHRON       = ' '
**                  .
*      ELSE.
*        CLEAR : GW_MESSAGE-MESSAGE.
*        ROLLBACK WORK.
*        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*        SORT LT_P3_RETURN BY TYPE ID NUMBER.
*        DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
*        CLEAR LW_P3_RETURN.
*        LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
*          IF GW_MESSAGE IS INITIAL.
*            GW_MESSAGE-MESSAGE =  LW_P3_RETURN-MESSAGE.
*          ELSE.
*            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
*                 INTO GW_MESSAGE-MESSAGE  .
*          ENDIF.
*        ENDLOOP.
*        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
*        EXIT.
*      ENDIF.
*    ENDIF.


*******************************余料***************************************************
    REFRESH LT_P3_GOODSMVT_ITEM.
    REFRESH LT_P3_RETURN.
    CLEAR LW_P3_RETURN.
    CLEAR:LW_P3_GOODSMVT_HEADRET,
          LW_P3_MATERIALDOCUMENT,
          LW_P3_MATDOCUMENTYEAR,
          LW_P3_GOODSMVT_ITEM.
    LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
*      IF ZZTPP_ZSTZ_HEAD-BTBHA+0(1) = 'H' AND ( LW_P3_BODY4-YLDM+8 = '3010300000' OR
*                                                LW_P3_BODY4-YLDM+8 = '3010400000' OR
*                                                LW_P3_BODY4-YLDM+8 = '3100300000' OR
*                                                LW_P3_BODY4-YLDM+8 = '3100100000' OR
*                                                LW_P3_BODY4-YLDM+8 = '3100900000' ).
*        CONTINUE.
*      ENDIF.
      IF  LW_P3_BODY4-YLDM+8 = '3010300000' OR
          LW_P3_BODY4-YLDM+8 = '3010400000' OR
          LW_P3_BODY4-YLDM+8 = '3100300000' OR
          LW_P3_BODY4-YLDM+8 = '3100100000' OR
          LW_P3_BODY4-YLDM+8 = '3100900000'  .
        CONTINUE.
      ENDIF.
*判断过账的是不是余料或者尾料,此处代码相同。
      SEARCH LW_P3_BODY4-YLMS FOR LR_STR2 . "物料描述中含有‘余料’为废线,mb1a移动类型为531
      IF SY-SUBRC = 0.
        CLEAR LW_P3_BODY3.
        LOOP AT GT_BODY3 INTO LW_P3_BODY3.
          IF LW_P3_BODY3-YLCCHJ = 0 OR LW_P3_BODY3-YLCCHJ IS INITIAL.
            CONTINUE.
          ENDIF.
          LW_P3_GOODSMVT_ITEM-PLANT     = '1201'."工厂
          LW_P3_GOODSMVT_ITEM-STGE_LOC  = LW_P3_BODY4-LGORT."库存地点
          LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '531'."移动类型
*          LW_P3_YLZL = LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
*          LW_P3_GOODSMVT_ITEM-ENTRY_QNT = LW_P3_YLZL  ."数量
          LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
              LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
          LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
          LW_P3_GOODSMVT_ITEM-ORDERID   = LW_P3_BODY3-CPDDH."订单号
          LW_P3_GOODSMVT_ITEM-MATERIAL  = LW_P3_BODY4-YLDM."代码
          LW_P3_GOODSMVT_ITEM-BATCH     = LW_P3_BODY4-YLPH."批号
          SELECT SINGLE  RSNUM RSPOS              " 预留编号,预留项目编号
            INTO (LW_P3_GOODSMVT_ITEM-RESERV_NO,LW_P3_GOODSMVT_ITEM-RES_ITEM)
            FROM RESB
          WHERE AUFNR = LW_P3_BODY3-CPDDH
            AND MATNR = LW_P3_BODY4-YLDM.
          "modify by maojian at 2012-10-25
          IF SY-SUBRC <> 0.
            CLEAR : LW_P3_GOODSMVT_ITEM-RESERV_NO,
                    LW_P3_GOODSMVT_ITEM-RES_ITEM.
          ENDIF.
          APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
        ENDLOOP.
      ELSE.
        SEARCH LW_P3_BODY4-YLMS FOR LR_STR3 . "物料描述中含有‘尾料’为废线,mb1a移动类型为531
        IF SY-SUBRC = 0.
          CLEAR LW_P3_BODY3.
          LOOP AT GT_BODY3 INTO LW_P3_BODY3.
            IF LW_P3_BODY3-YLCCHJ = 0 OR LW_P3_BODY3-YLCCHJ IS INITIAL.
              CONTINUE.
            ENDIF.
            LW_P3_GOODSMVT_ITEM-PLANT     = '1201'."工厂
            LW_P3_GOODSMVT_ITEM-STGE_LOC  = LW_P3_BODY4-LGORT."库存地点
            LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '531'."移动类型
*          LW_P3_YLZL = LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
*          LW_P3_GOODSMVT_ITEM-ENTRY_QNT = LW_P3_YLZL  ."数量
            LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
                LW_P3_BODY4-YLZL * (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
            LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
            LW_P3_GOODSMVT_ITEM-ORDERID   = LW_P3_BODY3-CPDDH."订单号
            LW_P3_GOODSMVT_ITEM-MATERIAL  = LW_P3_BODY4-YLDM."代码
            LW_P3_GOODSMVT_ITEM-BATCH     = LW_P3_BODY4-YLPH."批号
            SELECT SINGLE  RSNUM RSPOS              " 预留编号,预留项目编号
              INTO (LW_P3_GOODSMVT_ITEM-RESERV_NO,LW_P3_GOODSMVT_ITEM-RES_ITEM)
              FROM RESB
            WHERE AUFNR = LW_P3_BODY3-CPDDH
              AND MATNR = LW_P3_BODY4-YLDM.
            "modify by maojian at 2012-10-25
            IF SY-SUBRC <> 0.
              CLEAR : LW_P3_GOODSMVT_ITEM-RESERV_NO,
                      LW_P3_GOODSMVT_ITEM-RES_ITEM.
            ENDIF.
            APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
          ENDLOOP.
        ENDIF.
      ENDIF.
    ENDLOOP.
    IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_P3_GOODSMVT_HEADER
          GOODSMVT_CODE    = '05'
        IMPORTING
          GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_P3_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_P3_GOODSMVT_ITEM
          RETURN           = LT_P3_RETURN.
      IF LW_P3_MATERIALDOCUMENT IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        LOOP AT GT_BODY4 INTO LW_P3_BODY4 WHERE GZ <> 'Y' .
          SEARCH LW_P3_BODY4-YLMS FOR LR_STR2 . "物料描述中含有‘余料’为废线,mb1a移动类型为531
          IF SY-SUBRC = 0.
            UPDATE ZZTPP_ZSTZ_BODY4
               SET GZ = 'Y'
                   ROWCOLOR = 'C410'
                   MBLNR = LW_P3_MATERIALDOCUMENT
             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
               AND YLDM  = LW_P3_BODY4-YLDM
               AND YLPH  = LW_P3_BODY4-YLPH
               AND LGORT = LW_P3_BODY4-LGORT.
          ELSE.
            SEARCH LW_P3_BODY4-YLMS FOR LR_STR3 . "物料描述中含有‘尾料’为废线,mb1a移动类型为531
            IF SY-SUBRC = 0.
              UPDATE ZZTPP_ZSTZ_BODY4
                 SET GZ = 'Y'
                     ROWCOLOR = 'C410'
                     MBLNR = LW_P3_MATERIALDOCUMENT
               WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
                 AND YLDM  = LW_P3_BODY4-YLDM
                 AND YLPH  = LW_P3_BODY4-YLPH
                 AND LGORT = LW_P3_BODY4-LGORT.
            ENDIF.
          ENDIF.
        ENDLOOP.
*******Change at + 20120613
*        LOOP AT SCREEN.
*          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*            SCREEN-INPUT = '0' .
*            MODIFY SCREEN.
*          ENDIF.
*        ENDLOOP.
        IF GW_MESSAGE IS INITIAL.
          CONCATENATE '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ELSE.
          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_P3_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ENDIF.
      ELSE.
        ROLLBACK WORK.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        SORT LT_P3_RETURN BY TYPE ID NUMBER.
        DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
        CLEAR LW_P3_RETURN.
        LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
          IF GW_MESSAGE IS INITIAL.
            GW_MESSAGE-MESSAGE =  LW_P3_RETURN-MESSAGE.
          ELSE.
            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
                 INTO GW_MESSAGE-MESSAGE  .
          ENDIF.
        ENDLOOP.
        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
        EXIT.
      ENDIF.
    ENDIF.


    "余料分摊
    CLEAR LW_P3_BODY3.
    CLEAR GW_BODY4_SUM.
    LOOP AT GT_BODY4 INTO LW_P3_BODY4.
      GW_BODY4_SUM = GW_BODY4_SUM + LW_P3_BODY4-YLZL.
    ENDLOOP.


    LOOP AT GT_BODY3 INTO LW_P3_BODY3.
      LW_P3_BODY3-BXFX = GW_BODY4_SUM *  (  LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM  ).
      UPDATE ZZTPP_ZSTZ_BODY3
         SET BXFX = LW_P3_BODY3-BXFX
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
         AND MATNR = LW_P3_BODY3-MATNR
         AND CPDDH = LW_P3_BODY3-CPDDH
         AND LGORT = LW_P3_BODY3-LGORT.
    ENDLOOP.


    REFRESH:GT_HEAD.
    "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
    PERFORM CL_SL_SL_DATA .
    APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
    MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.


    COMMIT WORK.
** Fill the dynamic table <fs_dyn_tab3>
*    SELECT MATNR MAKTX CPDDH LGORT HGPZL BHGPZL DJYPZL
*      CPCCHEJ FGP YLCCHJ CPCL YLFT BXFX JQFT RGFT YDFT
*      FROM ZZTPP_ZSTZ_BODY3 INTO TABLE <FS_DYN_TAB3>
*    WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
** Fill the dynamic table <fs_dyn_tab4>
*    SELECT YLDM YLMS YLPH LGORT YLZL
*      FROM ZZTPP_ZSTZ_BODY4 INTO TABLE <FS_DYN_TAB4>
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


*  动态显示当前记录
    PERFORM FILL_DYNAMIC_TABLE.


*    SORT LT_P3_RETURN BY TYPE ID NUMBER.
*    DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
*    LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
*      CONCATENATE GW_MESSAGE LW_P3_RETURN-MESSAGE
*             INTO GW_MESSAGE SEPARATED BY ';'  .
*    ENDLOOP.
    IF GW_MESSAGE IS INITIAL.
      MESSAGE '没有需要过账的记录!' TYPE 'I'.
    ELSE.
      MESSAGE  GW_MESSAGE-MESSAGE TYPE 'S'.
    ENDIF.
    CALL METHOD OBJ_MY_ALV_GRID3->REFRESH_TABLE_DISPLAY.
    CALL METHOD OBJ_MY_ALV_GRID4->REFRESH_TABLE_DISPLAY.
  ENDIF.
ENDFORM.                    " POST3_DATA
*&---------------------------------------------------------------------*
*&      Form  POST4_DATA
*&---------------------------------------------------------------------*
*       包装物过账
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM POST4_DATA .
*  TYPES:BEGIN OF ty_cc_aufnr,
*        matnr TYPE zcpdm,
*        lgort TYPE lgort_d,
*        aufnr TYPE aufnr,
*        cpcl  TYPE zcpcl,
*        END OF ty_cc_aufnr.
*  TYPES:BEGIN OF ty_cc_mblnr,
*        mblnr TYPE mblnr,
*        END OF ty_cc_mblnr.
*  DATA: lw_cc_mblnr TYPE ty_cc_mblnr,
*        lt_cc_mblnr TYPE TABLE OF ty_cc_mblnr.
*
*  DATA: lw_cc_aufnr TYPE ty_cc_aufnr,
*        lt_cc_aufnr TYPE TABLE OF ty_cc_aufnr.
*  DATA: lw_mkpf    TYPE gy_mkpf,
*        lw_mseg    TYPE gy_mseg.
  DATA: LW_CC_BODY5 TYPE ZZTPP_ZSTZ_BODY5,
        LT_CC_BODY5 TYPE TABLE OF ZZTPP_ZSTZ_BODY5.
  DATA: LW_P1_BODY5 TYPE ZZTPP_ZSTZ_BODY5,
        LW_P1_BODY3 TYPE ZZTPP_ZSTZ_BODY3,
        LW_BZW TYPE ZBZWSL.
*  DATA: lw_cc_budat(010).
*  DATA: lw_cc_cl(018).
*  DATA: lw_cc_btbha(025).


  DATA:LW_GOODSMVT_HEADER  TYPE BAPI2017_GM_HEAD_01,
     LW_GOODSMVT_CODE    TYPE BAPI2017_GM_CODE,
     LW_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
     LW_MATERIALDOCUMENT TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
     LW_MATDOCUMENTYEAR  TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
     LT_GOODSMVT_ITEM    TYPE STANDARD TABLE OF   BAPI2017_GM_ITEM_CREATE,
     LW_GOODSMVT_ITEM    TYPE BAPI2017_GM_ITEM_CREATE,
     LT_RETURN           TYPE STANDARD TABLE OF   BAPIRET2,
     LW_RETURN           TYPE BAPIRET2.
  GV_TITLE = '过账确认'.
  GV_TXT_QA = '是否过账'.


  IF ZZTPP_ZSTZ_HEAD-GZ <> 'Y'.
    MESSAGE S001(00) WITH '工时未过帐!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    REFRESH GT_BODY2.
    SELECT * INTO TABLE GT_BODY2
      FROM ZZTPP_ZSTZ_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND GZ = ''.
    IF SY-SUBRC = 0.
      MESSAGE S001(00) WITH '返工品未过帐!' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
      REFRESH GT_BODY4.
      SELECT * INTO TABLE GT_BODY4
        FROM ZZTPP_ZSTZ_BODY4
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
         AND GZ = ''.
      IF SY-SUBRC = 0.
        MESSAGE S001(00) WITH '余料未过帐!' DISPLAY LIKE 'E'.
        EXIT.
*      ELSE.
*        REFRESH GT_BODY5.
*        SELECT * INTO TABLE GT_BODY5
*          FROM ZZTPP_ZSTZ_BODY5
*         WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
*           AND GZ = ''.
*        IF SY-SUBRC <> 0 OR GT_BODY5 IS INITIAL.
*          MESSAGE S001(00) WITH '包装物已过账!' DISPLAY LIKE 'E'.
*          EXIT.
*        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
*  确认是否过账数据
  PERFORM COFIRM_ACTION USING GV_TITLE
                              GV_TXT_QA
                              GV_TXT_BN1
                              GV_TXT_BN2
                        CHANGING GV_ANSWER.
  IF GV_ANSWER = '1'. "是
    "过账日期写入head不能修改
*******Change at + 20120613
*    UPDATE ZZTPP_ZSTZ_HEAD
*       SET BUDAT = ZZTPP_ZSTZ_HEAD-BUDAT
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*    LOOP AT SCREEN.
*      IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*        SCREEN-INPUT = '1' .
*        MODIFY SCREEN.
*      ENDIF.
*    ENDLOOP.


*    REFRESH: lt_cc_aufnr,lt_cc_mblnr.
*    SELECT matnr
*           lgort
*           cpddh AS aufnr
*           cpcl
*      INTO TABLE lt_cc_aufnr
*      FROM zztpp_zstz_body3
*     WHERE btbha = zztpp_zstz_head-btbha.


    "  WRITE zztpp_zstz_head-budat to lw_cc_budat MM/DD/YYYY.
    "  REPLACE '/' in lw_cc_budat WITH '.'.


*    lw_cc_budat = zztpp_zstz_head-budat.


    REFRESH GT_BODY5.
    SELECT * INTO TABLE GT_BODY5
      FROM ZZTPP_ZSTZ_BODY5
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


*    REFRESH GT_BODY3.
*    SELECT * INTO TABLE GT_BODY3
*      FROM ZZTPP_ZSTZ_BODY3
*     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*    CLEAR: LW_P1_BODY3,GW_BODY3_SUM.
*    LOOP AT GT_BODY3 INTO LW_P1_BODY3.
*      GW_BODY3_SUM = GW_BODY3_SUM + LW_P1_BODY3-YLCCHJ.
*    ENDLOOP.


    "bapi抬头参数
    CLEAR LW_GOODSMVT_HEADER.
    LW_GOODSMVT_HEADER-PSTNG_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_GOODSMVT_HEADER-DOC_DATE   = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_GOODSMVT_HEADER-PR_UNAME   = SY-UNAME.
    LW_GOODSMVT_HEADER-HEADER_TXT = ZZTPP_ZSTZ_HEAD-BTBHA."台班编号


    CLEAR:LW_GOODSMVT_HEADRET,
          LW_MATERIALDOCUMENT,
          LW_MATDOCUMENTYEAR.


    REFRESH : LT_GOODSMVT_ITEM,
              LT_RETURN,
              GT_MESSAGE.


    LOOP AT GT_BODY5 INTO LW_P1_BODY5 WHERE GZ <> 'Y'.
      CLEAR : LW_GOODSMVT_ITEM.
*      CLEAR LW_P1_BODY3.
*      LOOP AT GT_BODY3 INTO LW_P1_BODY3.
      LW_GOODSMVT_ITEM-MATERIAL  = LW_P1_BODY5-BZWLH.   "物料代码
      LW_GOODSMVT_ITEM-BATCH     = LW_P1_BODY5-BZWPH.   "批号
      LW_GOODSMVT_ITEM-PLANT     = '1201'.              "工厂
      LW_GOODSMVT_ITEM-STGE_LOC  = LW_P1_BODY5-LGORT.   "库存地点
      LW_GOODSMVT_ITEM-MOVE_TYPE = '261'.               "移动类型
      LW_GOODSMVT_ITEM-ENTRY_QNT = LW_P1_BODY5-BZWSL.   "数量
*包装物分摊
*        LW_BZW = LW_P1_BODY5-BZWSL * (  LW_P1_BODY3-YLCCHJ / GW_BODY3_SUM  ).
*        LW_GOODSMVT_ITEM-ENTRY_QNT = LW_BZW.
      LW_GOODSMVT_ITEM-ORDERID   = LW_P1_BODY5-SCDDH.   "订单号
      "扣除预留  MB23  - 在CO02中去掉反冲的钩
      SELECT SINGLE RSNUM RSPOS                         "预留编号,预留项目编号
        INTO (LW_GOODSMVT_ITEM-RESERV_NO,LW_GOODSMVT_ITEM-RES_ITEM)
        FROM RESB
       WHERE AUFNR = LW_P1_BODY5-SCDDH
         AND MATNR = LW_P1_BODY5-BZWLH.
      IF SY-SUBRC <> 0.
        CLEAR : LW_GOODSMVT_ITEM-RESERV_NO,
                LW_GOODSMVT_ITEM-RES_ITEM.
      ENDIF.
*单位
      SELECT SINGLE MEINS
        INTO LW_GOODSMVT_ITEM-ENTRY_UOM
        FROM RESB
       WHERE AUFNR = LW_P1_BODY5-SCDDH
         AND MATNR = LW_P1_BODY5-BZWLH.
      LW_GOODSMVT_ITEM-MVT_IND = ''.                    "移动标识
      APPEND LW_GOODSMVT_ITEM TO LT_GOODSMVT_ITEM.
*      ENDLOOP.
    ENDLOOP.


    IF LT_GOODSMVT_ITEM IS NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_GOODSMVT_HEADER
          GOODSMVT_CODE    = '03'                           "MB1A
        IMPORTING
          GOODSMVT_HEADRET = LW_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_GOODSMVT_ITEM
          RETURN           = LT_RETURN.
      IF LW_MATERIALDOCUMENT IS NOT INITIAL.
*        APPEND lw_materialdocument TO lt_cc_mblnr.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        LOOP AT GT_BODY5 INTO LW_P1_BODY5 WHERE GZ <> 'Y'.
          UPDATE ZZTPP_ZSTZ_BODY5
             SET GZ = 'Y'
                 ROWCOLOR = 'C410'
                 MBLNR = LW_MATERIALDOCUMENT
           WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
             AND SCDDH = LW_P1_BODY5-SCDDH
             AND BZWLH = LW_P1_BODY5-BZWLH
             AND BZWPH = LW_P1_BODY5-BZWPH
             AND LGORT = LW_P1_BODY5-LGORT.
        ENDLOOP.


*******Change at + 20120613
*        LOOP AT SCREEN.
*          IF SCREEN-NAME = 'ZZTPP_ZSTZ_HEAD-BUDAT' .
*            SCREEN-INPUT = '0' .
*            MODIFY SCREEN.
*          ENDIF.
*        ENDLOOP.


*        MESSAGE s001(00) WITH '凭证'lw_materialdocument '过账成功!'.
        IF GW_MESSAGE IS INITIAL.
          CONCATENATE '凭证'LW_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ELSE.
          CONCATENATE GW_MESSAGE-MESSAGE ';' '凭证'LW_MATERIALDOCUMENT '过账成功'
                 INTO GW_MESSAGE-MESSAGE.
        ENDIF.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*        LOOP  AT lt_return INTO lw_return .
*          IF lw_return-type = 'E'.
*            MESSAGE lw_return-message TYPE 'I'.
*          ENDIF.
*        ENDLOOP.
        SORT LT_RETURN BY TYPE ID NUMBER.
        DELETE ADJACENT DUPLICATES FROM LT_RETURN COMPARING TYPE ID NUMBER.
        CLEAR LW_RETURN.
        CLEAR GW_MESSAGE.
        LOOP AT LT_RETURN INTO LW_RETURN .
          IF GW_MESSAGE IS INITIAL.
            GW_MESSAGE-MESSAGE =  LW_RETURN-MESSAGE.
          ELSE.
            CONCATENATE GW_MESSAGE-MESSAGE ';' LW_RETURN-MESSAGE
                 INTO GW_MESSAGE-MESSAGE  .
          ENDIF.
        ENDLOOP.
        MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
        EXIT.
      ENDIF.
    ENDIF.


*    REFRESH: gt_mkpf,
*             gt_mseg.
*    REFRESH: gt_body5.
*    SELECT mblnr
*           mjahr
*           bktxt
*    FROM mkpf
*     INTO TABLE gt_mkpf
*     WHERE bktxt = zztpp_zstz_head-btbha. "台班编号
*    IF gt_mkpf IS NOT INITIAL.
*      SORT gt_mkpf BY mblnr mjahr.
*      SELECT mseg~mblnr
*             mseg~mjahr
*             mseg~bwart
*             mseg~matnr
*             mseg~charg  "批号
*             mseg~lgort  "存储位置
*             mseg~menge  "数量
*             mseg~aufnr  "产品订单号
*     FROM mseg
*      INTO TABLE gt_mseg
*      FOR ALL ENTRIES IN gt_mkpf
*      WHERE mseg~mblnr = gt_mkpf-mblnr
*       AND mseg~mjahr  = gt_mkpf-mjahr.
*    ELSE.
*      MESSAGE s001(00) WITH '数据不存在!' DISPLAY LIKE 'E'.
*    ENDIF.
*    IF gt_mkpf IS NOT INITIAL.
*      LOOP AT gt_mseg INTO lw_mseg.
*        CLEAR: gw_maktx.
*        SELECT SINGLE maktx
*          INTO gw_maktx
*          FROM makt
*         WHERE matnr   = lw_mseg-matnr.
*        IF lw_mseg-matnr+8(1) = '5'. "包装物
*          lw_cc_body5-btbha = zztpp_zstz_head-btbha.
*          lw_cc_body5-scddh = lw_mseg-aufnr.
*          lw_cc_body5-bzwlh = lw_mseg-matnr.
*          lw_cc_body5-maktx = gw_maktx.
*          lw_cc_body5-bzwph = lw_mseg-charg.
*          lw_cc_body5-bzwsl = lw_mseg-menge.
*          lw_cc_body5-mblnr = lw_mseg-mblnr.
*          lw_cc_body5-lgort = lw_mseg-lgort.
*          lw_cc_body5-gz    = 'Y'.
*          lw_cc_body5-rowcolor = 'C410'.
*          MODIFY  zztpp_zstz_body5 FROM lw_cc_body5 .
*        ENDIF.
*        CLEAR lw_mseg.
*      ENDLOOP.
*    ENDIF.
    COMMIT WORK.
** Fill the dynamic table <fs_dyn_tab5>
    SELECT  BZWLH MAKTX BZWPH LGORT BZWSL SCDDH MBLNR ROWCOLOR
      FROM ZZTPP_ZSTZ_BODY5 INTO TABLE <FS_DYN_TAB5>
      WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*display message
    MESSAGE  GW_MESSAGE-MESSAGE TYPE 'S'.
    CALL METHOD OBJ_MY_ALV_GRID5->REFRESH_TABLE_DISPLAY.
  ENDIF.
ENDFORM.                    " POST4_DATA
*&---------------------------------------------------------------------*
*&      Form  COFIRM_ACTION
*&---------------------------------------------------------------------*
*     确认动作
*----------------------------------------------------------------------*
*      -->P_TITLE  text
*      -->P_TXT_QA  text
*      -->P_TXT_BN1  text
*      -->P_GV_TXT_BN2  text
*----------------------------------------------------------------------*
FORM COFIRM_ACTION  USING   P_TITLE   TYPE C
                             P_TXT_QA  TYPE C
                             P_TXT_BN1 TYPE C
                             P_TXT_BN2 TYPE C
                   CHANGING P_ANSWER TYPE C.
  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      TITLEBAR              = P_TITLE
      TEXT_QUESTION         = P_TXT_QA
      TEXT_BUTTON_1         = P_TXT_BN1
      TEXT_BUTTON_2         = P_TXT_BN2
      DISPLAY_CANCEL_BUTTON = ''
      START_COLUMN          = '65'
    IMPORTING
      ANSWER                = P_ANSWER
    EXCEPTIONS
      TEXT_NOT_FOUND        = 1
      OTHERS                = 2.
  IF SY-SUBRC <> 0.
    P_ANSWER = '2'. "否
  ENDIF.
ENDFORM.                    " COFIRM_ACTION
*&---------------------------------------------------------------------*
*&      Form  head_translate_to_upper_case
*&---------------------------------------------------------------------*
*      head输入参数转换为大写
*----------------------------------------------------------------------*
FORM HEAD_TRANSLATE_TO_UPPER_CASE.
  TRANSLATE ZZTPP_ZSTZ_HEAD-BTBHA TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_HEAD-JZHAO TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_HEAD-BB1YB TO UPPER CASE  .
  TRANSLATE ZZTPP_ZSTZ_HEAD-ZBBZ  TO UPPER CASE  .
  TRANSLATE ZZTPP_ZSTZ_HEAD-ZJY   TO UPPER CASE  .
  TRANSLATE ZZTPP_ZSTZ_HEAD-SCZG  TO UPPER CASE  .
ENDFORM.    "head_translate_to_upper_case
*&---------------------------------------------------------------------*
*&      Form  body1_translate_to_upper_case
*&---------------------------------------------------------------------*
*      body1输入参数转换为大写
*----------------------------------------------------------------------*
FORM BODY1_TRANSLATE_TO_UPPER_CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY1-YLDM TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY1-YLPH TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY1-LGORT TO UPPER CASE.
ENDFORM.    "body1_translate_to_upper_case
*&---------------------------------------------------------------------*
*&      Form  body2_translate_to_upper_case
*&---------------------------------------------------------------------*
*      body2输入参数转换为大写
*----------------------------------------------------------------------*
FORM BODY2_TRANSLATE_TO_UPPER_CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY2-FGPDM TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY2-FGOPH TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY2-FGDDH TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY2-LGORT TO UPPER CASE.
ENDFORM.    "body2_translate_to_upper_case
*&---------------------------------------------------------------------*
*&      Form  body4_translate_to_upper_case
*&---------------------------------------------------------------------*
*      body4输入参数转换为大写
*----------------------------------------------------------------------*
FORM BODY4_TRANSLATE_TO_UPPER_CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY4-YLDM TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY4-YLPH TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY4-LGORT TO UPPER CASE.
ENDFORM.    "body4_translate_to_upper_case
*&---------------------------------------------------------------------*
*&      Form  BODY5_TRANSLATE_TO_UPPER_CASE
*&---------------------------------------------------------------------*
*       body5输入参数转换成大写
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BODY5_TRANSLATE_TO_UPPER_CASE .
  TRANSLATE ZZTPP_ZSTZ_BODY5-SCDDH TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY5-BZWLH TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY5-BZWPH TO UPPER CASE.
  TRANSLATE ZZTPP_ZSTZ_BODY5-LGORT TO UPPER CASE.
ENDFORM.                    " BODY5_TRANSLATE_TO_UPPER_CASE
*&---------------------------------------------------------------------*
*&      Form  cl_sl_sl_data
*&---------------------------------------------------------------------*
*      当班成材率 当班回收率 当班损耗率 损耗总量 数据计算
*----------------------------------------------------------------------*
FORM CL_SL_SL_DATA .
  DATA: LW_CSS_BODY1 TYPE ZZTPP_ZSTZ_BODY1,
        LW_CSS_BODY2 TYPE ZZTPP_ZSTZ_BODY2,
        LW_CSS_BODY3 TYPE ZZTPP_ZSTZ_BODY3,
        LW_CSS_BODY4 TYPE ZZTPP_ZSTZ_BODY4.
  DATA: LS_DBCCL(7),
        LS_DBHSL(7),
        LS_DBSHL(7),
        LS_XHZL(10).
  DATA: LW_CSS_DBCCL TYPE ZZLMS,
        LW_CSS_DBHSL TYPE ZZLMS,
        LW_CSS_DBSHL TYPE ZZLMS,
        LW_CSS_XHZL  TYPE CHAR10.


  "原材料合计
  REFRESH GT_BODY1.
  SELECT * INTO TABLE GT_BODY1
    FROM ZZTPP_ZSTZ_BODY1
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  CLEAR LW_CSS_BODY1.
  CLEAR GW_BODY1_SUM.
  LOOP AT GT_BODY1 INTO LW_CSS_BODY1.
    GW_BODY1_SUM = GW_BODY1_SUM + LW_CSS_BODY1-ZL.
  ENDLOOP.


  "原料成品产出合计
  CLEAR: LW_CSS_BODY3,GW_BODY3_SUM.
  REFRESH GT_BODY3.
  SELECT  * INTO TABLE GT_BODY3
    FROM ZZTPP_ZSTZ_BODY3
   WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA.
  LOOP AT GT_BODY3 INTO LW_CSS_BODY3.
    GW_BODY3_SUM = GW_BODY3_SUM + LW_CSS_BODY3-YLCCHJ.
  ENDLOOP.


  "余料合计
  CLEAR: LW_CSS_BODY4,GW_BODY4_SUM.
  REFRESH GT_BODY4.
  SELECT  * INTO TABLE GT_BODY4
    FROM ZZTPP_ZSTZ_BODY4
   WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA.
  LOOP AT GT_BODY4 INTO LW_CSS_BODY4.
    GW_BODY4_SUM = GW_BODY4_SUM + LW_CSS_BODY4-YLZL.
  ENDLOOP.


*纯返工品的情况,要根据返工品重量计算原料
  IF GW_BODY1_SUM IS INITIAL.
    CLEAR : GW_BODY1_SUM , GW_BODY3_SUM.
    LOOP AT GT_BODY3 INTO LW_CSS_BODY3.
      GW_BODY1_SUM = GW_BODY1_SUM + LW_CSS_BODY3-FGP.
      GW_BODY3_SUM = GW_BODY3_SUM + LW_CSS_BODY3-CPCCHEJ.
    ENDLOOP.
  ENDIF.


  IF GW_BODY1_SUM IS NOT INITIAL.
    "当班成材率
    LW_CSS_DBCCL =   ( TRUNC( ( GW_BODY3_SUM / GW_BODY1_SUM ) * 10000 ) ) / 100.
    IF LW_CSS_DBCCL < 0.
      LS_DBCCL = ABS( LW_CSS_DBCCL ).
      CONCATENATE '-' LS_DBCCL INTO LS_DBCCL.
      CONDENSE LS_DBCCL NO-GAPS.
      ZZTPP_ZSTZ_HEAD-DBCCL = LS_DBCCL.
    ELSE.
      ZZTPP_ZSTZ_HEAD-DBCCL =  LW_CSS_DBCCL.
    ENDIF.


    "当班回收率
    LW_CSS_DBHSL = ( TRUNC( ( GW_BODY4_SUM / GW_BODY1_SUM ) * 10000 ) ) / 100.
    IF LW_CSS_DBHSL < 0.
      LS_DBHSL = ABS( LW_CSS_DBHSL ).
      CONCATENATE '-' LS_DBHSL INTO LS_DBHSL.
      CONDENSE LS_DBHSL NO-GAPS.
      ZZTPP_ZSTZ_HEAD-DBHSL = LS_DBHSL.
    ELSE.
      ZZTPP_ZSTZ_HEAD-DBHSL = LW_CSS_DBHSL.
    ENDIF.


    "当班损耗率
    LW_CSS_DBSHL = ( TRUNC( ( ( GW_BODY1_SUM - GW_BODY3_SUM - GW_BODY4_SUM )  / GW_BODY1_SUM ) * 10000 ) ) / 100.
    IF LW_CSS_DBSHL < 0.
      LS_DBSHL = ABS( LW_CSS_DBSHL ).
      CONCATENATE '-' LS_DBSHL INTO LS_DBSHL.
      CONDENSE LS_DBSHL NO-GAPS.
      ZZTPP_ZSTZ_HEAD-DBSHL = LS_DBSHL.
    ELSE.
      ZZTPP_ZSTZ_HEAD-DBSHL = LW_CSS_DBSHL.
    ENDIF.


    "损耗重量
    ZZTPP_ZSTZ_HEAD-XHZL  = GW_BODY1_SUM - GW_BODY3_SUM - GW_BODY4_SUM.
    LW_CSS_XHZL = GW_BODY1_SUM - GW_BODY3_SUM - GW_BODY4_SUM.
    IF LW_CSS_XHZL < 0.
      LS_XHZL = ABS( LW_CSS_XHZL ).
      CONCATENATE '-' LS_XHZL INTO LS_XHZL.
      CONDENSE LS_XHZL NO-GAPS.
      ZZTPP_ZSTZ_HEAD-XHZL = LS_XHZL.
    ELSE.
      ZZTPP_ZSTZ_HEAD-XHZL = LW_CSS_XHZL.
    ENDIF.


  ENDIF.


ENDFORM.    "cl_sl_sl_data
*&---------------------------------------------------------------------*
*&      Form  bdc1_dynpro
*&---------------------------------------------------------------------*
*      Start New Screen
*----------------------------------------------------------------------*
FORM BDC1_DYNPRO USING  VALUE(PROGRAM) VALUE(DYNPRO).
  CLEAR:GT_BDCDATA.
  GT_BDCDATA-PROGRAM = PROGRAM.
  GT_BDCDATA-DYNPRO  = DYNPRO.
  GT_BDCDATA-DYNBEGIN = 'X'.
  APPEND GT_BDCDATA.
ENDFORM."BDC_DYNPRO
*&---------------------------------------------------------------------*
*&      Form  bdc1_field
*&---------------------------------------------------------------------*
*      Insert field
*----------------------------------------------------------------------*
FORM BDC1_FIELD USING  VALUE(FNAM) VALUE(FVAL).
  CLEAR GT_BDCDATA.
  GT_BDCDATA-FNAM = FNAM.
  GT_BDCDATA-FVAL = FVAL.
  APPEND GT_BDCDATA.
ENDFORM."BDC_FIELD
*&---------------------------------------------------------------------*
*&      Form  fill_rowcolor
*&---------------------------------------------------------------------*
*      gz = 'Y' rowcolor = 'C410'
*----------------------------------------------------------------------*
FORM FILL_ROWCOLOR.
  DATA: LW_FR_BODY1 TYPE ZZTPP_ZSTZ_BODY1,
        LW_FR_BODY2 TYPE ZZTPP_ZSTZ_BODY2,
        LW_FR_BODY4 TYPE ZZTPP_ZSTZ_BODY4,
        LW_FR_BODY5 TYPE ZZTPP_ZSTZ_BODY5.


  REFRESH: GT_BODY1,GT_BODY2,GT_BODY4,GT_BODY5.
  CLEAR: LW_FR_BODY1,
         LW_FR_BODY2,
         LW_FR_BODY4,
         LW_FR_BODY5.


  SELECT * INTO TABLE GT_BODY1
    FROM ZZTPP_ZSTZ_BODY1
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  LOOP AT GT_BODY1 INTO LW_FR_BODY1 WHERE ROWCOLOR = ''.
    IF LW_FR_BODY1-GZ = 'Y'.
      LW_FR_BODY1-ROWCOLOR = 'C410'.
    ELSE.
      LW_FR_BODY1-ROWCOLOR = ''.
    ENDIF.
    UPDATE ZZTPP_ZSTZ_BODY1
       SET ROWCOLOR = LW_FR_BODY1-ROWCOLOR
     WHERE BTBHA = LW_FR_BODY1-BTBHA
       AND YLDM  = LW_FR_BODY1-YLDM
       AND YLPH  = LW_FR_BODY1-YLPH
       AND LGORT = LW_FR_BODY1-LGORT.
  ENDLOOP.


  SELECT * INTO TABLE GT_BODY2
   FROM ZZTPP_ZSTZ_BODY2
  WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  LOOP AT GT_BODY2 INTO LW_FR_BODY2 WHERE ROWCOLOR = ''.
    IF LW_FR_BODY2-GZ = 'Y'.
      LW_FR_BODY2-ROWCOLOR = 'C410'.
    ELSE.
      LW_FR_BODY2-ROWCOLOR = ''.
    ENDIF.
    UPDATE ZZTPP_ZSTZ_BODY2
       SET ROWCOLOR = LW_FR_BODY2-ROWCOLOR
     WHERE BTBHA = LW_FR_BODY2-BTBHA
       AND FGPDM = LW_FR_BODY2-FGPDM
       AND FGOPH = LW_FR_BODY2-FGOPH
       AND YDDH  = LW_FR_BODY2-YDDH
       AND FGDDH = LW_FR_BODY2-FGDDH
       AND LGORT = LW_FR_BODY2-LGORT.
  ENDLOOP.


  SELECT * INTO TABLE GT_BODY4
    FROM ZZTPP_ZSTZ_BODY4
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  LOOP AT GT_BODY4 INTO LW_FR_BODY4 WHERE ROWCOLOR = ''.
    IF LW_FR_BODY4-GZ = 'Y'.
      LW_FR_BODY4-ROWCOLOR = 'C410'.
    ELSE.
      LW_FR_BODY4-ROWCOLOR = ''.
    ENDIF.
    UPDATE ZZTPP_ZSTZ_BODY4
       SET ROWCOLOR = LW_FR_BODY4-ROWCOLOR
     WHERE BTBHA = LW_FR_BODY4-BTBHA
       AND YLDM  = LW_FR_BODY4-YLDM
       AND YLPH  = LW_FR_BODY4-YLPH
       AND LGORT = LW_FR_BODY4-LGORT
       AND MBLNR = LW_FR_BODY4-MBLNR.
  ENDLOOP.


*******Change at 2012-05-25
  SELECT * INTO TABLE GT_BODY5
    FROM ZZTPP_ZSTZ_BODY5
    WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  LOOP AT GT_BODY5 INTO LW_FR_BODY5 WHERE ROWCOLOR = ''.
    IF LW_FR_BODY5-GZ = 'Y'.
      LW_FR_BODY5-ROWCOLOR = 'C410'.
    ELSE.
      LW_FR_BODY5-ROWCOLOR = ''.
    ENDIF.
    UPDATE ZZTPP_ZSTZ_BODY5
       SET ROWCOLOR = LW_FR_BODY5-ROWCOLOR
     WHERE BTBHA = LW_FR_BODY5-BTBHA
       AND SCDDH = LW_FR_BODY5-SCDDH
       AND BZWLH = LW_FR_BODY5-BZWLH
       AND BZWPH = LW_FR_BODY5-BZWPH
       AND LGORT = LW_FR_BODY5-LGORT.
  ENDLOOP.
ENDFORM."BDC_FIELD
*&--------------------------------------------------------------
*&      Form  atdoubleclick1
*&--------------------------------------------------------------
FORM ATDOUBLECLICK1 USING P_E_ROW
                           P_E_COLUMN
                            P_ES_ROW_NO.
  DATA:  LW_DC_BODY1 TYPE ZZTPP_ZSTZ_BODY1.
  REFRESH GT_BODY1.
  SELECT * INTO TABLE GT_BODY1
    FROM ZZTPP_ZSTZ_BODY1
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  CLEAR LW_DC_BODY1.
  READ TABLE GT_BODY1 INTO LW_DC_BODY1 INDEX P_E_ROW.
  ZZTPP_ZSTZ_BODY1-YLDM =  LW_DC_BODY1-YLDM.
  ZZTPP_ZSTZ_BODY1-YLPH =  LW_DC_BODY1-YLPH.
  ZZTPP_ZSTZ_BODY1-LGORT = LW_DC_BODY1-LGORT.
  ZZTPP_ZSTZ_BODY1-ZL   =  LW_DC_BODY1-ZL.
  LEAVE TO SCREEN 0010.
ENDFORM. " atdoubleclick1
*&--------------------------------------------------------------
*&      Form  atdoubleclick2
*&--------------------------------------------------------------
FORM ATDOUBLECLICK2 USING P_E_ROW
                           P_E_COLUMN
                            P_ES_ROW_NO.
  DATA:  LW_DC_BODY2 TYPE ZZTPP_ZSTZ_BODY2.
  REFRESH GT_BODY2.
  SELECT * INTO TABLE GT_BODY2
    FROM ZZTPP_ZSTZ_BODY2
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  CLEAR LW_DC_BODY2.
  READ TABLE GT_BODY2 INTO LW_DC_BODY2 INDEX P_E_ROW.
  ZZTPP_ZSTZ_BODY2-FGPDM =  LW_DC_BODY2-FGPDM.
  ZZTPP_ZSTZ_BODY2-FGOPH =  LW_DC_BODY2-FGOPH.
  ZZTPP_ZSTZ_BODY2-YDDH  =  LW_DC_BODY2-YDDH.
  ZZTPP_ZSTZ_BODY2-FGDDH =  LW_DC_BODY2-FGDDH.
  ZZTPP_ZSTZ_BODY2-LGORT =  LW_DC_BODY2-LGORT.
  ZZTPP_ZSTZ_BODY2-ZL    =  LW_DC_BODY2-ZL.
  LEAVE TO SCREEN 0010.
ENDFORM. " atdoubleclick2
*&--------------------------------------------------------------
*&      Form  atdoubleclick4
*&--------------------------------------------------------------
FORM ATDOUBLECLICK4 USING P_E_ROW
                           P_E_COLUMN
                            P_ES_ROW_NO.
  DATA:  LW_DC_BODY4 TYPE ZZTPP_ZSTZ_BODY4.
  REFRESH GT_BODY4.
  SELECT * INTO TABLE GT_BODY4
    FROM ZZTPP_ZSTZ_BODY4
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  CLEAR LW_DC_BODY4.
  READ TABLE GT_BODY4 INTO LW_DC_BODY4 INDEX P_E_ROW.
  ZZTPP_ZSTZ_BODY4-YLDM =  LW_DC_BODY4-YLDM.
  ZZTPP_ZSTZ_BODY4-YLPH =  LW_DC_BODY4-YLPH.
  ZZTPP_ZSTZ_BODY4-LGORT = LW_DC_BODY4-LGORT.
  ZZTPP_ZSTZ_BODY4-YLZL =  LW_DC_BODY4-YLZL.
  LEAVE TO SCREEN 0010.
ENDFORM. " atdoubleclick4
*&---------------------------------------------------------------------*
*&      Form  ATDOUBLECLICK5
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_ROW  text
*      -->P_E_COLUMN  text
*      -->P_ES_ROW_NO  text
*----------------------------------------------------------------------*
FORM ATDOUBLECLICK5  USING    P_E_ROW
                              P_E_COLUMN
                              P_ES_ROW_NO.
  DATA:  LW_DC_BODY5 TYPE ZZTPP_ZSTZ_BODY5.
  REFRESH GT_BODY5.
  SELECT * INTO TABLE GT_BODY5
    FROM ZZTPP_ZSTZ_BODY5
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  CLEAR LW_DC_BODY5.
  READ TABLE GT_BODY5 INTO LW_DC_BODY5 INDEX P_E_ROW.
  ZZTPP_ZSTZ_BODY5-SCDDH =  LW_DC_BODY5-SCDDH.
  ZZTPP_ZSTZ_BODY5-BZWLH =  LW_DC_BODY5-BZWLH.
  ZZTPP_ZSTZ_BODY5-BZWPH =  LW_DC_BODY5-BZWPH.
  ZZTPP_ZSTZ_BODY5-LGORT = LW_DC_BODY5-LGORT.
  ZZTPP_ZSTZ_BODY5-BZWSL =  LW_DC_BODY5-BZWSL.
  LEAVE TO SCREEN 0010.
ENDFORM.                    " ATDOUBLECLICK5
*&---------------------------------------------------------------------*
*&      FORM CALLCO11N
*&---------------------------------------------------------------------*
*    call co11n
*----------------------------------------------------------------------*
FORM CALLCO11N.
  TYPES:BEGIN OF TY_CC_AUFNR,
        MATNR TYPE ZCPDM,
        LGORT TYPE LGORT_D,
        AUFNR TYPE AUFNR,
        CPCL  TYPE ZCPCL,
        END OF TY_CC_AUFNR.
  TYPES:BEGIN OF TY_CC_MBLNR,
        MBLNR TYPE MBLNR,
        END OF TY_CC_MBLNR.
  DATA: LW_CC_MBLNR TYPE TY_CC_MBLNR,
        LT_CC_MBLNR TYPE TABLE OF TY_CC_MBLNR.


  DATA: LW_CC_AUFNR TYPE TY_CC_AUFNR,
        LT_CC_AUFNR TYPE TABLE OF TY_CC_AUFNR.
  DATA: LW_MKPF    TYPE GY_MKPF,
        LW_MSEG    TYPE GY_MSEG.
  DATA: LW_CC_BODY5 TYPE ZZTPP_ZSTZ_BODY5,
        LT_CC_BODY5 TYPE TABLE OF ZZTPP_ZSTZ_BODY5.
  DATA: LW_CC_BUDAT(010).
  DATA: LW_CC_CL(018).
  DATA: LW_CC_BTBHA(025).


  DATA:LV_MAKTX TYPE MAKTX,
       LV_TP TYPE CHAR20 VALUE '托盘',
       LV_BZZD TYPE CHAR20 VALUE '包装纸袋'.


  DATA:LW_GOODSMVT_HEADER  TYPE BAPI2017_GM_HEAD_01,
     LW_GOODSMVT_CODE    TYPE BAPI2017_GM_CODE,
     LW_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
     LW_MATERIALDOCUMENT TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
     LW_MATDOCUMENTYEAR  TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
     LT_GOODSMVT_ITEM    TYPE STANDARD TABLE OF   BAPI2017_GM_ITEM_CREATE,
     LW_GOODSMVT_ITEM    TYPE BAPI2017_GM_ITEM_CREATE,
     LT_RETURN           TYPE STANDARD TABLE OF   BAPIRET2,
     LW_RETURN           TYPE BAPIRET2.
  GV_TITLE = '过账确认'.
  GV_TXT_QA = '是否过账'.


  IF ZZTPP_ZSTZ_HEAD-GZ <> 'Y'.
    MESSAGE S001(00) WITH '工时未过帐!' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    REFRESH GT_BODY2.
    SELECT * INTO TABLE GT_BODY2
      FROM ZZTPP_ZSTZ_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND GZ = ''.
    IF SY-SUBRC = 0.
      MESSAGE S001(00) WITH '返工品未过帐!' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
      REFRESH GT_BODY4.
      SELECT * INTO TABLE GT_BODY4
        FROM ZZTPP_ZSTZ_BODY4
       WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
         AND GZ = ''.
      IF SY-SUBRC = 0.
        MESSAGE S001(00) WITH '余料未过帐!' DISPLAY LIKE 'E'.
        EXIT.
      ELSE.
        REFRESH GT_BODY5.
        SELECT * INTO TABLE GT_BODY5
          FROM ZZTPP_ZSTZ_BODY5
         WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA .
        IF GT_BODY5 IS NOT  INITIAL.
          MESSAGE S001(00) WITH '包装物已录入并过账!' DISPLAY LIKE 'E'.
          EXIT.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.




*  确认是否过账数据
  PERFORM COFIRM_ACTION USING GV_TITLE
                              GV_TXT_QA
                              GV_TXT_BN1
                              GV_TXT_BN2
                        CHANGING GV_ANSWER.
  IF GV_ANSWER = '1'. "是
    REFRESH: LT_CC_AUFNR,LT_CC_MBLNR.
    SELECT MATNR
           LGORT
           CPDDH AS AUFNR
           CPCL
      INTO TABLE LT_CC_AUFNR
      FROM ZZTPP_ZSTZ_BODY3
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    "  WRITE zztpp_zstz_head-budat to lw_cc_budat MM/DD/YYYY.
    "  REPLACE '/' in lw_cc_budat WITH '.'.
    LW_CC_BUDAT = ZZTPP_ZSTZ_HEAD-BUDAT.
    "bapi抬头参数
    CLEAR LW_GOODSMVT_HEADER.
    LW_GOODSMVT_HEADER-PSTNG_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_GOODSMVT_HEADER-DOC_DATE   = ZZTPP_ZSTZ_HEAD-BUDAT.
    LW_GOODSMVT_HEADER-PR_UNAME   = SY-UNAME.
    LW_GOODSMVT_HEADER-HEADER_TXT = ZZTPP_ZSTZ_HEAD-BTBHA."台班编号
    CLEAR:LW_GOODSMVT_HEADRET,LW_MATERIALDOCUMENT,LW_MATDOCUMENTYEAR,LW_GOODSMVT_ITEM.
    REFRESH LT_GOODSMVT_ITEM.


    LOOP AT LT_CC_AUFNR INTO LW_CC_AUFNR.
*      REFRESH gt_bdcdata[].
*      REFRESH gt_messtab[].
*      CLEAR  :gt_bdcdata,gt_messtab.
*      CLEAR  :gt_bdcdata,gt_messtab.
      CLEAR LV_MAKTX.
      SELECT SINGLE MAKTX
        INTO LV_MAKTX
        FROM MAKT
       WHERE MATNR = LW_CC_AUFNR-MATNR
         AND SPRAS = SY-LANGU.


      LW_CC_CL = LW_CC_AUFNR-CPCL.
*      lw_goodsmvt_item-material  = lw_cc_aufnr-matnr.
      LW_GOODSMVT_ITEM-PLANT     = '1201'.           "工厂
      LW_GOODSMVT_ITEM-STGE_LOC  = LW_CC_AUFNR-LGORT."库存地点
      LW_GOODSMVT_ITEM-MOVE_TYPE = '261'.            "移动类型
      LW_GOODSMVT_ITEM-ENTRY_QNT = LW_CC_AUFNR-CPCL. "数量
*单位设置
      SEARCH LV_MAKTX FOR LV_TP.
      IF SY-SUBRC = 0.
        LW_GOODSMVT_ITEM-ENTRY_UOM = 'ZP'.             "单位
      ELSE.
        LW_GOODSMVT_ITEM-ENTRY_UOM = 'PCS'.             "单位
      ENDIF.


      LW_GOODSMVT_ITEM-ORDERID   = LW_CC_AUFNR-AUFNR."订单号


      APPEND LW_GOODSMVT_ITEM TO LT_GOODSMVT_ITEM.
    ENDLOOP.
    "bdc程序
*      PERFORM bdc1_dynpro      USING 'SAPLCORU_S' '0100'.
*      PERFORM bdc1_field       USING 'BDC_OKCODE'
*                                       '/00'.
*      PERFORM bdc1_field       USING 'BDC_CURSOR'
*                                       'AFRUD-AUFNR'.
*      PERFORM bdc1_field       USING 'AFRUD-AUFNR'
*                                      lw_cc_aufnr-aufnr.
*      PERFORM bdc1_dynpro      USING 'SAPLCORU_S' '0100'.
*      PERFORM bdc1_field       USING 'BDC_OKCODE'
*                                      '/00'.
*      PERFORM bdc1_field       USING 'AFRUD-AUFNR'
*                                      lw_cc_aufnr-aufnr.
*      PERFORM bdc1_field       USING 'BDC_CURSOR'
*                                     'AFRUD-LMNGA'.
*      PERFORM bdc1_field       USING 'AFRUD-LMNGA'
*                                      lw_cc_cl.
*      PERFORM bdc1_dynpro      USING 'SAPLCORU_S' '0100'.
*      PERFORM bdc1_field       USING 'BDC_OKCODE'
*                                        '/00'.
*      PERFORM bdc1_field       USING 'AFRUD-AUFNR'
*                                      lw_cc_aufnr-aufnr.
*      PERFORM bdc1_field       USING 'AFRUD-LMNGA'
*                                      lw_cc_cl.
*      PERFORM bdc1_dynpro      USING 'SAPLCORU_S' '0100'.
*      PERFORM bdc1_field       USING 'BDC_OKCODE'
*                                     '=MB03'.
*      PERFORM bdc1_field       USING 'AFRUD-AUFNR'
*                                     lw_cc_aufnr-aufnr.
*      PERFORM bdc1_field       USING 'AFRUD-LMNGA'
*                                      lw_cc_cl.
*      PERFORM bdc1_field       USING 'BDC_CURSOR'
*                                     'AFRUD-BUDAT'.
*      PERFORM bdc1_field       USING 'AFRUD-BUDAT'
*                                     lw_cc_budat.
*      PERFORM bdc1_dynpro      USING 'SAPLCOWB' '0130'.
*      PERFORM bdc1_field       USING 'BDC_CURSOR'
*                           'COWB_COMP-CHARG(01)'.
*
*      CLEAR:gt_messtab[],gt_messtab.
*      CALL TRANSACTION 'CO11N' USING gt_bdcdata MODE 'E' UPDATE 'S' MESSAGES
*        INTO gt_messtab.
*      IF sy-subrc = 0.
*        GET PARAMETER ID 'MBN' FIELD lw_cc_mblnr.
*        APPEND lw_cc_mblnr-mblnr TO lt_cc_mblnr.
*      ENDIF.
    IF LT_GOODSMVT_ITEM IS NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LW_GOODSMVT_HEADER
          GOODSMVT_CODE    = '03'                           "MB1A
        IMPORTING
          GOODSMVT_HEADRET = LW_GOODSMVT_HEADRET
          MATERIALDOCUMENT = LW_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = LW_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_GOODSMVT_ITEM
          RETURN           = LT_RETURN.
      IF LW_MATERIALDOCUMENT IS NOT INITIAL.
        APPEND LW_MATERIALDOCUMENT TO LT_CC_MBLNR.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        LOOP  AT LT_RETURN INTO LW_RETURN .
          IF LW_RETURN-TYPE = 'E'.
            MESSAGE LW_RETURN-MESSAGE TYPE 'I'.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.
*    ENDLOOP.


*    lw_cc_btbha = zztpp_zstz_head-btbha.
*    LOOP AT lt_cc_mblnr INTO lw_cc_mblnr .
*      REFRESH gt_bdcdata[].
*      REFRESH gt_messtab[].
*      CLEAR  :gt_bdcdata,gt_messtab.
*      CLEAR  :gt_bdcdata,gt_messtab.
*
*      PERFORM bdc1_dynpro      USING 'SAPMM07M' '0460'.
*      PERFORM bdc1_field       USING 'BDC_CURSOR'
*                                    'RM07M-MBLNR'.
*      PERFORM bdc1_field       USING 'BDC_OKCODE'
*                                    '=KK'.
*      PERFORM bdc1_field       USING 'RM07M-MBLNR'
*                                    lw_cc_mblnr-mblnr.
*      PERFORM bdc1_dynpro      USING 'SAPMM07M' '0290'.
*      PERFORM bdc1_field       USING 'BDC_CURSOR'
*                                    'MKPF-BKTXT'.
*      PERFORM bdc1_field       USING 'BDC_OKCODE'
*                                    '=BU'.
*      PERFORM bdc1_field       USING 'MKPF-BKTXT'
*                                     lw_cc_btbha.
*      CLEAR:gt_messtab[],gt_messtab.
*      CALL TRANSACTION 'MB02' USING gt_bdcdata MODE 'N' UPDATE 'S' MESSAGES
*               INTO gt_messtab.
*
*    ENDLOOP.


    REFRESH: GT_MKPF,
             GT_MSEG.
    REFRESH: GT_BODY5.
    SELECT MBLNR
           MJAHR
           BKTXT
    FROM MKPF
     INTO TABLE GT_MKPF
     WHERE BKTXT = ZZTPP_ZSTZ_HEAD-BTBHA. "台班编号
    IF GT_MKPF IS NOT INITIAL.
      SORT GT_MKPF BY MBLNR MJAHR.
      SELECT MSEG~MBLNR
             MSEG~MJAHR
             MSEG~BWART
             MSEG~MATNR
             MSEG~CHARG  "批号
             MSEG~LGORT  "存储位置
             MSEG~MENGE  "数量
             MSEG~AUFNR  "产品订单号
     FROM MSEG
      INTO TABLE GT_MSEG
      FOR ALL ENTRIES IN GT_MKPF
      WHERE MSEG~MBLNR = GT_MKPF-MBLNR
       AND MSEG~MJAHR  = GT_MKPF-MJAHR.
    ELSE.
      MESSAGE S001(00) WITH '数据不存在!' DISPLAY LIKE 'E'.
    ENDIF.
    IF GT_MKPF IS NOT INITIAL.
      LOOP AT GT_MSEG INTO LW_MSEG.
        CLEAR: GW_MAKTX.
        SELECT SINGLE MAKTX
          INTO GW_MAKTX
          FROM MAKT
         WHERE MATNR   = LW_MSEG-MATNR.
        IF LW_MSEG-MATNR+8(1) = '5'. "包装物
          LW_CC_BODY5-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          LW_CC_BODY5-SCDDH = LW_MSEG-AUFNR.
          LW_CC_BODY5-BZWLH = LW_MSEG-MATNR.
          LW_CC_BODY5-MAKTX = GW_MAKTX.
          LW_CC_BODY5-BZWPH = LW_MSEG-CHARG.
          LW_CC_BODY5-BZWSL = LW_MSEG-MENGE.
          LW_CC_BODY5-MBLNR = LW_MSEG-MBLNR.
          LW_CC_BODY5-LGORT = LW_MSEG-LGORT.
          LW_CC_BODY5-GZ    = 'Y'.
          LW_CC_BODY5-ROWCOLOR = 'C410'.
          MODIFY  ZZTPP_ZSTZ_BODY5 FROM LW_CC_BODY5 .
        ENDIF.
        CLEAR LW_MSEG.
      ENDLOOP.
    ENDIF.


** Fill the dynamic table <fs_dyn_tab5>
    SELECT  BZWLH MAKTX BZWPH LGORT BZWSL SCDDH MBLNR ROWCOLOR
    FROM ZZTPP_ZSTZ_BODY5 INTO TABLE <FS_DYN_TAB5>
    WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


    CALL METHOD OBJ_MY_ALV_GRID5->REFRESH_TABLE_DISPLAY.
  ENDIF.
ENDFORM.                                                    "callco11n
*&--------------------------------------------------------------
*&      Form  del1_data
*&--------------------------------------------------------------
*&     删除原料数据
*&--------------------------------------------------------------
FORM DEL1_DATA.
  DATA: LW_D1_BODY1 TYPE ZZTPP_ZSTZ_BODY1.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY1-YLDM IS INITIAL OR ZZTPP_ZSTZ_BODY1-YLPH IS INITIAL.
    MESSAGE S001(00) WITH '原料代码、原料批号不能为空!' DISPLAY LIKE 'E'.
  ELSE.
    CLEAR LW_D1_BODY1.
    SELECT SINGLE * INTO LW_D1_BODY1
      FROM ZZTPP_ZSTZ_BODY1
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND YLDM  = ZZTPP_ZSTZ_BODY1-YLDM
       AND YLPH  = ZZTPP_ZSTZ_BODY1-YLPH
       AND LGORT = ZZTPP_ZSTZ_BODY1-LGORT.
    IF LW_D1_BODY1-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过帐!' DISPLAY LIKE 'E'.
    ELSE.
      PERFORM COFIRM_ACTION USING '删除数据确认'
                            '是否删除数据'
                            GV_TXT_BN1
                            GV_TXT_BN2
                   CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        LW_D1_BODY1-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
        LW_D1_BODY1-YLDM  = ZZTPP_ZSTZ_BODY1-YLDM.
        LW_D1_BODY1-YLPH  = ZZTPP_ZSTZ_BODY1-YLPH.
        LW_D1_BODY1-LGORT = ZZTPP_ZSTZ_BODY1-LGORT.
        DELETE  ZZTPP_ZSTZ_BODY1 FROM LW_D1_BODY1.
        IF SY-SUBRC = 0.
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
          CLEAR: ZZTPP_ZSTZ_BODY1-YLDM,ZZTPP_ZSTZ_BODY1-YLPH,ZZTPP_ZSTZ_BODY1-ZL.
          " Fill the dynamic table <fs_dyn_tab1>
*          SELECT YLDM YLMS YLPH LGORT ZL
*            FROM ZZTPP_ZSTZ_BODY1 INTO TABLE <FS_DYN_TAB1>
*           WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID1->REFRESH_TABLE_DISPLAY.
          MESSAGE '删除数据成功!' TYPE 'S'.
        ELSE.
          ROLLBACK WORK.
          MESSAGE '删除数据失败!' TYPE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                                                    " del1_data
*&--------------------------------------------------------------
*&      Form  del2_data
*&--------------------------------------------------------------
*&     删除返工品数据
*&--------------------------------------------------------------
FORM DEL2_DATA.
  DATA: LW_D2_BODY2 TYPE ZZTPP_ZSTZ_BODY2.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY2-FGPDM IS INITIAL OR ZZTPP_ZSTZ_BODY2-FGOPH IS INITIAL OR ZZTPP_ZSTZ_BODY2-FGDDH IS INITIAL.
    MESSAGE S001(00) WITH '返工品代码、返工品批号、返工到订单号不能为空!' DISPLAY LIKE 'E'.
  ELSE.
    ZZTPP_ZSTZ_BODY2-BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
    CLEAR GW_AUFNR.
    SELECT SINGLE AUFNR
      FROM MSEG
      INTO GW_AUFNR
     WHERE MATNR = ZZTPP_ZSTZ_BODY2-FGPDM
       AND BWART = '101'
       AND CHARG = ZZTPP_ZSTZ_BODY2-FGOPH.
    ZZTPP_ZSTZ_BODY2-YDDH  = GW_AUFNR.
    CLEAR LW_D2_BODY2.
    SELECT SINGLE * INTO LW_D2_BODY2
      FROM ZZTPP_ZSTZ_BODY2
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND FGPDM = ZZTPP_ZSTZ_BODY2-FGPDM
       AND FGOPH = ZZTPP_ZSTZ_BODY2-FGOPH
       AND YDDH  = ZZTPP_ZSTZ_BODY2-YDDH
       AND FGDDH = ZZTPP_ZSTZ_BODY2-FGDDH
       AND LGORT = ZZTPP_ZSTZ_BODY2-LGORT.
    IF LW_D2_BODY2-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过账!' DISPLAY LIKE 'E'.
    ELSE.
      PERFORM COFIRM_ACTION USING '删除数据确认'
                              '是否删除数据'
                              GV_TXT_BN1
                              GV_TXT_BN2
                     CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        DELETE ZZTPP_ZSTZ_BODY2 FROM LW_D2_BODY2.
        IF SY-SUBRC = 0.
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
          CLEAR: ZZTPP_ZSTZ_BODY2-FGPDM,
                 ZZTPP_ZSTZ_BODY2-FGOPH,
                 ZZTPP_ZSTZ_BODY2-FGDDH,
                 ZZTPP_ZSTZ_BODY2-ZL.
          "Fill the dynamic table <fs_dyn_tab2>
*          SELECT FGPDM FGPMS FGOPH YDDH FGDDH LGORT ZL
*            FROM ZZTPP_ZSTZ_BODY2 INTO TABLE <FS_DYN_TAB2>
*           WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID2->REFRESH_TABLE_DISPLAY.
          MESSAGE '删除数据成功!' TYPE 'S'.
        ELSE.
          ROLLBACK WORK.
          MESSAGE '删除数据失败!' TYPE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                                                    " del2_data
*&--------------------------------------------------------------
*&      Form  del3_data
*&--------------------------------------------------------------
*&     删除余料数据
*&--------------------------------------------------------------
FORM DEL3_DATA.
  DATA  LW_D3_BODY4 TYPE ZZTPP_ZSTZ_BODY4.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY4-YLDM IS INITIAL OR ZZTPP_ZSTZ_BODY4-YLPH IS INITIAL.
    MESSAGE S001(00) WITH '波纤/废线代码、余料批号不能为空!' DISPLAY LIKE 'E'.
  ELSE.
    CLEAR LW_D3_BODY4.
    SELECT SINGLE * INTO LW_D3_BODY4
      FROM ZZTPP_ZSTZ_BODY4
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND YLDM  = ZZTPP_ZSTZ_BODY4-YLDM
       AND YLPH  = ZZTPP_ZSTZ_BODY4-YLPH
       AND LGORT = ZZTPP_ZSTZ_BODY4-LGORT.
    IF LW_D3_BODY4-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过帐!' DISPLAY LIKE 'E'.
    ELSE.
      PERFORM COFIRM_ACTION USING '删除数据确认'
                            '是否删除数据'
                            GV_TXT_BN1
                            GV_TXT_BN2
                   CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        DELETE ZZTPP_ZSTZ_BODY4 FROM LW_D3_BODY4.
        IF SY-SUBRC = 0.
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
          CLEAR:ZZTPP_ZSTZ_BODY4-YLDM,ZZTPP_ZSTZ_BODY4-YLPH,ZZTPP_ZSTZ_BODY4-YLZL.
          "Fill the dynamic table <fs_dyn_tab3>
*          SELECT YLDM YLMS YLPH LGORT YLZL
*            FROM ZZTPP_ZSTZ_BODY4 INTO TABLE <FS_DYN_TAB4>
*           WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID4->REFRESH_TABLE_DISPLAY.
          MESSAGE '删除数据成功!' TYPE 'S'.
        ELSE.
          ROLLBACK WORK.
          MESSAGE '删除数据失败!' TYPE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                                                    " del3_data
*&---------------------------------------------------------------------*
*&      Form  DEL4_DATA
*&---------------------------------------------------------------------*
*       删除包装物数据
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DEL4_DATA .
  DATA  LW_D4_BODY5 TYPE ZZTPP_ZSTZ_BODY5.
  GV_TITLE = '保存数据确认'.
  GV_TXT_QA = '是否保存数据'.
  IF ZZTPP_ZSTZ_BODY5-SCDDH IS INITIAL OR
     ZZTPP_ZSTZ_BODY5-BZWLH IS INITIAL OR
     ZZTPP_ZSTZ_BODY5-BZWPH IS INITIAL.
    MESSAGE S001(00) WITH '生产订单号、物料代码、批号不能为空!' DISPLAY LIKE 'E'.
  ELSE.
    CLEAR LW_D4_BODY5.
    SELECT SINGLE * INTO LW_D4_BODY5
      FROM ZZTPP_ZSTZ_BODY5
     WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
       AND SCDDH = ZZTPP_ZSTZ_BODY5-SCDDH
       AND BZWLH = ZZTPP_ZSTZ_BODY5-BZWLH
       AND BZWPH = ZZTPP_ZSTZ_BODY5-BZWPH
       AND LGORT = ZZTPP_ZSTZ_BODY5-LGORT.
    IF LW_D4_BODY5-GZ = 'Y'.
      MESSAGE S001(00) WITH '此笔记录已过帐!' DISPLAY LIKE 'E'.
    ELSE.
      PERFORM COFIRM_ACTION USING '删除数据确认'
                            '是否删除数据'
                            GV_TXT_BN1
                            GV_TXT_BN2
                   CHANGING GV_ANSWER.
      IF GV_ANSWER = '1'. "是
        DELETE ZZTPP_ZSTZ_BODY5 FROM LW_D4_BODY5.
        IF SY-SUBRC = 0.
          COMMIT WORK.
          REFRESH:GT_HEAD.
          "当班成材料 当班回收率 当班损耗率 损耗重量 数据计算
          PERFORM CL_SL_SL_DATA .
          APPEND ZZTPP_ZSTZ_HEAD TO GT_HEAD.
          MODIFY ZZTPP_ZSTZ_HEAD FROM TABLE GT_HEAD.
          CLEAR:ZZTPP_ZSTZ_BODY5-SCDDH,
                ZZTPP_ZSTZ_BODY5-BZWLH,
                ZZTPP_ZSTZ_BODY5-BZWPH,
                ZZTPP_ZSTZ_BODY5-LGORT,
                ZZTPP_ZSTZ_BODY5-BZWSL.
          "Fill the dynamic table <fs_dyn_tab5>
*          SELECT  BZWLH MAKTX BZWPH LGORT BZWSL SCDDH MBLNR ROWCOLOR
*             FROM ZZTPP_ZSTZ_BODY5 INTO TABLE <FS_DYN_TAB5>
*             WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
          PERFORM FILL_DYNAMIC_TABLE.
          CALL METHOD OBJ_MY_ALV_GRID5->REFRESH_TABLE_DISPLAY.
          MESSAGE '删除数据成功!' TYPE 'S'.
        ELSE.
          ROLLBACK WORK.
          MESSAGE '删除数据失败!' TYPE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                                                    " DEL4_DATA
*&---------------------------------------------------------------------*
*&      Form  SET_LISTVALUE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_LISTVALUE .
  TYPES:BEGIN OF T_AUFNR,
        CPDDH TYPE ZCPDDH,
        END OF T_AUFNR.
  DATA:
        I_LIST TYPE VRM_VALUES,
        WA_LIST LIKE LINE OF I_LIST,
        I_VALUE TYPE STANDARD TABLE OF T_AUFNR,
        WA_VALUE LIKE LINE OF I_VALUE.


  REFRESH : I_LIST , I_VALUE.
  CLEAR : WA_LIST, WA_VALUE ." zztpp_zstz_body5-scddh.


*get value
  SELECT CPDDH INTO TABLE I_VALUE
    FROM ZZTPP_ZSTZ_BODY3
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  SORT I_VALUE BY CPDDH.
  DELETE ADJACENT DUPLICATES FROM I_VALUE COMPARING ALL FIELDS.


  LOOP AT I_VALUE INTO WA_VALUE.
    WA_LIST-KEY = WA_VALUE-CPDDH."sy-tabix.
    WA_LIST-TEXT = WA_VALUE-CPDDH.
    APPEND WA_LIST TO I_LIST.
    CLEAR : WA_LIST.
  ENDLOOP.


*set value
  IF I_VALUE IS NOT INITIAL.
    CALL FUNCTION 'VRM_SET_VALUES'
      EXPORTING
        ID              = 'ZZTPP_ZSTZ_BODY5-SCDDH'
        VALUES          = I_LIST
      EXCEPTIONS
        ID_ILLEGAL_NAME = 1
        OTHERS          = 2.
    IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
ENDFORM.                    " SET_LISTVALUE
*&---------------------------------------------------------------------*
*&      Form  FRM_CLEAR_SCREEN
*&---------------------------------------------------------------------*
*       清空当前屏幕
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CLEAR_SCREEN .
  CLEAR :
        ZZTPP_ZSTZ_BODY1,
        ZZTPP_ZSTZ_BODY2,
        ZZTPP_ZSTZ_BODY4,
        ZZTPP_ZSTZ_BODY5,
        ZZTPP_ZSTZ_HEAD.
  REFRESH :
          <FS_DYN_TAB1>,
          <FS_DYN_TAB2>,
          <FS_DYN_TAB3>,
          <FS_DYN_TAB4>,
          <FS_DYN_TAB5>.
  CALL METHOD OBJ_MY_ALV_GRID1->REFRESH_TABLE_DISPLAY.
  CALL METHOD OBJ_MY_ALV_GRID2->REFRESH_TABLE_DISPLAY.
  CALL METHOD OBJ_MY_ALV_GRID3->REFRESH_TABLE_DISPLAY.
  CALL METHOD OBJ_MY_ALV_GRID4->REFRESH_TABLE_DISPLAY.
  CALL METHOD OBJ_MY_ALV_GRID5->REFRESH_TABLE_DISPLAY.
ENDFORM.                    " FRM_CLEAR_SCREEN


*&---------------------------------------------------------------------*
*&      Form  FRM_PRINT_INFO
*&---------------------------------------------------------------------*
*       打印当前页面
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_PRINT_INFO .
*定义Smartforms相关参数
  DATA:   ITAB LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE,
          FM_NAME TYPE RS38L_FNAM,
          FORMNAME TYPE TDSFNAME.
*定义传输的内表
  DATA : I_HEAD TYPE STANDARD TABLE OF ZZTPP_ZSTZ_HEAD,
         I_TAB1 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY1,
         I_TAB2 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY2,
         I_TAB3 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY3,
         I_TAB4 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY4,
         I_TAB5 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY5,
         WA_HEAD TYPE ZZTPP_ZSTZ_HEAD,
         WA_TAB1 TYPE ZZTPP_ZSTZ_BODY1,
         WA_TAB2 TYPE ZZTPP_ZSTZ_BODY2,
         WA_TAB3 TYPE ZZTPP_ZSTZ_BODY3,
         WA_TAB4 TYPE ZZTPP_ZSTZ_BODY4,
         WA_TAB5 TYPE ZZTPP_ZSTZ_BODY5.
  DATA :
        LV_LINE1 TYPE I,
        LV_LINE2 TYPE I,
        LV_LINE4 TYPE I,
        LV_LINE5 TYPE I.


  REFRESH : I_HEAD ,
            I_TAB1 ,
            I_TAB2 ,
            I_TAB3 ,
            I_TAB4 ,
            I_TAB5 .


*台班头信息
  MOVE-CORRESPONDING ZZTPP_ZSTZ_HEAD TO WA_HEAD.
  APPEND WA_HEAD TO I_HEAD.


*原材料
  LOOP AT <FS_DYN_TAB1> ASSIGNING <FS_DYN_WA>.
    CLEAR : WA_TAB1.
    MOVE-CORRESPONDING <FS_DYN_WA> TO WA_TAB1.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = WA_TAB1-YLDM
      IMPORTING
        OUTPUT = WA_TAB1-YLDM.
    APPEND WA_TAB1 TO I_TAB1.
  ENDLOOP.


*返工品
  LOOP AT <FS_DYN_TAB2> ASSIGNING <FS_DYN_WA>.
    CLEAR : WA_TAB2.
    MOVE-CORRESPONDING <FS_DYN_WA> TO WA_TAB2.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = WA_TAB2-FGPDM
      IMPORTING
        OUTPUT = WA_TAB2-FGPDM.
    APPEND WA_TAB2 TO I_TAB2.
  ENDLOOP.


*成品表
  LOOP AT <FS_DYN_TAB3> ASSIGNING <FS_DYN_WA>.
    CLEAR : WA_TAB3.
    MOVE-CORRESPONDING <FS_DYN_WA> TO WA_TAB3.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = WA_TAB3-MATNR
      IMPORTING
        OUTPUT = WA_TAB3-MATNR.
    APPEND WA_TAB3 TO I_TAB3.
  ENDLOOP.


*波纤
  LOOP AT <FS_DYN_TAB4> ASSIGNING <FS_DYN_WA>.
    CLEAR : WA_TAB4.
    MOVE-CORRESPONDING <FS_DYN_WA> TO WA_TAB4.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = WA_TAB4-YLDM
      IMPORTING
        OUTPUT = WA_TAB4-YLDM.
    APPEND WA_TAB4 TO I_TAB4.
  ENDLOOP.


*包装物
  LOOP AT <FS_DYN_TAB5> ASSIGNING <FS_DYN_WA>.
    CLEAR : WA_TAB5.
    MOVE-CORRESPONDING <FS_DYN_WA> TO WA_TAB5.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = WA_TAB5-BZWLH
      IMPORTING
        OUTPUT = WA_TAB5-BZWLH.
    APPEND WA_TAB5 TO I_TAB5.
  ENDLOOP.


*内表记录条数
  DESCRIBE TABLE I_TAB1 LINES LV_LINE1.
  DESCRIBE TABLE I_TAB2 LINES LV_LINE2.
  DESCRIBE TABLE I_TAB4 LINES LV_LINE4.
  DESCRIBE TABLE I_TAB5 LINES LV_LINE5.


  LV_LINE1 = 8 - LV_LINE1.
  LV_LINE2 = 8 - LV_LINE2.
  LV_LINE4 = 8 - LV_LINE4.
  LV_LINE5 = 8 - LV_LINE5.


  DO LV_LINE1 TIMES .
    CLEAR WA_TAB1.
    APPEND WA_TAB1 TO I_TAB1.
  ENDDO.


  DO LV_LINE2 TIMES.
    CLEAR WA_TAB2.
    APPEND WA_TAB2 TO I_TAB2.
  ENDDO.


  DO LV_LINE4 TIMES .
    CLEAR WA_TAB4.
    APPEND WA_TAB4 TO I_TAB4.
  ENDDO.


  DO LV_LINE5 TIMES .
    CLEAR WA_TAB5.
    APPEND WA_TAB5 TO I_TAB5.
  ENDDO.


*调用Smartforms
  FORMNAME = 'ZSCTB_FORM'.


  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = FORMNAME
      VARIANT            = ' '
      DIRECT_CALL        = ' '
    IMPORTING
      FM_NAME            = FM_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
  IF SY-SUBRC <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  CALL FUNCTION FM_NAME
    TABLES
      I_HEAD           = I_HEAD
      I_TAB1           = I_TAB1
      I_TAB2           = I_TAB2
      I_TAB3           = I_TAB3
      I_TAB4           = I_TAB4
      I_TAB5           = I_TAB5
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      USER_CANCELED    = 4
      OTHERS           = 5.
  .


ENDFORM.                    " FRM_PRINT_INFO
*&---------------------------------------------------------------------*
*&      Form  FRM_FGP_UPDATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_FGP_UPDATE .
  DATA: LW_P2_BODY2 TYPE ZZTPP_ZSTZ_BODY2,
        LW_P2_BODY3 TYPE ZZTPP_ZSTZ_BODY3.


  REFRESH GT_BODY2."取返工品信息表信息
  REFRESH GT_FGDDH."返工品汇总表 - 全部的数量
  REFRESH GT_XTDD."返工品原订单号=返工到订单号时, 成品产量中扣除相应数额


*取返工品信息
  SELECT *
    FROM ZZTPP_ZSTZ_BODY2
    INTO TABLE GT_BODY2
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.


*汇总
  CLEAR LW_P2_BODY2.
  LOOP AT GT_BODY2 INTO LW_P2_BODY2.
    IF LW_P2_BODY2-YDDH = LW_P2_BODY2-FGDDH.
      GW_XTDD-YDDH  = LW_P2_BODY2-YDDH.
      GW_XTDD-FGDDH = LW_P2_BODY2-FGDDH.
      GW_XTDD-ZL  = LW_P2_BODY2-ZL.
      COLLECT GW_XTDD INTO GT_XTDD.
    ENDIF.
    GW_FGDDH-FGDDH = LW_P2_BODY2-FGDDH.
    GW_FGDDH-ZL  = LW_P2_BODY2-ZL.
    COLLECT GW_FGDDH INTO GT_FGDDH.
  ENDLOOP.


  CLEAR LW_P2_BODY3.
  LOOP AT GT_FGDDH INTO GW_FGDDH.
    SELECT SINGLE * INTO LW_P2_BODY3
     FROM ZZTPP_ZSTZ_BODY3
    WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
      AND CPDDH  = GW_FGDDH-FGDDH.
    IF SY-SUBRC = 0.
*返工品数量
      LW_P2_BODY3-FGP = GW_FGDDH-ZL.
*原料产出合计 = 成品产出合计 - 返工品重量
      LW_P2_BODY3-YLCCHJ = LW_P2_BODY3-CPCCHEJ - LW_P2_BODY3-FGP.
    ENDIF.
    UPDATE ZZTPP_ZSTZ_BODY3
      SET FGP  = LW_P2_BODY3-FGP
          YLCCHJ = LW_P2_BODY3-YLCCHJ
    WHERE BTBHA  = LW_P2_BODY3-BTBHA
      AND MATNR  = LW_P2_BODY3-MATNR
      AND CPDDH  = LW_P2_BODY3-CPDDH
      AND LGORT  = LW_P2_BODY3-LGORT.
  ENDLOOP.


  CLEAR LW_P2_BODY3.
  CLEAR GW_XTDD.
  REFRESH GT_BODY3.
*取成品信息
  SELECT * INTO TABLE GT_BODY3
    FROM ZZTPP_ZSTZ_BODY3
   WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
*返工品原订单号 = 返工到订单号
  IF GT_XTDD IS INITIAL .
*如果不是返工到原订单的按照产量=产品产出合计 来计算
    LOOP AT GT_BODY3 INTO LW_P2_BODY3 .
      LW_P2_BODY3-CPCL = LW_P2_BODY3-CPCCHEJ.
      UPDATE ZZTPP_ZSTZ_BODY3
         SET CPCL   = LW_P2_BODY3-CPCL
       WHERE BTBHA  = LW_P2_BODY3-BTBHA
         AND MATNR  = LW_P2_BODY3-MATNR
         AND CPDDH  = LW_P2_BODY3-CPDDH
         AND LGORT  = LW_P2_BODY3-LGORT.
    ENDLOOP.
  ELSE.
*也需要先赋值,稍微进行扣减
    LOOP AT GT_BODY3 INTO LW_P2_BODY3 .
      LW_P2_BODY3-CPCL = LW_P2_BODY3-CPCCHEJ.
      UPDATE ZZTPP_ZSTZ_BODY3
         SET CPCL   = LW_P2_BODY3-CPCL
       WHERE BTBHA  = LW_P2_BODY3-BTBHA
         AND MATNR  = LW_P2_BODY3-MATNR
         AND CPDDH  = LW_P2_BODY3-CPDDH
         AND LGORT  = LW_P2_BODY3-LGORT.
    ENDLOOP.
*否则进行扣减
    LOOP AT GT_XTDD INTO GW_XTDD.
      SELECT SINGLE * INTO LW_P2_BODY3
        FROM ZZTPP_ZSTZ_BODY3
       WHERE BTBHA  = ZZTPP_ZSTZ_HEAD-BTBHA
         AND CPDDH  = GW_XTDD-YDDH.
      IF SY-SUBRC = 0 AND GW_XTDD-ZL <> 0.
        LW_P2_BODY3-CPCL = LW_P2_BODY3-CPCCHEJ - GW_XTDD-ZL.
      ELSE.
*        LW_P2_BODY3-CPCL = LW_P2_BODY3-CPCCHEJ.
        EXIT.
      ENDIF.
      UPDATE ZZTPP_ZSTZ_BODY3
        SET CPCL   = LW_P2_BODY3-CPCL
      WHERE BTBHA  = LW_P2_BODY3-BTBHA
        AND MATNR  = LW_P2_BODY3-MATNR
        AND CPDDH  = LW_P2_BODY3-CPDDH
        AND LGORT  = LW_P2_BODY3-LGORT.
    ENDLOOP.
  ENDIF.
  COMMIT WORK.
ENDFORM.                    " FRM_FGP_UPDATE
*&---------------------------------------------------------------------*
*&      Form  FRM_WRITE_OFF
*&---------------------------------------------------------------------*
*       冲销报工 Cancel production order confirmation
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_WRITE_OFF .
  DATA :
        GW_MESSAGE TYPE TY_MESSAGE,
        I_AFRU TYPE STANDARD TABLE OF AFRU,
        WA_AFRU TYPE AFRU,
        LV_RETURN TYPE C,
        LV_ERROR TYPE C,
        LV_FLAG TYPE C.


*Bapi 参数定义
  DATA :
        LW_CONFIRMATION        TYPE BAPI_PP_CONF_KEY-CONF_NO,  "操作完成的确认编号
        LW_CONFIRMATIONCOUNTER TYPE BAPI_PP_CONF_KEY-CONF_CNT, "确认计数器
        LW_POSTG_DATE          TYPE BAPI_PP_CONFIRM-POSTG_DATE,"记帐日期
        LW_CONF_TEXT           TYPE BAPI_PP_CONFIRM-CONF_TEXT, "确认文本


        LW_RETURN              TYPE BAPIRET1,
        LW_LOCKED              TYPE BAPI_CORU_PARAM-LOCKED,  "标识符: 条目冻结
        LW_CREATED_CONF_NO     TYPE BAPI_PP_CONF_KEY-CONF_NO,"操作完成的确认编号
        LW_CREATED_CONF_COUNT  TYPE BAPI_PP_CONF_KEY-CONF_CNT."确认计数器




  REFRESH : I_AFRU.
  CLEAR : WA_AFRU.


  SELECT SINGLE GZ
    FROM ZZTPP_ZSTZ_HEAD
    INTO LV_FLAG
    WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
  IF SY-SUBRC <> 0.
    SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-BTBHA'.
    MESSAGE '台班班号不存在!' TYPE 'S' DISPLAY LIKE 'E'.
    EXIT.
  ELSE.
    IF LV_FLAG <> 'Y'.
      "未报工
      SET CURSOR FIELD 'ZZTPP_ZSTZ_HEAD-BTBHA'.
      MESSAGE '此台班还未报工!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
      "已经报工
      GV_TITLE = '取消产品订单确认'.
      GV_TXT_QA = '是否冲销报工?'.
      PERFORM COFIRM_ACTION USING GV_TITLE
                              GV_TXT_QA
                              GV_TXT_BN1
                              GV_TXT_BN2
                        CHANGING LV_RETURN.
      IF LV_RETURN = '1'. "是


        SELECT *
          FROM AFRU
          INTO CORRESPONDING FIELDS OF TABLE I_AFRU
          WHERE LTXA1 = ZZTPP_ZSTZ_HEAD-BTBHA
            AND STOKZ <> 'X'
            AND STZHL = ''.


        IF SY-SUBRC = 0.
          LV_ERROR = ''.
          LOOP AT I_AFRU INTO WA_AFRU.
            LW_CONFIRMATION = WA_AFRU-RUECK.      "操作完成的确认编号
            LW_CONFIRMATIONCOUNTER = WA_AFRU-RMZHL.   "确认计数器
            LW_POSTG_DATE = WA_AFRU-BUDAT.          "记帐日期
            LW_CONF_TEXT = WA_AFRU-LTXA1.           "确认文本


            CALL FUNCTION 'BAPI_PRODORDCONF_CANCEL'
              EXPORTING
                CONFIRMATION        = LW_CONFIRMATION
                CONFIRMATIONCOUNTER = LW_CONFIRMATIONCOUNTER
                POSTG_DATE          = LW_POSTG_DATE
                CONF_TEXT           = LW_CONF_TEXT
              IMPORTING
                RETURN              = LW_RETURN
                LOCKED              = LW_LOCKED
                CREATED_CONF_NO     = LW_CREATED_CONF_NO
                CREATED_CONF_COUNT  = LW_CREATED_CONF_COUNT.
            "消息类型: S 成功,E 错误,W 警告,I 信息,A 中断
            IF SY-SUBRC <> 0
              OR LW_RETURN-TYPE = 'E'
              OR LW_RETURN-TYPE = 'A'
*              OR LW_RETURN-TYPE = 'W'
*              OR LW_RETURN-TYPE = 'I'
              .
              "冲销失败,显示错误消息
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.


              MESSAGE LW_RETURN-MESSAGE TYPE 'I'.
              LV_ERROR = 'X'.
              EXIT.
              "确认的方法调用无效 A RU 806
            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  WAIT = 'X'.
            ENDIF.
            CLEAR : LW_CONFIRMATION,
                    LW_CONFIRMATIONCOUNTER,
                    LW_POSTG_DATE,
                    LW_CONF_TEXT,
                    LW_RETURN ,
                    LW_LOCKED,
                    LW_CREATED_CONF_NO,
                    LW_CREATED_CONF_COUNT.


          ENDLOOP.


          "冲销成功,更新过账标记
          IF LV_ERROR = ''.
            UPDATE ZZTPP_ZSTZ_HEAD
            SET GZ = ''
            WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA
              AND GZ = 'Y'.
            IF SY-SUBRC = 0.
              COMMIT WORK.
              "刷新显示
              SELECT SINGLE *
                FROM ZZTPP_ZSTZ_HEAD
                WHERE BTBHA = ZZTPP_ZSTZ_HEAD-BTBHA.
              MESSAGE '取消产品订单确认成功!' TYPE 'I'.
            ENDIF.
          ENDIF.


        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.


ENDFORM.                    " FRM_WRITE_OFF
*&---------------------------------------------------------------------*
*&      Module  CHECK_INPUT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CHECK_INPUT_1 INPUT.
  IF ZZTPP_ZSTZ_HEAD-SBZZJS IS NOT INITIAL.
    ZZTPP_ZSTZ_HEAD-QTTJSJ = ZZTPP_ZSTZ_HEAD-SBZZJS - ZZTPP_ZSTZ_HEAD-SBQSJS.
  ENDIF.
ENDMODULE.                 " CHECK_INPUT  INPUT
*&---------------------------------------------------------------------*
*&      Module  CHECK_INPUT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CHECK_INPUT_2 INPUT.
  IF ZZTPP_ZSTZ_HEAD-AVEJJ IS INITIAL AND ZZTPP_ZSTZ_HEAD-BTBHA+(1) = 'G'.
    ZZTPP_ZSTZ_HEAD-AVEJJ = ZZTPP_ZSTZ_HEAD-BZWZS / 5.
  ENDIF.
ENDMODULE.                 " CHECK_INPUT  INPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_BBORYB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_BBORYB .
  DATA :
          LV_WA_LIST LIKE LINE OF I_LIST.


  IF I_LIST IS INITIAL.
*白班 : 1
    CLEAR LV_WA_LIST.
    LV_WA_LIST-KEY = '1'.
    LV_WA_LIST-TEXT = C_BB.
    APPEND LV_WA_LIST TO I_LIST.


*夜班 : 0
    CLEAR LV_WA_LIST.
    LV_WA_LIST-KEY = '0'.
    LV_WA_LIST-TEXT = C_YB.
    APPEND LV_WA_LIST TO I_LIST.
  ENDIF.


  CALL FUNCTION 'VRM_SET_VALUES'
      EXPORTING
        ID                    = 'ZZTPP_ZSTZ_HEAD-BB1YB'
        VALUES                = I_LIST
*   EXCEPTIONS
*     ID_ILLEGAL_NAME       = 1
*     OTHERS                = 2
              .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " FRM_SET_BBORYB
1 0
原创粉丝点击