该SAP ABAP程序实现了一个生产订单跟踪报表功能,主要包含以下内容:
程序结构包含多个INCLUDE文件,分别处理顶层定义(ZPP_058_TOP)、类定义(ZPP_058_CLA)、模块池(ZPP_058_MOD)和子程序(ZPP_058_FRM)
主要功能:
- 通过选择屏幕输入工厂、生产订单号、物料等条件
- 从AFKO、AUFK、AFPO等SAP标准表获取生产订单基础数据
- 计算并显示生产订单完成率、入库数量等关键指标
- 提供双击查看入库凭证和销售订单明细的功能
- 技术特点:
- 使用ALV网格显示数据,支持多标签页布局
- 采用面向对象方式处理数据和事件
- 包含详细的数据结构定义和字段目录配置
- 实现数据筛选、计算和展示逻辑
该程序主要用于生产订单执行情况的跟踪和分析,支持生产计划人员监控订单进度
REPORT ZPP_058.
INCLUDE ZPP_058_TOP.
INCLUDE ZPP_058_CLA.
INCLUDE ZPP_058_MOD.
INCLUDE ZPP_058_FRM.
INITIALIZATION.
START-OF-SELECTION.
CREATE OBJECT CL_DATA.
CREATE OBJECT CL_EVENT.
CALL METHOD CL_DATA->GET_DATA.
PERFORM FRM_SET_FCAT.
PERFORM FRM_DISPLAY_ALV.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& 包含 ZPP_058_TOP
*&---------------------------------------------------------------------*
TABLES: AUFK,AFPO,MARA,AFKO.
TYPES: BEGIN OF TY_INFO,
AUFNR TYPE AUFK-AUFNR, "生产订单
AUART TYPE AUFK-AUART, "生产订单类型
GSTRP TYPE AFKO-GSTRP, "计划开始日期
GLTRP TYPE AFKO-GLTRP, "计划完成日期
MATNR TYPE AFPO-MATNR, "订单物料
MAKTX TYPE MAKT-MAKTX, "物料描述
MATKL TYPE MARA-MATKL, "物料组
SPART TYPE MARA-SPART, "产品组
VTEXT TYPE TSPAT-VTEXT, "产品组描述
GONGXU TYPE C, "是否工序委外
GAMNG TYPE AFKO-GAMNG, "生产订单数量
MENGE TYPE MSEG-MENGE, "完工入库数量
KDAUF TYPE AFPO-KDAUF, "销售订单
KDPOS TYPE AFPO-KDPOS, "销售订单行项目
KWMENG TYPE VBAP-KWMENG, "销售订单数量
GMEIN TYPE AFKO-GMEIN, "生产单位
FDATE TYPE SY-DATUM, "首次入库日期
LDATE TYPE SY-DATUM, "当前入库日期
RATE(7) TYPE C, "完工达成率
REASON TYPE ZPO_EDIT-REASON, "生产订单修改原因
END OF TY_INFO,
BEGIN OF TY_PROD,
MBLNR TYPE MKPF-MBLNR, "入库凭证
CPUDT TYPE MKPF-CPUDT, "过帐日期
CHARG TYPE MSEG-CHARG, "物料批次
MENGE TYPE MSEG-MENGE, "入库数量
END OF TY_PROD,
BEGIN OF TY_SALES,
EDATU TYPE VBEP-EDATU, "计划交货日期
WMENG TYPE VBEP-WMENG, "计划交货量
END OF TY_SALES,
BEGIN OF ty_recv,
aufnr TYPE aufk-aufnr,
FMENG TYPE mseg-menge, "达成数量
menge TYPE mseg-menge, "总报工数量
END OF ty_recv,
BEGIN OF ty_post,
AUFNR TYPE afru-aufnr, "工单
RUECK TYPE afru-RUECK, "确认号
RMZHL TYPE afru-RMZHL, "序号
ERSDA TYPE AFRU-ERSDA, "确认输入日期
matnr TYPE afpo-matnr,
WABLNR TYPE afru-WABLNR, "物料凭证号
MJAHR TYPE mkpf-mjahr,
menge TYPE mseg-menge, "入库数量
flg_del TYPE c, "删除标识
END OF ty_post.
DATA: GT_INFO TYPE STANDARD TABLE OF TY_INFO,
GT_PROD TYPE STANDARD TABLE OF TY_PROD,
GT_SALES TYPE STANDARD TABLE OF TY_SALES,
GT_POST TYPE STANDARD TABLE OF ty_post WITH HEADER LINE.
FIELD-SYMBOLS:
<FS_INFO> TYPE TY_INFO.
DATA: LCL_CONTAIN1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: LCL_CONTAIN2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: LCL_CONTAIN3 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
CONSTANTS:
GV_SUB01 TYPE SY-DYNNR VALUE '8010',
GV_SUB02 TYPE SY-DYNNR VALUE '8020',
GV_SUB03 TYPE SY-DYNNR VALUE '8030'.
DATA:
GT_TOOLS TYPE UI_FUNCTIONS WITH HEADER LINE,
GT_FCAT1 TYPE LVC_T_FCAT,
GT_FCAT2 TYPE LVC_T_FCAT,
GT_FCAT3 TYPE LVC_T_FCAT,
GW_FCAT TYPE LVC_S_FCAT,
GW_LAYO TYPE LVC_S_LAYO,
GT_SORT TYPE LVC_T_SORT,
GW_SORT TYPE LVC_S_SORT.
DATA: GV_UCOMM TYPE C.
FIELD-SYMBOLS:
<FS_FCAT> TYPE LVC_S_FCAT.
DATA: LR_ALVCTNER TYPE REF TO CL_GUI_DOCKING_CONTAINER.
DATA: LR_GRID1 TYPE REF TO CL_GUI_ALV_GRID.
DATA: LR_GRID2 TYPE REF TO CL_GUI_ALV_GRID.
DATA: LR_GRID3 TYPE REF TO CL_GUI_ALV_GRID.
DATA: GV_STEP TYPE I.
DEFINE SET_FCAT1.
gv_step = gv_step + 1.
clear gw_fcat.
gw_fcat-col_pos = gv_step.
gw_fcat-fieldname = &1.
gw_fcat-ref_table = &2.
gw_fcat-ref_field = &3.
gw_fcat-scrtext_l = &4.
gw_fcat-scrtext_m = &4.
gw_fcat-scrtext_s = &4.
gw_fcat-reptext = &4.
append gw_fcat to gt_fcat1.
END-OF-DEFINITION.
DEFINE SET_FCAT2.
gv_step = gv_step + 1.
clear gw_fcat.
gw_fcat-col_pos = gv_step.
gw_fcat-fieldname = &1.
gw_fcat-ref_table = &2.
gw_fcat-ref_field = &3.
gw_fcat-scrtext_l = &4.
gw_fcat-scrtext_m = &4.
gw_fcat-scrtext_s = &4.
gw_fcat-reptext = &4.
append gw_fcat to gt_fcat2.
END-OF-DEFINITION.
DEFINE SET_FCAT3.
gv_step = gv_step + 1.
clear gw_fcat.
gw_fcat-col_pos = gv_step.
gw_fcat-fieldname = &1.
gw_fcat-ref_table = &2.
gw_fcat-ref_field = &3.
gw_fcat-scrtext_l = &4.
gw_fcat-scrtext_m = &4.
gw_fcat-scrtext_s = &4.
gw_fcat-reptext = &4.
append gw_fcat to gt_fcat3.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_WERKS TYPE AUFK-WERKS OBLIGATORY.
SELECT-OPTIONS:
S_AUFNR FOR AUFK-AUFNR,
S_ERDAT FOR AUFK-ERDAT,
S_MATNR FOR AFPO-MATNR,
S_MATKL FOR MARA-MATKL,
S_GLTRP FOR AFKO-GLTRP.
SELECTION-SCREEN END OF BLOCK BLK1.
*&---------------------------------------------------------------------*
*& 包含 ZPP_058_CLA
*&---------------------------------------------------------------------*
CLASS CL_DATA_OPT DEFINITION.
PUBLIC SECTION.
METHODS:
GET_DATA, "获取主要信息
EDIT_DATA. "编辑输出信息
ENDCLASS.
CLASS CL_DATA_OPT IMPLEMENTATION.
METHOD GET_DATA.
PERFORM FRM_GET_DATA.
ENDMETHOD.
METHOD EDIT_DATA.
PERFORM FRM_EDIT_DATA.
ENDMETHOD.
ENDCLASS.
DATA: CL_DATA TYPE REF TO CL_DATA_OPT.
CLASS LCL_GRID_EVENT DEFINITION.
PUBLIC SECTION.
METHODS DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_gui_alv_grid
IMPORTING
E_ROW
E_COLUMN
ES_ROW_NO
.
ENDCLASS.
CLASS LCL_GRID_EVENT IMPLEMENTATION.
METHOD DOUBLE_CLICK.
PERFORM FRM_CHANGE_DETAIL USING E_ROW
E_COLUMN
ES_ROW_NO.
ENDMETHOD.
ENDCLASS.
DATA: CL_EVENT TYPE REF TO LCL_GRID_EVENT.
*&---------------------------------------------------------------------*
*& 包含 ZPP_058_MOD
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS 'ZST_9001'.
SET TITLEBAR 'ZT_9001'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND INPUT.
LEAVE TO SCREEN 0.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SHOW_ALV_8010 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SHOW_ALV_8010 OUTPUT.
CREATE OBJECT LCL_CONTAIN1
EXPORTING
CONTAINER_NAME = 'CONTAIN1'.
IF LR_GRID1 IS INITIAL.
CREATE OBJECT LR_GRID1
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = LCL_CONTAIN1
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC = 0.
set HANDLER CL_EVENT->DOUBLE_CLICK FOR LR_GRID1.
CALL METHOD LR_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_SAVE = 'U'
* I_DEFAULT = 'X'
IS_LAYOUT = GW_LAYO
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = GT_INFO
IT_FIELDCATALOG = GT_FCAT1
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ELSE.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
CALL METHOD LR_GRID1->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SHOW_ALV_8020 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SHOW_ALV_8020 OUTPUT.
CREATE OBJECT LCL_CONTAIN2
EXPORTING
CONTAINER_NAME = 'CONTAIN2'.
IF LR_GRID2 IS INITIAL.
CREATE OBJECT LR_GRID2
EXPORTING
I_PARENT = LCL_CONTAIN2 "CL_GUI_ALV_GRID=>screen0
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
CALL METHOD LR_GRID2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_SAVE = 'U'
* I_DEFAULT = 'X'
IS_LAYOUT = GW_LAYO
* IS_PRINT =
* IT_SPECIAL_GROUPS =
IT_TOOLBAR_EXCLUDING = GT_TOOLS[]
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = GT_PROD
IT_FIELDCATALOG = GT_FCAT2
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ELSE.
CALL METHOD LR_GRID2->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SHOW_ALV_8030 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SHOW_ALV_8030 OUTPUT.
CREATE OBJECT LCL_CONTAIN3
EXPORTING
CONTAINER_NAME = 'CONTAIN3'.
CREATE OBJECT LR_GRID1
EXPORTING
I_PARENT = LCL_CONTAIN1 "CL_GUI_ALV_GRID=>screen0
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF LR_GRID3 IS INITIAL.
CREATE OBJECT LR_GRID3
EXPORTING
I_PARENT = LCL_CONTAIN3 "CL_GUI_ALV_GRID=>screen0
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
APPEND CL_GUI_ALV_GRID=>MC_FC_SORT_ASC TO GT_TOOLS.
APPEND CL_GUI_ALV_GRID=>MC_FC_SORT_DSC TO GT_TOOLS.
CALL METHOD LR_GRID3->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_SAVE = 'U'
* I_DEFAULT = 'X'
IS_LAYOUT = GW_LAYO
* IS_PRINT =
* IT_SPECIAL_GROUPS =
IT_TOOLBAR_EXCLUDING = GT_TOOLS[]
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = GT_SALES
IT_FIELDCATALOG = GT_FCAT3
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ELSE.
CALL METHOD LR_GRID3->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZPP_058_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT AUFK~AUFNR
AUFK~AUART
AFKO~GSTRP
AFKO~GLTRP
AFKO~GAMNG
AFKO~GMEIN
AFPO~MATNR
MARA~MATKL
AFPO~KDAUF
AFPO~KDPOS
INTO CORRESPONDING FIELDS OF TABLE GT_INFO
FROM AFKO
JOIN AUFK
ON AUFK~AUFNR = AFKO~AUFNR
JOIN AFPO
ON AFPO~AUFNR = AFKO~AUFNR
JOIN MARA
ON AFPO~MATNR = MARA~MATNR
WHERE AFKO~AUFNR IN S_AUFNR
AND AUFK~WERKS = P_WERKS
AND AUFK~ERDAT IN S_ERDAT
AND AFPO~MATNR IN S_MATNR
AND MARA~MATKL IN S_MATKL
AND AFKO~GLTRP IN S_GLTRP
AND AUFK~LOEKZ = SPACE.
IF SY-SUBRC = 0.
CL_DATA->EDIT_DATA( ).
ELSE.
MESSAGE '不存在相关信息,请重新确认选择条件!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_FCAT .
GW_LAYO-ZEBRA = 'X'.
GW_LAYO-CWIDTH_OPT = 'X'.
* GW_LAYO-INFO_FNAME = 'COLOR'.
* GW_LAYO-STYLEFNAME = 'STYLE'.
GW_LAYO-SEL_MODE = 'A'.
CLEAR GV_STEP.
SET_FCAT1 'AUFNR' 'AUFK' 'AUFNR' TEXT-002. "生产订单
SET_FCAT1 'AUART' 'AUFK' 'AUART' TEXT-023. "生产订单类型
SET_FCAT1 'GSTRP' 'AFKO' 'GSTRP' TEXT-003. "计划开始日期
SET_FCAT1 'GLTRP' 'AFKO' 'GLTRP' TEXT-004. "计划完成日期
SET_FCAT1 'MATNR' 'AFPO' 'MATNR' TEXT-005. "订单物料
SET_FCAT1 'MAKTX' 'MAKT' 'MAKTX' TEXT-006. "物料描述
SET_FCAT1 'MATKL' 'MARA' 'MATKL' TEXT-024. "物料组
SET_FCAT1 'SPART' 'MARA' 'SPART' TEXT-025. "产品组
SET_FCAT1 'VTEXT' 'TSPAT' 'VTEXT' TEXT-027. "产品组描述
SET_FCAT1 'GONGXU' '' '' TEXT-026. "是否委外
SET_FCAT1 'GAMNG' 'AFKO' 'GAMNG' TEXT-007. "生产订单数量
SET_FCAT1 'MENGE' 'MSEG' 'MENGE' TEXT-020. "生产入库数量
SET_FCAT1 'KDAUF' 'AFPO' 'KDAUF' TEXT-008. "销售订单
SET_FCAT1 'KDPOS' 'AFPO' 'KDPOS' TEXT-009. "销售订单行项目
SET_FCAT1 'KWMENG' 'VBAP' 'KWMENG' TEXT-010. "销售订单数量
SET_FCAT1 'GMEIN' 'AFKO' 'GMEIN' TEXT-011. "生产单位
SET_FCAT1 'FDATE' 'SYST' 'DATUM' TEXT-012. "首次入库日期
SET_FCAT1 'LDATE' 'SYST' 'DATUM' TEXT-013. "当前入库日期
SET_FCAT1 'RATE' '' '' TEXT-014. "完工达成率
SET_FCAT1 'REASON' 'ZPO_EDIT' 'REASON' TEXT-022. "生产订单修改原因
CLEAR GV_STEP.
SET_FCAT2 'MBLNR' 'MKPF' 'MBLNR' TEXT-015. "入库凭证
SET_FCAT2 'CPUDT' 'MKPF' 'CPUDT' TEXT-016. "过帐日期
SET_FCAT2 'CHARG' 'MSEG' 'CHARG' TEXT-021. "物料批次
SET_FCAT2 'MENGE' 'MSEG' 'MENGE' TEXT-017. "入库数量
CLEAR GV_STEP.
SET_FCAT3 'EDATU' 'VBEP' 'EDATU' TEXT-018. "计划交货日期
SET_FCAT3 'WMENG' 'VBEP' 'WMENG' TEXT-019. "计划交货量
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
CALL SCREEN 9001.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_DETAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW text
* -->P_E_COLUMN text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM FRM_CHANGE_DETAIL USING P_E_ROW
P_E_COLUMN
P_ES_ROW_NO.
DATA: LW_PROD TYPE TY_PROD.
CLEAR: GT_PROD,GT_SALES.
READ TABLE GT_INFO ASSIGNING <FS_INFO> INDEX P_E_ROW.
IF SY-SUBRC = 0.
SELECT EDATU
WMENG
INTO TABLE GT_SALES
FROM VBEP
WHERE VBELN = <FS_INFO>-KDAUF
AND POSNR = <FS_INFO>-KDPOS
AND WMENG <> 0.
LOOP AT GT_POST WHERE AUFNR = <FS_INFO>-AUFNR.
SELECT MBLNR
BLDAT AS CPUDT
MENGE
CHARG
APPENDING CORRESPONDING FIELDS OF TABLE GT_PROD FROM AUFM
WHERE MBLNR = GT_POST-WABLNR
AND MJAHR = GT_POST-ERSDA(4)
AND AUFNR = GT_POST-AUFNR
AND MATNR = GT_POST-MATNR.
ENDLOOP.
ENDIF.
CALL METHOD LR_GRID2->REFRESH_TABLE_DISPLAY.
CALL METHOD LR_GRID3->REFRESH_TABLE_DISPLAY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_EDIT_DATA .
DATA: LT_AUFM TYPE STANDARD TABLE OF AUFM WITH HEADER LINE.
DATA: LT_RECV TYPE STANDARD TABLE OF TY_RECV WITH HEADER LINE.
DATA: LV_DEC TYPE P DECIMALS 6,
LV_RATE TYPE P DECIMALS 2.
DATA: STEUS TYPE AFVC-STEUS.
FIELD-SYMBOLS:
<FS_POST> TYPE TY_POST.
SELECT RUECK
RMZHL
ERSDA
WABLNR
AUFNR
INTO CORRESPONDING FIELDS OF TABLE GT_POST
FROM AFRU
FOR ALL ENTRIES IN GT_INFO
WHERE AUFNR = GT_INFO-AUFNR
AND STOKZ = SPACE
AND STZHL = SPACE.
LOOP AT GT_POST.
READ TABLE GT_INFO ASSIGNING <FS_INFO> WITH KEY AUFNR = GT_POST-AUFNR.
IF GT_POST-WABLNR IS INITIAL.
SELECT SINGLE MBLNR_101 INTO GT_POST-WABLNR FROM ZMES_BDC_INFO_T WHERE RUECK = GT_POST-RUECK
AND RMZHL = GT_POST-RMZHL AND TYPE_CODE = '101'.
IF SY-SUBRC <> 0.
GT_POST-FLG_DEL = 'X'.
MODIFY GT_POST.
CONTINUE.
ENDIF.
ENDIF.
SELECT SINGLE MATNR INTO GT_POST-MATNR FROM AFPO WHERE AUFNR = GT_POST-AUFNR.
CLEAR LT_AUFM[].
SELECT * INTO TABLE LT_AUFM FROM AUFM
WHERE MBLNR = GT_POST-WABLNR
AND MJAHR = GT_POST-ERSDA(4)
AND AUFNR = GT_POST-AUFNR
AND MATNR = GT_POST-MATNR.
IF SY-SUBRC <> 0.
GT_POST-FLG_DEL = 'X'.
MODIFY GT_POST.
CONTINUE.
ELSE.
LOOP AT LT_AUFM.
CLEAR LT_RECV.
LT_RECV-AUFNR = LT_AUFM-AUFNR.
IF LT_AUFM-SHKZG = 'H'.
LT_AUFM-MENGE = -1 * LT_AUFM-MENGE.
ENDIF.
LT_RECV-MENGE = LT_AUFM-MENGE.
* 确认入库日期在订单结束之前的,记入达成数量
IF GT_POST-ERSDA <= <FS_INFO>-GLTRP.
LT_RECV-FMENG = LT_AUFM-MENGE.
ENDIF.
COLLECT LT_RECV. "总报工入库数量
ENDLOOP.
ENDIF.
* GT_POST-MENGE = LT_AUFM-MENGE.
MODIFY GT_POST.
ENDLOOP.
DELETE GT_POST WHERE FLG_DEL = 'X'.
SORT GT_POST BY AUFNR ERSDA.
LOOP AT GT_INFO ASSIGNING <FS_INFO>.
CLEAR:STEUS.
SELECT SINGLE REASON INTO <FS_INFO>-REASON FROM ZPO_EDIT WHERE AUFNR = <FS_INFO>-AUFNR.
SELECT SINGLE KWMENG INTO <FS_INFO>-KWMENG FROM VBAP WHERE VBELN = <FS_INFO>-KDAUF AND POSNR = <FS_INFO>-KDPOS.
READ TABLE LT_RECV WITH KEY AUFNR = <FS_INFO>-AUFNR.
IF SY-SUBRC = 0.
<FS_INFO>-MENGE = LT_RECV-MENGE.
LV_DEC = LT_RECV-FMENG / <FS_INFO>-GAMNG.
IF LV_DEC > 1.
LV_DEC = 1.
ENDIF.
LV_RATE = LV_DEC * 100.
<FS_INFO>-RATE = LV_RATE && '%'.
ENDIF.
SELECT SINGLE MAKTX INTO <FS_INFO>-MAKTX FROM MAKT WHERE MATNR = <FS_INFO>-MATNR
AND SPRAS = SY-LANGU.
SELECT SINGLE SPART INTO <FS_INFO>-SPART FROM MARA WHERE MATNR = <FS_INFO>-MATNR.
SELECT SINGLE VTEXT INTO <FS_INFO>-VTEXT FROM TSPAT WHERE SPART = <FS_INFO>-SPART.
SELECT SINGLE STEUS INTO STEUS FROM AFVC INNER JOIN AFKO ON AFVC~AUFPL = AFKO~AUFPL WHERE AFVC~STEUS = 'ZPP5' AND AFKO~AUFNR = <FS_INFO>-AUFNR.
IF SY-SUBRC <> 0.
ELSE.
<FS_INFO>-GONGXU = 'X'.
ENDIF.
LOOP AT GT_POST ASSIGNING <FS_POST> WHERE AUFNR = <FS_INFO>-AUFNR.
AT NEW AUFNR.
<FS_INFO>-FDATE = <FS_POST>-ERSDA. "首次入库日期
ENDAT.
AT END OF AUFNR.
<FS_INFO>-LDATE = <FS_POST>-ERSDA. "当前入库日期
ENDAT.
ENDLOOP.
ENDLOOP.
ENDFORM.