cancel
Showing results for 
Search instead for 
Did you mean: 

multilevel bom explosion

Former Member
0 Kudos

hi All,

I am doing a transaction CS12 for a material and then gettin the output, i want to know wat field of wat table contains the value of level of the explosion,

please as for more details if u need,

thanks,

Gautam

Accepted Solutions (0)

Answers (3)

Answers (3)

Former Member
0 Kudos

any new ideas please????

Former Member
0 Kudos

Check with STPO,STKO,MAST Tables

Also look at FM CS_BOM_EXPL_MAT_V2 -> This is Very important.

I have done similar req and see the below 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

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

Former Member
0 Kudos

Use function module 'CS_BOM_EXPL_MAT_V2' for multi level BOM explosion.

The table STB (STPOX-STUFE) has the explosion levels.

Rgds,

Naren