SAP-PP-生产达成率报表

发布于:2025-07-27 ⋅ 阅读:(14) ⋅ 点赞:(0)

 

该SAP ABAP程序实现了一个生产订单跟踪报表功能,主要包含以下内容:

  1. 程序结构包含多个INCLUDE文件,分别处理顶层定义(ZPP_058_TOP)、类定义(ZPP_058_CLA)、模块池(ZPP_058_MOD)和子程序(ZPP_058_FRM)

  2. 主要功能:

  • 通过选择屏幕输入工厂、生产订单号、物料等条件
  • 从AFKO、AUFK、AFPO等SAP标准表获取生产订单基础数据
  • 计算并显示生产订单完成率、入库数量等关键指标
  • 提供双击查看入库凭证和销售订单明细的功能
  1. 技术特点:
  • 使用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.

 

 


网站公告

今日签到

点亮在社区的每一天
去签到