Writing a Multi-Level BOM Cost Roll-up with ABAP

REPORT ZBOMCOST NO STANDARD PAGE HEADING LINE-SIZE 195
                LINE-COUNT 60(2) MESSAGE-ID Z1.

TABLES: MBEW,
        MAPL,
        PLPO,
        PLAS,
        CRHD,
        CRCO,
        CSSL,
        COST,
        EINE,
        EINA,
        MARA,                          "Material Master
        MAKT,
        MARC,
        MAST,                          "BOM Header
        STKO,                          "BOM Detail
        STPO,                          "Bom Components
        STAS.                          "BOM Alternative
 

SELECT-OPTIONS: S_WERKS FOR MAST-WERKS,
                S_MATNR FOR MAST-MATNR,
                S_MTART FOR MARA-MTART.

PARAMETERS: XBASE TYPE I DEFAULT '2000'.
 

DATA: W_MATNR LIKE MAPL-MATNR.

DATA: S_BASE TYPE I,
      PARENT-MATNR LIKE MAST-MATNR,
      CHILD-MATNR LIKE STPO-IDNRK,
      CHILD-WERKS LIKE MAST-WERKS,
      CHILD-STLAL LIKE MAST-STLAL,
      W_MAKTX LIKE MAKT-MAKTX,
      W_STD TYPE P DECIMALS 5,
      W_MAV TYPE P DECIMALS 5,
      W_MENGE TYPE P DECIMALS 3,
      W_LEVEL TYPE I,
      W_DOT(1),
      W_LVL(12),
      W_LVL1(12),
      W_LVL2(2),
      W_COL TYPE I,
      W_LFLAG,
      W_TTL LIKE MARD-LABST,
      WCNT TYPE I.

DATA: WCONV TYPE P DECIMALS 5,
      WCOST TYPE P DECIMALS 5,
      WUCOST TYPE P DECIMALS 5,
      WOHCOST TYPE P DECIMALS 5,
      WEXCOST TYPE P DECIMALS 5,
      WMCOST TYPE P DECIMALS 5,
      WTCOST TYPE P DECIMALS 5.

DATA: WLAR LIKE PLPO-LAR01,
      WVGW LIKE PLPO-VGW01,
      WVGE LIKE PLPO-VGE01.

DATA: BEGIN OF ITAB OCCURS 100,
        CNT TYPE I,
        LEVEL TYPE I,
        LVL1 LIKE W_LVL1,
        WERKS LIKE MAST-WERKS,
        POSNR LIKE STPO-POSNR,
        IDNRK LIKE STPO-IDNRK,
        MENGE TYPE P DECIMALS 5,                              " req qty
        MEINS LIKE STPO-MEINS,
      END OF ITAB.

DATA: BEGIN OF ITAB1 OCCURS 100,
        WERKS LIKE MAST-WERKS,
        IDNRK LIKE STPO-IDNRK,
        UCOST TYPE P DECIMALS 5,
*        mcost type p decimals 5,
*        ohcost type p decimals 5,
*        excost type p decimals 5,
      END OF ITAB1.

DATA: BEGIN OF ITAB2 OCCURS 100,
        CNT   TYPE I,
        SUBCNT TYPE I,
        LEVEL TYPE I,
        LVL1  LIKE W_LVL1,
        WERKS LIKE MAST-WERKS,
        POSNR LIKE STPO-POSNR,
        IDNRK LIKE STPO-IDNRK,
        SBASE TYPE P,
        AUSSS LIKE MARC-AUSSS,
        MENGE TYPE P DECIMALS 5,
        MEINS LIKE STPO-MEINS,
        STD   TYPE P DECIMALS 5,
        MAV   TYPE P DECIMALS 5,
        VPRSV LIKE MBEW-VPRSV,
        VORNR LIKE PLPO-VORNR,
        ARBPL LIKE CRHD-ARBPL,
        BMSCH LIKE PLPO-BMSCH,
        UCOST TYPE P DECIMALS 5,
        WLAR  LIKE PLPO-LAR01,
        WDL   TYPE P DECIMALS 5,
        WDLR  TYPE P DECIMALS 2,
        WDLH  TYPE P DECIMALS 3,
        WMSU  TYPE P DECIMALS 5,
        WMSUR TYPE P DECIMALS 2,
        WMSUH TYPE P DECIMALS 3,
        WTS   TYPE P DECIMALS 5,
        WTSR  TYPE P DECIMALS 2,
        WTSH  TYPE P DECIMALS 3,
        WAST  TYPE P DECIMALS 5,
        WASTR TYPE P DECIMALS 2,
        WASTH TYPE P DECIMALS 3,
        WOTHA LIKE PLPO-LAR01,
        WOTH  TYPE P DECIMALS 5,
        WOTHR TYPE P DECIMALS 2,
        WOTHH TYPE P DECIMALS 3,
        OHCOST TYPE P DECIMALS 5,
        MCOST  TYPE P DECIMALS 5,
        LIFNR  LIKE EINA-LIFNR,
        EXCOST  TYPE P DECIMALS 5,
        NETPR LIKE EINE-NETPR,
        PEINH LIKE EINE-PEINH,
        WCONV LIKE WCONV,
      END OF ITAB2.

DATA: WPERIOD LIKE T009B-POPER,
      WGJAHR LIKE CSSL-GJAHR.

CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
     EXPORTING
          I_DATE         = SY-DATUM
*         I_MONMIT       = 00
          I_PERIV        = 'K4'
     IMPORTING
          E_BUPER        = WPERIOD
          E_GJAHR        = WGJAHR
     EXCEPTIONS
          INPUT_FALSE    = 1
          T009_NOTFOUND  = 2
          T009B_NOTFOUND = 3
          OTHERS         = 4.
 
 

IF S_BASE EQ 0.
  S_BASE = 1.
ENDIF.

FORMAT INTENSIFIED OFF.
** append multi level bom
SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
     MATNR IN S_MATNR.
  SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
       MTART IN S_MTART.
  IF SY-SUBRC NE 0.
    CONTINUE.
  ENDIF.
  IF MARA-LVORM <> 'X'.
    PARENT-MATNR = MAST-MATNR.
    CHILD-MATNR  = MAST-MATNR.
    CHILD-WERKS  = MAST-WERKS.
    CHILD-STLAL  = MAST-STLAL.
    CLEAR ITAB.
    CLEAR ITAB-LEVEL.
    MOVE MAST-WERKS TO ITAB-WERKS.
    MOVE MAST-MATNR TO ITAB-IDNRK.
    MOVE MARA-MEINS TO ITAB-MEINS.
    WCNT = WCNT + 1.
    MOVE WCNT TO ITAB-CNT.
    APPEND ITAB.
    W_LEVEL = 1.
    PERFORM GETCHILD.
  ENDIF.
ENDSELECT.

SORT ITAB BY LEVEL DESCENDING.
LOOP AT ITAB.
  CLEAR: ITAB1, ITAB2.
  CLEAR: MARC-SOBSL, MARC-BESKZ, MARC-AUSSS.
  SELECT SINGLE * FROM MARC WHERE MATNR = ITAB-IDNRK AND
                 WERKS = ITAB-WERKS.
  IF SY-SUBRC EQ 0 AND
     MARC-AUSSS NE 0.
    S_BASE = XBASE + ( ( XBASE * MARC-AUSSS ) / 100 ).
  ELSE.
    S_BASE = XBASE.
  ENDIF.
  CLEAR: WOHCOST, WMCOST, WEXCOST, WUCOST.
  PERFORM GET_ROUTE.
  PERFORM GET_SUBC.
  WTCOST = WOHCOST + WEXCOST.
  PERFORM GET_BOM.
  MOVE ITAB-WERKS TO ITAB1-WERKS.
  MOVE ITAB-IDNRK TO ITAB1-IDNRK.
  MOVE WUCOST TO ITAB1-UCOST.
  APPEND ITAB1.
  CLEAR ITAB2.
  MOVE-CORRESPONDING ITAB TO ITAB2.
  ITAB2-AUSSS = MARC-AUSSS.
  ITAB2-SBASE = S_BASE.
  MOVE WMCOST TO ITAB2-MCOST.
  MOVE WOHCOST TO ITAB2-OHCOST.
  MOVE WEXCOST TO ITAB2-EXCOST.
  MOVE ITAB1-UCOST TO ITAB2-UCOST.
  APPEND ITAB2.
ENDLOOP.

*loop at itab1.
*  write:/ itab1-idnrk, itab1-ucost.
*endloop.
SORT ITAB2 BY CNT VORNR.
LOOP AT ITAB2.
  WTCOST = ITAB2-MCOST + ITAB2-OHCOST + ITAB2-EXCOST.
  IF ITAB2-LEVEL = 0 AND
     ITAB2-SUBCNT = 0.
    NEW-PAGE.
    FORMAT COLOR COL_GROUP INVERSE ON.
    CLEAR: MAKT-MAKTX, W_STD, W_MAV.
    SELECT SINGLE * FROM MAKT WHERE MATNR = ITAB2-IDNRK AND
          SPRAS = 'E'.
    SELECT SINGLE * FROM MBEW WHERE MATNR = ITAB2-IDNRK AND
           BWKEY = ITAB2-WERKS.
    W_MAKTX = MAKT-MAKTX.
    IF SY-SUBRC EQ 0.
      W_STD = MBEW-STPRS / MBEW-PEINH.
      W_MAV = MBEW-VERPR / MBEW-PEINH.
    ENDIF.
    WRITE:/ '***',
            008 ITAB2-IDNRK,
            034 MAKT-MAKTX,
            076(6) ITAB2-AUSSS NO-ZERO,
            096 ITAB2-MEINS,
            101(12) ITAB2-UCOST,
            114(12) W_STD,
            127(12) W_MAV,
            140(12) ITAB2-MCOST DECIMALS 3 NO-ZERO,
            153(12) ITAB2-OHCOST DECIMALS 3 NO-ZERO,
            166(12) ITAB2-EXCOST DECIMALS 3 NO-ZERO,
            179(12) WTCOST DECIMALS 3 NO-ZERO.
    FORMAT COLOR OFF INVERSE OFF.
  ELSEIF ITAB2-LIFNR NE ''.
    WRITE: /008 '**', 'Subcontact Cost'.
    WRITE: /014 '*', ITAB2-LIFNR,
            034 ITAB2-NETPR, '/' , ITAB2-PEINH.

  ELSEIF ITAB2-VORNR NE ''.
    WOHCOST = ITAB2-WDL + ITAB2-WMSU + ITAB2-WAST
              + ITAB2-WTS + ITAB2-WOTH.
    IF WOHCOST NE 0.
      CLEAR WVGW.
      IF ITAB2-SUBCNT = '1'.
        WRITE:/008 '**', 'Process Cost'.
      ENDIF.
      WVGW = ( ITAB2-WDLH / ITAB2-BMSCH ) * ITAB2-SBASE.
      WRITE:/014 ITAB2-VORNR, ITAB2-ARBPL,
             034 'DL',
             040(10) ITAB2-WDLH,
             052(10) ITAB2-WDLR,
             064(12) WVGW,
             078(16) ITAB2-WDL,
             096 ITAB2-BMSCH LEFT-JUSTIFIED.
      IF ITAB2-WMSUH NE 0.
        WVGW = ( ITAB2-WMSUH / ITAB2-BMSCH ) * ITAB2-SBASE.
        WRITE:/034 'MSU',
               040(10) ITAB2-WMSUH,
               052(10) ITAB2-WMSUR,
               064(12) WVGW,
               078(16) ITAB2-WMSU.
      ENDIF.
      IF ITAB2-WTSH NE 0.
        WRITE:/034 'TOOLST',
               040(10) ITAB2-WTSH,
               052(10) ITAB2-WTSR,
               064(12) ITAB2-WTSH,
               078(16) ITAB2-WTS.
      ENDIF.
      IF ITAB2-WASTH NE 0.
        WRITE:/034 'AST',
               040(10) ITAB2-WASTH,
               052(10) ITAB2-WASTR,
               064(12) ITAB2-WASTH,
               078(16) ITAB2-WAST.
      ENDIF.
    ENDIF.
    IF ITAB2-WOTHH NE 0.
      WVGW = ( ITAB2-WOTHH / ITAB2-BMSCH ) * S_BASE.
      WRITE:/034 ITAB2-WOTHA,
             040(8) ITAB2-WOTHH,
             050(10) ITAB2-WOTHR,
             062(8) WVGW,
             072(10) ITAB2-WOTH.
    ENDIF.
  ELSE.
    SKIP.
    CLEAR: MAKT-MAKTX, W_STD, W_MAV.
    SELECT SINGLE * FROM MAKT WHERE MATNR = ITAB2-IDNRK AND
          SPRAS = 'E'.
    SELECT SINGLE * FROM MBEW WHERE MATNR = ITAB2-IDNRK AND
          BWKEY = ITAB2-WERKS.
    IF SY-SUBRC EQ 0.
      W_STD = MBEW-STPRS / MBEW-PEINH.
      W_MAV = MBEW-VERPR / MBEW-PEINH.
    ENDIF.
    FORMAT INTENSIFIED ON.
    WRITE:/001 ITAB2-LVL1,
           008 ITAB2-POSNR,
           014 ITAB2-IDNRK,
           034 MAKT-MAKTX,
           076(6) ITAB2-AUSSS NO-ZERO,
           084(10) ITAB2-MENGE,
           096 ITAB2-MEINS,
           101(12) ITAB2-UCOST,
           114(12) W_STD,
           127(12) W_MAV,
           140(12) ITAB2-MCOST DECIMALS 3 NO-ZERO,
           153(12) ITAB2-OHCOST DECIMALS 3 NO-ZERO,
           166(12) ITAB2-EXCOST DECIMALS 3 NO-ZERO,
           179(12) WTCOST DECIMALS 3 NO-ZERO.
    FORMAT INTENSIFIED OFF.
  ENDIF.
ENDLOOP.
 

** get child parts
FORM GETCHILD.
  SELECT * FROM STPO WHERE STLNR = MAST-STLNR
        ORDER BY POSNR.
    SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
          AND STLAL = MAST-STLAL.
    SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
          STLKN = STPO-STLKN AND
          STLAL = MAST-STLAL.
    IF SY-SUBRC EQ 0.
      CLEAR: W_DOT, W_LVL, W_LVL1.
      PERFORM MOV_DATA.
      CHILD-MATNR = STPO-IDNRK.
      W_LEVEL = W_LEVEL + 1.
      PERFORM SUBCHILD.
      W_LEVEL = W_LEVEL - 1.
    ENDIF.
  ENDSELECT.
ENDFORM.

** get grand children parts
FORM SUBCHILD.
  SELECT SINGLE * FROM MAST WHERE MATNR = CHILD-MATNR
     AND WERKS = CHILD-WERKS.
  IF SY-SUBRC NE 0.
    EXIT.
  ENDIF.
  SELECT * FROM STPO WHERE STLNR = MAST-STLNR
        ORDER BY POSNR.
    SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
      STLAL = MAST-STLAL.
    SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
        STLKN = STPO-STLKN AND
        STLAL = STKO-STLAL.
      IF SY-SUBRC EQ 0.
        W_DOT = '.'.
        PERFORM MOV_DATA.
        CHILD-MATNR = STPO-IDNRK.
        W_LEVEL = W_LEVEL + 1.
        PERFORM SUBCHILD.
        W_LEVEL = W_LEVEL - 1.
        SHIFT W_LVL.
      ENDIF.
    ENDSELECT.
ENDFORM.

TOP-OF-PAGE.
WRITE:/ SY-DATUM,SY-UZEIT,
       90 'ABC PRIVATE LIMITED',
      180 'Page', SY-PAGNO.
WRITE: / SY-REPID,
         88 'Roll-Up Cost (Multi-Level)',
         180 SY-UNAME.
SKIP.
CLEAR W_LFLAG.
WRITE:/ 'Material No.:', ITAB2-IDNRK, W_MAKTX,
        75 'Plant :', ITAB2-WERKS,
        97 'Base Qty :', XBASE LEFT-JUSTIFIED.
SKIP.
ULINE.
FORMAT COLOR COL_HEADING.
WRITE: /001 'Level',
        008 'Item',
        014 'Component',
        034 'Description',
        075 'Scrap %',
        084 '      Per',
        096 'UOM',
        101 'Roll-Up Cst',
        114 'MM Std Cost',
        127 'MM Mvg Cost',
        140 '  Matl Cost',
        153 'Process Cst',
        166 'Sub-Con Cst',
        179 ' Total Cost',
        190 '   '.
WRITE: /034 'Act',
        040 '  Std Val',
        052 ' Act Rate',
        064 '      Hours',
        078 '           Cost',
        096 'Base Qty',
        190 '   '.
FORMAT COLOR OFF.
ULINE.

FORM MOV_DATA.
  W_LVL2 = W_LEVEL.
  CONCATENATE W_DOT W_LVL INTO W_LVL.
  CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
  MOVE W_LVL1 TO ITAB-LVL1.
  MOVE W_LEVEL TO ITAB-LEVEL.
  MOVE MAST-WERKS TO ITAB-WERKS.
  MOVE STPO-POSNR TO ITAB-POSNR.
  MOVE STPO-IDNRK TO ITAB-IDNRK.
  MOVE STPO-MEINS TO ITAB-MEINS.
  ITAB-MENGE = ( STPO-MENGE / STKO-BMENG ).
  WCNT = WCNT + 1.
  ITAB-CNT = WCNT.
  APPEND ITAB.
ENDFORM.

FORM GET_BOM.
  CLEAR: WMCOST.
  SELECT SINGLE * FROM MAST WHERE MATNR EQ ITAB-IDNRK AND
           WERKS = ITAB-WERKS.
  IF SY-SUBRC EQ 0.
    SELECT * FROM STPO WHERE STLTY = 'M' AND
           STLNR = MAST-STLNR AND
           DATUV LE SY-DATUM.
      SELECT SINGLE * FROM STKO WHERE STLTY = 'M' AND
              STLNR = STPO-STLNR AND
              STLAL = MAST-STLAL.
      SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = STKO-STLAL.
      IF SY-SUBRC EQ 0.
        READ TABLE ITAB1 WITH KEY IDNRK = STPO-IDNRK
                                WERKS = ITAB-WERKS.
        IF SY-SUBRC EQ 0.
          WMCOST = WMCOST + ( ( STPO-MENGE / STKO-BMENG ) * S_BASE
                   * ITAB1-UCOST ).
        ENDIF.
      ENDIF.
    ENDSELECT.
    WUCOST = ( WTCOST + WMCOST ) / XBASE.
  ELSE.
   IF WTCOST EQ 0.
      SELECT SINGLE * FROM MBEW WHERE BWKEY = ITAB-WERKS AND
          MATNR = ITAB-IDNRK.
      IF SY-SUBRC EQ 0.
        IF MBEW-VPRSV = 'S'.
          WUCOST = ( MBEW-STPRS / MBEW-PEINH ).
        ELSE.
          WUCOST = ( MBEW-VERPR / MBEW-PEINH ).
        ENDIF.
      ENDIF.
    ELSE.
      WUCOST = WTCOST / XBASE.
    ENDIF.
  ENDIF.
ENDFORM.

FORM GET_ROUTE.
  CLEAR: WOHCOST, WCNT.
  SELECT SINGLE * FROM MAPL WHERE WERKS = ITAB-WERKS AND
            MATNR = ITAB-IDNRK AND
            LOEKZ NE 'X'.
  IF SY-SUBRC EQ 0.
    SELECT * FROM PLAS WHERE PLNNR = MAPL-PLNNR AND
             PLNAL = MAPL-PLNAL AND
             DATUV LE SY-DATUM AND
             LOEKZ NE 'X'.
      SELECT * FROM PLPO WHERE PLNNR = PLAS-PLNNR AND
               PLNKN = PLAS-PLNKN.
        SELECT SINGLE * FROM CRHD WHERE OBJID = PLPO-ARBID.
        SELECT SINGLE * FROM CRCO WHERE OBJTY = 'A' AND
                 OBJID = PLPO-ARBID AND
                 BEGDA LE SY-DATUM AND
                 ENDDA GE SY-DATUM.
        CLEAR ITAB2.
        MOVE ITAB-CNT   TO ITAB2-CNT.
        MOVE ITAB-LEVEL TO ITAB2-LEVEL.
        MOVE PLPO-VORNR TO ITAB2-VORNR.
        MOVE CRHD-ARBPL TO ITAB2-ARBPL.
        MOVE PLPO-BMSCH TO ITAB2-BMSCH.
        ITAB2-AUSSS = MARC-AUSSS.
        ITAB2-SBASE = S_BASE.
        IF PLPO-LAR01 CO SPACE.
          WLAR = 'DL'.
        ELSE.
          WLAR = PLPO-LAR01.
        ENDIF.
        WVGW = PLPO-VGW01.
        WVGE = PLPO-VGE01.
        PERFORM MLCOST.
        IF PLPO-LAR02 CO SPACE.
          WLAR = 'TOOLST'.
        ELSE.
          WLAR = PLPO-LAR02.
        ENDIF.
        WVGW = PLPO-VGW02.
        WVGE = PLPO-VGE02.
        PERFORM MLCOST.
        IF PLPO-LAR03 CO SPACE.
          WLAR = 'MSU'.
        ELSE.
          WLAR = PLPO-LAR03.
        ENDIF.
        WVGW = PLPO-VGW03.
        WVGE = PLPO-VGE03.
        PERFORM MLCOST.
        IF PLPO-LAR04 CO SPACE.
          WLAR = 'AST'.
        ELSE.
          WLAR = PLPO-LAR04.
        ENDIF.
        WVGW = PLPO-VGW04.
        WVGE = PLPO-VGE04.
        PERFORM MLCOST.
        ITAB2-OHCOST = ITAB2-WDL + ITAB2-WMSU + ITAB2-WTS +
                       ITAB2-WAST + ITAB2-WOTH.
        WOHCOST = WOHCOST + ITAB2-OHCOST.
        WCNT = WCNT + 1.
        ITAB2-SUBCNT = WCNT.
        APPEND ITAB2.
      ENDSELECT.
    ENDSELECT.
  ENDIF.
ENDFORM.

FORM MLCOST.
  SELECT SINGLE * FROM CSSL WHERE KOKRS = CRCO-KOKRS AND
        KOSTL = CRCO-KOSTL AND
        GJAHR = WGJAHR AND
        LSTAR = WLAR.
  IF SY-SUBRC EQ 0.
    SELECT * FROM COST WHERE OBJNR = CSSL-OBJNR AND
           GJAHR = WGJAHR.
      IF WVGE = 'MIN'.
        WVGW = WVGW / 60.
      ENDIF.
      IF WLAR = 'AST'.
        ITAB2-WASTH = WVGW.
        ITAB2-WASTR = COST-TKG012.
        ITAB2-WAST  = WVGW * COST-TKG012.
      ELSEIF WLAR = 'TOOLST'.
        ITAB2-WTSH = WVGW.
        ITAB2-WTSR = COST-TKG012.
        ITAB2-WTS  = WVGW * COST-TKG012.
      ELSEIF WLAR = 'DL'.
        ITAB2-WDLH = WVGW.
        ITAB2-WDLR = COST-TKG012.
        ITAB2-WDL  = ( WVGW * COST-TKG012 * S_BASE ) / PLPO-BMSCH.
      ELSEIF WLAR = 'MSU'.
        ITAB2-WMSUH = WVGW.
        ITAB2-WMSUR = COST-TKG012.
        ITAB2-WMSU  = ( WVGW  * S_BASE * COST-TKG012 ) / PLPO-BMSCH.
      ELSE.
        ITAB2-WOTHA = WLAR.
        ITAB2-WOTHH = WVGW.
        ITAB2-WOTHR = COST-TKG012.
        ITAB2-WOTH  = ( WVGW * S_BASE * COST-TKG012 ) / PLPO-BMSCH.
      ENDIF.
    ENDSELECT.
  ENDIF.
ENDFORM.

FORM GET_SUBC.
  CLEAR ITAB2.
  IF MARC-SOBSL = 30 AND
     MARC-BESKZ = 'F'.
    SELECT SINGLE * FROM EINA WHERE MATNR = ITAB-IDNRK AND
           LOEKZ NE 'X'.
    IF SY-SUBRC EQ 0.
      SELECT SINGLE * FROM EINE WHERE INFNR = EINA-INFNR AND
            WERKS = ITAB-WERKS AND
            ESOKZ = '3'.
      IF SY-SUBRC EQ 0.
        WCONV = ( EINE-BPUMN / EINE-BPUMZ ) * EINE-PEINH.
        IF EINA-UMREN NE EINA-UMREZ.
          WCONV = WCONV / EINA-UMREN * EINA-UMREZ.
        ENDIF.
        ITAB2-EXCOST = ( EINE-NETPR / WCONV ) * S_BASE.
        ITAB2-LIFNR = EINA-LIFNR.
        ITAB2-NETPR = EINE-NETPR.
        ITAB2-PEINH = EINE-PEINH.
        MOVE ITAB-CNT TO ITAB2-CNT.
        MOVE ITAB-LEVEL TO ITAB2-LEVEL.
        MOVE '9999' TO ITAB2-VORNR.
        ITAB2-SUBCNT = 1.
        APPEND ITAB2.
        WEXCOST = ITAB2-EXCOST.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
 

More Function Module
Functions / SAP Script / ALV

Tables
Database Table

ABAP Books List
ABAP/4 Certification, Programming, Smartforms, Sapscripts and Object Oriented Programming Books

Smart Forms
SAP Smartforms

ABAP Menu:
ABAP Example Hints and Tips

Return to Index:-
SAP ABAP/4 Programming, Basis Administration, Configuration Hints and Tips

(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
All product names are trademarks of their respective companies.  The site www.gotothings.com is in no way affiliated with SAP AG.
Any unauthorised copying or mirroring is prohibited.