MB51选择屏幕与报表增强

作者:斌将军 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发

**1**

**文档说明**

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

> 如之前文档《MIGO新增页签增强》,在MIGO中增强自定义字段

>

> 斌将军,公众号:斌将军 [ MIGO新增页签增强

> ](https://mp.weixin.qq.com/s?__biz=Mzg5OTg3ODg2MQ==&mid=2247485482&idx=1&sn=1e0c8910c45e8921456e4a984253fed4&chksm=c04dd288f73a5b9ec238b43b292f7f282a5f1df107cbc3fcca39fe55ebef12002f22f6cb0667#rd)

如之前文档《MIGO新增页签增强》,在MIGO中增强自定义字段,那么在查询MB51时,想通过自定义字段进行筛选,并将数据展示到报表中,就需要对MB51进行增强。

此处需要说明,文档《MIGO新增页签增强》中是将自定义字段存入自建表中,读者也可以自己研究,是否能将字段存入标准表MSEG中。两种做法不同,则在本篇文档中的做法也有一定区别,请读者予以辨别。

**2**

**增强实施**

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

**2.1**

**增强字段**

文档《MIGO新增页签增强》中将MIGO增强字段存储在表ZTPP001中

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

因为需要将数据展示在报表中,所以要在标准表中增强该字段

MSEG

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

MATDOC

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

此处请注意,如果增强的字段和MIGO中增强的字段名称一致,则需要修改MIGO增强页签中的一段逻辑

文档《MIGO新增页签增强》中在增强方法IF_EX_MB_MIGO_BADI~POST_DOCUMENT中,将MIGO增强的字段存表时,为了得到物料凭证、年度、行项目的值,曾使用MOVE-

CORRESPONDING,将MSEG结构的数据传递到自建表的内表中。如果MSEG增强字段和ZTPP001字段名一致,就会使ZTPP001的ZNUM被MSEG的ZNUM(空值)覆盖掉,所以此处可以单独将物料凭证、年度、行项目赋值给ZTPP001的内表。当然,读者也可以定义不一样的字段名,避免覆盖的情况。

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

**2.2**

**配置选择屏幕**

可以通过配置,为MB51新增筛选和展示字段

TCODE:SPRO

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

新增对应字段,其中选择字段:显示在选择屏幕中,输出字段:显示在报表中

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

保存之后,重新执行MB51,标准代码则自动更新,此时单据号字段就显示在选择屏幕上

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

查看包含文件RM07DOCS_GENERATED,可以看到代码更新的时间

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

选择屏幕代码中也已经自动添加了ZNUM

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

**2.3**

**隐式增强**

在RM07DOCS_GENERATED的子例程FORM DATA_SELECTION_NEW开头位置创建隐式增强

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

代码如下

"--------------------@斌将军--------------------IF sy-tcode = 'MB51'. IF znum[] IS NOT INITIAL."当选择屏幕筛选字段有值 SELECT mblnr, mjahr, zeile, znum FROM ZTPP001 INTO TABLE @DATA(lt_ztpp001) WHERE znum IN @znum. "将物料凭证、年度、行项目赋值到对应的筛选字段中 LOOP AT lt_ztpp001 INTO DATA(ls_ztpp001). mblnr-low = ls_ztpp001-mblnr. mblnr-sign = 'I'. mblnr-option = 'EQ'. APPEND mblnr. CLEAR mblnr. mjahr-low = ls_ztpp001-mjahr. mjahr-sign = 'I'. mjahr-option = 'EQ'. APPEND mjahr. CLEAR mjahr. zeile-low = ls_ztpp001-zeile. zeile-sign = 'I'. zeile-option = 'EQ'. APPEND zeile. CLEAR zeile. CLEAR:ls_ztpp001. ENDLOOP. "标准表中该字段是空的,并不存值,所以此处要清空, "避免标准代码用此字段筛选查询MSEG表,导致数据为空,所以此处要清空 CLEAR znum[]. ENDIF.ENDIF."--------------------@斌将军--------------------

同样的代码,增强到以下子例程的开头处

FORM DATA_SELECTION
FORM DATA_SELECTION_VIA_MATNR
FORM DATA_SELECTION_VIA_BUDAT

在RM07DOCS的FORM detail_list中创建隐式增强,将该字段数据赋值到ALV中

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

代码如下

"--------------------@斌将军--------------------ENHANCEMENT 5 ZEMM_MB51_APPEND. "active versionIF list[] IS NOT INITIAL. DATA(lt_list) = list[]. SELECT ztpp001~mblnr, ztpp001~mjahr, ztpp001~zeile, ztpp001~ZNUM FROM ZTPP001 INNER JOIN @lt_list AS LIST ON ztpp001~mblnr = LIST~MBLNR AND ztpp001~mjahr = LIST~mjahr AND ztpp001~zeile = LIST~zeile INTO TABLE @DATA(LT_ZPP001).

SORT LT_ZPP001 BY MBLNR MJAHR ZEILE.

LOOP AT list ASSIGNING FIELD-SYMBOL(<fs_list>). READ TABLE LT_ZPP001 INTO DATA(LS_ZPP001) WITH KEY mblnr = <fs_list>-MBLNR mjahr = <fs_list>-mjahr zeile = <fs_list>-zeile BINARY SEARCH. IF SY-SUBRC EQ 0. <fs_list>-ZNUM = LS_ZPP001-ZNUM. ENDIF. ENDLOOP. ENDIF.ENDENHANCEMENT."--------------------@斌将军--------------------

**2.4**

**测试效果**

输入单据号

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

数据表中存储的数据

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

运行结果

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

**2.5**

**问题说明**

此方法实现的屏幕筛选,并不能像常规一样,多个筛选条件取交集,而是与其他筛选字段取并集。读者可以根据项目情况,灵活更改代码实现需求。

**3**

**MB51代码重置**

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

正常情况下,如上文中配置完屏幕字段后,运行MB51,对应的MB51源码就能更新。但是也存在个例,运行MB51时,源代码没有更新过来,选择屏幕中并没有对应的字段

推测原因,有系统本身的原因,也有可能是开发的增强与MB51要更新的代码出现了冲突,导致更新失败。

例如:有的选择屏幕字段,是直接增强上去的,而不是配置的,导致配置的字段与原本增强的字段重复,所以更新失败

** 解决方法一: **

注释选择屏幕中自开发的增强字段和相关的增强,然后运行MB51,保证程序不DUMP的情况下,程序就会自动再更新源码

** 解决方法二: **

如果仍然不能更新,则采用以下办法,根据官方提供的程序,手动执行更新

首先注释与选择屏幕相关的自开发增强逻辑,保证源码被重置时,使用到选择屏幕等字段的相关逻辑不报错,保证MB51的正常运行

找到官方NOTE:

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

根据官方源码,创建并执行程序

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

对比前后的RM07DOCS_GENERATED,可以发现选择屏幕等源代码全部都没了

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

执行事务代码MB51,重新生成对应代码

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图

配置的字段就更新进来了

MB51选择屏幕与报表增强 - 封面图
MB51选择屏幕与报表增强 - 封面图
斌将军

关于作者:斌将军

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

来源说明:本文内容由「MB51选择屏幕与报表增强.md」整理生成,仅用于内部技术分享与学习交流。