05-17-2015 9:56 PM
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
05-23-2015 11:13 AM
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 .
types: Begin 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.
05-23-2015 11:56 AM
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