SAP 工具箱动态调用物料修改的 BAPI 函数

作者:ABAP技巧与实战 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, MM, 开发, 物料管理
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

前言

物料主数据批量修改是一个项目中常有的需求 .

之前曾经写过一篇文章,介绍了标准的批量修改工具MASS以及一个开发的工具ZUP_ANY

> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 批量更新任意表字段内容

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486782&idx=1&sn=799f9e61c2bbaac4381feae88496383d&chksm=cf5dd008f82a591e8b33ddb739c87381d4abf4f64b51534b067af6d84f956a1dfef59395fb85&scene=21#wechat_redirect)

基于这两者的缺点,从使用者的角度.以及扩展性的角度.尝试了一种新的物料批量修改方式

**通用修改程序及动态调用物料修改的BAPI函数结合的物料批量修改方式**

MASS缺点

MASS的最大缺点可能就是易用性,根据前言中的链接对MASS的执行步骤统计, 需要12个步骤才能完成物料主数据的批量修改.

其次是授权无法控制, 从下图可以看到, MASS仅能控制数据维护对象.一旦开放了物料主数据对象, 意味着用户能修改物料的任意字段.

基于上述两点理由: MASS无法开放给最终用户使用.

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

ZUP_ANY缺点

• 易用性

通过与通用修改程序结合,已经解决了易用性.

> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用修改程序(一 简介)

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247487788&idx=1&sn=fc797a64874c042d31da33bb91f2e0dc&chksm=cf5dcc1af82a450cd38be3ebf1e10cf5ccc12c3d9b52ac95bfdfbce7c8a7f3b7881eec609aee&token=470123494&lang=zh_CN&scene=21#wechat_redirect)

• 信任度

因为ZUP_ANY是直接更新数据库表,增强字段的直接更新肯定没问题, 大部分标准字段的更新大概率也不会有问题. 个别标准字段的更新可能有问题.

(可以通过配置控制是否可以更新特定字段). 这样带来的问题是,更新的标准字段需要通过验证确保直接更新不会带来风险.

调用标准物料修改的BAPI则可以解决信任度的问题

动态调用BAPI函数

整体逻辑封装在类 ZCL_MATERIAL_BAPI 中. 目前仅支持工业行业的物料主数据,后续根据项目情况补充零售行业的BAPI

_**01** _

**思维导图**

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

_**02** _

**待补充完善部分**

其中添加表与BAPI参数关系 及BAPI参数的删除重复项部分需要后续根据项目情况补充更多的内容,暂时只支持

MARA,MARC,MBEW,MARD,MVKE等常用表

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

调用方式

如下图, 定义一个函数(该函数后续在通用修改中配置调用),传入通用内表,为了简化对通用内表的处理, 在函数中定义一个特定内表,包含相关信息.

特定内表调用类方法即可

CALL METHOD zcl_material_bapi=>common_mm01( CHANGING ct_data = lt_data ).
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

与通用修改程序的整合

配置ZTBC_CHANGE_C1.使用上述的保存函数Z_BC_PP1065_SAVE

其中ZDDL_PP1065是CDS视图, 完成业务部分逻辑,比如数据的限制条件或关联其它要显示的内容.

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

整合后, 就可以达成如下的界面处理

事务代码进入通用修改程序界面

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

通过动态生成的选择屏幕限制数据, 限制的数据可以自动保存,也可以保存变式,以便后续载入使用

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

可以添加批量修改按钮,通过下图三个配置项完成. (需要先完成相应的开发对象)

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

成功/失败信息通过处理标记的图标呈现. 错误消息集中放到消息字段, 也可以通过双击处理图标,显示详细的BAPI返回消息.

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

总结

动态调用物料的BAPI函数是一个封装的类,目的是简化BAPI调用的代码编写. 传入的动态内表只需要包含

• 关键字

• 待修改字段

• 附加控制字段(ZZICON,MESSAGE,ERRNO)

剩余调用BAPI部分由类中方法实现. 极大的简化了修改物料主数据特定字段的程序的开发. 再配合通用修改程序,可以快速完成一个指定字段的物料主数据修改程序.

SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图
SAP 工具箱动态调用物料修改的 BAPI 函数 - 封面图

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

申请进入公众号讨论群提问或者参与话题讨论

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP工具箱动态调用物料修改的BAPI函数.md」整理生成,仅用于内部技术分享与学习交流。