如果程序中多次要求调用BOM函数时,可用此方式解决之:
*定义:
data: begin of i_bom occurs 0. "存储bom的内表
include structure stpox.
data: end of i_bom.
*调用方法:
PERFORM READBOM using hd_itab-Matnr hd_itab-Werks '01' _TmpPlanQty.
*函数定义:
FORM READBOM USING T_Matnr T_Werks T_STLAL T_EMENG. "物料编码、工厂、BOM版本、需求数量
data: _TmpQty like STKO-BMENG.
CLEAR i_bom.
CLEAR i_bom[].
_tmpQty = T_EMENG.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = 'PP01'
ALEKZ = 'X'
EMENG = _TmpQty "指定需求数
datuv = sy-datum
mtnrv = T_Matnr "itab-matnr "产品物料信息
mehrs = 'X' "完全展开
stlan = '1'
* stlal = ' ' "可选BOM信息,如果可选BOM为空,那么系统指定为最小值
stlal = T_STLAL "itab-STLAL 可选的BOM
werks = T_Werks " '1000' "工厂信息
TABLES
stb = i_bom "最终输出的物料信息
* matcat = i_mat "物料索引信息
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 _tmpQty <= 0.
loop at i_bom.
i_bom-MNGKO = 0.
modify i_bom.
endloop.
endif.
ENDFORM.