SAP 创建可选BOM的BAPI

三个BAPI可以用来创建BOM
1、CSAP_MAT_BOM_CREATE

  call function 'CSAP_MAT_BOM_CREATE'
    exporting
      material   = g_matnr
      plant      = g_werks
      bom_usage  = g_stlan
      valid_from = g_datuv
      change_no  = g_aennr
*     REVISION_LEVEL           =
      i_stko     = gw_stko_api01
*     FL_NO_CHANGE_DOC         = ' '
*     FL_COMMIT_AND_WAIT       = ' '
*     FL_CAD     = ' '
*     FL_DEFAULT_VALUES        = 'X'
*     FL_RECURSIVE             = ' '
* IMPORTING
*     FL_WARNING =
*     BOM_NO     =
    tables
      t_stpo     = gt_stpo_api03
*     T_DEP_DATA =
*     T_DEP_DESCR              =
*     T_DEP_ORDER              =
*     T_DEP_SOURCE             =
*     T_DEP_DOC  =
*     T_LTX_LINE =
*     T_STPU     =
*     T_FSH_BOMD =
*     T_SGT_BOMC =
    exceptions
      error      = 1
      others     = 2.
  if sy-subrc <> 0.
* Implement suitable error handling here
  endif.

这个BAPI没有"可选的BOM"字段的传值,默认为"01"。

2、CSAP_MAT_BOM_MAINTAIN

call function 'CSAP_MAT_BOM_MAINTAIN'
    exporting
      material           = g_matnr
      plant              = g_werks
      bom_usage          = g_stlan
      alternative        = lv_stlal
      valid_from         = g_datuv
      change_no          = g_aennr
      i_stko             = gw_stko_api01
      fl_commit_and_wait = 'X'
      fl_bom_create      = 'X'
      fl_new_item        = 'X'
      fl_complete        = 'X'
    tables
      t_stpo             = gt_stpo_api03
    exceptions
      error              = 1
      others             = 2.
  if sy-subrc = 0. "成功
    commit work and wait.
    gw_ztpp021-resultstatus = 'S'.
  else. "出错
    rollback work.
    gw_ztpp021-resultstatus = 'E'.
    message id sy-msgid type sy-msgty number sy-msgno
      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
      into gw_ztpp021-resultmsg.
  endif.

这个BAPI有"可选的BOM"字段的传值,但是需要注意的是,传"可选的BOM"值时需要补足前导0,即传值"2"时,要加前导0,传入"02"。

但是以上两个BAPI在已经创建了这个物料的BOM的情况下,都无法再创建一个新的可选的BOM,会报错提示:“用于……的BOM 已占用”。

查询并测试后,发现以下BAPI可创建新的可选的BOM
BAPI_MATERIAL_BOM_GROUP_CREATE

  data: lt_bomgroup  like bapi1080_bgr_c occurs 0 with header line,
    lt_variants  like bapi1080_bom_c occurs 0 with header line,
    lt_items     like bapi1080_itm_c occurs 0 with header line,
    lt_subitems  like bapi1080_sui_c occurs 0 with header line,
    lt_materialr like bapi1080_mbm_c occurs 0 with header line,
    lt_itemassig like bapi1080_rel_itm_bom_c occurs 0 with header line,
    lt_subitemas like bapi1080_rel_sui_itm_c occurs 0 with header line,
    texts        like bapi1080_txt_c occurs 0 with header line,
    lt_return    like bapiret2 occurs 0 with header line.

  data: lv_stlal type mast-stlal.

  lv_stlal = '11'.

  lt_bomgroup-bom_group_identification = 'BAPI_SMP_COL1'.
  lt_bomgroup-object_type              = 'BGR'.
  lt_bomgroup-object_id                = 'SIMPLE1'.
  lt_bomgroup-bom_usage                = g_stlan. " YOU COULD CHANGE THE BOM USAGE TO YOUR
  lt_bomgroup-ltxt_lang                = sy-langu.
  lt_bomgroup-created_in_plant         = g_werks.
  lt_bomgroup-technical_type           = ' '.
*  lt_bomgroup-bom_text                 = ls_head-ztext.
*  lt_bomgroup-auth_group               = ls_head-stlbe.
  append lt_bomgroup.
  clear 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          = lv_stlal.        "可选BOM
*  lt_variants-bom_status               = '01'.             "BOM状态
  lt_variants-bom_status               = gw_stko_api01-bom_status."BOM状态
  lt_variants-base_qty                 = gw_stko_api01-base_quan.       "数量
  lt_variants-base_unit                = gw_stko_api01-base_unit.      "单位
  lt_variants-valid_from_date          = sy-datum.      "有效期起始日期
*  lt_variants-alt_text                 = ls_head-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                 = g_matnr.     "物料编码
  lt_materialr-plant                    = g_werks.     "工厂
  lt_materialr-bom_usage                = g_stlan.      "BOM用途
  lt_materialr-alternative_bom          = lv_stlal.       "可选BOM
*  lt_materialr-lot_size_from            = ls_head-losvn.       "从批量
*  lt_materialr-lot_size_to              = ls_head-losvn.       "到批量
  append lt_materialr.

  data:l_object_id type cs_object_id.
  data:l_tabix type sy-tabix.
  data:l_tabic type char10.

  data:lv_posnr type sposn.
  data:lv_i type i.
  data:lv_n type n length 4.
  clear :lv_posnr,lv_i,lv_n.
  lv_i  = 10.
* Details of the items of the variants
  loop at gt_stpo_api03 into data(ls_item).

    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.
    lv_n = lv_i.
    lv_posnr  = lv_n.
    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                    = lv_posnr.      "行号
    lt_items-item_cat                   = ls_item-item_categ.      "类别
    lt_items-sort_string                = ls_item-sortstring.      "排序字符串
    lt_items-component                  = ls_item-component.      "组件物料
    lt_items-item_text1                 = ls_item-item_text1.      "项目文本1
    lt_items-item_text2                 = ls_item-item_text2.      "项目文本2
    lt_items-comp_qty                   = ls_item-comp_qty.      "组件数量 (BTCI)
    lt_items-comp_unit                  = ls_item-comp_unit.      "组件计量单位
    lt_items-ltxt_lang                  = sy-langu.
    lt_items-valid_from_date            = gw_ztpp021-datuv.      "有效起始日期
    lt_items-mat_provision              = ls_item-mat_provis.      "物料供应标识
*    lt_items-opr_scrap                  = ls_item-avoau.      "工序废品
*    lt_items-spproctype                 = ls_item-itsob.      "特殊获取类
*    lt_items-iss_st_loc                 = ls_item-lgort.      "库存地点
*    lt_items-alt_item_group             = ls_item-alpgr.      "替代组
*    lt_items-alt_item_strategy          = ls_item-alpst.      "替代策咯
*    lt_items-alt_item_prio              = ls_item-alprf.      "优先级
*    lt_items-usage_prob                 = ls_item-ewahr.      "使用可能性

    append lt_items.


    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          = gw_ztpp021-datuv.
    lt_itemassig-function = 'NEW'.
    append lt_itemassig.

    clear ls_item.
    lv_i = lv_i + 10.
  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
      materialrelations = lt_materialr
      itemassignments   = lt_itemassig
      return            = lt_return.
  read table lt_return with key type = 'E'.
  if sy-subrc = 0. "出错
    call function 'BAPI_TRANSACTION_ROLLBACK'.

    gw_ztpp021-resultstatus = 'E'.
    gw_ztpp021-resultmsg = lt_return-message.
  else. "成功
    gw_ztpp021-resultstatus = 'S'.
    call function 'BAPI_TRANSACTION_COMMIT'
      exporting
        wait = 'X'.
  endif.

需要注意的是:传"可选的BOM"值时一样需要补足前导0,即传值"2"时,要加前导0,传入"02"。

OVER……

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP可配置BOM是指在SAP系统中,可以根据不同的需求和用途对BOM进行配置和定义的功能。根据引用\[1\]和引用\[2\]的内容,可以了解到SAP可配置BOM包括定义BOM用途和定义BOM项目状态缺省值两个方面。 在定义BOM用途时,可以根据具体需求新增不同的BOM用途,如关键BOM、预备BOM、试产BOM等。这些BOM用途可以在创建BOM时选择,用于区分不同的BOM类型和用途。其中,生产BOM包含了生产、装配所需的所有项目数据,与生产、装配、成本相关;设计BOM包含了组件及相关技术数据,与设计有关,可能与成本相关,但与生产、销售无关;成本BOM与成本核算有关的项目才进入成本BOM,与生产、销售、设计等可能有关。\[2\] 在定义BOM项目状态缺省值时,可以设置默认的BOM项目状态,以便在创建BOM时自动填充。这样可以提高操作效率和准确性。\[2\] 总之,SAP可配置BOM是通过定义BOM用途和BOM项目状态缺省值来满足不同的业务需求和用途,以实现对BOM的灵活配置和管理。 #### 引用[.reference_title] - *1* *2* *3* [SAP PP配置详解之二:BOM的配置](https://blog.csdn.net/weixin_40672823/article/details/103621655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值