FUNCTION zdtb_mbom_crs_plant.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(GT_BOM) TYPE ZZTY_T_BOM
*" REFERENCE(GV_STLAL) TYPE STLAL
*" REFERENCE(GV_STLAN) TYPE STLAN
*" EXPORTING
*" REFERENCE(GT_FINAL_STB) TYPE ROIJ_STPOX_T
*" REFERENCE(GT_FINAL_MATCAT) TYPE ZZTY_T_CSCMAT
*"----------------------------------------------------------------------
IF gt_bom IS NOT INITIAL.
SELECT werks
sobsl
beskz
sobes
wrk02
FROM t460a INTO TABLE gt_t460a
WHERE sobsl LIKE '4%'
AND sobes EQ 7.
IF sy-subrc EQ 0.
SORT gt_t460a BY werks sobsl sobes.
ENDIF.
ENDIF.
LOOP AT gt_bom INTO ls_bom.
IF ls_bom-matnr IS NOT INITIAL.
PERFORM f_bom_comp USING ls_bom
gt_t460a
gv_stlal
gv_stlan
CHANGING gt_stb
gt_matcat
gt_final_stb
gt_final_matcat.
CLEAR: ls_bom.
ENDIF.
ENDLOOP.
SORT gt_final_stb BY stufe
ttidx.
SORT gt_final_matcat BY matnr
index.
ENDFUNCTION.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(GT_BOM) TYPE ZZTY_T_BOM
*" REFERENCE(GV_STLAL) TYPE STLAL
*" REFERENCE(GV_STLAN) TYPE STLAN
*" EXPORTING
*" REFERENCE(GT_FINAL_STB) TYPE ROIJ_STPOX_T
*" REFERENCE(GT_FINAL_MATCAT) TYPE ZZTY_T_CSCMAT
*"----------------------------------------------------------------------
IF gt_bom IS NOT INITIAL.
SELECT werks
sobsl
beskz
sobes
wrk02
FROM t460a INTO TABLE gt_t460a
WHERE sobsl LIKE '4%'
AND sobes EQ 7.
IF sy-subrc EQ 0.
SORT gt_t460a BY werks sobsl sobes.
ENDIF.
ENDIF.
LOOP AT gt_bom INTO ls_bom.
IF ls_bom-matnr IS NOT INITIAL.
PERFORM f_bom_comp USING ls_bom
gt_t460a
gv_stlal
gv_stlan
CHANGING gt_stb
gt_matcat
gt_final_stb
gt_final_matcat.
CLEAR: ls_bom.
ENDIF.
ENDLOOP.
SORT gt_final_stb BY stufe
ttidx.
SORT gt_final_matcat BY matnr
index.
ENDFUNCTION.
*----------------------------------------------------------------------*
***INCLUDE LZDTB_MBOM_PLANTF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_BOM_COMP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GS_MARC text
* -->P_PT_T460A text
* <--P_GT_STB text
* <--P_GT_MATCAT text
* <--P_GT_FINAL text
*----------------------------------------------------------------------*
FORM f_bom_comp USING ps_marc TYPE zzty_bom
pt_t460a TYPE gty_t_t460a
pv_stlal TYPE stlal
pv_stlan TYPE stlan
CHANGING pt_stb TYPE roij_stpox_t
pt_matcat TYPE zzty_t_cscmat
pt_final_stb TYPE roij_stpox_t
pt_final_matcat TYPE zzty_t_cscmat.
*BOM componets
PERFORM f_get_bom_stb USING ps_marc
pv_stlal
pv_stlan
CHANGING pt_stb
pt_matcat
pt_final_stb
pt_final_matcat.
*BOM explosion for diffrent plants
PERFORM f_get_bom_dp USING ps_marc
pt_t460a
pt_stb
pt_matcat
pv_stlal
pv_stlan
CHANGING pt_final_stb
pt_final_matcat.
ENDFORM. " F_BOM_COMP
*&---------------------------------------------------------------------*
*& Form f_get_bom_stb
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PI_MARC text
* -->PI_STLAL text
* -->PI_STLAN text
* -->PT_STB text
* -->PT_MATCAT text
* -->PT_FINAL_STB text
* -->PT_FINAL_MATCAT text
*----------------------------------------------------------------------*
FORM f_get_bom_stb USING pi_marc TYPE zzty_bom
pi_stlal TYPE stlal
pi_stlan TYPE stlan
CHANGING pt_stb TYPE roij_stpox_t
pt_matcat TYPE zzty_t_cscmat
pt_final_stb TYPE roij_stpox_t
pt_final_matcat TYPE zzty_t_cscmat.
CONSTANTS:
lc_x(1) TYPE c VALUE 'X',
lc_1(1) TYPE c VALUE '1',
lc_2(1) TYPE c VALUE '2',
lc_capid TYPE capid VALUE 'PP01'.
DATA:
lt_matcat TYPE gty_t_matcat,
ls_matcat TYPE cscmat,
ls_matcat1 TYPE cscmat,
ls_stb TYPE stpox.
DATA:
lt_stb TYPE roij_stpox_t,
lv_flag TYPE flag,
lv_datuv TYPE datuv.
FIELD-SYMBOLS:
<ls_stb> TYPE stpox.
MOVE sy-datum TO lv_datuv.
*--- Multi-Level BOM explosion
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = lc_capid
datuv = lv_datuv
delnl = ' '
mehrs = lc_x " x
mtnrv = pi_marc-matnr
stlal = pi_stlal " 01
stlan = pi_stlan " 03
svwvo = lc_x
werks = pi_marc-werks
ehndl = lc_x "'2'
vrsvo = lc_x
TABLES
stb = pt_stb
matcat = pt_matcat
EXCEPTIONS
alt_not_found = 01
call_invalid = 02
material_not_found = 03
missing_authorization = 04
no_bom_found = 05
no_plant_data = 06
no_suitable_bom_found = 07.
IF sy-subrc NE 0.
*--- do noting
ENDIF.
* DELETE pt_stb WHERE mtart NOT IN gr_mtart.
APPEND LINES OF pt_stb[] TO pt_final_stb[].
SORT pt_final_stb[] BY idnrk werks.
IF pt_final_matcat[] IS INITIAL.
APPEND LINES OF pt_matcat[] TO pt_final_matcat[].
ELSE.
LOOP AT pt_matcat[] INTO ls_matcat.
READ TABLE pt_final_matcat INTO ls_matcat1 WITH KEY matnr = ls_matcat-matnr.
IF sy-subrc EQ 0.
APPEND ls_matcat TO pt_final_matcat.
ENDIF.
ENDLOOP.
ENDIF.
SORT pt_final_matcat[] BY matnr prwrk. .
ENDFORM. "f_get_bom_stb
*&---------------------------------------------------------------------*
*& Form F_GET_BOM_DP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PT_T460A text
* -->P_PT_STB text
* -->P_PT_MATCAT text
* <--P_PT_FINAL text
*----------------------------------------------------------------------*
FORM f_get_bom_dp USING pi_marc TYPE zzty_bom
pt_t460a TYPE gty_t_t460a
pt_stb TYPE roij_stpox_t
pt_matcat TYPE zzty_t_cscmat
pv_stlal TYPE stlal
pv_stlan TYPE stlan
CHANGING pt_final_stb TYPE roij_stpox_t
pt_final_matcat TYPE zzty_t_cscmat.
DATA:ls_stb TYPE stpox.
DATA:ls_marc TYPE zzty_bom.
DATA:ls_t460a TYPE gty_t460a.
DATA:lt_stb TYPE gty_t_stb,
lt_matcat TYPE gty_t_matcat.
LOOP AT pt_stb INTO ls_stb.
IF ls_stb-werks <> pi_marc-werks.
ls_marc-matnr = ls_stb-idnrk.
ls_marc-werks = ls_stb-werks.
PERFORM f_bom_comp USING ls_marc
pt_t460a
pv_stlal
pv_stlan
CHANGING lt_stb
lt_matcat
pt_final_stb
pt_final_matcat.
ELSE.
IF ls_stb-sobsl(1) EQ '4'.
READ TABLE pt_t460a INTO ls_t460a
WITH KEY werks = ls_stb-werks
sobsl = ls_stb-sobsl
sobes = '7'
BINARY SEARCH.
IF sy-subrc EQ 0.
ls_marc-matnr = ls_stb-idnrk.
ls_marc-werks = ls_t460a-wrk02.
PERFORM f_bom_comp USING ls_marc
pt_t460a
pv_stlal
pv_stlan
CHANGING lt_stb
lt_matcat
pt_final_stb
pt_final_matcat.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " F_GET_BOM_DP
***INCLUDE LZDTB_MBOM_PLANTF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_BOM_COMP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GS_MARC text
* -->P_PT_T460A text
* <--P_GT_STB text
* <--P_GT_MATCAT text
* <--P_GT_FINAL text
*----------------------------------------------------------------------*
FORM f_bom_comp USING ps_marc TYPE zzty_bom
pt_t460a TYPE gty_t_t460a
pv_stlal TYPE stlal
pv_stlan TYPE stlan
CHANGING pt_stb TYPE roij_stpox_t
pt_matcat TYPE zzty_t_cscmat
pt_final_stb TYPE roij_stpox_t
pt_final_matcat TYPE zzty_t_cscmat.
*BOM componets
PERFORM f_get_bom_stb USING ps_marc
pv_stlal
pv_stlan
CHANGING pt_stb
pt_matcat
pt_final_stb
pt_final_matcat.
*BOM explosion for diffrent plants
PERFORM f_get_bom_dp USING ps_marc
pt_t460a
pt_stb
pt_matcat
pv_stlal
pv_stlan
CHANGING pt_final_stb
pt_final_matcat.
ENDFORM. " F_BOM_COMP
*&---------------------------------------------------------------------*
*& Form f_get_bom_stb
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PI_MARC text
* -->PI_STLAL text
* -->PI_STLAN text
* -->PT_STB text
* -->PT_MATCAT text
* -->PT_FINAL_STB text
* -->PT_FINAL_MATCAT text
*----------------------------------------------------------------------*
FORM f_get_bom_stb USING pi_marc TYPE zzty_bom
pi_stlal TYPE stlal
pi_stlan TYPE stlan
CHANGING pt_stb TYPE roij_stpox_t
pt_matcat TYPE zzty_t_cscmat
pt_final_stb TYPE roij_stpox_t
pt_final_matcat TYPE zzty_t_cscmat.
CONSTANTS:
lc_x(1) TYPE c VALUE 'X',
lc_1(1) TYPE c VALUE '1',
lc_2(1) TYPE c VALUE '2',
lc_capid TYPE capid VALUE 'PP01'.
DATA:
lt_matcat TYPE gty_t_matcat,
ls_matcat TYPE cscmat,
ls_matcat1 TYPE cscmat,
ls_stb TYPE stpox.
DATA:
lt_stb TYPE roij_stpox_t,
lv_flag TYPE flag,
lv_datuv TYPE datuv.
FIELD-SYMBOLS:
<ls_stb> TYPE stpox.
MOVE sy-datum TO lv_datuv.
*--- Multi-Level BOM explosion
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = lc_capid
datuv = lv_datuv
delnl = ' '
mehrs = lc_x " x
mtnrv = pi_marc-matnr
stlal = pi_stlal " 01
stlan = pi_stlan " 03
svwvo = lc_x
werks = pi_marc-werks
ehndl = lc_x "'2'
vrsvo = lc_x
TABLES
stb = pt_stb
matcat = pt_matcat
EXCEPTIONS
alt_not_found = 01
call_invalid = 02
material_not_found = 03
missing_authorization = 04
no_bom_found = 05
no_plant_data = 06
no_suitable_bom_found = 07.
IF sy-subrc NE 0.
*--- do noting
ENDIF.
* DELETE pt_stb WHERE mtart NOT IN gr_mtart.
APPEND LINES OF pt_stb[] TO pt_final_stb[].
SORT pt_final_stb[] BY idnrk werks.
IF pt_final_matcat[] IS INITIAL.
APPEND LINES OF pt_matcat[] TO pt_final_matcat[].
ELSE.
LOOP AT pt_matcat[] INTO ls_matcat.
READ TABLE pt_final_matcat INTO ls_matcat1 WITH KEY matnr = ls_matcat-matnr.
IF sy-subrc EQ 0.
APPEND ls_matcat TO pt_final_matcat.
ENDIF.
ENDLOOP.
ENDIF.
SORT pt_final_matcat[] BY matnr prwrk. .
ENDFORM. "f_get_bom_stb
*&---------------------------------------------------------------------*
*& Form F_GET_BOM_DP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PT_T460A text
* -->P_PT_STB text
* -->P_PT_MATCAT text
* <--P_PT_FINAL text
*----------------------------------------------------------------------*
FORM f_get_bom_dp USING pi_marc TYPE zzty_bom
pt_t460a TYPE gty_t_t460a
pt_stb TYPE roij_stpox_t
pt_matcat TYPE zzty_t_cscmat
pv_stlal TYPE stlal
pv_stlan TYPE stlan
CHANGING pt_final_stb TYPE roij_stpox_t
pt_final_matcat TYPE zzty_t_cscmat.
DATA:ls_stb TYPE stpox.
DATA:ls_marc TYPE zzty_bom.
DATA:ls_t460a TYPE gty_t460a.
DATA:lt_stb TYPE gty_t_stb,
lt_matcat TYPE gty_t_matcat.
LOOP AT pt_stb INTO ls_stb.
IF ls_stb-werks <> pi_marc-werks.
ls_marc-matnr = ls_stb-idnrk.
ls_marc-werks = ls_stb-werks.
PERFORM f_bom_comp USING ls_marc
pt_t460a
pv_stlal
pv_stlan
CHANGING lt_stb
lt_matcat
pt_final_stb
pt_final_matcat.
ELSE.
IF ls_stb-sobsl(1) EQ '4'.
READ TABLE pt_t460a INTO ls_t460a
WITH KEY werks = ls_stb-werks
sobsl = ls_stb-sobsl
sobes = '7'
BINARY SEARCH.
IF sy-subrc EQ 0.
ls_marc-matnr = ls_stb-idnrk.
ls_marc-werks = ls_t460a-wrk02.
PERFORM f_bom_comp USING ls_marc
pt_t460a
pv_stlal
pv_stlan
CHANGING lt_stb
lt_matcat
pt_final_stb
pt_final_matcat.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " F_GET_BOM_DP
FUNCTION-POOL zdtb_mbom_plant. "MESSAGE-ID ..
* INCLUDE LZDTB_MBOM_PLANTD... " Local class definition
types: BEGIN OF gty_t460a,"Type for Special procurement key
werks TYPE werks_d, "Plant
sobsl TYPE sobsl, "Special procurement type
beskz TYPE besch, "Procurement type
sobes TYPE esobs, "Special procurement - external display
wrk02 TYPE werks_d, "Plant
END OF gty_t460a,
gty_matcat TYPE cscmat,
gty_t_t460a TYPE STANDARD TABLE OF gty_t460a,
gty_t_matcat TYPE STANDARD TABLE OF cscmat,
gty_t_stb TYPE roij_stpox_t.
DATA: ls_bom TYPE zzty_bom.
data:gv_stlal TYPE stlal,
gv_stlan TYPE stlan.
data: gt_stb TYPE gty_t_stb,
gt_matcat TYPE gty_t_matcat,
gt_t460a TYPE gty_t_t460a,
gt_final_stb TYPE gty_t_stb,
gt_final_matcat TYPE gty_t_matcat.
* INCLUDE LZDTB_MBOM_PLANTD... " Local class definition
types: BEGIN OF gty_t460a,"Type for Special procurement key
werks TYPE werks_d, "Plant
sobsl TYPE sobsl, "Special procurement type
beskz TYPE besch, "Procurement type
sobes TYPE esobs, "Special procurement - external display
wrk02 TYPE werks_d, "Plant
END OF gty_t460a,
gty_matcat TYPE cscmat,
gty_t_t460a TYPE STANDARD TABLE OF gty_t460a,
gty_t_matcat TYPE STANDARD TABLE OF cscmat,
gty_t_stb TYPE roij_stpox_t.
DATA: ls_bom TYPE zzty_bom.
data:gv_stlal TYPE stlal,
gv_stlan TYPE stlan.
data: gt_stb TYPE gty_t_stb,
gt_matcat TYPE gty_t_matcat,
gt_t460a TYPE gty_t_t460a,
gt_final_stb TYPE gty_t_stb,
gt_final_matcat TYPE gty_t_matcat.
TEST CASE:
No comments:
Post a Comment