点击SAP翔子关注
写文章不易,如果觉得有帮助,可以转发朋友圈或者分享给朋友~
如果觉得有问题,欢迎加翔子V信( 18925782767 )一起推敲~
一起学习,天天向上。
找到一个详细说明创建BOM的文档,分享一下
1. 最终结果预览
2. 创建过程
使用到的事务码
CS01 创建BOM
CS02 修改BOM
CS03 显示BOM
CC01 创建工程变更号CC02 修改工程变更号CC03显示工程变更号
MM01 创建物料 MM02 修改物料 MM03 显示物料
使用到的物料(使用MM01创建)
销售整车 11000601 工厂3000
装箱整车 14000575 工厂3000
底盘车 13005666 工厂5813
零配件 CZTEST01 工厂5813
CZTEST02 工厂5813
CZTEST03 工厂5813
1、CS01创建BOM,工厂3000,BOM用途5,默认可选BOM为1。
2、输入下层组件14000575,数量为2,有效期2014-02-17;回车保存,则创建成功。
3、同理,创建14000575的BOM,工厂3000,BOM用途1。下层为13005666,有效期2014-02-17。
4、输入下层组件13005666,数量为2,有效期2014-02-17;回车保存,则创建成功。
5、创建13005666的BOM,工厂5813,BOM用途1。下层为CZTEST01、CZTEST02、CZTEST03,有效期2014-02-17。
6、CS12展开多层BOM,输入11000601。
仔细观察会注意到,展开的物料中没有CZTEST01、CZTEST02、CZTEST03,这是由于13*物料维护下层的是5813工厂,不是3000工厂。
注意事项:
1、最上层物料创建BOM的工厂为3000,因为所有物料必须在维护3000工厂数据。
2、CS15可以查询上层。
3、创建的BOM可以在MAST查看。根据BOM号可以在STKO中查看BOM表头,里面有删除标识。
3. BOM相关函数介绍
1、展开BOM函数‘CS_BOM_EXPL_MAT_V2’
关键注意输入参数:
1:plant,2:material number3:date,4:cpaid,5:展bom的层次标示
2.这个FUNCTION是用来展开BOM的.
CAPID: BOM应用,在CSMB中也有这个参数,具体内容你看一下.
DATUV: BOM生效日期
MEHRS: 是否多层展开
MTNRV: 展开的物料号
STLAL: 可选BOM,具体内容看CS01
STLAN: BOM用途,具体内容看CS01
WERKS: 展开物料的工厂
STB: BOM展开结果
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' EXPORTING
capid = 'PP01'
datuv = sy-datum
mtnrv = pi_bom-matnr
stlal = pi_bom-stlal”如果不输入该参数,默认会选择有效的最小的可选BOM,
* 但是如果第一个是有删除标识的,则会出错.STKO可查看删除标识。
stlan = pi_bom-stlan
werks = pi_bom-werks
mehrs = ''”为空时BOM展开一层;为‘X’时全展开(只有所有数据在一个工厂才能全部都展开)
TABLES
stb = pi_stb“展开的下层数据信息,IDNRK为物料名
matcat = lt_cscmat”需要展开的物料信息
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.
* CONCATENATE pi_bom-matnr 'BOM展开出错!' INTO l_msg.
* MESSAGE l_msg TYPE 'S' DISPLAY LIKE 'E'.
* STOP.
ENDIF.
2、查看上层物料函数‘CS_WHERE_USED_MAT’。只能向上查看一层
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = sy-datum
datuv = sy-datum
matnr = pi_bom-matnr
* POSTP = ' '
* RETCODE_ONLY = ' '
stlan = pi_bom-stlan
werks = pi_bom-werks
* IMPORTING
* TOPMAT =
TABLES
wultb = lt_ltb
equicat = lt_equicat
kndcat = lt_kndcat
matcat = pi_matcat“
stdcat = lt_stdcat
tplcat = lt_tplcat
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
OTHERS = 6.
IF sy-subrc <> 0.
ENDIF.
注意:数据一般在wultb和matcat两个表中查看。
3,创建BOM
DATA: ls_stko TYPE stko_api01, lt_stpo TYPE TABLE OF stpo_api01, lv_bom_no TYPE stko_api02-bom_no. DATA: lv_valid_from TYPE csap_mbom-datuv. CALL FUNCTION 'CSAP_MAT_BOM_CREATE' EXPORTING material = <fs_s_alv>-matnr plant = <fs_s_alv>-werks bom_usage = <fs_s_alv>-stlan * ALTERNATIVE = valid_from = lv_valid_from * CHANGE_NO = * REVISION_LEVEL = i_stko = ls_stko * FL_NO_CHANGE_DOC = ' ' * fl_commit_and_wait = '' * FL_CAD = ' ' * FL_DEFAULT_VALUES = 'X' * FL_RECURSIVE = ' ' IMPORTING fl_warning = lv_fl_warning bom_no = lv_bom_no TABLES t_stpo = lt_stpo EXCEPTIONS error = 1 OTHERS = 2. IF sy-subrc <> 0 OR lv_bom_no IS INITIAL. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_message. gs_alv-e_type = `E`. gs_alv-light = icon_red_light. CLEAR: gv_msg.MESSAGE s022(zpp01) INTO gv_msg. gs_alv-e_msg = |{ <fs_s_alv>-e_msg };{ gv_msg }:{ lv_message }|."新BOM 创建失败 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. gs_alv-e_type = `S`. gs_alv-light = icon_green_light. CLEAR: gv_msg.MESSAGE s023(zpp01) WITH lv_bom_no INTO gv_msg. gs_alv-e_msg = |{ <fs_s_alv>-e_msg };{ gv_msg }|."新BOM &1创建成功 gs_alv-stlnr = lv_bom_no. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF.
4,删除BOM
LOOP AT lt_mast INTO DATA(ls_mast).
CALL FUNCTION 'CSAP_MAT_BOM_DELETE'
EXPORTING
material = ls_mast-matnr
plant = ls_mast-werks
bom_usage = ls_mast-stlan
* ALTERNATIVE =
* VALID_FROM =
* CHANGE_NO =
* REVISION_LEVEL =
* FL_NO_CHANGE_DOC = ' '
* FL_COMMIT_AND_WAIT = ' '
IMPORTING
fl_warning = lv_fl_warning
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO DATA(lv_message).
gs_alv-e_type = `E`.
gs_alv-light = icon_red_light.
CLEAR: gv_msg.MESSAGE s018(zpp01) WITH ls_mast-stlnr INTO gv_msg. gs_alv-e_msg = |{ gv_msg }:{ lv_message }|."旧BOM &1删除失败
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
gs_alv-e_type = `S`.
gs_alv-light = icon_green_light.
CLEAR: gv_msg.MESSAGE s019(zpp01) WITH ls_mast-stlnr INTO gv_msg. gs_alv-e_msg = gv_msg."旧BOM &2删除成功
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
gs_alv-ernam = sy-uname.
gs_alv-ersda = sy-datum.
gs_alv-uzeit = sy-uzeit.
MODIFY gt_alv FROM gs_alv TRANSPORTING e_type e_msg light ernam ersda uzeit
WHERE matnr EQ ls_mast-matnr AND werks EQ ls_mast-werks AND stlan EQ ls_mast-stlan.
ENDLOOP.
感谢您的阅读!
帮忙点击右下角在看,一键三连加关注,变帅变强加变秃!
往期精彩回顾:
精彩回顾
BDC篇4 自动生成批导