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: 

Explode the BOM upward till top level, and get the Top Finished material

former_member213851
Active Contributor
0 Kudos

Hi All,

I searched for above mentioned requirement on SCN but couldn't get helpful solution.

My requirement is to explode the BOM till topmost level and get finished material.

I tried using 'CS_BOM_EXPL_MAT_V2' with MEHRS = "X" but I am not getting desired results.

Other FMs are there but they are not Plant specific. So I am using 'CS_WHERE_USED_MAT' and going one level up till I get finished material.

However, this is causing performance issues. Can anybody suggest better approach to get Top level finished material of BOM.

Thanks and Regards,

Sachin

2 REPLIES 2

Former Member
0 Kudos

Hello Sachin ,

I had the similar requirement where we need to get finished good from Raw material. I made a function module for the same. Please check if this helps you.

Importing parameters

IM_MATNR type MATNR

IM_BATCH type charg_D

"Code is as follows

       mblnr type mblnr   ,   "Material document

        bwart type bwart   ,   "Movement type

        matnr type matnr   ,   "Material number

        aufnr type aufnr   ,   "Order type

        charg type charg_D , "Batch

        flag type char1    ,

        end of ty_mseg   .

types: begin of ty_ebeln ,

        ebeln type bstnr , "Purchase order number

        end of ty_ebeln  .

typesBegin of ty_aufnr ,

         aufnr type aufnr  ,

         end of ty_aufnr  .

data: ls_mseg type ty_mseg .

data: lv_flag type char1 .

*types : begin of ty_finish ,

*        matnr type matnr   ,

*        charg type charg_d ,

*        end of ty_finish.

data: gt_aufnr type STANDARD TABLE OF ty_aufnr,

       gt_mseg type STANDARD TABLE OF ty_mseg  ,

       gt_ebeln type TABLE OF ty_ebeln         ,

       gs_mseg type ty_mseg                    ,

       gs_aufnr type ty_aufnr                  ,

*      gt_finish type TABLE OF zsm_finish     , Exporting parameters

       gs_finish type zsm_finish                .          "

FIELD-SYMBOLS : <fs> type ty_mseg .

*BREAK k201001.

"Get production order from material and batch

select aufnr

        from mseg into TABLE gt_aufnr

        where matnr = im_matnr and

              charg = im_batch AND

              BWART  = '261' .

  DELETE ADJACENT DUPLICATES FROM GT_AUFNR COMPARING AUFNR.

  delete gt_aufnr where aufnr is INITIAL.

"Get material and batch against the same batch And check if its finished good

datA : gv_index type sy-tabix ,

       lt_aufnr type TABLE OF ty_aufnr.

*BREAK-POINT .

Loop at gt_aufnr into gs_aufnr . "from gv_index.

if gs_aufnr-aufnr is INITIAL.

else.

Select mblnr

        bwart

        matnr

        aufnr

        charg

        from mseg into TABLE gt_mseg

        for ALL ENTRIES IN gt_aufnr

        where aufnr = gt_aufnr-aufnr and

        bwart = '101' .

  Loop at gt_mseg into ls_mseg .", " <fs>  . "gs_mseg .

CALL FUNCTION 'CONVERSION_EXIT_MATN2_OUTPUT'

   EXPORTING

     input         = ls_mseg-matnr

  IMPORTING

    OUTPUT        = ls_mseg-matnr

           .

  if ls_mseg-matnr+0(1) = '1'          .

   lv_flag = '1' .

  gs_finish-matnr = ls_mseg-matnr      .

  gs_finish-charg = ls_mseg-charg      .

* ls_mseg-flag = 'X'                   .

  Append gs_finish to gt_finish     .

  endif                             .

endloop.

if lv_flag = '1' .

else.

*lt_aufnr = gt_aufnr .

*clear gt_aufnr .

Select aufnr

        from mseg APPENDING TABLE lt_aufnr

        for ALL ENTRIES IN gt_mseg

        where matnr = gt_mseg-matnr and

              charg = gt_mseg-charg and

              bwart = '261'  .

If lt_aufnr is INITIAL .

"Subcontracting process

select ebeln

        from mseg

        into TABLE gt_ebeln

        for ALL ENTRIES IN gt_mseg

        where matnr = gt_mseg-matnr and

              charg = gt_mseg-charg and

*              bwart = '541' .

               bwart = '543' .

"With  101 pass ebeln into mseg and get material and batch

clear gt_mseg .

Select mblnr

        bwart

        matnr

        aufnr

        charg

        from mseg into TABLE gt_mseg

        for ALL ENTRIES IN gt_Ebeln

        where ebeln = gt_ebeln-ebeln  and

        bwart = '101' .

*clear gt_aufnr.

Select aufnr

        from mseg APPENDING TABLE gt_aufnr

        for ALL ENTRIES IN gt_mseg

        where matnr = gt_mseg-matnr and

              charg = gt_mseg-charg and

              bwart = '261'  .

*Select matnr

*       charg

*       from mseg

*       APPENDING TABLE gt_finish

*       for ALL ENTRIES IN gt_ebeln

*       where ebeln = gt_ebeln-ebeln and

*              bwart = '101' .

endif.

clear gt_mseg.

endif.

endif.

ENDLOOP.

VenkatRamesh_V
Active Contributor
0 Kudos

Hi,

Try,

Pass the material to the  tables.

Material->Mast-stlnr(BOM)-> STPO- IDNRK(Component).

TABLES: mara,

         stpo.

TYPES: begin of ty_materials,

        saleorder type vbap-vbeln,

        matnr  type mara-matnr,

        level     type c,

        end of ty_materials.

       

DATA: it_material type table of ty_materials,

       wa_material like  line of it_material.

       

loop at it_material into wa_material.

if wa_material-saleorder is not initial.

wa_material-level = 'X'.

endif.     

if wa_material-level is not initial.

perform component using wa_material-matnr.

endif.

                              

  

endloop.    

form component using material type mara-matnr.

DATA lv_bom type stpo-stlnr.

select single  stlnr from mast into lv_bom where matnr = material.

CHECK lv_bom IS NOT INITIAL.

select idnrk from stpo into table it_component.

  

loop at it_component assigning <component>.

CLEAR lv_bom.

select single  stlnr from mast into lv_bom where matnr = material.

if lv_bom is not initial.

wa_material-level = 'X'.

endif.

wa_material-matnr = <compnent>-idnrk.

append wa_material to it_material.

clear wa_material.   

  

  

endloop.   

     

  

  

endform.     

Hope it helpful,

Regards,

Venkat.V