form sub_get_bom.
LOOP AT gt_output INTO gs_output.
REFRESH:lt_stb.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' "多层BOM展开官方方法
EXPORTING
capid = 'PP01'
datuv = sy-datum
emeng = 0
mtnrv = gs_output-matnr
mktls = lv_mktls
mehrs = lv_mehrs
werks = gs_output-werks
stlan = gs_output-stlan
stlal = gs_output-stlal
TABLES
stb = lt_stb
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
OTHERS = 8.
"多层BOM,如果第一层的BOM 中有替代料,那么这个替代料展开的下层组件都要删除
sort lt_stb by stufe descending.
clear: ls_stb,lv_tim,lv_stufe,lv_vwegx.
read table lt_stb into ls_stb index 1.
lv_tim = ls_stb-stufe - 1.
lt_stb1 = lt_stb[].
DO lv_tim times.
clear: ls_stb,ls_stb1.
loop at lt_stb into ls_stb.
lv_stufe = ls_stb-stufe - 1.
lv_vwegx = ls_stb-vwegx.
read table lt_stb into ls_stb1 with key stufe = lv_stufe wegxx = lv_vwegx.
if sy-subrc = 0.
if ls_stb1-alpos = 'X' and ls_stb1-ewahr <> '100'.
ls_stb-alpos = 'X'.
ENDIF.
ENDIF.
MODIFY LT_STB FROM LS_STB.
ENDLOOP.
ENDDO.
delete lt_stb where alpos = 'X' and ewahr <> '100'.
CLEAR LS_STB.
loop at lt_stb into ls_stb."取LT_STB带出来的BOM组件的价格
SELECT
MBEW~MATNR,
MBEW~BWKEY,
MBEW~STPRS,
MBEW~LFGJA,
MBEW~LFMON,
MBEW~PEINH
FROM MBEW
APPENDING CORRESPONDING FIELDS OF TABLE @GT_MBEWH
WHERE MATNR = @ls_stb-IDNRK
and BWKEY = @ls_stb-WERKS
and STPRS > '0'.
PERform sub_process_mbew.
ENDLOOP.
CLEAR LS_STB.
clear cost_sum.
clear cost_sumt.
data:substr type string.
LOOP AT lt_stb INTO ls_stb. "在这里计算好成本
clear substr.
substr = ls_stb-idnrk.
if ls_stb-xtlnr <> ''.
continue.
ENDIF.
case substr+0(2).
when
SAP BOM 多层展开及组件成本处理
最新推荐文章于 2024-05-20 17:31:16 发布