创建物料BOM的BAPI使用:BAPI_MATERIAL_BOM_GROUP_CREATE。
代码如下:
SORT gt_out ASCENDING BY matnr werks stlan stlal.
lt_itab1[] = gt_out[].
LOOP AT lt_itab1 INTO gs_out.
CLEAR wa_out.
REFRESH lt_itab2.
wa_out = gs_out.
lt_itab2[] = lt_itab1[].
AT NEW stlal.
DELETE lt_itab2 WHERE matnr NE wa_out-matnr OR werks NE wa_out-werks OR stlan NE wa_out-stlan OR stlal NE wa_out-stlal.
REFRESH:lt_bomgroup,
lt_variants,
lt_materialr,
lt_items,
lt_subitems,
lt_itemassig,
lt_subitemas,
lt_return.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_out-stlal
IMPORTING
output = wa_out-stlal.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = wa_out-bmein
language = sy-langu
IMPORTING
output = wa_out-bmein
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR lt_bomgroup.
lt_bomgroup-bom_group_identification = 'BAPI_SMP_COL1'.
lt_bomgroup-object_type = 'BGR'.
lt_bomgroup-object_id = 'SIMPLE1'.
lt_bomgroup-bom_usage = wa_out-stlan. "BOM用途
lt_bomgroup-ltxt_lang = sy-langu. "语言
lt_bomgroup-technical_type = ''.
lt_bomgroup-created_in_plant = wa_out-werks.
lt_bomgroup-bom_text = wa_out-ztext.
APPEND lt_bomgroup.
* Header Details of the different variants
CLEAR lt_variants.
lt_variants-bom_group_identification = 'BAPI_SMP_COL1'.
lt_variants-object_type = 'BOM'.
lt_variants-object_id = 'SIMPLE1'.
lt_variants-alternative_bom = wa_out-stlal. "可选BOM
lt_variants-bom_status = '02'. "BOM状态
lt_variants-base_qty = wa_out-bmeng. "数量
lt_variants-base_unit = wa_out-bmein. "单位
lt_variants-valid_from_date = wa_out-datuv. "有效期起始日期
lt_variants-alt_text = wa_out-stktx. "可选BOM文本
lt_variants-function = 'NEW'.
APPEND lt_variants.
* 物料分配 CREATE-/CHANGE BAPI 物料 BOM
CLEAR lt_materialr.
lt_materialr-bom_group_identification = 'BAPI_SMP_COL1'.
lt_materialr-material = wa_out-matnr. "物料编码
lt_materialr-plant = wa_out-werks. "工厂
lt_materialr-bom_usage = wa_out-stlan. "BOM用途
lt_materialr-alternative_bom = wa_out-stlal. "可选BOM
lt_materialr-lot_size_from = wa_out-losvn. "从批量
lt_materialr-lot_size_to = wa_out-losvn. "到批量
APPEND lt_materialr.
* Details of the items of the variants
LOOP AT lt_itab2.
CLEAR:l_tabix,
l_tabic,
l_object_id.
l_tabix = sy-tabix.
MOVE l_tabix TO l_tabic.
CONCATENATE 'SIMPLE' l_tabic INTO l_object_id.
CONDENSE l_object_id NO-GAPS.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = lt_itab2-meins
language = sy-langu
IMPORTING
output = lt_itab2-meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* Material BoM Group Header Data
CLEAR lt_items.
lt_items-bom_group_identification = 'BAPI_SMP_COL1'.
lt_items-object_type = 'ITM'.
lt_items-object_id = l_object_id.
lt_items-item_no = lt_itab2-posnr. "行号
lt_items-item_cat = lt_itab2-postp. "类别
lt_items-sort_string = lt_itab2-sortf. "排序字符串
lt_items-component = lt_itab2-idnrk. "组件物料
lt_items-item_text1 = lt_itab2-potx1. "项目文本1
lt_items-item_text2 = lt_itab2-potx2. "项目文本2
lt_items-comp_qty = lt_itab2-menge. "组件数量 (BTCI)
lt_items-comp_unit = lt_itab2-meins. "组件计量单位
lt_items-ltxt_lang = sy-langu.
lt_items-valid_from_date = sy-datum. "有效起始日期
* lt_items-sales_rel = lt_itab2-rvrel. "与销售相关
* lt_items-cost_rel = lt_itab2-sanka. "与成本相关
lt_items-mat_provision = lt_itab2-beikz. "物料供应标识
* lt_items-bulk_mat = lt_itab2-schgt. "散装物料标识
lt_items-opr_scrap = lt_itab2-avoau. "工序废品
IF lt_itab2-avoau NE 0.
lt_items-net_scrap_ind = c_con1.
ENDIF.
lt_items-spproctype = lt_itab2-itsob. "特殊获取类
lt_items-iss_st_loc = lt_itab2-lgort. "库存地点
lt_items-alt_item_group = lt_itab2-alpgr. "替代组
lt_items-alt_item_strategy = lt_itab2-alpst. "替代策咯
lt_items-alt_item_prio = lt_itab2-alprf. "优先级
lt_items-usage_prob = lt_itab2-ewahr. "使用可能性
APPEND lt_items.
* linking items to the corresponding variants
CLEAR lt_itemassig.
lt_itemassig-bom_group_identification = 'BAPI_SMP_COL1'.
lt_itemassig-sub_object_type = 'ITM'.
lt_itemassig-sub_object_id = l_object_id."'SIMPLE1'.
lt_itemassig-super_object_type = 'BOM'.
lt_itemassig-super_object_id = 'SIMPLE1'.
lt_itemassig-valid_from_date = sy-datum.
lt_itemassig-function = 'NEW'.
APPEND lt_itemassig.
* 子项目 CREATE-/CHANGE BAPI 物料 BOM,(子项目要对应起来,子项目的逻辑)
IF lt_itab2-upmng IS NOT INITIAL AND lt_itab2-ebort IS NOT INITIAL AND lt_itab2-uptxt IS NOT INITIAL.
CLEAR lt_subitems.
lt_subitems-bom_group_identification = 'BAPI_SMP_COL1'.
lt_subitems-object_type = 'SUI'.
lt_subitems-object_id = l_object_id.
lt_subitems-subitem_no = lt_itab2-posnr. "行号
lt_subitems-subitem_qty = lt_itab2-upmng. "子项目数量
lt_subitems-installation_point = lt_itab2-ebort. "安装地点
lt_subitems-subitem_text = lt_itab2-uptxt. "子项目文本.
APPEND lt_subitems.
*分配 CREATE-/CHANGE BAPI SUI/ITM 物料 BOM
CLEAR lt_subitemas.
lt_subitemas-bom_group_identification = 'BAPI_SMP_COL1'.
lt_subitemas-sub_object_type = 'SUI'.
lt_subitemas-sub_object_id = l_object_id.
lt_subitemas-super_object_type = 'ITM'.
lt_subitemas-super_object_id = l_object_id.
APPEND lt_subitemas.
ENDIF.
ENDLOOP.
* 调用BAPI,创建BOM。
CALL FUNCTION 'BAPI_MATERIAL_BOM_GROUP_CREATE'
EXPORTING
* TESTRUN = ' '
all_error = 'X'
TABLES
bomgroup = lt_bomgroup
variants = lt_variants
items = lt_items
subitems = lt_subitems
materialrelations = lt_materialr
itemassignments = lt_itemassig
subitemassignments = lt_subitemas
* TEXTS =
return = lt_return.
CLEAR l_flag.
LOOP AT lt_return WHERE type = 'E' OR type = 'A'..
l_flag = 'E'.
ENDLOOP. .
* IF lv_msgty = 'E' OR lv_msgty = 'A'.
* l_flag = 'E'.
* ENDIF.
IF l_flag = 'E'.
wa_out-zflag = 'E'.
* MOVE l_message TO wa_out-zmess.
LOOP AT lt_return WHERE type = 'E' OR type = 'A'.
CONCATENATE lt_return-message wa_out-zmess INTO wa_out-zmess SEPARATED BY ';'.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
l_bom_no = sy-msgv2+0(8).
wa_out-zflag = 'S'.
wa_out-zmess = 'Succeed'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
使用时需要注意的事情:
1、可选BOM(STLAL)使用的时候要添加前导0。
2、BAPI中蚕食的意义,BOMGROUP:BOM组,主要字段,工厂、BOM用途、BOM文本。VARIANTS:BOM抬头,主要字段参考STKO。MATERIALRELATIONS:BOM抬头数据,主要字段参考MAST。ITEMS:BOM组件物料,主要字段参考STPO。ITEMASSIGNMENTS:用来确定组件物料与物料的链接关系。SUBITEMS:BOM子项目,主要字段参考STPU。SUBITEMASSIGNMENTS:主要用来确定子项目与BOM组件行项目的对应关系。
3、所有的表里面都有字段BOM_GROUP_IDENTIFICATION,这个字段是用来确定唯一一组数据的,可以随意输入,但是要保证所有表参数里面的这个字段的一致性。
4、字段OBJECT_TYPE(SUPER_OBJECT_TYPE、SUB_OBJECT_TYPE),值是固定的,在BOMGROUP时OBJECT_TYPE='BGR',VARIANTS里面OBJECT_TYPE='BOM',ITEMS里面OBJECT_TYPE='ITM',SUBITEMS里面OBJECT_TYPE='SUI',ITEMASSIGNMENTS里面SUB_OBJECT_TYPE='ITM';SUPER_OBJECT_TYPE要与VARIANTS里面的OBJECT_TYPE相同,等于'BOM',SUBITEMASSIGNMENTS里面SUB_OBJECT_TYPE与表SUBITEMS中的OBJECT_TYPE相等;SUPER_OBJECT_TYPE要与表ITEMS中的OBJECT_TYPE相等。
5、确定组件物料与物料关系的方法:ITEMS与ITEMASSIGMENT是一一对应的关系,ITEMASSIGMENT中的SUB_OBJECT_ID要与ITMES中的OBJECT_ID相同,这样才能确定二者的对应关系,同时ITEMASSIGMENT中的SUPER_OBJECT_ID要与VARIANTS中OBJECT_ID对应,通过SUPER(TYPE、ID)来确定这一行对应哪个母物料。
6、确定子项目与组件行项目关系的方法:SUBITEMS与SUBITEMASSIGNMENTS的关系是一以对应的,但是ITEMS与SUBITEMS是属于一行对应多行的关系,通过SUBITEMS中的OBJECT_TYPE及OBJECT_ID与SUBITEMASSIGNMENTS中的SUB_OBJECT_TYPE及SUB_OBJECT_ID来确定二者的对应关系,属于一一对应的关系,同时,通过SUBITEMASSIGMENT中的SUPER_OBJECT_ID与ITEMS中的OBJECT_ID的对应关系,来确定子项目具体要分配给哪个行项目。
7、参数:VARIANTS、BOMGROUP、MATERIALRELATIONS是必输项。
暂且记录这么多,想到了再写。
0 0条评论 收藏
---------------------
作者:闲野
来源:CSDN
原文:https://blog.csdn.net/weixin_41886784/article/details/80988657
版权声明:本文为博主原创文章,转载请附上博文链接!