点击蓝字 关注我们
一
前言
项目中常常会碰到这个场景: 因为各种原因,已经导入的数据需要调整特定字段的内容.SAP提供了一个批量更改字段内容的功能. (事务代码MASS).
事务代码 MASS. 该功能只涵盖了27个对象类型及这些对象的相关表,如图1.超出这个范围则无法使用MASS修改大量数据的性能较差.
因为MASS的上述局限性.
在项目中开发了一个批量更新工具ZUP_ANY.用于更新指定表的指定字段内容
![](https://img.haomeiwen.com/i25794833/8a15ab3836064820.png)
图一
二
MASS执行过程
先简单介绍一下通过MASS修改商品属性的过程
10
选定对象类型
![](https://img.haomeiwen.com/i25794833/7a8051d9a73fdd98.png)
20
选择对象中的表
![](https://img.haomeiwen.com/i25794833/e938628b2232a03f.png)
30
选择表中的字段
![](https://img.haomeiwen.com/i25794833/26b29e98ae0bbcc0.png)
41
选择要修改的数据
点击执行后, 选择要修改的数据
![](https://img.haomeiwen.com/i25794833/9543325df50ef1d8.png)
42
批量修改
输入关键字后,系统会显示所有该数据的字段内容. 此时可以批量修改字段内容.
![](https://img.haomeiwen.com/i25794833/aef074b0766eae9d.png)
51
通过文件导入
需要事先准备EXCEL文件, 文件中输入关键字列和要修改的字段列及内容(可以不带标题)
![](https://img.haomeiwen.com/i25794833/5bfef6dbe6c44156.png)
52
选择文件属性
![](https://img.haomeiwen.com/i25794833/5ab2b63b1921b30c.png)
53
映射字段
![](https://img.haomeiwen.com/i25794833/48a698e32110741b.png)
54
预览数据
![](https://img.haomeiwen.com/i25794833/9f5263c4aad9f6a4.png)
55
显示待变更数据
进入和选择数据相同的内容(不同的是,此时目标值已经填写)
![](https://img.haomeiwen.com/i25794833/3706517ec160dcec.png)
60
执行测试按钮
![](https://img.haomeiwen.com/i25794833/aaa25e995713a74a.png)
70
保存修改
点击保存,完成修改
![](https://img.haomeiwen.com/i25794833/b45f9332320c84a4.png)
80
查看结果
查看商品的变更记录
![](https://img.haomeiwen.com/i25794833/0064cde892a87297.png)
三
通过ZUP_ANY完成该过程
通过ZUP_ANY修改商品属性的过程
01
执行ZUP_ANY
![](https://img.haomeiwen.com/i25794833/f6ea268e131ba3d7.png)
02
下载模板
下载模板,在模板中填写数据,重要字段通过批注描述字段的用法
![](https://img.haomeiwen.com/i25794833/22053e5607f1417f.png)
03
导入数据
点击执行后,数据写入内表
![](https://img.haomeiwen.com/i25794833/2b6fcb142fbd324b.png)
04
进入处理
点击保存后, 进入数据处理程序
![](https://img.haomeiwen.com/i25794833/57e0aafb5d9b7051.png)
05
执行处理
选中行,点击处理,此时报错,因为修改的是标准表的标准字段, 所以需要配置一下.
![](https://img.haomeiwen.com/i25794833/4ac280b4dfffa2ae.png)
06
配置字段允许
配置标准字段允许修改(ZTUP_ANY_C1)
![](https://img.haomeiwen.com/i25794833/e14b282d94be7c43.png)
07
执行通过
![](https://img.haomeiwen.com/i25794833/6c28eee3c3b3769d.png)
08
查看变更结果
查看商品的变更日志
![](https://img.haomeiwen.com/i25794833/5267f0b57b813cf1.png)
![](https://img.haomeiwen.com/i25794833/ddab0b4cfaed3f78.png)
四
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)
![](https://img.haomeiwen.com/i25794833/e94b093172ab1401.png)
图二
五
ZUP_ANY的开发思路
ZUP_ANY按照通用导入模板开发.
详见连接无峰,公众号:ABAP 技巧与实战SAP工具箱 配置导入模板
通用导入程序无峰,公众号:ABAP 技巧与实战SAP工具箱 通用导入程序
01
内容记录
导入的数据写入表ZTUP_ANY
通过四个字段存放所有表变更的信息
-
TABNAME 表名
-
TABKEY 主键
-
FIELDNAME 字段名
-
FIELDVALUE 字段值
![](https://img.haomeiwen.com/i25794833/fe4c07a8f96b797d.png)
02
处理程序
处理程序ZUP_ANY_PROC调用处理函数Z_BAPI_ANY_TABLE_UPDATE
函数中对于传入的数据执行如下校验
-
检查传入的数据属于同一个表
-
检查传入的数据主键相同.
-
检查字段是增强字段,或者是配置表中允许的字段
-
字段内容存在与码表内容中
调用动态SQL语句更新数据后,
-
查找表对应的变更对象,写入变更表CDHDR/CDPOS,
-
查找表对应的下传控制表,写入下传控制表
下传控制表: 主数据或单据保存后,通过配置表判断是否需要通过特定接口下传,如果需要,则把主键与接口编号写入特定的下传控制表,后续下传程序读取该下传控制表与业务表获取要下传的数据.
六
总结
ZUP_ANY 是项目中开发的一个用于更新任意表任意字段的程序.
实际使用时,可以不加限制的修改自定义表或标准表增强字段.
对于标准表字段的修改则需要谨慎对待,因为要确保该字段修改后不会影响业务处理逻辑.通过配置表ZTUP_ANY_C1来记录这个验证的结果.
后续可以考虑优化一下关联表的变更(提供一个配置表配置表字段的关联关系,包含主键的位置关系),在导入存在关联的表/字段内容后,自动产生一行关联表/字段的更新.
一般情况下:
-
配置表字段的更新比较安全
-
主数据表字段的更新相对安全
-
单据表字段的更新则需要谨慎一些.
一般情况下:
-
增强字段的修改相对安全些
-
标准字段的修改则需要谨慎一些
THE
END
网友评论