SAP 工具箱批量更新任意表字段内容

作者:ABAP技巧与实战 约 9 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, WM, 仓库管理, 开发, 数据工程, 系统管理
目录

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

**点击蓝字** 关注我们

前言

项目中常常会碰到这个场景: 因为各种原因,已经导入的数据需要调整特定字段的内容.SAP提供了一个批量更改字段内容的功能. (事务代码MASS).

事务代码 MASS. 该功能只涵盖了27个对象类型及这些对象的相关表,如图1.超出这个范围则无法使用MASS修改大量数据的性能较差.

因为MASS的上述局限性.

**在项目中开发了一个批量更新工具ZUP_ANY.用于更新指定表的指定字段内容**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

图一

MASS执行过程

先简单介绍一下通过MASS修改商品属性的过程

**_10_ **

**选定对象类型**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_20_ **

**选择对象中的表**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_30_ **

**选择表中的字段**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_41_ **

**选择要修改的数据**

点击执行后, 选择要修改的数据

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_42_ **

**批量修改**

输入关键字后,系统会显示所有该数据的字段内容. 此时可以批量修改字段内容.

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_51_ **

**通过文件导入**

需要事先准备EXCEL文件, 文件中输入关键字列和要修改的字段列及内容(可以不带标题)

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_52_ **

**选择文件属性**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_53_ **

**映射字段**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_54_ **

**预览数据**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_55_ **

**显示待变更数据**

进入和选择数据相同的内容(不同的是,此时目标值已经填写)

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_60_ **

**执行测试按钮**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_70_ **

**保存修改**

点击保存,完成修改

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**_80_ **

**查看结果**

查看商品的变更记录

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

通过ZUP_ANY完成该过程

通过ZUP_ANY修改商品属性的过程

_**01** _

**执行ZUP_ANY**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**02** _

**下载模板**

下载模板,在模板中填写数据,重要字段通过批注描述字段的用法

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**03** _

**导入数据**

点击执行后,数据写入内表

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**04** _

**进入处理**

点击保存后, 进入数据处理程序

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**05** _

**执行处理**

选中行,点击处理,此时报错,因为修改的是标准表的标准字段, 所以需要配置一下.

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**06** _

**配置字段允许**

配置标准字段允许修改(ZTUP_ANY_C1)

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**07** _

**执行通过**

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**08** _

**查看变更结果**

查看商品的变更日志

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

MASS VS ZUP_ANY

对比一下MASS 与ZUP_ANY程序的优缺点.

建议还是尽量使用MASS大量变更数据, 除非碰到MASS不支持的数据对象,或者MASS性能实在太差时, 再使用ZUP_ANY更新.

_**01** _

**MASS的优点**

• 通过步骤引导用户选择要修改的对象,表,字段.通过选择或导入指定要变更的数据.

• 允许批量修改为目标值.

• 提供了测试功能,

• 记录了应用日志,

• 记录了变更文档.

• 标准程序,用户更有信心使用.

• 可以同时修改同一个表的多个字段

• 业务关联修改系统自动处理((比如MLAN-TAXM1修改后系统自动调整MARA-TAKLV)

_**02** _

**MASS的缺点**

• 支持对象有限,目前有27个对象的相关表中的字段允许修改.

• 修改增强字段需要额外配置(比如商品MARA的增强字段,需要先配置字段状态组,才能用MASS修改)

• 性能较差(因为要校验的逻辑过多)

_**03** _

**ZUP_ANY的优点**

• 任意表的非关键字都允许修改

• 默认支持自定义表或标准表的增强字段修改

• 对联合主键,允许使用通配符修改大量数据(如图二)

• 通过码表校验修改的字段内容

• 记录变更文档(自动识别待更新表/字段的变更对象)

• 记录下传控制表

• 便于处理不同数据的不同目标字段内容

• 修改信息同时记录在(ZTUP_ANY和变更文档中)

• 可以同时修改多个表的不同字段

_**04** _

**ZUP_ANY的缺点**

• 非查询式修改(待修改的数据需要用其它方式查询出来)

• 需要用户自行联合主键到一个字段中(需要注意主键顺序),如图二

• 对于标准字段的修改需要先行验证并配置(配置表:ZTUP_ANY_C1)

• 业务关联修改需要自行处理(比如MLAN-TAXM1 需要关联修改MARA-TAKLV)

• 下传控制表记录可能缺失(比如修改EKPO的字段,则无法记录采购订单的下传控制表ZTIFEKKO)

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

图二

ZUP_ANY的开发思路

ZUP_ANY按照通用导入模板开发.

> 详见连接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 配置导入模板

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486595&idx=1&sn=e42b7e6713689b36594d418f02454d1b&chksm=cf5dd1b5f82a58a379a76ea6e71ec2f278dd0aa8bcb2897e0669a60969276befa52c4b965cee&token=109355441&lang=zh_CN#rd)

> 通用导入程序 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用导入程序

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486562&idx=1&sn=c128d7ca1cef276fa214d09f13ec7c43&chksm=cf5dd154f82a5842d6a8ed74f03135e82681c34097fca1df711c553226808291aba92a0fa5e6&cur_album_id=1771862497143144448&scene=189#rd)

_**01** _

**内容记录**

导入的数据写入表ZTUP_ANY

通过四个字段存放所有表变更的信息

• TABNAME 表名

• TABKEY 主键

• FIELDNAME 字段名

• FIELDVALUE 字段值

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

_**02** _

**处理程序**

处理程序ZUP_ANY_PROC调用处理函数Z_BAPI_ANY_TABLE_UPDATE

函数中对于传入的数据执行如下校验

• 检查传入的数据属于同一个表

• 检查传入的数据主键相同.

• 检查字段是增强字段,或者是配置表中允许的字段

• 字段内容存在与码表内容中

调用动态SQL语句更新数据后,

• 查找表对应的变更对象,写入变更表CDHDR/CDPOS,

• 查找表对应的下传控制表,写入下传控制表

下传控制表

主数据或单据保存后,通过配置表判断是否需要通过特定接口下传,如果需要,则把主键与接口编号写入特定的下传控制表,后续下传程序读取该下传控制表与业务表获取要下传的数据.

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

总结

ZUP_ANY 是项目中开发的一个用于更新任意表任意字段的程序.

实际使用时,可以不加限制的修改自定义表或标准表增强字段.

对于标准表字段的修改则需要谨慎对待,因为要确保该字段修改后不会影响业务处理逻辑.通过配置表ZTUP_ANY_C1来记录这个验证的结果.

后续可以考虑优化一下关联表的变更(提供一个配置表配置表字段的关联关系,包含主键的位置关系),在导入存在关联的表/字段内容后,自动产生一行关联表/字段的更新.

一般情况下

• 配置表字段的更新比较安全

• 主数据表字段的更新相对安全

• 单据表字段的更新则需要谨慎一些.

一般情况下

• 增强字段的修改相对安全些

• 标准字段的修改则需要谨慎一些

** THE **

** END **

**约定**

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

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

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

SAP 工具箱批量更新任意表字段内容 - 封面图
SAP 工具箱批量更新任意表字段内容 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan 申请进入公众号讨论群

ABAP技巧与实战

关于作者:ABAP技巧与实战

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

来源说明:本文内容由「SAP工具箱批量更新任意表字段内容.md」整理生成,仅用于内部技术分享与学习交流。