Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

BOM report on Production order

Former Member
0 Kudos

Dear All,

I need to make BOM report as per production order.

Very helpfull for me if any FM for that?

I need also the table where I can get the relation of that.

Can anybody help me?

Thanks in advance.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

hi

hope it will help you.

Pls reward if help.

REPORT ZMULTIBOM NO STANDARD PAGE HEADING LINE-SIZE 195

LINE-COUNT 60(2) MESSAGE-ID Z1.

TABLES: MBEW, "Material Valuation

MSLB, "Special stocks with vendor

MARA, "Material Master

MAKT, "Material Descriptions

MARD, "Material Master: Storage Location/Batch Segment

MAST, "BOM Header

STKO, "BOM Detail

STPO, "Bom Components

STAS. "BOM Alternative

  • Text Elements

  • Plant

SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT 'CA',

  • Material

S_MATNR FOR MAST-MATNR,

  • Material Type

S_MTART FOR MARA-MTART.

  • Base Quantity

PARAMETERS: S_BASE TYPE I DEFAULT '1'.

  • Display up to Level

PARAMETERS: S_LVL TYPE I DEFAULT '99'.

SELECTION-SCREEN SKIP.

  • Include Vendor Stock

PARAMETERS: X_MSLB AS CHECKBOX.

DATA: W_MATNR LIKE MAPL-MATNR.

DATA: 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.

DATA: BEGIN OF INT1 OCCURS 50,

LGORT(6),

LABST LIKE MARD-LABST,

END OF INT1.

IF S_BASE EQ 0.

S_BASE = 1.

ENDIF.

    • append multi level routing

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.

SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND

SPRAS = 'E'.

W_MAKTX = MAKT-MAKTX.

REFRESH INT1.

SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND

WERKS = MAST-WERKS AND

LABST NE 0.

MOVE MARD-LGORT TO INT1-LGORT.

MOVE MARD-LABST TO INT1-LABST.

APPEND INT1.

ENDSELECT.

IF X_MSLB EQ 'X'.

SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND

WERKS EQ MAST-WERKS AND

LBLAB NE 0.

MOVE MSLB-LIFNR TO INT1-LGORT.

MOVE MSLB-LBLAB TO INT1-LABST.

APPEND INT1.

ENDSELECT.

ENDIF.

W_LEVEL = 1.

NEW-PAGE.

PERFORM GETCHILD.

ENDIF.

ENDSELECT.

    • 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 WRT_DTL.

CHILD-MATNR = STPO-IDNRK.

W_LEVEL = W_LEVEL + 1.

IF W_LEVEL <= S_LVL.

PERFORM SUBCHILD.

ENDIF.

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 WRT_DTL.

CHILD-MATNR = STPO-IDNRK.

W_LEVEL = W_LEVEL + 1.

IF W_LEVEL <= S_LVL.

PERFORM SUBCHILD.

ENDIF.

W_LEVEL = W_LEVEL - 1.

SHIFT W_LVL.

ENDIF.

ENDSELECT.

ENDFORM.

TOP-OF-PAGE.

WRITE:/ SY-DATUM,SY-UZEIT,

85 'ABC PTE LTD',

182 'Page', SY-PAGNO.

WRITE: / SY-REPID,

75 'BOM STRUCTURE (WITH LOCATION BALANCES)',

182 SY-UNAME.

SKIP.

CLEAR W_LFLAG.

WRITE:/ 'Material No.:', PARENT-MATNR,

60 'Plant :', MAST-WERKS.

W_COL = 90.

CLEAR W_TTL.

LOOP AT INT1.

IF W_COL > 195.

IF W_LFLAG IS INITIAL.

WRITE:/ 'Description :', W_MAKTX,

60 'Base Qty :', S_BASE LEFT-JUSTIFIED.

W_LFLAG = 'X'.

W_COL = 90.

ELSE.

W_COL = 90.

SKIP.

ENDIF.

ENDIF.

WRITE AT W_COL 'Loc :'.

W_COL = W_COL + 6.

WRITE AT W_COL INT1-LGORT.

W_COL = W_COL + 7.

WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.

W_COL = W_COL + 16.

W_TTL = W_TTL + INT1-LABST.

ENDLOOP.

IF W_LFLAG IS INITIAL.

WRITE:/ 'Description :', W_MAKTX,

60 'Base Qty :', S_BASE LEFT-JUSTIFIED,

90 'Total :', W_TTL LEFT-JUSTIFIED.

ELSE.

WRITE AT W_COL 'Total :'.

W_COL = W_COL + 8.

WRITE AT W_COL W_TTL LEFT-JUSTIFIED.

ENDIF.

SKIP.

ULINE.

WRITE: /001 'Level',

011 'Item',

017 'Component',

037 'Description',

079 ' Per',

089 'UOM',

094 ' Std Price',

106 'Moving Avg',

119 'Location',

128 ' Balance',

139 'Location',

148 ' Balance',

159 'Location',

168 ' Balance',

179 'Total Quantity'.

ULINE.

FORM WRT_DTL.

CLEAR: MAKT-MAKTX, W_MAV, W_STD.

SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND

SPRAS = 'E'.

SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND

BWKEY = MAST-WERKS.

IF SY-SUBRC = 0.

W_MAV = MBEW-VERPR / MBEW-PEINH.

W_STD = MBEW-STPRS / MBEW-PEINH.

ENDIF.

W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.

W_LVL2 = W_LEVEL.

CONCATENATE W_DOT W_LVL INTO W_LVL.

CONCATENATE W_LVL W_LVL2 INTO W_LVL1.

WRITE: /001 W_LVL1,

011 STPO-POSNR,

017 STPO-IDNRK,

037 MAKT-MAKTX,

079(8) W_MENGE,

089 STPO-MEINS,

094(10) W_STD,

106(10) W_MAV.

W_COL = 119.

CLEAR W_TTL.

SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND

WERKS = MAST-WERKS AND

LABST NE 0.

IF W_COL > 166.

W_COL = 119.

WRITE AT /W_COL ' '.

ENDIF.

WRITE AT W_COL MARD-LGORT.

W_COL = W_COL + 5.

WRITE AT W_COL(13) MARD-LABST.

W_COL = W_COL + 15.

W_TTL = W_TTL + MARD-LABST.

ENDSELECT.

IF X_MSLB EQ 'X'.

SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND

WERKS = MAST-WERKS AND

LBLAB NE 0.

IF W_COL > 166.

W_COL = 119.

WRITE AT /W_COL ' '.

ENDIF.

WRITE AT W_COL(6) MSLB-LIFNR.

W_COL = W_COL + 6.

WRITE AT W_COL(12) MSLB-LBLAB.

W_COL = W_COL + 14.

W_TTL = W_TTL + MSLB-LBLAB.

ENDSELECT.

ENDIF.

WRITE AT 179(15) W_TTL.

ENDFORM.

4 REPLIES 4

Former Member
0 Kudos

hi

hope it will help you.

Pls reward if help.

REPORT ZMULTIBOM NO STANDARD PAGE HEADING LINE-SIZE 195

LINE-COUNT 60(2) MESSAGE-ID Z1.

TABLES: MBEW, "Material Valuation

MSLB, "Special stocks with vendor

MARA, "Material Master

MAKT, "Material Descriptions

MARD, "Material Master: Storage Location/Batch Segment

MAST, "BOM Header

STKO, "BOM Detail

STPO, "Bom Components

STAS. "BOM Alternative

  • Text Elements

  • Plant

SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT 'CA',

  • Material

S_MATNR FOR MAST-MATNR,

  • Material Type

S_MTART FOR MARA-MTART.

  • Base Quantity

PARAMETERS: S_BASE TYPE I DEFAULT '1'.

  • Display up to Level

PARAMETERS: S_LVL TYPE I DEFAULT '99'.

SELECTION-SCREEN SKIP.

  • Include Vendor Stock

PARAMETERS: X_MSLB AS CHECKBOX.

DATA: W_MATNR LIKE MAPL-MATNR.

DATA: 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.

DATA: BEGIN OF INT1 OCCURS 50,

LGORT(6),

LABST LIKE MARD-LABST,

END OF INT1.

IF S_BASE EQ 0.

S_BASE = 1.

ENDIF.

    • append multi level routing

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.

SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND

SPRAS = 'E'.

W_MAKTX = MAKT-MAKTX.

REFRESH INT1.

SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND

WERKS = MAST-WERKS AND

LABST NE 0.

MOVE MARD-LGORT TO INT1-LGORT.

MOVE MARD-LABST TO INT1-LABST.

APPEND INT1.

ENDSELECT.

IF X_MSLB EQ 'X'.

SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND

WERKS EQ MAST-WERKS AND

LBLAB NE 0.

MOVE MSLB-LIFNR TO INT1-LGORT.

MOVE MSLB-LBLAB TO INT1-LABST.

APPEND INT1.

ENDSELECT.

ENDIF.

W_LEVEL = 1.

NEW-PAGE.

PERFORM GETCHILD.

ENDIF.

ENDSELECT.

    • 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 WRT_DTL.

CHILD-MATNR = STPO-IDNRK.

W_LEVEL = W_LEVEL + 1.

IF W_LEVEL <= S_LVL.

PERFORM SUBCHILD.

ENDIF.

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 WRT_DTL.

CHILD-MATNR = STPO-IDNRK.

W_LEVEL = W_LEVEL + 1.

IF W_LEVEL <= S_LVL.

PERFORM SUBCHILD.

ENDIF.

W_LEVEL = W_LEVEL - 1.

SHIFT W_LVL.

ENDIF.

ENDSELECT.

ENDFORM.

TOP-OF-PAGE.

WRITE:/ SY-DATUM,SY-UZEIT,

85 'ABC PTE LTD',

182 'Page', SY-PAGNO.

WRITE: / SY-REPID,

75 'BOM STRUCTURE (WITH LOCATION BALANCES)',

182 SY-UNAME.

SKIP.

CLEAR W_LFLAG.

WRITE:/ 'Material No.:', PARENT-MATNR,

60 'Plant :', MAST-WERKS.

W_COL = 90.

CLEAR W_TTL.

LOOP AT INT1.

IF W_COL > 195.

IF W_LFLAG IS INITIAL.

WRITE:/ 'Description :', W_MAKTX,

60 'Base Qty :', S_BASE LEFT-JUSTIFIED.

W_LFLAG = 'X'.

W_COL = 90.

ELSE.

W_COL = 90.

SKIP.

ENDIF.

ENDIF.

WRITE AT W_COL 'Loc :'.

W_COL = W_COL + 6.

WRITE AT W_COL INT1-LGORT.

W_COL = W_COL + 7.

WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.

W_COL = W_COL + 16.

W_TTL = W_TTL + INT1-LABST.

ENDLOOP.

IF W_LFLAG IS INITIAL.

WRITE:/ 'Description :', W_MAKTX,

60 'Base Qty :', S_BASE LEFT-JUSTIFIED,

90 'Total :', W_TTL LEFT-JUSTIFIED.

ELSE.

WRITE AT W_COL 'Total :'.

W_COL = W_COL + 8.

WRITE AT W_COL W_TTL LEFT-JUSTIFIED.

ENDIF.

SKIP.

ULINE.

WRITE: /001 'Level',

011 'Item',

017 'Component',

037 'Description',

079 ' Per',

089 'UOM',

094 ' Std Price',

106 'Moving Avg',

119 'Location',

128 ' Balance',

139 'Location',

148 ' Balance',

159 'Location',

168 ' Balance',

179 'Total Quantity'.

ULINE.

FORM WRT_DTL.

CLEAR: MAKT-MAKTX, W_MAV, W_STD.

SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND

SPRAS = 'E'.

SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND

BWKEY = MAST-WERKS.

IF SY-SUBRC = 0.

W_MAV = MBEW-VERPR / MBEW-PEINH.

W_STD = MBEW-STPRS / MBEW-PEINH.

ENDIF.

W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.

W_LVL2 = W_LEVEL.

CONCATENATE W_DOT W_LVL INTO W_LVL.

CONCATENATE W_LVL W_LVL2 INTO W_LVL1.

WRITE: /001 W_LVL1,

011 STPO-POSNR,

017 STPO-IDNRK,

037 MAKT-MAKTX,

079(8) W_MENGE,

089 STPO-MEINS,

094(10) W_STD,

106(10) W_MAV.

W_COL = 119.

CLEAR W_TTL.

SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND

WERKS = MAST-WERKS AND

LABST NE 0.

IF W_COL > 166.

W_COL = 119.

WRITE AT /W_COL ' '.

ENDIF.

WRITE AT W_COL MARD-LGORT.

W_COL = W_COL + 5.

WRITE AT W_COL(13) MARD-LABST.

W_COL = W_COL + 15.

W_TTL = W_TTL + MARD-LABST.

ENDSELECT.

IF X_MSLB EQ 'X'.

SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND

WERKS = MAST-WERKS AND

LBLAB NE 0.

IF W_COL > 166.

W_COL = 119.

WRITE AT /W_COL ' '.

ENDIF.

WRITE AT W_COL(6) MSLB-LIFNR.

W_COL = W_COL + 6.

WRITE AT W_COL(12) MSLB-LBLAB.

W_COL = W_COL + 14.

W_TTL = W_TTL + MSLB-LBLAB.

ENDSELECT.

ENDIF.

WRITE AT 179(15) W_TTL.

ENDFORM.

kesavadas_thekkillath
Active Contributor
0 Kudos

i dont have any idea of production order...

for the BOM explosion use the FM

CSAP_MAT_BOM_READ

Pass the material in the cyclic manner....

Former Member
0 Kudos

Dear Forums,

Thanks the code for see the MultiBOM,

but this is based on Material number.

But I need the based on production order where I can see the BOM and its component.

Thanks & Best regards.

Former Member
0 Kudos

Thanks