SAP小技巧 MB51配置扩展

前言

标准报表MB51用来显示物料凭证清单, 这个报表中没有包含物料,物料工厂视图的属性. 项目上提出增强这个报表

本文介绍了怎么改造标准报表MB51,让它能够通过配置添加物料或物料工厂属性作为选择和输出清单字段

PS 图片是AI生成, 有点抽象

标准配置

配置表 MMIM_REP_CUST 可以配置MB51报表的选择字段和输出字段. 但是标准配置仅支持MKPF/MSEG两个表的字段. 如果尝试用SE16N强制加入其它表字段,比如MARA MATKL

其中字段 日期-数据-组(DTG) 放入最新时间戳, 以便触发MB51重新生成程序

重新执行MB51. 该字段不会生效, 同时程序会自动从表里删除新增的记录

410081c17da9ac7ba39364195b1f2f9a.png

删除记录

程序RM07DOCS 4516行左右

 FORM auto_repair.  负责干这个活. 

凡是不符合统一思想认知的. 系统负责清理掉. 

为了使用标准配置增强MB51的功能, 先干掉这个杀手. 找到auto_repair 例程, 例程末尾的删除表内容重新的操作去掉即可.

2b2e0f2e08ee3e2531c8351e476e39b4.png

新增配置报错

好容易新增的记录保留下来了, 生成的程序无法执行,提示语法错误. 详细报错如下

结果加入的表,字段在生成的SQL语句中使用了如图模式,导致执行报错.

并且这个错误导致整个报表的语法报错. 无法再次生成程序.

只能用Z_EDIT 把生成的部分代码中 RM07DOCS_GENERATED 从其它系统复制过来, 再次执行MB51重新生成代码.

416c4ed240a5a3ba8973a4b55cd667e8.png

另一个思路

看来配置标准表还需要去重写SQL语句的生成部分逻辑以及其它可能的逻辑 这个有点麻烦.

如果考虑启用自己的配置表. 报表中补充字段仅需要考虑如下几点:

  • 定义自己的配置表

  • 嵌入标准的生成逻辑,生成一下选择屏幕

  • 自定义字段嵌入到内表中

  • ALV输出前把字段放到FCAT中

  • ALV输出前补充内表中自定义字段的内容

但是因为没有把查询字段嵌入到原SQL语句中, 可能导致原SQL语句无法因为这个限制减少数据的读取量. 带来一些性能问题. 但是如果要把这个新的选择条件嵌入原SQL语句,又得全面理解该程序的所有生成代码逻辑. 复杂度太高.

挑战

考虑再三, 还是决定挑战 调整系统生成代码的逻辑

通过多次调整. 实现效果如下

在配置表中新增字段 MARA-MATKL 及MARC-DISPO 字段:日期-数据-组设置最新的时间戳

9010909e332a6a073171d3704efd1f03.png

执行MB51是, 系统会自动重新生成选择屏幕,然后进入生成后的选择屏幕,该屏幕包含了新配置的字段

64bcff61beee5e6072374ecea0069b4d.png

398a0a7c67f2c4759df0bde472174a82.png

标准程序的思路

在程序初始化的时候检查配置表的最大时间戳是否大于上次生成后记录的时间戳

如果大于,说明配置表存在变化, 执行生成代码逻辑,重新生成选择屏幕及SQL语句部分代码

生成后,再次调用MB51 .此时已经是新的选择屏幕.

基于上述思路, 仅需要调整标准程序生成选择屏幕及SQL语句的部分即可.

修改

标准程序修改的部分如下:

补充表定义

961cb9327a4a76a05c5d60fbdc0a01ab.png

补充选择屏幕定义

d1c08e4c5b486500197b231cd1e956ff.png

程序文本中补充

4494f77ed41a833470f6acb5c62e7a8d.png

优化SQL语句中的字段指定

65c996ec2457173068844a4dae68ae45.png

4984a078da916b1cfd0d8eca7def8cf5.png

4dc15bdb5c437684d233cbb3fdc785b4.png

去除对配置表的限制

4f3ddbb575af8a13e3ae81c1dce9ebb7.png

补充关联表MARA,MARC

93c19987b1db30d0422bd1daccb22459.png

b9766db1abbfe6247aa390a8dfb127f7.png

356d61ba1b5814e3a361e91729608d39.png

c01a47e781cc8845ed0d5ea81c04c2de.png

2b78e5bd000d008b22061ff600df334c.png

上述调整只能直接修改源代码, 不过系统的修改源码辅助会记录这些修改点.

通过传输请求号,可以方便的查询到所有修改点

8e5979978d6b896ee3cb3a421a0d9686.png

调整后, 允许配置表中任意配置MARA MARC的字段. 报表程序会自动适应新配置, 重新生成选择屏幕及相关代码.

总结

改造完MB51才发现. 费了老半天力气干的活,还不如用动态报表生成一个报表来的简单. 同时还允许用户自行增加选择条件.

详见链接

无峰,公众号:ABAP 技巧与实战动态报表D-Query简介

不过对标准程序的跟踪也学习到了一个动态程序的新思路

(之前也用过这个思路,做过一个动态定价查询报表, 

详见链接

无峰,公众号:ABAP 技巧与实战SAP工具箱之 统一条件查询报表

THE

END

约定

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

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值