完工订单与实际成本汇总表

*&---------------------------------------------------------------------*
*& Report ZFICOR008
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zficor008.

TABLES:aufk,afko,mara,jcds,t023t.

TYPE-POOLS:slis.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv, "lvc_t_fcat, "列描述内表,列清单
      wa_fieldcat LIKE LINE OF it_fieldcat,
      it_layout   TYPE slis_layout_alv. "lvc_s_layo. "表格规格属性内表


DATA:BEGIN OF wa_item,

       aufnr     LIKE aufk-aufnr,
       plnbez    LIKE afko-plnbez,
       wgbez     LIKE t023t-wgbez,
       matkl     LIKE t023t-wgbez60,
       maktx     LIKE makt-maktx,
       zznme     LIKE zmmt002-zznme,
       meins     LIKE mara-meins,
       wemng     LIKE afpo-wemng,
       objnr     LIKE cosp-objnr,
       auart     LIKE aufk-auart,
       txt01     LIKE t003p-txt,
       udate_01  LIKE jcds-udate,

       dmbtr_01  LIKE cosp_bak-wkg001,
       dmbtr_02  LIKE cosp_bak-wkg001,
       dmbtr_03  LIKE cosp_bak-wkg001,
       dmbtr_04  LIKE cosp_bak-wkg001,
       dmbtr_05  LIKE cosp_bak-wkg001,
       dmbtr_06  LIKE cosp_bak-wkg001,
       dmbtr_07  LIKE cosp_bak-wkg001,

       dmbtr_08  LIKE cosp_bak-wkg001,
       dmbtr_09  LIKE cosp_bak-wkg001,
       dmbtr_10  LIKE cosp_bak-wkg001,
       dmbtr_11  LIKE cosp_bak-wkg001,
       dmbtr_12  LIKE cosp_bak-wkg001,
       dmbtr_13  LIKE cosp_bak-wkg001,
       dmbtr_14  LIKE cosp_bak-wkg001,

       dmbtr_15  LIKE cosp_bak-wkg001,
       dmbtr_16  LIKE cosp_bak-wkg001,
       dmbtr_17  LIKE cosp_bak-wkg001,
       dmbtr_18  LIKE cosp_bak-wkg001,
       dmbtr_19  LIKE cosp_bak-wkg001,
       dmbtr_20  LIKE cosp_bak-wkg001,
       dmbtr_21  LIKE cosp_bak-wkg001,
       meg005_01 LIKE coss-meg005,
       meg005_02 LIKE coss-meg005,
       meg005_03 LIKE coss-meg005,
       meg005_04 LIKE coss-meg005,
       meg005_05 LIKE coss-meg005,
       meg005_06 LIKE coss-meg005,
       meg005_07 LIKE coss-meg005,
       meg005_08 LIKE coss-meg005,
       meg005_09 LIKE coss-meg005,
       meg005_10 LIKE coss-meg005,
       meg005_11 LIKE coss-meg005,

       udate     TYPE string,

     END OF wa_item.

DATA:gt_item LIKE TABLE OF wa_item.


DATA:str   TYPE char22,
     a     TYPE i,
     tabix TYPE sy-tabix.

DATA:z_pp_0001 TYPE REF TO zhele_pp_0001.
CREATE OBJECT z_pp_0001.

SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
SELECT-OPTIONS: s_aufnr  FOR aufk-aufnr,
                s_plnbez FOR afko-plnbez,
                s_wgbez  FOR t023t-wgbez,
*                s_matkl  FOR mara-matkl,
                s_auart  FOR aufk-auart.
PARAMETERS:s_udate1 LIKE jcds-udate OBLIGATORY,
           s_udate2 LIKE jcds-udate OBLIGATORY.

SELECTION-SCREEN:END OF BLOCK b1.

INITIALIZATION.
  t1 = '请输入条件'.

START-OF-SELECTION.
  PERFORM get_data.

END-OF-SELECTION.
  PERFORM alv.


FORM get_data.

  SELECT a~aufnr,a~objnr,k~plnbez,m~matkl,m~meins,a~auart,j~stat,j~udate
      FROM aufk AS a
      JOIN jcds AS j ON a~objnr = j~objnr
      JOIN afko AS k ON a~aufnr = k~aufnr
      JOIN mara AS m ON k~plnbez = m~matnr
      INTO TABLE @DATA(gt_aufk)
      WHERE ( j~stat = 'I0012'
      OR j~stat = 'I0045')
      AND j~udate >= @s_udate1
      AND j~udate <= @s_udate2
      AND j~inact <> 'X'
      AND a~aufnr IN @s_aufnr
      AND a~auart IN @s_auart
      AND k~plnbez IN @s_plnbez.
*      AND m~matkl IN @s_matkl.
*      AND m~extwg IN @s_extwg.
  SORT gt_aufk BY objnr DESCENDING stat DESCENDING udate DESCENDING.
  DELETE ADJACENT DUPLICATES FROM gt_aufk COMPARING objnr stat udate.

  SELECT objnr,stat,udate
    FROM jcds
    INTO TABLE @DATA(gt_jcds)
    FOR ALL ENTRIES IN @gt_aufk
    WHERE objnr = @gt_aufk-objnr
    AND inact = 'X'
    AND   ( stat = 'I0012'
    OR stat = 'I0045')
    AND udate >= @s_udate1
    AND udate <= @s_udate2.
  SORT gt_jcds BY objnr DESCENDING stat DESCENDING udate DESCENDING.
*  DELETE ADJACENT DUPLICATES FROM gt_jcds COMPARING objnr stat udate.

*      and

*    SELECT aufnr,stat
*      from jcds
*      INTO TABLE @DATA(gt_stat)
*      where


*  IF gt_aufk is NOT INITIAL.
  SELECT objnr,wrttp,kstar,hrkft,wkg001,wkg002,wkg003,wkg004,
         wkg005,wkg006,wkg007,wkg008,wkg009,wkg010,wkg011,
         wkg012,wkg013,wkg014,wkg015,wkg016,meg001,meg002,meg003,
         meg004,meg005,meg006,meg007,meg008,meg009,meg010,meg011,meg012,meg013,meg014,meg015,meg016
    FROM cosp
    INTO TABLE @DATA(gt_cosp)
      FOR ALL ENTRIES IN @gt_aufk
      WHERE objnr = @gt_aufk-objnr
    AND wrttp IN ('01','04','05')
    AND   kstar IN ('0050010000','0050010002','0050010003','0050010020').

  SELECT objnr,wrttp,kstar,hrkft,wkg001,wkg002,wkg003,wkg004,
     wkg005,wkg006,wkg007,wkg008,wkg009,wkg010,wkg011,
     wkg012,wkg013,wkg014,wkg015,wkg016,meg001,meg002,meg003,
         meg004,meg005,meg006,meg007,meg008,meg009,meg010,meg011,meg012,meg013,meg014,meg015,meg016
    FROM coss
    INTO TABLE @DATA(gt_coss)
      FOR ALL ENTRIES IN @gt_aufk
      WHERE objnr = @gt_aufk-objnr
   AND wrttp IN ('01','04','05')
    AND   kstar IN ('0000843000','0000843002','0000843003','0000843001',
                    '0050010009').

  APPEND LINES OF gt_coss TO gt_cosp.

*      SELECT objnr,wrttp,kstar,WKG001,WKG002,WKG003,WKG004,
*           WKG005,WKG006,WKG007,WKG008,WKG009,WKG010,WKG011,
*           WKG012,WKG013,WKG014,WKG015,WKG016
*      from cosp
*      into TABLE @DATA(gt_cosp_04)
*      FOR ALL ENTRIES IN @gt_aufk
*      where objnr = @gt_aufk-objnr
*      and   wrttp = 4
*      and   kstar in ('0050010000','0050010002','0050010003','0050010020',
*                      '0000843000','0000843002','0000843003','0000843001',
*                      '0050010009').
*
*      SELECT objnr,wrttp,kstar,WKG001,WKG002,WKG003,WKG004,
*           WKG005,WKG006,WKG007,WKG008,WKG009,WKG010,WKG011,
*           WKG012,WKG013,WKG014,WKG015,WKG016
*      from cosp
*      into TABLE @DATA(gt_cosp_05)
*      FOR ALL ENTRIES IN @gt_aufk
*      where objnr = @gt_aufk-objnr
*      and   wrttp = 5
*      and   kstar in ('0050010000','0050010002','0050010003','0050010020',
*                      '0000843000','0000843002','0000843003','0000843001',
*                      '0050010009').


*  ENDIF.

  LOOP AT gt_cosp INTO DATA(wa_cosp).
    CLEAR:a.
    a = strlen( wa_cosp-objnr ).
    IF a > 8.
      a = a - 8.
      str = wa_cosp-objnr.
      CLEAR:wa_cosp-objnr.
      wa_cosp-objnr = str+a(8).
      MODIFY gt_cosp FROM wa_cosp INDEX sy-tabix.
    ENDIF.

    CLEAR:wa_cosp.
  ENDLOOP.

  LOOP AT gt_coss INTO DATA(wa_coss).
    CLEAR:a.
    a = strlen( wa_coss-objnr ).
    IF a > 8.
      a = a - 8.
      str = wa_coss-objnr.
      CLEAR:wa_coss-objnr.
      wa_coss-objnr = str+a(8).
      MODIFY gt_coss FROM wa_coss INDEX sy-tabix.
    ENDIF.

    CLEAR:wa_coss.
  ENDLOOP.
*  DELETE gt_coss WHERE wrttp = '01'.

  SORT gt_cosp BY objnr wrttp.
  SORT gt_coss BY objnr wrttp.

  DATA:objnr TYPE jcds-objnr.

  LOOP AT gt_aufk INTO DATA(wa_aufk).

*    CLEAR:objnr.
*    SELECT SINGLE objnr
*      INTO objnr
*      FROM jcds
*      WHERE objnr = wa_aufk-objnr
*      and   stat = wa_aufk-stat
*      and   INACT = 'X'.
*      IF sy-subrc = 0.
*        delete gt_aufk.
*        CLEAR wa_aufk.
*        CONTINUE.
*      ENDIF.

    READ TABLE gt_jcds INTO DATA(wa_jcds)
    WITH KEY objnr = wa_aufk-objnr
             stat  = wa_aufk-stat.
    IF sy-subrc = 0.

      IF wa_aufk-udate < wa_jcds-udate.
        DELETE gt_jcds INDEX sy-tabix.
        DELETE gt_aufk.
        CLEAR:wa_aufk,wa_jcds.
        CONTINUE.
      ENDIF.

    ENDIF.
    CLEAR:wa_jcds.

    MOVE-CORRESPONDING:wa_aufk TO wa_item.
    CLEAR:wa_item-udate,wa_item-udate_01.
    wa_item-udate_01 = wa_aufk-udate.

    CALL METHOD z_pp_0001->maktx
      EXPORTING
        matnr = wa_item-plnbez
      IMPORTING
        maktx = wa_item-maktx
        zznme = wa_item-zznme.

    SELECT SINGLE wemng
      INTO wa_item-wemng
      FROM afpo
      WHERE aufnr = wa_item-aufnr.

    SELECT SINGLE t023t~wgbez60 t023t~wgbez
      INTO (wa_item-matkl,wa_item-wgbez)
      FROM mara
      JOIN t023t ON mara~matkl = t023t~matkl
      WHERE mara~matkl = wa_aufk-matkl
      AND   t023t~spras = 1
      AND   t023t~wgbez IN s_wgbez.
    IF sy-subrc <> 0.
      DELETE gt_aufk.
      CLEAR:wa_aufk,wa_item.
      CONTINUE.
    ENDIF.

    SELECT SINGLE txt
      INTO wa_item-txt01
      FROM t003p
      WHERE auart = wa_item-auart
      AND   spras = 1.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = wa_item-aufnr
      IMPORTING
        output = wa_item-aufnr.

    READ TABLE gt_cosp INTO wa_cosp
    WITH KEY   objnr = wa_item-aufnr
               BINARY SEARCH.
    IF sy-subrc = 0.
      CLEAR:tabix.
      tabix = sy-tabix.
      CLEAR:wa_cosp.

      LOOP AT gt_cosp INTO wa_cosp
        FROM tabix.

        IF wa_cosp-objnr <> wa_item-aufnr.
          EXIT.
        ENDIF.

        IF wa_cosp-wrttp = '01'.

          IF wa_cosp-kstar = '0050010000'
          OR wa_cosp-kstar = '0050010002'
          OR wa_cosp-kstar = '0050010003'
          OR wa_cosp-kstar = '0050010020'.
            wa_item-dmbtr_01 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_01.

          ENDIF.

          IF wa_cosp-kstar = '0000843000'.
            wa_item-dmbtr_02 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_02.

          ENDIF.

          IF wa_cosp-kstar = '0000843002'.
            wa_item-dmbtr_03 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_03.

          ENDIF.

          IF wa_cosp-kstar = '0000843003'.
            wa_item-dmbtr_04 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_04.

          ENDIF.

          IF wa_cosp-kstar = '0000843001'
          OR wa_cosp-kstar = '0050010009'.
            wa_item-dmbtr_05 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_05.

          ENDIF.

        ENDIF.

        IF wa_cosp-wrttp = '04'.

          IF wa_cosp-kstar = '0050010000'
          OR wa_cosp-kstar = '0050010002'
          OR wa_cosp-kstar = '0050010003'
          OR wa_cosp-kstar = '0050010020'.
            wa_item-dmbtr_08 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_08.

          ENDIF.

          IF wa_cosp-kstar = '0000843000'.
            wa_item-dmbtr_09 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_09.

          ENDIF.

          IF wa_cosp-kstar = '0000843002'.
            wa_item-dmbtr_10 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_10.

          ENDIF.

          IF wa_cosp-kstar = '0000843003'.
            wa_item-dmbtr_11 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_11.

          ENDIF.

          IF wa_cosp-kstar = '0000843001'
          OR wa_cosp-kstar = '0050010009'.
            wa_item-dmbtr_12 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_12.

          ENDIF.

        ENDIF.

        IF wa_cosp-wrttp = '05'.

          IF wa_cosp-kstar = '0050010000'
          OR wa_cosp-kstar = '0050010002'
          OR wa_cosp-kstar = '0050010003'
          OR wa_cosp-kstar = '0050010020'.
            wa_item-dmbtr_15 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_15.

          ENDIF.

          IF wa_cosp-kstar = '0000843000'.
            wa_item-dmbtr_16 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_16.

          ENDIF.

          IF wa_cosp-kstar = '0000843002'.
            wa_item-dmbtr_17 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_17.

          ENDIF.

          IF wa_cosp-kstar = '0000843003'.
            wa_item-dmbtr_18 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_18.

          ENDIF.

          IF wa_cosp-kstar = '0000843001'
          OR wa_cosp-kstar = '0050010009'.
            wa_item-dmbtr_19 = wa_cosp-wkg001 + wa_cosp-wkg002 + wa_cosp-wkg003
                             + wa_cosp-wkg004 + wa_cosp-wkg005 + wa_cosp-wkg006
                             + wa_cosp-wkg007 + wa_cosp-wkg008 + wa_cosp-wkg009
                             + wa_cosp-wkg010 + wa_cosp-wkg011 + wa_cosp-wkg012
                             + wa_cosp-wkg013 + wa_cosp-wkg014 + wa_cosp-wkg015
                             + wa_cosp-wkg016 + wa_item-dmbtr_19.

          ENDIF.

        ENDIF.

      ENDLOOP.

    ENDIF.

    wa_item-dmbtr_06 = wa_item-dmbtr_01 + wa_item-dmbtr_02
                     + wa_item-dmbtr_03 + wa_item-dmbtr_04
                     + wa_item-dmbtr_05.

    wa_item-dmbtr_13 = wa_item-dmbtr_08 + wa_item-dmbtr_09
                     + wa_item-dmbtr_10 + wa_item-dmbtr_11
                     + wa_item-dmbtr_12.


    wa_item-dmbtr_20 = wa_item-dmbtr_15 + wa_item-dmbtr_16
                     + wa_item-dmbtr_17 + wa_item-dmbtr_18
                     + wa_item-dmbtr_19.


    IF wa_item-wemng <> 0.
      wa_item-dmbtr_07 = wa_item-dmbtr_06 / wa_item-wemng.
      wa_item-dmbtr_14 = wa_item-dmbtr_13 / wa_item-wemng.
      wa_item-dmbtr_21 = wa_item-dmbtr_20 / wa_item-wemng.
    ENDIF.

    wa_item-udate = s_udate1 && ' - ' && s_udate2.


*实际数量、目标数量
*    READ TABLE gt_coss INTO wa_coss
*       WITH KEY   objnr = wa_item-aufnr
*                  BINARY SEARCH.
*    IF sy-subrc = 0.

    DATA: meg005_01 TYPE coss-meg001,
          meg005_02 TYPE coss-meg001,
          meg005_03 TYPE coss-meg001,
          meg005_04 TYPE coss-meg001,
          meg005_05 TYPE coss-meg001,
          meg005_06 TYPE coss-meg001,
          meg005_07 TYPE coss-meg001,
          meg005_08 TYPE coss-meg001,
          meg005_09 TYPE coss-meg001,
          meg005_10 TYPE coss-meg001,
          meg005_11 TYPE coss-meg001.

    LOOP AT gt_coss INTO wa_coss WHERE objnr = wa_item-aufnr.
*实际人工费用
      IF wa_coss-kstar = '0000843000' AND wa_coss-wrttp = '04'.
        meg005_01 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_01 <> '0'.
          wa_item-meg005_01 = meg005_01.
        ENDIF.
      ENDIF.

*实际其他制费
      IF wa_coss-kstar = '0000843001' AND wa_coss-wrttp = '04'.
        meg005_02 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_02 <> '0'.
          wa_item-meg005_02 = meg005_02.
        ENDIF.

      ENDIF.

*实际机器费用
      IF wa_coss-kstar = '0000843002' AND wa_coss-wrttp = '04'.
        meg005_03 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_03 <> '0'.
          wa_item-meg005_03 = meg005_03.
        ENDIF.

      ENDIF.

**实际模具成本
*      IF wa_coss-kstar = '0000843003' AND wa_coss-wrttp = '04'.
*        wa_item-meg005_04 = wa_coss-meg005.
*      ENDIF.


*目标人工费用
      IF wa_coss-kstar = '0000843000' AND wa_coss-wrttp = '05'.
        meg005_05 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_05 <> '0'.
          wa_item-meg005_05 = meg005_05.
        ENDIF.

      ENDIF.

*目标其他制费
      IF wa_coss-kstar = '0000843001' AND wa_coss-wrttp = '05'.
        meg005_06 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_06 <> '0'.
          wa_item-meg005_06 = meg005_06.
        ENDIF.

      ENDIF.

*目标机器费用
      IF wa_coss-kstar = '0000843002' AND wa_coss-wrttp = '05'.
        meg005_07 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_07 <> '0'.
          wa_item-meg005_07 = meg005_07.
        ENDIF.

      ENDIF.


*计划人工费用
      IF wa_coss-kstar = '0000843000' AND wa_coss-wrttp = '01'.
        meg005_08 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_08 <> '0'.
          wa_item-meg005_08 = meg005_08.
        ENDIF.

      ENDIF.

*计划其他制费
      IF wa_coss-kstar = '0000843001' AND wa_coss-wrttp = '01'.
        meg005_09 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_09 <> '0'.
          wa_item-meg005_09 = meg005_09.
        ENDIF.

      ENDIF.

*计划机器费用
      IF wa_coss-kstar = '0000843002' AND wa_coss-wrttp = '01'.
        meg005_10 = wa_coss-meg001 + wa_coss-meg002 + wa_coss-meg003 + wa_coss-meg004 + wa_coss-meg005
        + wa_coss-meg006 + wa_coss-meg007 + wa_coss-meg008 + wa_coss-meg009 + wa_coss-meg010 + wa_coss-meg011
        + wa_coss-meg012 + wa_coss-meg013 + wa_coss-meg014 + wa_coss-meg015 + wa_coss-meg016.

        IF meg005_10 <> '0'.
          wa_item-meg005_10 = meg005_10.
        ENDIF.

      ENDIF.

**目标模具成本
*      IF wa_coss-kstar = '0000843003' AND wa_coss-wrttp = '05'.
*        wa_item-meg005_08 = wa_coss-meg005.
*      ENDIF.

    ENDLOOP.

    APPEND wa_item TO gt_item.
    CLEAR:wa_item.


  ENDLOOP.

  SORT gt_item BY aufnr udate_01 DESCENDING.
  DELETE ADJACENT DUPLICATES FROM gt_item COMPARING aufnr.

ENDFORM.

FORM alv.
  DATA : col_pos TYPE i VALUE 1.
  CLEAR:it_fieldcat,wa_fieldcat.
  it_layout-colwidth_optimize = 'X'.
  it_layout-zebra = 'X'.

* PERFORM fieldcat_int USING col_pos  '字段名字' '显示名字' '关键字' '锁定列'  '可编辑' '去前零' '表参考' '字段参考' '单位参考'.
  PERFORM fieldcat_int USING col_pos  'AUFNR' '订单号' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'AUART' '订单类型' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'TXT01' '订单类型名称' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'PLNBEZ' '物料编号' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MATKL' '物料组' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'WGBEZ' '产品机型' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MAKTX' '物料名称' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'ZZNME' '规格型号' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEINS' '单位' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'WEMNG' '入库数量' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_01' '计划材料成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_02' '计划人工成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_03' '计划机器成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_04' '计划模具费用成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_05' '计划其它制费成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_06' '计划成本合计' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_07' '计划单位成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_08' '实际材料成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_09' '实际人工成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_10' '实际机器费用成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_11' '实际模具费用成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_12' '实际其它制费成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_13' '实际成本合计' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_14' '实际单位成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_15' '目标材料成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_16' '目标人工成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_17' '目标机器费用成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_18' '目标模具费用成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_19' '目标其它制费成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_20' '目标成本合计' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'DMBTR_21' '目标单位成本' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'UDATE' '成本核算期间' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_01' '实际人工工时' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_02' '实际其他工时' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_03' '实际机器工时' '' '' ''  '' '' '' ''.
*  PERFORM fieldcat_int USING col_pos  'MEG005_04' '实际人工费用' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_05' '目标人工工时' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_06' '目标其他工时' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_07' '目标机器工时' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_08' '计划人工工时' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_09' '计划其他工时' '' '' ''  '' '' '' ''.
  PERFORM fieldcat_int USING col_pos  'MEG005_10' '计划机器工时' '' '' ''  '' '' '' ''.
*  PERFORM fieldcat_int USING col_pos  'MEG005_08' '实际人工费用' '' '' ''  '' '' '' ''.

*    调用ALV需要使用的函数
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'ALV_USER_COMMAND'
      is_layout                = it_layout
      it_fieldcat              = it_fieldcat
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_item.
ENDFORM.

FORM set_pf_status USING rt_extab TYPE slis_t_extab.
*    获取gui状态
  DATA: wa_extab TYPE slis_extab.

  SET PF-STATUS 'OPEN' EXCLUDING rt_extab.

ENDFORM.                    "set_pf_status

FORM fieldcat_int  USING   p_col_pos
                           p_fieldname
             p_seltext_l
                           p_key
                           p_fix_column
                           p_edit
                           p_zero
             p_tname
                           p_fname
                           p_reffi.
  wa_fieldcat-col_pos        = p_col_pos.  "行号
  wa_fieldcat-fieldname      = p_fieldname.  "字段名
  wa_fieldcat-seltext_l      = p_seltext_l.  "显示名字
  wa_fieldcat-key            = p_key.   "关键字
  wa_fieldcat-fix_column     = p_fix_column.  "锁定列
  wa_fieldcat-edit           = p_edit.    "可编辑
  wa_fieldcat-no_zero        = p_zero.    "去前零
  wa_fieldcat-ref_tabname    = p_tname.   "参考表
  wa_fieldcat-ref_fieldname  = p_fname.   "参考字段
  wa_fieldcat-qfieldname     = p_reffi.   "参考单位


  APPEND wa_fieldcat TO it_fieldcat.
  p_col_pos = p_col_pos + 1.
  CLEAR: wa_fieldcat.

ENDFORM.                    "FIELDCAT_INT

FORM alv_user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

*   获取ALV中的鼠标勾选记录
  DATA: l_grid TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = l_grid.

  CALL METHOD l_grid->check_changed_data.

  CASE r_ucomm.
      "WHEN 'E'.
      "LEAVE PROGRAM.

  ENDCASE.

ENDFORM.

 

完工订单与实际成本汇总表