FI— 工单差异分析明细表(开发笔记)

该报告详细展示了工单在不同成本要素和成本中心下的计划、实际及目标数量与成本的差异,通过对比分析,帮助企业识别订单执行过程中的效率与成本偏差。

*&---------------------------------------------------------------------*
*& Report ZFIR092
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2018-10-09
*& Program Type        :  Report
*& Description         :  工单差异分析明细表
*&---------------------------------------------------------------------*
REPORT ZFIR092.

*&---------------------------------------------------------------------*
*& 包含               ZFIR092_TOP
*&---------------------------------------------------------------------*

TABLES:BKPF,MSEG,AUFK,T001W,COSS.

TYPE-POOLS:SLIS.

"定义ALV输出所需变量
DATAS_LAYOUT       TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT    TYPE SLIS_T_FIELDCAT_ALV.

TYPESBEGIN OF GTS_DATA,

        VLFAG         TYPE  C,                      "标记字段
        WERKS         TYPE  AUFK-WERKS,             "工厂
        AUFNR         TYPE  AUFK-AUFNR,             "订单编号
        AUART         TYPE  AUFK-AUART,             "订单类型
        CAKTX         TYPE  MAKT-MAKTX,             "产品名称
        GAMNG         TYPE  AFKO-GAMNG,             "批量
        KSTAR         TYPE  COSP-KSTAR,             "成本要素
        TXT20         TYPE  SKAT-TXT20,             "成本要素名称
        MATNR         TYPE  COKEY-MATNR,            "物料代码
        WAKTX         TYPE  MAKT-MAKTX ,            "料物描述
        KOSTL         TYPE  CSKT-KOSTL ,            "成本中心
        MCTXT         TYPE  CSKT-MCTXT ,            "成本中心名称
        MEINH         TYPE  COSP-MEINH ,            "单位

        PLNBEZ        TYPE  AFPO-MATNR,            "产品编码
        PSMNG         TYPE  AFPO-PSMNG ,            "总数量
        UMREZ         TYPE  AFPO-UMREZ ,            "分子
        UMREN         TYPE  AFPO-UMREN ,            "分母

        MEGJH         TYPE  COSP-MEG001,            "计划数量
        MEGSJ         TYPE  COSP-MEG001,            "实际数量
        MEGMB         TYPE  COSP-MEG001,            "目标数量
        WOGJH         TYPE  COSP-WOG001,            "计划成本
        WOGSJ         TYPE  COSP-WOG001,            "实际成本
        WOGMB         TYPE  COSP-WOG001,            "目标成本

        MSLJH         TYPE  COSP-MEG001,            "数量差异-实际与计划:
        WCBJH         TYPE  COSP-WOG001,            "成本差异-实际与计划:
        MSLMB         TYPE  COSP-MEG001,            "数量差异-实际与目标:
        WCBMB         TYPE  COSP-WOG001,            "成本差异-实际与目标:

        OBJNR         TYPE  AUFK-OBJNR,             "对象号
        UDATE         TYPE  JCDS-UDATE,             "日期
        UTIME         TYPE  JCDS-UTIME,             "时间
        INACT         TYPE  JCDS-INACT,             "状态未激活

      END OF GTS_DATA.

DATAGT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGS_DATA TYPE GTS_DATA .

TYPESBEGIN OF GTS_COSP,

        OBJNR         TYPE  COSP-OBJNR ,            "对象号
        GJAHR         TYPE  COSP-GJAHR ,            "财年
        WRTTP         TYPE  COSP-WRTTP ,            "值类型
        WERKS         TYPE  COKEY-WERKS,            "工厂
        MATNR         TYPE  COKEY-MATNR,            "物料代码
        KSTAR         TYPE  COSP-KSTAR ,            "取成本要素
        HRKFT         TYPE  COSP-HRKFT ,            "CO次级码
        MEINH         TYPE  COSP-MEINH ,            "单位

        WOG001        TYPE  COSP-WOG001,            "成本
        WOG002        TYPE  COSP-WOG002,            "成本
        WOG003        TYPE  COSP-WOG003,            "成本
        WOG004        TYPE  COSP-WOG004,            "成本
        WOG005        TYPE  COSP-WOG005,            "成本
        WOG006        TYPE  COSP-WOG006,            "成本
        WOG007        TYPE  COSP-WOG007,            "成本
        WOG008        TYPE  COSP-WOG008,            "成本
        WOG009        TYPE  COSP-WOG009,            "成本
        WOG010        TYPE  COSP-WOG010,            "成本
        WOG011        TYPE  COSP-WOG011,            "成本
        WOG012        TYPE  COSP-WOG012,            "成本
        WOG013        TYPE  COSP-WOG013,            "成本
        WOG014        TYPE  COSP-WOG014,            "成本
        WOG015        TYPE  COSP-WOG015,            "成本
        WOG016        TYPE  COSP-WOG016,            "成本
        MEG001        TYPE  COSP-MEG001,            "数量
        MEG002        TYPE  COSP-MEG002,            "数量
        MEG003        TYPE  COSP-MEG003,            "数量
        MEG004        TYPE  COSP-MEG004,            "数量
        MEG005        TYPE  COSP-MEG005,            "数量
        MEG006        TYPE  COSP-MEG006,            "数量
        MEG007        TYPE  COSP-MEG007,            "数量
        MEG008        TYPE  COSP-MEG008,            "数量
        MEG009        TYPE  COSP-MEG009,            "数量
        MEG010        TYPE  COSP-MEG010,            "数量
        MEG011        TYPE  COSP-MEG011,            "数量
        MEG012        TYPE  COSP-MEG012,            "数量
        MEG013        TYPE  COSP-MEG013,            "数量
        MEG014        TYPE  COSP-MEG014,            "数量
        MEG015        TYPE  COSP-MEG015,            "数量
        MEG016        TYPE  COSP-MEG016,            "数量

        MSLHZ         TYPE  COSP-MEG001,            "数量汇总
        WCBHZ         TYPE  COSP-WOG001,            "成本汇总

        MEGJH         TYPE  COSP-MEG001,            "计划数量
        MEGSJ         TYPE  COSP-MEG001,            "实际数量
        MEGMB         TYPE  COSP-MEG001,            "目标数量
        WOGJH         TYPE  COSP-WOG001,            "计划成本
        WOGSJ         TYPE  COSP-WOG001,            "实际成本
        WOGMB         TYPE  COSP-WOG001,            "目标成本

        MSLJH         TYPE  COSP-MEG001,            "数量差异-实际与计划:
        WCBJH         TYPE  COSP-WOG001,            "成本差异-实际与计划:
        MSLMB         TYPE  COSP-MEG001,            "数量差异-实际与目标:
        WCBMB         TYPE  COSP-WOG001,            "成本差异-实际与目标:

END OF GTS_COSP.

DATAGT_COSP    TYPE TABLE OF GTS_COSP WITH HEADER LINE.
DATAGT_COSP_C  TYPE TABLE OF GTS_COSP WITH HEADER LINE.

TYPESBEGIN OF GTS_COSS,

        OBJNR         TYPE  COSS-OBJNR ,            "对象号
        GJAHR         TYPE  COSS-GJAHR ,            "财年
        WRTTP         TYPE  COSS-WRTTP ,            "值类型
        WERKS         TYPE  COKEY-WERKS,            "工厂
        KSTAR         TYPE  COSS-KSTAR ,            "取成本要素
        KOSTL         TYPE  CSKT-KOSTL ,            "成本中心
        PAROB         TYPE  COSS-PAROB ,            "合作伙伴对象
        HRKFT         TYPE  COSS-HRKFT ,            "CO次级码
        MEINH         TYPE  COSS-MEINH ,            "单位

        WOG001        TYPE  COSS-WOG001,            "成本
        WOG002        TYPE  COSS-WOG002,            "成本
        WOG003        TYPE  COSS-WOG003,            "成本
        WOG004        TYPE  COSS-WOG004,            "成本
        WOG005        TYPE  COSS-WOG005,            "成本
        WOG006        TYPE  COSS-WOG006,            "成本
        WOG007        TYPE  COSS-WOG007,            "成本
        WOG008        TYPE  COSS-WOG008,            "成本
        WOG009        TYPE  COSS-WOG009,            "成本
        WOG010        TYPE  COSS-WOG010,            "成本
        WOG011        TYPE  COSS-WOG011,            "成本
        WOG012        TYPE  COSS-WOG012,            "成本
        WOG013        TYPE  COSS-WOG013,            "成本
        WOG014        TYPE  COSS-WOG014,            "成本
        WOG015        TYPE  COSS-WOG015,            "成本
        WOG016        TYPE  COSS-WOG016,            "成本
        MEG001        TYPE  COSS-MEG001,            "数量
        MEG002        TYPE  COSS-MEG002,            "数量
        MEG003        TYPE  COSS-MEG003,            "数量
        MEG004        TYPE  COSS-MEG004,            "数量
        MEG005        TYPE  COSS-MEG005,            "数量
        MEG006        TYPE  COSS-MEG006,            "数量
        MEG007        TYPE  COSS-MEG007,            "数量
        MEG008        TYPE  COSS-MEG008,            "数量
        MEG009        TYPE  COSS-MEG009,            "数量
        MEG010        TYPE  COSS-MEG010,            "数量
        MEG011        TYPE  COSS-MEG011,            "数量
        MEG012        TYPE  COSS-MEG012,            "数量
        MEG013        TYPE  COSS-MEG013,            "数量
        MEG014        TYPE  COSS-MEG014,            "数量
        MEG015        TYPE  COSS-MEG015,            "数量
        MEG016        TYPE  COSS-MEG016,            "数量

        MSLHZ         TYPE  COSS-MEG001,            "数量汇总
        WCBHZ         TYPE  COSS-WOG001,            "成本汇总

        MEGJH         TYPE  COSS-MEG001,            "计划数量
        MEGSJ         TYPE  COSS-MEG001,            "实际数量
        MEGMB         TYPE  COSS-MEG001,            "目标数量
        WOGJH         TYPE  COSS-WOG001,            "计划成本
        WOGSJ         TYPE  COSS-WOG001,            "实际成本
        WOGMB         TYPE  COSS-WOG001,            "目标成本

        MSLJH         TYPE  COSS-MEG001,            "数量差异-实际与计划:
        WCBJH         TYPE  COSS-WOG001,            "成本差异-实际与计划:
        MSLMB         TYPE  COSS-MEG001,            "数量差异-实际与目标:
        WCBMB         TYPE  COSS-WOG001,            "成本差异-实际与目标:

END OF GTS_COSS.

DATAGT_COSS    TYPE TABLE OF GTS_COSS WITH HEADER LINE.
DATAGT_COSS_C  TYPE TABLE OF GTS_COSS WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS:     P_WERKS  LIKE T001W-WERKS MODIF ID M1 OBLIGATORY ,              "工厂
                P_GJAHR  LIKE BKPF-GJAHR  MODIF ID M1 OBLIGATORY ,              "会计年度
                P_MONAT  LIKE BKPF-MONAT  MODIF ID M1 OBLIGATORY .              "期间
SELECT-OPTIONSS_MATNR  FOR  MSEG-MATNR  MODIF ID C1,                          "物料
                S_AUFNR  FOR  AUFK-AUFNR  MODIF ID C1.                          "订单
SELECTION-SCREEN END OF BLOCK B1.
 

*&---------------------------------------------------------------------*
*& 包含               ZFIR092_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .

** Define the object to be passed to the RESTRICTION parameter
*DATA RESTRICT TYPE SSCR_RESTRICT.
*
** Auxiliary objects for filling RESTRICT
*DATA : OPTLIST TYPE SSCR_OPT_LIST,
*           ASS TYPE SSCR_ASS.
*
** 限制MATNR参数只能使用‘EQ’ ‘BT’.
*  OPTLIST-NAME = 'OBJECTKEY1'.
*  OPTLIST-OPTIONS-EQ = 'X'.
*  OPTLIST-OPTIONS-BT = 'X'.
*  APPEND OPTLIST TO RESTRICT-OPT_LIST_TAB.
*
*  ASS-KIND = 'S'.
*  ASS-NAME = 'S_MONAT'.
*  ASS-SG_MAIN = 'I'.
*  ASS-SG_ADDY = SPACE.
*  ASS-OP_MAIN = 'OBJECTKEY1'.
*  APPEND ASS TO RESTRICT-ASS_TAB.
*
*  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
*   EXPORTING
*    RESTRICTION                  = RESTRICT
*   EXCEPTIONS
*     TOO_LATE                     = 1
*     REPEATED                     = 2
*     SELOPT_WITHOUT_OPTIONS       = 3
*     SELOPT_WITHOUT_SIGNS         = 4
*     INVALID_SIGN                 = 5
*     EMPTY_OPTION_LIST            = 6
*     INVALID_KIND                 = 7
*     REPEATED_KIND_A              = 8
*     OTHERS                       = 9
*            .
*
*  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.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
 AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
  ID 'WERKS' FIELD P_WERKS.
  IF SY-SUBRC <> 0.
    MESSAGE '您没有工厂:'&& P_WERKS && '  的权限!TYPE 'E' .
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  FIELD-SYMBOLS <FS> .
  DATAG_FIELD(40).
  DATALV_MONAT TYPE BKPF-MONAT .
  DATALV_NUM   TYPE BKPF-MONAT .
  DATALV_BUDAL TYPE BUDAT.
  DATALV_BUDAH TYPE BUDAT.

  LV_BUDAL P_GJAHR && P_MONAT && '01' .
  LV_BUDAH P_GJAHR && P_MONAT && '01' .
*取所选期间的最后一天
  CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
    EXPORTING
       I_DATE        LV_BUDAH
    
IMPORTING
       E_DATE        LV_BUDAH
       
.

*1  取订单相关信息:
  CLEAR:GT_DATA[].
  SELECT
    AUFK~WERKS
    AUFK
~AUFNR
    AUFK
~AUART
    AUFK
~OBJNR
    JCDS
~UDATE
    JCDS
~UTIME
    JCDS
~INACT
    AFPO
~MATNR AS PLNBEZ
    AFPO
~PSMNG
    AFPO
~UMREZ
    AFPO
~UMREN
  
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
    
FROM AUFK
    INNER 
JOIN JCDS ON AUFK~OBJNR JCDS~OBJNR
    INNER 
JOIN AFPO ON AUFK~AUFNR AFPO~AUFNR
    
WHERE AUFK~WERKS  P_WERKS
      
AND AUFK~AUFNR IN S_AUFNR
      
AND JCDS~UDATE >= LV_BUDAL
      
AND JCDS~UDATE <= LV_BUDAH
*      AND JCDS~INACT  = ''
      AND AFPO~MATNR IN S_MATNR
      
AND JCDS~STAT  IN 'I0012','I0045','I0046' )
      .

    SORT GT_DATA[] DESCENDING BY AUFNR UDATE UTIME DESCENDING.
    DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING AUFNR.
    DELETE GT_DATA[] WHERE INACT IS NOT INITIAL .

  IF GT_DATA[] IS NOT INITIAL.
*A,取物料代码及其计划、实际、目标等数据,逻辑如下:
*分类帐(COSP-LEDNR=0
*对象号(COSP-OBJNR=对象号(AUFK-OBJNR)、
*财年(COSP-GJAHR屏幕会计年度、
*值类型(COSP-WRTTP= 010405
*版本(COSP-VERSN=0
*借贷标识(COSP-BEKNZ=DC
    CLEAR GT_COSP[] .
    SELECT COSP~KSTAR
           COSP
~WRTTP
           COSP
~GJAHR
           COSP
~OBJNR
           COSP
~HRKFT
           COSP
~MEINH
           COSP
~WOG001
           COSP
~WOG002
           COSP
~WOG003
           COSP
~WOG004
           COSP
~WOG005
           COSP
~WOG006
           COSP
~WOG007
           COSP
~WOG008
           COSP
~WOG009
           COSP
~WOG010
           COSP
~WOG011
           COSP
~WOG012
           COSP
~WOG013
           COSP
~WOG014
           COSP
~WOG015
           COSP
~WOG016
           COSP
~MEG001
           COSP
~MEG002
           COSP
~MEG003
           COSP
~MEG004
           COSP
~MEG005
           COSP
~MEG006
           COSP
~MEG007
           COSP
~MEG008
           COSP
~MEG009
           COSP
~MEG010
           COSP
~MEG011
           COSP
~MEG012
           COSP
~MEG013
           COSP
~MEG014
           COSP
~MEG015
           COSP
~MEG016
           COKEY
~MATNR
           COKEY
~WERKS
      
INTO CORRESPONDING FIELDS OF TABLE GT_COSP[]
       
FROM COSP
       
LEFT JOIN COKEY ON COSP~HRKFT COKEY~HRKFT
       
FOR ALL ENTRIES IN GT_DATA[]
       
WHERE COSP~OBJNR   GT_DATA-OBJNR
*         AND COKEY~WERKS  = GT_DATA-WERKS
         AND COSP~LEDNR   '00'
         AND COSP~GJAHR  <= P_GJAHR
         
AND COSP~WRTTP  IN '01','04','05' )
         AND COSP~VERSN   '000'
         AND COSP~BEKNZ  IN 'S','H' )
         .

    CLEAR GT_COSP_C[] .
*    GT_COSP_C[] = GT_COSP[] .
    LOOP AT GT_COSP.
      COLLECT GT_COSP INTO GT_COSP_C.
    ENDLOOP .

    SORT GT_COSP[] BY OBJNR WERKS MATNR KSTAR WRTTP .
    DELETE ADJACENT DUPLICATES FROM GT_COSP[] COMPARING OBJNR WERKS MATNR KSTAR.

    SORT GT_COSP_C[] BY OBJNR WERKS MATNR KSTAR WRTTP.

    LOOP AT GT_COSP.

      LOOP AT GT_COSP_C WHERE OBJNR GT_COSP-OBJNR
                          
AND WERKS GT_COSP-WERKS
                          
AND MATNR GT_COSP-MATNR
                          
AND KSTAR GT_COSP-KSTAR .

        IF GT_COSP_C-GJAHR < P_GJAHR.
           LV_MONAT 16 .
        ELSE .
          IF P_MONAT >= 12.
            LV_MONAT 16 .
          ELSE .
            LV_MONAT P_MONAT .
          ENDIF.
        ENDIF.

       LV_NUM '01' .
       WHILE LV_NUM <= LV_MONAT.
        G_FIELD 'GT_COSP_C-MEG0' && LV_NUM .
        ASSIGN (G_FIELDTO <FS>.
        IF <FS> IS ASSIGNED.
          GT_COSP_C-MSLHZ GT_COSP_C-MSLHZ + <FS>.
        ENDIF.
        UNASSIGN <FS>.

        G_FIELD 'GT_COSP_C-WOG0' && LV_NUM .
        ASSIGN (G_FIELDTO <FS>.
        IF <FS> IS ASSIGNED.
          GT_COSP_C-WCBHZ GT_COSP_C-WCBHZ + <FS>.
        ENDIF.
        UNASSIGN <FS>.

        LV_NUM LV_NUM + 1.
       ENDWHILE.

        IF GT_COSP_C-WRTTP '01'.
          GT_COSP-MEGJH GT_COSP_C-MSLHZ .
          GT_COSP-WOGJH GT_COSP_C-WCBHZ .
        ELSEIF GT_COSP_C-WRTTP '04'.
          GT_COSP-MEGSJ GT_COSP_C-MSLHZ .
          GT_COSP-WOGSJ GT_COSP_C-WCBHZ .
        ELSEIF GT_COSP_C-WRTTP '05'.
          GT_COSP-MEGMB GT_COSP_C-MSLHZ .
          GT_COSP-WOGMB GT_COSP_C-WCBHZ .
        ENDIF.
        CLEAR GT_COSP_C .
       ENDLOOP.

      GT_COSP-MSLJH GT_COSP-MEGSJ GT_COSP-MEGJH .
      GT_COSP-WCBJH GT_COSP-WOGSJ GT_COSP-WOGJH .
      GT_COSP-MSLMB GT_COSP-MEGSJ GT_COSP-MEGMB .
      GT_COSP-WCBMB GT_COSP-WOGSJ GT_COSP-WOGMB .

      MODIFY GT_COSP .
      CLEAR  GT_COSP .
    ENDLOOP.

*B,取成本中心及其计划、实际、目标等数据
  DATAGR_KSTAR TYPE RANGE OF KSTAR,
        GW_KSTAR LIKE LINE  OF GR_KSTAR.

    CLEAR GR_KSTAR[].
    GW_KSTAR-SIGN   'I'.
    GW_KSTAR-OPTION 'BT'.
    GW_KSTAR-LOW    '0000900001'.
    GW_KSTAR-HIGH   '0000900009'.
    APPEND GW_KSTAR TO GR_KSTAR[].
    CLEAR  GW_KSTAR.

    CLEAR GT_COSS[] .
    SELECT COSS~OBJNR
           COSS
~GJAHR
           COSS
~WRTTP
           COSS
~KSTAR
           COSS
~PAROB
           COSS
~HRKFT
           COSS
~MEINH
           COSS
~WOG001
           COSS
~WOG002
           COSS
~WOG003
           COSS
~WOG004
           COSS
~WOG005
           COSS
~WOG006
           COSS
~WOG007
           COSS
~WOG008
           COSS
~WOG009
           COSS
~WOG010
           COSS
~WOG011
           COSS
~WOG012
           COSS
~WOG013
           COSS
~WOG014
           COSS
~WOG015
           COSS
~WOG016
           COSS
~MEG001
           COSS
~MEG002
           COSS
~MEG003
           COSS
~MEG004
           COSS
~MEG005
           COSS
~MEG006
           COSS
~MEG007
           COSS
~MEG008
           COSS
~MEG009
           COSS
~MEG010
           COSS
~MEG011
           COSS
~MEG012
           COSS
~MEG013
           COSS
~MEG014
           COSS
~MEG015
           COSS
~MEG016
      
INTO CORRESPONDING FIELDS OF TABLE GT_COSS[]
       
FROM  COSS
       
FOR ALL ENTRIES IN GT_DATA[]
       
WHERE COSS~OBJNR   GT_DATA-OBJNR
         
AND COSS~LEDNR   '00'
         AND COSS~GJAHR  <= P_GJAHR
         
AND COSS~WRTTP  IN '01','04','05' )
         AND COSS~VERSN   '000'
         AND COSS~BEKNZ  IN 'S','H' )
         AND COSS~KSTAR  IN GR_KSTAR
         
.

    CLEAR GT_COSS_C[] .
    LOOP AT GT_COSS.
      CLEAR GT_DATA .
      READ TABLE GT_DATA WITH KEY OBJNR GT_COSS-OBJNR .
      GT_COSS-WERKS GT_DATA-WERKS .
      GT_COSS-KOSTL GT_COSS-PAROB+6(10) .
      COLLECT GT_COSS INTO GT_COSS_C[].
      MODIFY GT_COSS .
      CLEAR  GT_COSS .
    ENDLOOP.
*    GT_COSS_C[] = GT_COSS[] .

    SORT GT_COSS[] BY OBJNR GJAHR WERKS KSTAR KOSTL  .
    DELETE ADJACENT DUPLICATES FROM GT_COSS[] COMPARING OBJNR GJAHR WERKS KSTAR KOSTL.

    SORT GT_COSS_C[] BY OBJNR GJAHR WERKS KSTAR KOSTL WRTTP.

    LOOP AT GT_COSS.

      LOOP AT GT_COSS_C WHERE OBJNR GT_COSS-OBJNR
                          
AND WERKS GT_COSS-WERKS
                          
AND GJAHR GT_COSS-GJAHR
                          
AND KSTAR GT_COSS-KSTAR
                          
AND KOSTL GT_COSS-KOSTL .

        IF GT_COSS_C-GJAHR < P_GJAHR.
           LV_MONAT 16 .
        ELSE .
          IF P_MONAT >= 12.
            LV_MONAT 16 .
          ELSE .
            LV_MONAT P_MONAT .
          ENDIF.
        ENDIF.

       LV_NUM '01' .
       WHILE LV_NUM <= LV_MONAT.
        G_FIELD 'GT_COSS_C-MEG0' && LV_NUM .
        ASSIGN (G_FIELDTO <FS>.
        IF <FS> IS ASSIGNED.
          GT_COSS_C-MSLHZ GT_COSS_C-MSLHZ + <FS>.
        ENDIF.
        UNASSIGN <FS>.

        G_FIELD 'GT_COSS_C-WOG0' && LV_NUM .
        ASSIGN (G_FIELDTO <FS>.
        IF <FS> IS ASSIGNED.
          GT_COSS_C-WCBHZ GT_COSS_C-WCBHZ + <FS>.
        ENDIF.
        UNASSIGN <FS>.
        LV_NUM LV_NUM + 1.
       ENDWHILE.

        IF GT_COSS_C-WRTTP '01'.
          GT_COSS-MEGJH GT_COSS_C-MSLHZ .
          GT_COSS-WOGJH GT_COSS_C-WCBHZ .
        ELSEIF GT_COSS_C-WRTTP '04'.
          GT_COSS-MEGSJ GT_COSS_C-MSLHZ .
          GT_COSS-WOGSJ GT_COSS_C-WCBHZ .
        ELSEIF GT_COSS_C-WRTTP '05'.
          GT_COSS-MEGMB GT_COSS_C-MSLHZ .
          GT_COSS-WOGMB GT_COSS_C-WCBHZ .
        ENDIF.
        CLEAR GT_COSS_C .
       ENDLOOP.

      GT_COSS-MSLJH GT_COSS-MEGSJ GT_COSS-MEGJH .
      GT_COSS-WCBJH GT_COSS-WOGSJ GT_COSS-WOGJH .
      GT_COSS-MSLMB GT_COSS-MEGSJ GT_COSS-MEGMB .
      GT_COSS-WCBMB GT_COSS-WOGSJ GT_COSS-WOGMB .

      MODIFY GT_COSS .
      CLEAR  GT_COSS .
    ENDLOOP.


    LOOP AT GT_DATA WHERE VLFAG IS INITIAL.

      IF GT_DATA-UMREN IS INITIAL .
        GT_DATA-UMREN .
      ENDIF.

      IF GT_DATA-UMREZ IS INITIAL .
        GT_DATA-UMREZ .
      ENDIF.

*再根据订单取表AFPO的产品编码(AFPO-MATNR)、总数量(PSMNG)、分子(UMREZ)、分母(UMREN),批量等于总数量 乘以 分母 除以 分子
      IF GT_DATA-UMREZ <> 0.
        GT_DATA-GAMNG GT_DATA-PSMNG * GT_DATA-UMREN / GT_DATA-UMREZ .
      ENDIF.

      SELECT SINGLE MAKTX INTO GT_DATA-CAKTX FROM MAKT
        
WHERE MATNR GT_DATA-PLNBEZ
          
AND SPRAS 1
          .

      GS_DATA GT_DATA .
      LOOP AT GT_COSP WHERE OBJNR GT_DATA-OBJNR .
        GS_DATA-KSTAR GT_COSP-KSTAR .
        GS_DATA-MATNR GT_COSP-MATNR .
        GS_DATA-MEINH GT_COSP-MEINH .

        GS_DATA-MEGJH GT_COSP-MEGJH .
        GS_DATA-WOGJH GT_COSP-WOGJH .
        GS_DATA-MEGSJ GT_COSP-MEGSJ .
        GS_DATA-WOGSJ GT_COSP-WOGSJ .
        GS_DATA-MEGMB GT_COSP-MEGMB .
        GS_DATA-WOGMB GT_COSP-WOGMB .

        GS_DATA-MSLJH GT_COSP-MSLJH .
        GS_DATA-WCBJH GT_COSP-WCBJH .
        GS_DATA-MSLMB GT_COSP-MSLMB .
        GS_DATA-WCBMB GT_COSP-WCBMB .

        SELECT SINGLE TXT20 INTO GS_DATA-TXT20 FROM SKAT
          
WHERE SAKNR GS_DATA-KSTAR
            
AND KTOPL 'CP11'
            AND SPRAS 1
            .

        SELECT SINGLE MAKTX INTO GS_DATA-WAKTX FROM MAKT
          
WHERE MATNR GS_DATA-MATNR
            
AND SPRAS 1
            .

        GS_DATA-VLFAG 'X' .
        APPEND GS_DATA TO GT_DATA[].
        CLEAR GT_COSP .
      ENDLOOP.

      GS_DATA GT_DATA .
      LOOP AT GT_COSS WHERE OBJNR GT_DATA-OBJNR .
        GS_DATA-KSTAR GT_COSS-KSTAR .
        GS_DATA-KOSTL GT_COSS-KOSTL .
        GS_DATA-MEINH GT_COSS-MEINH .

        GS_DATA-MEGJH GT_COSS-MEGJH .
        GS_DATA-WOGJH GT_COSS-WOGJH .
        GS_DATA-MEGSJ GT_COSS-MEGSJ .
        GS_DATA-WOGSJ GT_COSS-WOGSJ .
        GS_DATA-MEGMB GT_COSS-MEGMB .
        GS_DATA-WOGMB GT_COSS-WOGMB .

        GS_DATA-MSLJH GT_COSS-MSLJH .
        GS_DATA-WCBJH GT_COSS-WCBJH .
        GS_DATA-MSLMB GT_COSS-MSLMB .
        GS_DATA-WCBMB GT_COSS-WCBMB .

        SELECT SINGLE TXT20 INTO GS_DATA-TXT20 FROM SKAT
          
WHERE SAKNR GS_DATA-KSTAR
            
AND KTOPL 'CP11'
            AND SPRAS 1
            .

        SELECT SINGLE MCTXT INTO GS_DATA-MCTXT FROM CSKT
          
WHERE KOSTL GS_DATA-KOSTL
            
AND SPRAS 1
            .

        GS_DATA-VLFAG 'X' .
        APPEND GS_DATA TO GT_DATA[].
        CLEAR GT_COSS .
      ENDLOOP.

      CLEAR GT_DATA .
      CLEAR GS_DATA .

    ENDLOOP.
    DELETE GT_DATA[] WHERE VLFAG IS INITIAL .
  ELSE .
    MESSAGE 'NO_DATA!'TYPE'S'DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT                S_LAYOUT
      IT_FIELDCAT              
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_DATA[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    wa_fieldcat-fieldname &1.
    wa_fieldcat-seltext_l &2.
    IF wa_fieldcat-fieldname =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.
      wa_fieldcat-EMPHASIZE 'C600'"设置字段的颜色
    ENDIF.

    IF wa_fieldcat-fieldname =  'MSLMB' or wa_fieldcat-fieldname =  'WCBMB'.
      wa_fieldcat-EMPHASIZE 'C710'"设置字段的颜色
    ENDIF.

    IF wa_fieldcat-fieldname 'PLNBEZ' OR wa_fieldcat-fieldname 'MATNR' .
      wa_fieldcat-ref_tabname 'MARA'.
      wa_fieldcat-ref_fieldname 'MATNR'.
    ENDIF.

    IF wa_fieldcat-fieldname 'CAKTX' OR wa_fieldcat-fieldname 'WAKTX' .
      wa_fieldcat-ref_tabname 'MAKT'.
      wa_fieldcat-ref_fieldname 'MAKTX'.
    ENDIF.

    IF wa_fieldcat-fieldname 'AUFNR' .
      wa_fieldcat-ref_tabname 'AUFK'.
      wa_fieldcat-ref_fieldname 'AUFNR'.
    ENDIF.

    APPEND wa_fieldcat TO gt_fieldcat.
    CLEAR wa_fieldcat.
  END-OF-DEFINITION.
  FILL_FIELD :
        'WERKS'    '工厂',
        'AUFNR'    '订单编号',
        'AUART'    '订单类型',
        'PLNBEZ'   '产品编码',
        'CAKTX'    '产品名称',
        'GAMNG'    '批量',
        'KSTAR'    '成本要素',
        'TXT20'    '成本要素名称',
        'MATNR'    '物料代码',
        'WAKTX'    '料物描述',
        'KOSTL'    '成本中心',
        'MCTXT'    '成本中心名称',
        'MEINH'    '单位',
        'MEGJH'    '计划数量',
        'MEGSJ'    '实际数量',
        'MEGMB'    '目标数量',
        'WOGJH'    '计划成本',
        'WOGSJ'    '实际成本',
        'WOGMB'    '目标成本',
        'MSLJH'    '数量差异-实际与计划:',
        'WCBJH'    '成本差异-实际与计划:',
        'MSLMB'    '数量差异-实际与目标:',
        'WCBMB'    '成本差异-实际与目标:'.

ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN 'DEL_DJ'.
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.

ENDFORM.


INITIALIZATION .
  PERFORM FRM_EXCLUDE_OPTION.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值