11-13-2007 7:55 PM
Hi All,
I need to get the component materials for a BOM..Is there a function module that I can use or an easier way to find out?
Helpful replies will be rewarded!!!!!!
Thanks in advance,
-David.
11-13-2007 8:05 PM
Hi,
Please check these FM.
CSAP_MAT_BOM_READ
CS_BOM_EXPL_MAT_V2
Regards,
Ferry Lianto
11-13-2007 8:05 PM
Hi,
Please check these FM.
CSAP_MAT_BOM_READ
CS_BOM_EXPL_MAT_V2
Regards,
Ferry Lianto
11-13-2007 8:23 PM
Hi David,
Use CS_BOM_EXPLOSION FM.
CALL FUNCTION 'CS_BOM_EXPLOSION'
EXPORTING
capid = 'PP01'
datuv = SY-DATUM
mtnrv = <Pass Material for which u want detail component>
werks = <werks>
mehrs = 'X' " For Multiple level
TABLES
stbd = stbd
stbe = stbe
stbk = stbk
stbm = stbm
stbp = stbp
stbt = stbt
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
missing_authorization = 3
no_bom_found = 4
no_plant_data = 5
no_suitable_bom_found = 6
object_not_found = 7
conversion_error = 8
OTHERS = 9.
Afetr Passing capid,datuv,mtnrv,werks,mehrs values, FM will build STBP Table Which comntain all comnponents related to ur STLNR.
Reward if it helps,
Satish
11-13-2007 8:33 PM
Check the below FM and Example code :
CS_BOM_EXPL_MAT_V2
Code :
REPORT ZPPR_BOM_INFOL_REPORT no standard page heading
line-size 160
line-count 60.
*----
*
Table definition *
*----
*
TABLES: mast,
stko,
stpo,
T418,
makt.
TYPE - POOLS
TYPE-POOLS: slis.
Constants
constants : c_tcode(4) type c value 'CS03',
gc_formname_top_of_page TYPE slis_formname
VALUE 'TOP_OF_PAGE'.
Variables
data : v_maktx like makt-maktx,
wa_stko like stko.
DATA:
Objekttyp 'Material'
otyp_mat(1) TYPE c VALUE '1',
ootyp_mat(1) TYPE c VALUE 'M',
Objekttyp 'kein Objekt'
otyp_noo(1) TYPE c VALUE '2',
Objekttyp 'Dokument'
otyp_doc(1) TYPE c VALUE '3',
Objekttyp 'Klasse'
otyp_kla(1) TYPE c VALUE '4',
Objekttyp 'Intramaterial'
otyp_ntm(1) TYPE c VALUE '5'.
maximal anzeigbare Menge
data: max_num(7) TYPE p DECIMALS 3 VALUE '9999999999.999',
ueberl_kz(1) TYPE c VALUE '*',
min_num(7) TYPE p DECIMALS 3 VALUE '9999999999.999-',
b_flag(1) TYPE c VALUE 'X',
ecfld(250) TYPE c,
v_flag type c.
ALV Variables
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
gs_layout TYPE slis_layout_alv,
gs_keyinfo TYPE slis_keyinfo_alv,
gt_sp_group TYPE slis_t_sp_group_alv,
gt_events TYPE slis_t_event.
DATA: g_repid LIKE sy-repid.
DATA: gt_list_top_of_page TYPE slis_t_listheader,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_save(1) TYPE c,
gx_variant LIKE disvariant,
g_variant LIKE disvariant,
g_default(1) TYPE c,
g_exit(1) TYPE c.
*----
*
Includes *
*----
*
INCLUDE .
*----
*
Internal Table Declaration *
*----
*
DATA: t_mast LIKE STANDARD TABLE OF mast WITH HEADER LINE.
*DATA: t_makt LIKE STANDARD TABLE OF makt WITH HEADER LINE.
BOM Function module Related
DATA: t_matcat LIKE cscmat OCCURS 0 WITH HEADER LINE.
Internal Table for Level by Level Function module
DATA: t_stb LIKE stpox OCCURS 0 WITH HEADER LINE.
Get the Relevant data from FM
DATA: BEGIN OF hd_tab OCCURS 0,
stufe LIKE stpox-stufe,
vwegx LIKE stpox-vwegx,
END OF hd_tab.
Final Output
DATA: BEGIN OF alv_stb OCCURS 0.
INCLUDE STRUCTURE stpox_alv.
DATA: info(3) TYPE c,
END OF alv_stb.
DATA: BEGIN OF stb_orig.
INCLUDE STRUCTURE stpox.
DATA: END OF stb_orig.
DATA: BEGIN OF stb_add.
INCLUDE STRUCTURE stpol_add.
DATA: END OF stb_add.
Internal Table for STPO
*-- BOM Line item
TYPES: BEGIN OF ty_stpo,
stlty TYPE stpo-stlty,
stlnr TYPE stpo-stlnr,
stlkn TYPE stpo-stlkn,
stpoz TYPE stpo-stpoz,
idnrk TYPE stpo-idnrk,
meins TYPE stpo-meins,
menge TYPE stpo-menge, "Component Qty
END OF ty_stpo.
DATA: t_stpo TYPE STANDARD TABLE OF ty_stpo WITH HEADER LINE.
*-- BOM Header
TYPES: BEGIN OF ty_stko,
stlty TYPE stko-stlty,
stlnr TYPE stko-stlnr,
stlal TYPE stko-stlal,
stkoz TYPE stko-stkoz,
bmein TYPE stko-bmein,
bmeng TYPE stko-bmeng,
END OF ty_stko.
DATA: t_stko TYPE STANDARD TABLE OF ty_stko WITH HEADER LINE .
data : t_makt like makt occurs 0 with header line.
DATA: BEGIN OF cl_clstab OCCURS 0, "YHG079407
class LIKE klah-class, "YHG079407
klart LIKE klah-klart, "YHG079407
chked LIKE csdata-xfeld, "YHG079407
noobj LIKE csdata-xfeld, "YHG079407
dsply LIKE csdata-xfeld, "YHG079407
END OF cl_clstab.
*-- Header table
TYPES: BEGIN OF ty_main_material,
matnr TYPE mast-matnr, "Material
werks TYPE mast-werks, "Plant
maktx TYPE makt-maktx, "Description
stlal TYPE mast-stlal, "Alternative BOM
stlnr TYPE stko-stlnr, "BOM Number
bmein TYPE stko-bmein, "UOM
bmeng TYPE stko-bmeng, "Base Qty
expand(1) TYPE c, "Expanding Field
END OF ty_main_material.
DATA: t_main_material TYPE STANDARD TABLE OF ty_main_material WITH
HEADER LINE.
*-- Item (Component) Table
TYPES: BEGIN OF ty_item_material,
matnr TYPE mast-matnr, "Material
werks TYPE mast-werks, "Plant
idnrk TYPE stpo-idnrk, "Component (Material)
maktx TYPE makt-maktx, "Description
stlal TYPE mast-stlal, "Alternative BOM
stlnr TYPE stpo-stlnr, "BOM Number
meins TYPE stpo-meins, "UOM
menge TYPE stpo-menge, "Base Qty
END OF ty_item_material.
DATA: t_item_material TYPE STANDARD TABLE OF ty_item_material WITH
HEADER LINE.
*----
*
Selection Screen *
*----
*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_werks LIKE marc-werks DEFAULT '1000' OBLIGATORY.
SELECT-OPTIONS s_stlal FOR mast-stlal .
SELECT-OPTIONS s_stlan FOR mast-stlan DEFAULT '1'.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECTION-SCREEN SKIP.
PARAMETERS: p_bomlst RADIOBUTTON GROUP g1 DEFAULT 'X'.
SELECT-OPTIONS s_matnr FOR mast-matnr.
SELECTION-SCREEN SKIP.
PARAMETERS: p_compon RADIOBUTTON GROUP g1.
SELECT-OPTIONS: s_idnrk FOR stpo-idnrk.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF BLOCK b1.
selection-screen begin of block b03 with frame title text-b03.
selection-screen begin of line.
selection-screen comment 1(40) text-005.
parameters: p_all radiobutton group r1 default 'X'.
selection-screen end of line.
selection-screen begin of line.
selection-screen comment 1(40) text-006.
parameters: p_one radiobutton group r1 .
selection-screen end of line.
selection-screen end of block b03.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK b3.
*----
*
At slection screen events *
*----
*
*-- Process on value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM f4_for_variant.
*----
*
Intitialisation
*----
*
INITIALIZATION.
g_repid = sy-repid.
g_tabname_header = 'T_MAIN_MATERIAL'.
g_tabname_item = 'T_ITEM_MATERIAL'.
*-- define keyinformation
CLEAR gs_keyinfo.
gs_keyinfo-header01 = 'MATNR'.
gs_keyinfo-item01 = 'MATNR'.
PERFORM e03_eventtab_build USING gt_events[].
PERFORM e04_comment_build USING gt_list_top_of_page[].
PERFORM e07_sp_group_build USING gt_sp_group[].
PERFORM e08_layout_build USING gs_layout.
Set Options: save variants userspecific or general
g_save = 'A'.
PERFORM variant_init.
Get default variant
gx_variant = g_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = g_save
CHANGING
cs_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = gx_variant-variant.
ENDIF.
************************************************************************
S T A R T - O F - S E L E C T I O N *******************
************************************************************************
start-of-selection.
if p_all = 'X'.
Get the data from MAST and MAKT Table
if p_bomlst = 'X'.
Get the data Based On Material #
perform get_data.
else.
Get the data Based On Component
perform get_data_component.
endif.
else.
Get the Single Level Report
*-- Moved the fiedl catalog here inorder to change the layout based on
*-- Selection
PERFORM e01_fieldcat_init USING gt_fieldcat[].
PERFORM select_data.
endif.
************************************************************************
E N D - O F - S E L E C T I O N *******************
************************************************************************
end-of-selection.
if p_one = 'X'.
perform alv.
endif.
User Command
at line-selection.
Interactive to CS03 Transaction
case sy-ucomm.
when 'PICK' or 'F2'.
if not alv_stb-idnrk is initial .
if not alv_stb-werks is initial.
if not alv_stb-objty is initial.
SET PARAMETER ID 'MAT' FIELD alv_stb-idnrk.
SET PARAMETER ID 'WRK' FIELD alv_stb-werks.
SET PARAMETER ID 'CSV' FIELD alv_stb-OBJTY.
call transaction c_tcode and skip first screen.
endif.
endif.
endif.
clear alv_stb.
endcase.
*&----
*
*& Form get_data
*&----
*
Get data from MAST and MAKT Table
*----
*
FORM get_data.
data : wa_lines type sy-index.
REFRESH : T_MAST,
t_STB,
t_MATCAT,
alv_STB.
CLEAR : T_MAST,
t_STB,
t_MATCAT,
alv_STB.
Get the data from MAST Table
Get all the information from MAST - BOM Table
SELECT * FROM mast INTO TABLE t_mast WHERE matnr IN s_matnr AND
werks = p_werks AND
stlan IN s_stlan AND
stlal IN s_stlal.
describe table t_mast lines wa_lines.
if wa_lines is initial.
Write:/2 'List contains no data'.
stop.
endif.
loop at t_mast.
clear : v_maktx.
Start of change Seshu
Reason - Remove the new page option
if sy-tabix ne 1.
skip 1.
endif.
End of Change Seshu
Get the material Description
select single maktx from makt into v_maktx
where matnr = t_mast-matnr
and spras = 'E'.
Get the material details from STKO Table
select single * from stko into wa_stko
where STLTY = 'M'
and STLNR = t_mast-stlnr
and STLAL = t_mast-stlal.
Main Header for Each Material
format color 5 on.
write:/2 'Material',20 'Material Description',65 'Alternative BOM',
90 'Base Qty', 115 'Base Unit'.
format color 5 off.
format color 1 on.
write:/2 t_mast-matnr,20 v_maktx,65 wa_stko-STLAL, 85 wa_stko-BMENG,
115 wa_stko-BMEIN.
format color 1 off.
Use the Function Module and get the format level by level
perform get_level_level.
endloop.
ENDFORM. " get_data
*----
*
Top of page *
*----
*
top-of-page.
perform report_header .
*&----
*
*& Form report_header
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM report_header.
new-page line-size 160 .
format color col_heading intensified on.
write:/ sy-uline(160) .
*--- Write Company Name.
perform calc_col_and_write using text-h00
sy-linsz.
*--- Write Report Title.
perform calc_col_and_write using sy-title
sy-linsz.
*--- Write User Id, Date / Time, Program Id, Page etc.
perform write_other_hdr_details.
write:/ sy-uline(160) .
ENDFORM. " report_header
*&----
*
*& Form calc_col_and_write
*&----
*
text
*----
*
-->P_TEXT_H00 text
-->P_SY_LINSZ text
*----
*
FORM calc_col_and_write USING P_TEXT
P_LINSZ.
data: col1 type i,
col2 type i,
len type i,
str type i.
str = strlen( p_text ).
col1 = ( p_linsz / 2 ) - ( str / 2 ) .
len = p_linsz - col1 - 2.
write: at /1 '|'.
write: at col1 p_text,
at sy-colno(len) space.
write at 160 '|'.
ENDFORM. " calc_col_and_write
*&----
*
*& Form write_other_hdr_details
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM write_other_hdr_details.
data: col1 type i,
col2 type i,
len type i.
col1 = 3.
write:/1 '|'.
write: at col1 'UserId : ',
sy-uname.
len = sy-linsz - 1.
write at sy-colno(len) space.
col2 = sy-linsz - 18.
write: at col2 'Date: ',
sy-datum mm/dd/yyyy.
write: at sy-linsz '|'.
write:/1 '|'.
write: at col1 'ReportId: ',
sy-repid.
write at sy-colno(len) space.
col2 = sy-linsz - 18.
write: at col2 'Page: ',
sy-pagno.
write: at sy-linsz '|'.
ENDFORM. " write_other_hdr_details
*&----
*
*& Form get_data_component
*&----
*
Get the data based on Component level
*----
*
FORM get_data_component.
data wa_lines type i.
*-- Get the BOM item details
SELECT stlty stlnr stlkn stpoz idnrk meins menge
FROM stpo
INTO TABLE t_stpo
WHERE idnrk IN s_idnrk.
IF sy-subrc = 0.
CLEAR wa_lines.
DESCRIBE TABLE t_stpo LINES wa_lines.
IF wa_lines > 0.
SELECT stlty stlnr stlal stkoz bmein bmeng
FROM stko
INTO TABLE t_stko
FOR ALL ENTRIES IN t_stpo
WHERE stlnr = t_stpo-stlnr.
CLEAR wa_lines.
DELETE ADJACENT DUPLICATES FROM t_stko COMPARING ALL FIELDS.
DESCRIBE TABLE t_stko LINES wa_lines.
IF wa_lines > 0.
*-- Get the BOM item details
SELECT * FROM mast INTO TABLE t_mast FOR ALL ENTRIES IN t_stko
WHERE werks = p_werks AND
stlnr = t_stko-stlnr
and stlal in s_stlal.
ENDIF.
ENDIF.
else.
Write:/2 'List contains no data'.
stop.
endif.
loop at t_mast.
clear : v_maktx.
Start of change Seshu
Reason - Remove the new page option
if sy-tabix ne 1.
skip 1.
endif.
End of change Seshu
Get the material Description
select single maktx from makt into v_maktx
where matnr = t_mast-matnr
and spras = 'E'.
Get the material details from STKO Table
select single * from stko into wa_stko
where STLTY = 'M'
and STLNR = t_mast-stlnr
and STLAL = t_mast-stlal.
Main Header for Each Material
format color 5 on.
write:/2 'Material',20 'Material Description',65 'Alternative BOM',
90 'Base Qty', 115 'Base Unit'.
format color 5 off.
format color 1 on.
write:/2 t_mast-matnr,20 v_maktx,65 wa_stko-STLAL, 85 wa_stko-BMENG,
115 wa_stko-BMEIN.
format color 1 off.
Use the Function Module and get the format level by level
perform get_level_level.
clear : t_mast.
endloop.
ENDFORM. " get_data_component
*&----
*
*& Form obj_ident
*&----
*
text
*----
*
FORM obj_ident.
weder Mat noch Doc
CHECK: T_stb-objty NE otyp_mat,
T_stb-objty NE ootyp_mat,
T_stb-objty NE otyp_doc,
T_stb-objty NE otyp_ntm.
?T418-WA schon ok
nein
IF T_stb-postp NE t418-postp.
T418 einlesen
PERFORM t418_lesen USING T_stb-postp.
ENDIF.
PERFORM cl_clstab_maint.
?MatNr-Eingabe bei diesem PosTyp moeglich
und keine Textposition
trifft zu
IF t418-matin NE '-'
AND t418-txpos IS INITIAL.
aktuelles Objekt ist Material NLAG
T_stb-objty = '1'.
PosKurztext in ObjKurztext uebernehmen.
T_stb-ojtxp = T_stb-potx1.
MODIFY T_stb.
ELSE.
IF T_stb-objty IS INITIAL.
T_stb-objty = '2'.
MODIFY T_stb.
ENDIF.
ENDIF.
ENDFORM. " obj_ident
*&----
*
*& Form t418_lesen
*&----
*
text
*----
*
-->P_T_STB_POSTP text
*----
*
FORM t418_lesen USING lkl_postp LIKE stpo-postp.
T418-WA initialisieren
CLEAR:
t418.
Key angeben
t418-postp = lkl_postp.
PosTypDefinition lesen
READ TABLE t418.
ENDFORM. " t418_lesen
*&----
*
*& Form cl_clstab_maint
*&----
*
text
*----
*
FORM cl_clstab_maint.
nur fuer Klassenpositionen
CHECK t_STB-OBJTY EQ OTYP_KLA.
Teilkey der Klassenpositionentabelle
CL_CLSTAB-CLASS = t_STB-CLASS.
CL_CLSTAB-KLART = t_STB-KLART.
Klassenpositionentabelle lesen
READ TABLE CL_CLSTAB
WITH KEY CL_CLSTAB(21)
BINARY SEARCH.
aktuelle Klassenposition bereits in Klassenpositionentabelle
nein
IF SY-SUBRC <> 0.
Klassenposition in Klassenpositionentabelle hinzufuegen
INSERT CL_CLSTAB INDEX SY-TABIX.
ENDIF.
ENDFORM. " cl_clstab_maint
*&----
*
*& Form alv_stb_prep
*&----
*
Printing the data as LEVEL BY LEVEL
*----
*
FORM alv_stb_prep.
CLEAR:
alv_stb,
stb_orig,
stb_add.
IF t_stb-hdnfo IS INITIAL.
stb_orig = t_stb.
IF t_stb-mngko >= max_num.
stb_add-ovfls = ueberl_kz.
ELSE.
IF t_stb-mngko <= min_num.
stb_add-ovfls = ueberl_kz.
ELSE.
CLEAR: stb_add-ovfls.
ENDIF.
ENDIF.
IF NOT t_stb-xtlnr IS INITIAL.
stb_add-bomfl = b_flag.
ENDIF.
IF NOT t_stb-knobj IS INITIAL
OR NOT t_stb-class IS INITIAL
OR NOT t_stb-kzclb IS INITIAL.
stb_add-knofl = 'X'.
ENDIF.
ELSE.
CHECK t_stb-stufe > 1.
alv_stb-info = 'C30'.
IF t_stb-ttidx <> t_matcat-index.
READ TABLE t_matcat INDEX t_stb-ttidx.
ENDIF.
stb_orig-hdnfo = t_stb-hdnfo.
stb_orig-stufe = t_stb-stufe - 1 .
stb_orig-ojtxp = t_stb-ojtxb.
IF NOT t_stb-altst IS INITIAL.
stb_orig-stlal = t_stb-stlal.
IF stb_orig-stlal(1) EQ '0'.
stb_orig-stlal(1) = ' '.
ENDIF.
ENDIF.
stb_orig-idnrk = t_matcat-matnr.
ENDIF.
CLEAR:
stb_add-dobjt,
stb_add-objic.
CASE t_stb-objty.
WHEN otyp_mat.
WRITE: stb_orig-idnrk TO ecfld.
stb_add-objic = '@A6@'.
WHEN 'M'.
WRITE: stb_orig-idnrk TO ecfld.
stb_add-objic = '@A6@'.
WHEN otyp_noo.
WRITE: stb_orig-potx1 TO ecfld.
stb_add-objic = '@0Q@'.
WHEN otyp_doc.
write stb_orig-doknr to ecfld. "note 489354
IF ecfld CP '*# '. ENDIF. "note 489354
sy-fdpos = sy-fdpos + 1. "note 489354
CONCATENATE
*d stb_orig-doknr "note 489354
stb_orig-dokar
stb_orig-doktl
stb_orig-dokvr
*d INTO ecfld "note 489354
INTO ecfld+sy-fdpos "note 489354
SEPARATED BY space.
stb_add-objic = '@AR@'.
WHEN otyp_kla.
CONCATENATE
stb_orig-class
stb_orig-klart
INTO ecfld
SEPARATED BY space.
stb_add-objic = '@7C@'.
WHEN otyp_ntm.
WRITE: stb_orig-intrm TO ecfld.
WHEN OTHERS.
ENDCASE.
*d CONDENSE ecfld. "note 515408
stb_add-dobjt = ecfld(40).
CLEAR: ecfld.
WRITE stb_orig-stufe TO stb_add-dstuf NO-SIGN.
*d MOVE-CORRESPONDING stb_orig TO alv_stb. "note 331962
MOVE-CORRESPONDING stb_add TO alv_stb.
MOVE-CORRESPONDING stb_orig TO alv_stb. "note 331962
APPEND alv_stb.
ENDFORM. " alv_stb_prep
*&----
*
*& Form get_level_level
*&----
*
text
*----
*
FORM get_level_level.
REFRESH : T_STB,
T_MATCAT,
ALV_STB.
CLEAR : T_STB,
T_MATCAT,
ALV_STB.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = 'PP01'
datuv = sy-datum
mktls = 'X'
mehrs = 'X'
mtnrv = t_mast-matnr
stlal = '01'
stlan = '1'
stpst = 0
svwvo = 'X'
werks = p_werks
vrsvo = 'X'
TABLES
stb = t_stb
matcat = t_matcat
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR: hd_tab.
Entry der KlassenstatusTab. initialisieren
cl_clstab,
Entry 'Objekte von Klassen' initialisieren
cl_objmemo.
REFRESH: hd_tab.
SORT t_matcat BY index ASCENDING.
Get the All levels
loop at t_stb.
IF NOT t_stb-hdnfo IS INITIAL.
EXIT.
ENDIF.
Object Identification
PERFORM obj_ident.
READ TABLE hd_tab
WITH KEY stufe = t_stb-stufe
vwegx = t_stb-vwegx
BINARY SEARCH
TRANSPORTING NO FIELDS.
?gibt es diesen Satz schon
nein
IF sy-subrc <> 0.
dann in SFP-Infosatzverweistab. aufnehmen
*d APPEND HD_TAB. "HGH054648
hd_tab-stufe = t_stb-stufe.
"HGH054648
hd_tab-vwegx = t_stb-vwegx.
"HGH054648
INSERT hd_tab "HGH054648
INTO hd_tab "HGH054648
INDEX sy-tabix. "HGH054648
PosNr initialisieren
CLEAR: t_stb-posnr.
SFP-InfosatzKz setzen
t_stb-hdnfo = 'X'.
stb-objty = otyp_mat.
"HGE246532
als SFP-Infosatz in die STB aufnehmen
append t_stb.
ENDIF.
*del ENDIF.
clear t_stb.
endloop.
SORT t_stb ASCENDING BY stufe
index ASCENDING
*del POSNR ASCENDING. "HGC062735
posnr ASCENDING "HGC062735
hdnfo DESCENDING.
LOOP AT t_stb.
T_stb-index = sy-tabix.
MODIFY T_stb.
PERFORM alv_stb_prep.
ENDLOOP.
Displays the Value as Level by Level
loop at ALV_stb.
if sy-tabix = 1.
format color 3 on.
write:/2 'Level',12 'Item',22 'Component',
42 'Material Description',82 'Base Qty',
107 'Base Unit',120 'Assembly Indicator'.
format color 3 on.
endif.
if alv_stb-MEINs is initial.
v_flag = 'X'.
endif.
if v_flag = 'X'.
format color 5 on.
write:/2 ALV_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP.
format color 1 off.
else.
if alv_stb-STUFE = '1'.
format color 1 on.
write:/2 ALV_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs, 120 alv_stb-bomfl .
format color 1 off.
elseif alv_stb-STUFE = '2'.
format color 2 on.
write:/2 alv_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs,120 alv_stb-bomfl.
format color 2 off.
elseif alv_stb-STUFE = '3'.
format color 3 on.
write:/2 alv_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs,120 alv_stb-bomfl .
format color 3 off.
elseif alv_stb-STUFE = '4'.
format color 4 on.
write:/2 alv_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs,120 alv_stb-bomfl .
format color 4 off.
elseif alv_stb-STUFE = '5'.
format color 5 on.
write:/2 alv_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs,120 alv_stb-bomfl .
format color 5 off.
elseif alv_stb-STUFE = '6'.
format color 7 on.
write:/2 alv_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs,120 alv_stb-bomfl.
format color 6 off.
elseif alv_stb-STUFE = '7'.
format color 7 on.
write:/2 alv_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs,120 alv_stb-bomfl .
format color 7 off.
else.
format color 1 on.
write:/2 alv_stb-STUFE,12 alv_stb-posnr,22 alv_stb-idnrk,
42 alv_stb-OJTXP,72 alv_stb-mngko,
107 alv_stb-MEINs,120 alv_stb-bomfl .
format color 1 off.
endif.
endif.
hide: alv_stb.
clear : alv_stb.
clear v_flag.
endloop.
ENDFORM. " get_level_level
*&----
*
*& Form f4_for_variant
*&----
*
text
*----
*
FORM f4_for_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = g_variant
i_save = g_save
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
it_default_fieldcat =
IMPORTING
e_exit = g_exit
es_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF g_exit = space.
p_vari = gx_variant-variant.
ENDIF.
ENDIF.
ENDFORM. " f4_for_variant
*----
*
FORM E03_EVENTTAB_BUILD *
*----
*
........ *
*----
*
--> E03_LT_EVENTS *
*----
*
FORM e03_eventtab_build USING e03_lt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
*
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = e03_lt_events.
READ TABLE e03_lt_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE gc_formname_top_of_page TO ls_event-form.
APPEND ls_event TO e03_lt_events.
ENDIF.
ENDFORM.
*----
*
FORM E04_COMMENT_BUILD *
*----
*
........ *
*----
*
--> E04_LT_TOP_OF_PAGE *
*----
*
FORM e04_comment_build USING e04_lt_top_of_page TYPE slis_t_listheader.
DATA: ls_line TYPE slis_listheader.
*
Listenüberschrift: Typ H
CLEAR ls_line.
ls_line-typ = 'H'.
LS_LINE-KEY: not used for this type
ls_line-info = text-001.
APPEND ls_line TO e04_lt_top_of_page.
Kopfinfo: Typ S
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = text-050.
ls_line-info = text-010.
APPEND ls_line TO e04_lt_top_of_page.
ls_line-key = text-051.
APPEND ls_line TO e04_lt_top_of_page.
Aktionsinfo: Typ A
CLEAR ls_line.
ls_line-typ = 'A'.
LS_LINE-KEY: not used for this type
ls_line-info = text-002.
APPEND ls_line TO e04_lt_top_of_page.
ENDFORM.
*----
*
FORM E07_SP_GROUP_BUILD *
*----
*
........ *
*----
*
--> E07_LT_SP_GROUP *
*----
*
FORM e07_sp_group_build USING e07_lt_sp_group TYPE slis_t_sp_group_alv.
DATA: ls_sp_group TYPE slis_sp_group_alv.
*
CLEAR ls_sp_group.
ls_sp_group-sp_group = 'A'.
ls_sp_group-text = text-005.
APPEND ls_sp_group TO e07_lt_sp_group.
ENDFORM.
*&----
*
*& Form e08_layout_build
*&----
*
text
*----
*
-->P_GT_LAYOUT[] text
*----
*
FORM e08_layout_build USING gs_layout TYPE slis_layout_alv.
gs_layout-f2code = 'GDET'. "define hotspot
gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.
gs_layout-no_hotspot = ' '.
gs_layout-detail_popup = 'X'.
gs_layout-no_input = ' '.
gs_layout-no_colhead = ' '.
gs_layout-lights_condense = ' '.
gs_layout-totals_only = ' '.
gs_layout-key_hotspot = ' '.
gs_layout-group_buttons = ' '.
gs_layout-no_vline = ' '.
gs_layout-max_linesize = '350'.
gs_layout-no_totalline = ' '.
gs_layout-totals_text = 'UnRes Total'.
gs_layout-subtotals_text = 'Material Type Total'.
gs_layout-numc_sum = 'X'.
gs_layout-no_unit_splitting = 'X'.
gs_layout-no_sumchoice = ' '.
gs_layout-no_subchoice = ' '.
gs_layout-totals_before_items = ' '.
gs_layout-no_subtotals = ' '.
gs_layout-totals_only = ' '.
gs_layout-item_text = ' '.
gs_layout-default_item = 'X'.
gs_layout-expand_fieldname = 'EXPAND'.
ENDFORM. " e08_layout_build
*&----
*
*& Form VARIANT_INIT
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM variant_init.
*
CLEAR g_variant.
g_variant-report = g_repid.
ENDFORM. " VARIANT_INIT
*----
*
FORM E01_FIELDCAT_INIT *
*----
*
........ *
*----
*
--> E01_LT_FIELDCAT *
*----
*
FORM e01_fieldcat_init USING e01_lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: ls_fieldcat TYPE slis_fieldcat_alv.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-tabname = 'T_MAIN_MATERIAL'.
ls_fieldcat-key = 'X'.
ls_fieldcat-ref_tabname = 'MAST'.
ls_fieldcat-reptext_ddic = 'Main Material'.
ls_fieldcat-no_out = 'X'.
ls_fieldcat-no_sum = 'X'.
ls_fieldcat-sp_group = 'A'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
**
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'WERKS'.
ls_fieldcat-tabname = 'T_MAIN_MATERIAL'.
ls_fieldcat-key = 'X'.
ls_fieldcat-ref_tabname = 'MAST'.
ls_fieldcat-reptext_ddic = 'Plant'.
ls_fieldcat-no_out = 'X'.
ls_fieldcat-no_sum = 'X'.
ls_fieldcat-sp_group = 'A'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MAKTX'.
ls_fieldcat-tabname = 'T_MAIN_MATERIAL'.
ls_fieldcat-ref_tabname = 'MAKT'.
ls_fieldcat-reptext_ddic = 'Material Description'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'STLAL'.
ls_fieldcat-tabname = 'T_MAIN_MATERIAL'.
ls_fieldcat-ref_tabname = 'STKO'.
ls_fieldcat-reptext_ddic = 'Alt.BOM'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'STLNR'.
ls_fieldcat-tabname = 'T_MAIN_MATERIAL'.
ls_fieldcat-reptext_ddic = 'BOM #'.
ls_fieldcat-ref_tabname = 'STPO'.
ls_fieldcat-no_out = 'X'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BMENG'.
ls_fieldcat-tabname = 'T_MAIN_MATERIAL'.
ls_fieldcat-ref_tabname = 'STKO'.
ls_fieldcat-reptext_ddic = 'Base Qty'.
ls_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BMEIN'.
ls_fieldcat-tabname = 'T_MAIN_MATERIAL'.
ls_fieldcat-ref_tabname = 'STKO'.
ls_fieldcat-reptext_ddic = 'Base Qty'.
ls_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-reptext_ddic = 'Book Value'.
w_fieldcat-reptext_ddic = 'Total Value'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'IDNRK'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-ref_tabname = 'STPO'.
ls_fieldcat-reptext_ddic = 'BOM Component'.
w_fieldcat-reptext_ddic = 'Total Value'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'WERKS'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-ref_tabname = 'MAST'.
ls_fieldcat-no_out = 'X'.
ls_fieldcat-reptext_ddic = 'Plant'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MAKTX'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-ref_tabname = 'MAKT'.
ls_fieldcat-reptext_ddic = 'BOM Component Description'.
ls_fieldcat-just = 'L'.
ls_fieldcat-outputlen = 40.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'STLAL'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-ref_tabname = 'STKO'.
ls_fieldcat-no_out = 'X'.
ls_fieldcat-reptext_ddic = 'Alt.BOM'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'STLNR'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-ref_tabname = 'STPO'.
ls_fieldcat-no_out = 'X'.
ls_fieldcat-reptext_ddic = 'BOM #'.
w_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MENGE'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-ref_tabname = 'STPO'.
ls_fieldcat-reptext_ddic = 'Component Qty'.
ls_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MEINS'.
ls_fieldcat-tabname = 'T_ITEM_MATERIAL'.
ls_fieldcat-ref_tabname = 'STPO'.
ls_fieldcat-reptext_ddic = 'Base Qty'.
ls_fieldcat-just = 'R'.
w_fieldcat-outputlen = 16.
APPEND ls_fieldcat TO e01_lt_fieldcat.
ENDFORM.
*&----
*
*& Form select_data
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM select_data.
DATA: wa_lines TYPE i.
IF p_bomlst = 'X'.
SELECT * FROM makt INTO TABLE t_makt WHERE matnr IN s_matnr.
Get all the information from MAST - BOM Table
SELECT * FROM mast INTO TABLE t_mast WHERE matnr IN s_matnr AND
werks = p_werks AND
stlan IN s_stlan AND
stlal IN s_stlal.
IF sy-subrc = 0.
CLEAR wa_lines.
DESCRIBE TABLE t_mast LINES wa_lines.
IF wa_lines > 0.
SELECT stlty stlnr stlal stkoz bmein bmeng
FROM stko
INTO TABLE t_stko
FOR ALL ENTRIES IN t_mast
WHERE stlnr = t_mast-stlnr.
CLEAR wa_lines.
DESCRIBE TABLE t_mast LINES wa_lines.
IF wa_lines > 0.
*-- Get the BOM item details
SELECT stlty stlnr stlkn stpoz idnrk meins menge
FROM stpo
INTO TABLE t_stpo
FOR ALL ENTRIES IN t_stko
WHERE stlty = t_stko-stlty AND
stlnr = t_stko-stlnr AND
idnrk IN s_idnrk.
SELECT * FROM makt APPENDING TABLE t_makt
FOR ALL ENTRIES IN t_stpo
WHERE matnr = t_stpo-idnrk.
ENDIF.
ENDIF.
ENDIF.
*-- Move into the internal table according to selection
*-- for Material BOM list - Add the materials in the header and the
*-- list in the items table
LOOP AT t_mast.
MOVE t_mast-werks TO t_main_material-werks.
MOVE t_mast-matnr TO t_main_material-matnr.
MOVE t_mast-stlal TO t_main_material-stlal.
MOVE t_mast-stlnr TO t_main_material-stlnr.
READ TABLE t_stko WITH KEY stlnr = t_mast-stlnr
stlal = t_mast-stlal.
MOVE t_stko-bmeng TO t_main_material-bmeng.
MOVE t_stko-bmein to t_main_material-bmein.
READ TABLE t_makt WITH KEY matnr = t_mast-matnr
spras = 'EN'.
MOVE t_makt-maktx TO t_main_material-maktx. "Description
t_main_material-expand = space.
APPEND t_main_material.
ENDLOOP.
*-- Move the
LOOP AT t_mast.
MOVE t_mast-matnr TO t_item_material-matnr.
MOVE t_mast-werks TO t_item_material-werks.
MOVE t_mast-stlal TO t_item_material-stlal.
MOVE t_mast-stlnr TO t_item_material-stlnr.
LOOP AT t_stpo WHERE stlnr = t_mast-stlnr.
MOVE t_stpo-menge TO t_item_material-menge.
MOVE t_stpo-meins to t_item_material-meins.
MOVE t_stpo-idnrk TO t_item_material-idnrk.
READ TABLE t_makt WITH KEY matnr = t_stpo-idnrk
spras = 'EN'.
MOVE t_makt-maktx TO t_item_material-maktx. "Description
APPEND t_item_material.
ENDLOOP.
ENDLOOP.
ELSE.
*-- Now the components where used list selected
*-- Get BOM description
SELECT * FROM makt INTO TABLE t_makt WHERE matnr IN s_idnrk.
Get all the information from MAST - BOM Table
SELECT * FROM mast INTO TABLE t_mast FOR ALL ENTRIES IN t_stko
WHERE matnr IN s_matnr AND
werks = p_werks AND
stlan IN s_stlan AND
stlal IN s_stlal.
*-- Get the BOM item details
SELECT stlty stlnr stlkn stpoz idnrk meins menge
FROM stpo
INTO TABLE t_stpo
WHERE idnrk IN s_idnrk.
IF sy-subrc = 0.
CLEAR wa_lines.
DESCRIBE TABLE t_stpo LINES wa_lines.
IF wa_lines > 0.
SELECT stlty stlnr stlal stkoz bmein bmeng
FROM stko
INTO TABLE t_stko
FOR ALL ENTRIES IN t_stpo
WHERE stlnr = t_stpo-stlnr.
CLEAR wa_lines.
DELETE ADJACENT DUPLICATES FROM t_stko COMPARING ALL FIELDS.
DESCRIBE TABLE t_stko LINES wa_lines.
IF wa_lines > 0.
*-- Get the BOM item details
SELECT * FROM mast INTO TABLE t_mast FOR ALL ENTRIES IN t_stko
WHERE werks = p_werks AND
stlnr = t_stko-stlnr AND
matnr IN s_matnr.
SELECT * FROM makt APPENDING TABLE t_makt
FOR ALL ENTRIES IN t_mast
WHERE matnr = t_mast-matnr.
ENDIF.
ENDIF.
ENDIF.
*-- Move into the internal table according to selection
*-- for Material BOM list - Add the materials in the header and the
*-- list in the items table
LOOP AT t_mast.
MOVE t_mast-werks TO t_main_material-werks.
MOVE t_mast-matnr TO t_main_material-matnr.
MOVE t_mast-stlal TO t_main_material-stlal.
MOVE t_mast-stlnr TO t_main_material-stlnr.
READ TABLE t_stko WITH KEY stlnr = t_mast-stlnr
stlal = t_mast-stlal.
MOVE t_stko-bmeng TO t_main_material-bmeng.
MOVE t_stko-bmein to t_main_material-bmein.
READ TABLE t_makt WITH KEY matnr = t_mast-matnr
spras = 'EN'.
MOVE t_makt-maktx TO t_main_material-maktx. "Description
t_main_material-expand = space.
APPEND t_main_material.
ENDLOOP.
*-- Move the
LOOP AT t_mast.
MOVE t_mast-matnr TO t_item_material-matnr.
MOVE t_mast-werks TO t_item_material-werks.
MOVE t_mast-stlal TO t_item_material-stlal.
MOVE t_mast-stlnr TO t_item_material-stlnr.
LOOP AT t_stpo WHERE stlnr = t_mast-stlnr.
MOVE t_stpo-menge TO t_item_material-menge.
MOVE t_stpo-idnrk TO t_item_material-idnrk.
MOVE t_stpo-meins to t_item_material-meins.
READ TABLE t_makt WITH KEY matnr = t_stpo-idnrk
spras = 'EN'.
MOVE t_makt-maktx TO t_item_material-maktx. "Description
APPEND t_item_material.
ENDLOOP.
ENDLOOP.
ENDIF. "p_bomlst
endform.
*&----
*
*& Form alv
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM alv.
Call ABAP/4 List Viewer
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = g_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
IT_EXCLUDING =
it_special_groups = gt_sp_group[]
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
i_default = g_default
i_save = g_save
is_variant = g_variant
it_events = gt_events[]
IT_EVENT_EXIT =
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
is_keyinfo = gs_keyinfo
IS_PRINT =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
TABLES
t_outtab_header = t_main_material
t_outtab_item = t_item_material.
ENDFORM. " alv
Selection text :
P_ALL ?...
P_BOMLST BOM Components List
P_COMPON Components Where Used List
P_ONE ?...
P_VARI Layout
P_WERKS Plant
S_IDNRK Component
S_MATNR Material
S_STLAL Alternative BOM
S_STLAN BOM usage
Thanks
Seshu
11-14-2007 2:43 AM
Hello David ,
In se37
Do F4 after giving *BOM_EXPLOSION .
You will get the list FM related to BOM Explosion .
Pick the one, as per your requirement .
Thanks,
Praveen
07-13-2011 1:55 PM
Hi use the functionmodule CS_BOM_EXPLOSION. I have written this program long back to test a concept u may refer to it to get some idea.
*&---------------------------------------------------------------------*
*& Report ZPRBIST_CSK1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zprbist_csk1.
* Testing the function module: 'CS_BOM_EXPLOSION'
PARAMETERS: p_vbeln LIKE vbak-vbeln OBLIGATORY VALUE CHECK,
p_posnr TYPE posnr_va.
* Import/ Export parameter
DATA: BEGIN OF imp_para,
matnr TYPE matnr,
werks TYPE werks_d,
cuobj TYPE cuobj_va,
END OF imp_para.
* Itab declarations
DATA: lt_stbd TYPE TABLE OF csxdoc,
lt_stbe TYPE TABLE OF csxequi,
lt_stbk TYPE TABLE OF csxkla,
lt_stbm TYPE TABLE OF csxmat,
lt_stbp TYPE TABLE OF csxgen,
lw_stbp LIKE LINE OF lt_stbp,
lt_stbt TYPE TABLE OF csxtpl.
* Fetching material number, plant and CUOBJ based on Sales document number.
SELECT SINGLE
matnr
werks
cuobj
FROM vbap INTO imp_para WHERE
vbeln EQ p_vbeln.
CALL FUNCTION 'CS_BOM_EXPLOSION'
EXPORTING
capid = 'PP01' " Application ID
cuobj = imp_para-cuobj " Object Instance
datuv = sy-datum " Current date
mtnrv = imp_para-matnr " Material number
werks = imp_para-werks " Plant
mehrs = 'X' " For Multiple Level
TABLES
stbd = lt_stbd[]
stbe = lt_stbe[]
stbk = lt_stbk[]
stbm = lt_stbm[]
stbp = lt_stbp[]
stbt = lt_stbt[]
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
missing_authorization = 3
no_bom_found = 4
no_plant_data = 5
no_suitable_bom_found = 6
object_not_found = 7
conversion_error = 8
OTHERS = 9.
IF sy-subrc EQ 0.
CHECK lt_stbp IS NOT INITIAL.
WRITE: / , 'SY-SUBRC' COLOR 5, sy-subrc.
NEW-LINE.
loop at lt_stbp into lw_stbp.
write: /, lw_stbp-OBJNR.
endloop.
ENDIF.
07-14-2011 5:46 AM
We use this to explode the bom in one of our program (variant configuration)
CS_BOM_EXPL_KND_V1
07-14-2011 5:58 AM
Hi,
Please use FM : CSAP_MAT_BOM_READ
CALL FUNCTION 'CSAP_MAT_BOM_READ'
EXPORTING
material = wrk_matnr
bom_usage = c_bomtype_spare " the BOM usage type as seen in CS03
TABLES
t_stpo = git_selected_bom_item "Returns the Components in BOM
EXCEPTIONS
error = 1
OTHERS = 2.
Now, you have to loop the Item list to get the Component materials.
While reading comp_unit check for Unit conversion.
Cheers,
Remi
07-14-2011 6:00 AM