创建物料BOM的BAPI使用:BAPI_MATERIAL_BOM_GROUP_CREATE

创建物料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 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_37968127/article/details/89454067