REPORT z_generate_bom.
DATA: lt_bom TYPE STANDARD TABLE OF bapi_mara,
lt_bom_ex TYPE STANDARD TABLE OF bapi_maraex.
TYPES: BEGIN OF ty_bom_line,
id TYPE stlnr, " 项号
matnr TYPE matnr, " 物料号
stlty TYPE stlty, " 物料清单类型
stlal TYPE stlal, " 物料清单组
stkoz TYPE stkoz, " BOM 使用状态
stlkn TYPE stlkn, " 物料清单号
stpos TYPE stpos, " BOM 项号
idnrk TYPE idnrk, " 零件号
menge TYPE menge, " 数量
meins TYPE meins, " 基本单位
status TYPE ststl, " 删除标志
algstp TYPE algstp, " 用途
datuv TYPE datuv, " 最近变更日期
andat TYPE andat, " 最近变更时间
apmng TYPE apmng, " 安全库存
sanka TYPE sanka, " 替换标识
saled TYPE saled, " 销售和分发标识
gldat TYPE gldat, " 出货日期
vgwts TYPE vgwts, " 总重量
gewei TYPE gewei, " 总重量单位
stpoz TYPE stpoz, " 物料清单项
stlan TYPE stlan, " 语言代码
sttxt TYPE sttxt, " 物料清单文本
stkza TYPE stkza, " 算法组
stalz TYPE stalz, " BOM 使用状态
sanka TYPE sanka, " 替换标识
algstl TYPE algstl, " 用途
END OF ty_bom_line.
DATA: lt_bom_lines TYPE TABLE OF ty_bom_line.
DATA: lv_matnr TYPE matnr VALUE ‘YOUR_MATERIAL_NUMBER’, " 要生成BOM的物料号
lv_stlal TYPE stlal VALUE ‘YOUR_BOM_USAGE’, " 物料清单组
lv_stlty TYPE stlty VALUE ‘1’, " 物料清单类型
lv_menge TYPE menge VALUE ‘1’. " BOM数量
START-OF-SELECTION.
PERFORM generate_bom_hierarchy USING lv_matnr lv_stlal lv_stlty lv_menge CHANGING lt_bom_lines.
LOOP AT lt_bom_lines INTO DATA(ls_bom_line).
WRITE: / ls_bom_line-matnr, ls_bom_line-menge, ls_bom_line-meins.
ENDLOOP.
FORM generate_bom_hierarchy
USING
iv_matnr TYPE matnr
iv_stlal TYPE stlal
iv_stlty TYPE stlty
iv_menge TYPE menge
CHANGING
ct_bom_lines TYPE TABLE OF ty_bom_line.
DATA: lt_stpo TYPE STANDARD TABLE OF stpo,
ls_stpo TYPE stpo,
lt_stko TYPE STANDARD TABLE OF stko,
ls_stko TYPE stko,
lv_posnr TYPE posnr.
CLEAR: ct_bom_lines.
" 通过 BAPI读取BOM层次结构数据
CALL FUNCTION ‘BAPI_MATERIAL_BOM_READ’
EXPORTING
material = iv_matnr
plant = ‘YOUR_PLANT’
bom_usage = iv_stlal
bom_application = iv_stlty
valid_from_date = sy-datum
valid_to_date = ‘99991231’
TABLES
return = lt_bom_ex
bom_items = lt_bom.
" 遍历BOM项并生成层次结构
LOOP AT lt_bom INTO ls_bom.
CLEAR: ls_stpo.
ls_stpo-item = ls_bom-stlkn.
APPEND ls_stpo TO lt_stpo.
ENDLOOP.
LOOP AT lt_stpo INTO ls_stpo.
" 读取物料清单头数据
CALL FUNCTION ‘BAPI_MATERIAL_BOM_READ’
EXPORTING
material = iv_matnr
plant = ‘YOUR_PLANT’
bom_usage = iv_stlal
bom_application = iv_stlty
valid_from_date = sy-datum
valid_to_date = ‘99991231’
TABLES
return = lt_bom_ex
bom_items = lt_bom.
" 读取BOM头数据
CALL FUNCTION 'BAPI_MATERIAL_BOM_READ'
EXPORTING
material = iv_matnr
plant = 'YOUR_PLANT'
bom_usage = iv_stlal
bom_application = iv_stlty
valid_from_date = sy-datum
valid_to_date = '99991231'
TABLES
return = lt_bom_ex
bom_items = lt_bom.
" 显示BOM
CALL FUNCTION 'BAPI_MATERIAL_BOM_DISPLAY'
EXPORTING
material = iv_matnr
plant = 'YOUR_PLANT'
bom_usage = iv_stlal
bom_application = iv_stlty
valid_from_date = sy-datum
valid_to_date = '99991231'
TABLES
return = lt_bom_ex
bom_items = lt_bom.
" 生成BOM
IF sy-subrc = 0.
ENDIF.
ENDLOOP.
ENDFORM.