MM01 物料主数据批导

1业务场景

期初批量导入物料主数据时,有以下要求:

  1. 维护相应的物料视图
  2. 将物料维护到多个工厂
  3. 可能需要对物料进行分割评估
  4. 对某些字段,需要在BAPI中做增强处理进行维护

2代码实现

2.1物料基本数据

1.基本数据

博客频遭盗窃,浏览全文,请移步公众号“斌将军”,输入关键字“物料批导”查看

输入项目定义编号和参数文件

2.声明要维护的视图

3.之后根据前台相应字段所在的表,在BAPI参数中找到对应的BAPI参数并维护即可

4.最后调用BAPI_MATERIAL_SAVEDATA创建物料主数据

该BAPI可以满足创建、修改物料,还可以将物料扩展到其他工厂

2.2维护物料长文本

2.3维护分类视图

2.4维护质量视图

2.5启用分割评估

2.5启用分割评估

在实际业务中,需要对物料的会计视图,启用分割评估。

前台操作为,MM02,进入会计视图,并输入现有的工厂,输入评估类别,保存

退出后MM01进入,输入工厂和评估类型

3.物料主数据增强

在通过BAPI维护过程中,发现有的物料在BAPI参数中找不到,此时就需要通过增强维护。

物料基本视图2中有物料时可配置的字段,需要打钩,而BAPI参数中找不到该参数,但是这个参数是存在于MARA表中的KZKFG

在自定义BAPI结构中,添加该字段

还有更新结构,也要添加,注意组件类型为更新类型

定义参数

代码示例:

4.问题记录

4.1配置问题

4.2删除物料

4.2.1 集团级别删除物料

4.2.2 工厂级别删除物料

4.3报错问题

4.3.1 字段BWKEY已被不一致地转移或字段是空的

5.源代码 

"-----------------------------@斌将军-----------------------------
FORM frm_bapi_creat.

*--------------------------------------------------------------------*
*           BAPI 字段
*--------------------------------------------------------------------*
*  物料文本
  DATA:ls_header TYPE thead, "
       lt_lines  TYPE STANDARD TABLE OF tline,
       ls_lines  TYPE tline.

  DATA: ls_mdma    LIKE mdma,
        ls_dpop    LIKE dpop,
        ls_sdibe   TYPE sdibe_massfields,
        ls_return2 TYPE bapireturn1,
        lt_return2 TYPE TABLE OF bapireturn1.
  "质量视图
  DATA:ls_qmat TYPE bapi1001004_qmat,
       lt_qmat TYPE TABLE OF bapi1001004_qmat.

  DATA:lv_land1        TYPE t001w-land1, "国家代码
       lv_tax_type     TYPE tatyp VALUE 'MWST', "税类别
       lv_matnr        TYPE mara-matnr, "物料号
       lv_objectkeynew TYPE bapi1003_key-object,
       lv_message      TYPE char200, "消息
       lv_msg          TYPE char200, "消息
       lv_check        TYPE char2. "检查

  "进度条使用标志
  CLEAR:gv_flag.
  DESCRIBE TABLE gt_template LINES gv_lines.
  LOOP AT gt_template INTO gs_template WHERE icon <> icon_led_red.

    "当前条目
    gv_tabix = gv_tabix + 1.
    "进度条
    PERFORM frm_indicator USING gv_tabix.

    REFRESH:gt_makt[],gt_mlan[],gt_mltx[],gt_marm[],gt_marmx[],gt_mean[],gt_return.
    CLEAR:gs_headdata,gs_mara,gs_marax,gs_marc,gs_marcx,gs_mpop,gs_mpopx,gs_mpgd,
    gs_mpgdx,gs_mard,gs_mardx,gs_mlgn,gs_mlgnx,gs_mvke,gs_mvkex,gs_mlgt,gs_mlgtx,
    gs_mbew,gs_mbewx,gs_return,gt_makt,gt_mlan,gt_mltx,gt_marm,gt_marmx,gt_mean.
*&---------------------------------------------------------------------*
*& 基本数据1
*&---------------------------------------------------------------------*
    gs_headdata-material = gs_template-matnr.  "SAP物料编码

    gs_headdata-ind_sector = gs_template-mbrsh.  "行业
    gs_headdata-matl_type = gs_template-mtart.  "物料类型

    gs_marc-plant = gs_template-werks.  "工厂
    gs_marcx-plant = gs_template-werks.
*--------------------------------------------------------------------*
*维护视图
*--------------------------------------------------------------------*
*    IF p_jb = 'X'.
    gs_headdata-basic_view = 'X'."基本数据视图
*    ENDIF.
    IF p_xs = 'X'.
      gs_headdata-sales_view = 'X'."销售视图
    ENDIF.
    IF p_cg = 'X'.
      gs_headdata-purchase_view = 'X'."采购视图
    ENDIF.
    IF p_mrp = 'X'.
      gs_headdata-mrp_view = 'X'."MRP视图
    ENDIF.
*    IF p_gz = 'X'.
*      gs_headdata-work_sched_view = 'X'."工作计划视图
*    ENDIF.
    IF p_kj = 'X'.
      gs_headdata-account_view = 'X'."会计视图
    ENDIF.
    IF p_cb = 'X'.
      gs_headdata-cost_view = 'X'."成本视图
    ENDIF.
    IF p_zl = 'X'.
      gs_headdata-quality_view = 'X'."质量视图
    ENDIF.
    IF p_cc = 'X'.
      gs_headdata-storage_view = 'X'."存储视图
    ENDIF.
*    IF p_ck = 'X'.
*      gs_headdata-warehouse_view = 'X'."仓库管理视图
*    ENDIF.

<think>好的,用户需要关于SAP MM01分类视图批量入BAPI的使用示例。首先,我需要回忆一下相关的BAPI函数。根据之前的引用,分类视图的入可能涉及BAPI_OBJCL_CREATE,而不是在物料主数据保存时处理。用户提到的MM01事务可能与物料主数据创建有关,而分类视图需要在物料创建后单独处理。 接下来,我需要确认正确的BAPI。引用[1]提到分类视图使用BAPI_OBJCL_CREATE,而物料主数据使用BAPI_MATERIAL_SAVEDATA。所以,步骤应该是先创建物料,再调用BAPI_OBJCL_CREATE来添加分类数据。 然后,用户需要示例代码。我需要构造一个ABAP的例子,展示如何调用这些BAPI。需要注意的是,BAPI_OBJCL_CREATE需要对象号、类号、分类类型等参数,以及特性值。同时,要处理返回的消息,确认是否成功。 另外,用户可能遇到的问题包括如何获取类编号、分类类型是否正确,以及特性值的格式。需要提醒用户检查这些参数,并确保在物料创建之后再进行分类视图的入。 还需要考虑事务提交,比如使用BAPI_TRANSACTION_COMMIT来提交更改。同时,错误处理部分,比如如果BAPI返回错误,应该回滚事务。 最后,根据用户提供的引用,特别是引用[3]关于BAPI开发的步骤,可能需要指用户使用SWO1事务来查看业务对象,但示例中可能不需要深入这部分。主要焦点是给出清晰的代码示例和使用步骤。 现在,整理这些信息,分步骤说明,并确保代码正确,参数正确,同时引用相关的引用来源。最后生成相关问题,帮助用户进一步了解相关BAPI的使用。</think>### SAP MM01分类视图批量入BAPI示例教程 在SAP中,物料主数据分类视图的批量入需分两步实现:首先使用$BAPI\_MATERIAL\_SAVEDATA$创建物料主数据基础视图,再通过$BAPI\_OBJCL\_CREATE$为物料分配分类特性[^1]。以下是具体实现步骤和代码示例: --- #### **步骤1:创建物料主数据基础视图** 调用$BAPI\_MATERIAL\_SAVEDATA$创建物料,需填充基础数据(如物料号、行业领域、基本视图): ```abap DATA: ls_head TYPE bapimathead, ls_return TYPE bapiret2. ls_head-material = 'MAT001'. "物料号 ls_head-ind_sector = 'M'. "工业领域(M表示机械工程) ls_head-basic_view = 'X'. "激活基本视图 CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = ls_head IMPORTING return = ls_return. IF ls_return-type = 'E'. ROLLBACK WORK. WRITE: / '物料创建失败:', ls_return-message. ELSE. COMMIT WORK AND WAIT. WRITE: / '物料创建成功:', ls_return-message. ENDIF. ``` --- #### **步骤2:批量入分类视图** 使用$BAPI\_OBJCL\_CREATE$为已创建的物料分配分类特性,需提供以下参数: - `OBJECTKEY`:物料号(需拼接表名,如`MATERIAL=MAT001`) - `CLASSNUM`:分类类编号(如`001`) - `CLASSTYPE`:分类类型(如`023`表示物料分类) - `CHARACT_VALUES`:特性值表 ```abap DATA: lt_allocvalues TYPE TABLE OF bapi1003_alloc_values, ls_allocvalues TYPE bapi1003_alloc_values, lt_return TYPE TABLE OF bapiret2. "1. 设置分类特性值 ls_allocvalues-charact = 'COLOR'. "特性名称(如颜色) ls_allocvalues-value_char = 'RED'. "特性值 APPEND ls_allocvalues TO lt_allocvalues. "2. 调用BAPI分配分类 CALL FUNCTION 'BAPI_OBJCL_CREATE' EXPORTING objectkey = 'MATERIAL=MAT001' "物料号格式 objecttable = 'MARA' classnum = '001' "分类类编号 classtype = '023' "分类类型(物料) status = '1' "状态:1=有效 TABLES allocvalues = lt_allocvalues return = lt_return. "3. 检查错误并提交 LOOP AT lt_return INTO DATA(ls_msg) WHERE type CA 'AEX'. WRITE: / '错误:', ls_msg-message. ENDLOOP. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. WRITE: / '分类视图入成功'. ELSE. ROLLBACK WORK. ENDIF. ``` --- #### **关键参数说明** 1. **OBJECTKEY**:需遵循格式`<表名>=<物料号>`,例如`MATERIAL=MAT001`。 2. **CLASSNUM**:通过事务代码$CL02$查询分类类编号。 3. **CLASSTYPE**:固定为`023`(物料分类)[^4]。 4. **特性值表**:需确保特性名称与分类定义一致,否则会报错`特性不存在`。 --- #### **注意事项** - **依赖顺序**:必须**先创建物料**再分配分类视图,否则会报错`物料不存在`。 - **事务提交**:分类视图操作需显式调用$BAPI\_TRANSACTION\_COMMIT$提交。 - **错误处理**:需检查$RETURN$表,若存在错误需回滚事务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值