SAP-PP-生产达成率报表
该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: 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: 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_gridIMPORTING 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* EDIT_DATA( ). ELSE. MESSAGE \'不存在相关信息,请重新确认选择条件!\' TYPE \'S\' DISPLAY LIKE \'E\'. LEAVE LIST-PROCESSING. ENDIF.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_SET_FCAT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* p1 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 INDEX P_E_ROW. IF SY-SUBRC = 0. SELECT EDATU WMENG INTO TABLE GT_SALES FROM VBEP WHERE VBELN = -KDAUF AND POSNR = -KDPOS AND WMENG 0. LOOP AT GT_POST WHERE AUFNR = -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: 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 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 <= -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 . CLEAR:STEUS. SELECT SINGLE REASON INTO -REASON FROM ZPO_EDIT WHERE AUFNR = -AUFNR. SELECT SINGLE KWMENG INTO -KWMENG FROM VBAP WHERE VBELN = -KDAUF AND POSNR = -KDPOS. READ TABLE LT_RECV WITH KEY AUFNR = -AUFNR. IF SY-SUBRC = 0. -MENGE = LT_RECV-MENGE. LV_DEC = LT_RECV-FMENG / -GAMNG. IF LV_DEC > 1. LV_DEC = 1. ENDIF. LV_RATE = LV_DEC * 100. -RATE = LV_RATE && \'%\'. ENDIF. SELECT SINGLE MAKTX INTO -MAKTX FROM MAKT WHERE MATNR = -MATNR AND SPRAS = SY-LANGU. SELECT SINGLE SPART INTO -SPART FROM MARA WHERE MATNR = -MATNR. SELECT SINGLE VTEXT INTO -VTEXT FROM TSPAT WHERE SPART = -SPART. SELECT SINGLE STEUS INTO STEUS FROM AFVC INNER JOIN AFKO ON AFVC~AUFPL = AFKO~AUFPL WHERE AFVC~STEUS = \'ZPP5\' AND AFKO~AUFNR = -AUFNR. IF SY-SUBRC 0. ELSE. -GONGXU = \'X\'. ENDIF. LOOP AT GT_POST ASSIGNING WHERE AUFNR = -AUFNR. AT NEW AUFNR. -FDATE = -ERSDA. \"首次入库日期 ENDAT. AT END OF AUFNR. -LDATE = -ERSDA. \"当前入库日期 ENDAT. ENDLOOP. ENDLOOP.ENDFORM.