MB51报表是SAP查询物料凭证的标准报表,这报表使用频率非常高,涉及的使用部门非常广,基本上要使用SAP的部门都需要使用这报表,因此在实际项目中对这个报表的增强需求非常多,而且后期运维中也会不断有这方面增强的需求。在很多项目中,为更方便满足用户的不同需求,一般建议直接把这报表程序复制出来修改。
MB51报表增强不能使用1至3代增强,只能通过隐式增强实现,很多1至3代增强无法实施的,都需要隐式增强来实现,但隐式增强的实施难点在于不知道如何找到合适的隐式增强点,这对阅读源代码和Debug的能力较高,有些甚至还需要了解具体的业务逻辑才能找到正确增强点。
具体如何查找隐式增强点,不是文本重点,大家可以网上看看相关的博文,下面通过一个例子详细介绍下如何在MB51报表增加字段的增强实施步骤,大家在项目中如遇到这报表增强需求时可参考,可节省去找隐式增强点的时间。
这个例子业务需求如下:
要求MB51报表在查询工单相关的物料凭证时,需要能够查询到工单抬头的长文本中维护的信息(如下图)
解决方案:
在SAP MB51的标准报表是没有此字段信息的,如果需增加此字段信息,必须实施增强才能实现。MB51报表的标准程序为RM07DOCS,增强做在这程序里面,具体实施步骤如下。
1.SE38进入程序,找到相关增强点。
2.在程序的包含文件RM07DOCS_GENERATED中定义增强字段。
按如下步骤实施隐式增强。
创建增强项目
在此增强点写定义数据的代码
写完上面代码点击保存,继续下面步骤
3.在子程序DETAI_LIST上实施增强写上增强字段的取值逻辑
了解这里声明和代码的差异可参考如下文章(本例选择声明和代码都行)
https://baijiahao.baidu.com/s?id=1733787956841622108&wfr=spider&for=pc
具体代码如下
DATA: l_name TYPE tdobname ,
lt_lines LIKE TABLE OF tline ,
l_text TYPE string ,
ls_line TYPE tline .
FIELD-SYMBOLS : <FS_LIST> like LIST.
IF LIST[] IS NOT INITIAL .
LOOP AT LIST ASSIGNING <FS_LIST> .
IF <FS_LIST>-aufnr IS NOT INITIAL .
"前置补0
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = <FS_LIST>-aufnr
importing
output = <FS_LIST>-aufnr .
CONCATENATE sy-mandt <FS_LIST>-aufnr INTO l_name.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'KOPF'
language = sy-langu
name = l_name
object = 'AUFK'
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
LOOP AT lt_lines INTO ls_line.
CONCATENATE l_text ls_line-tdline INTO l_text.
ENDLOOP.
<FS_LIST>-LTEXT = l_text .
clear: l_text , ls_line , lt_lines.
ENDIF .
ENDLOOP.
ENDIF .
4.在BUILD_FIELDCATALOG增加上报表显示的字段信息
具体代码如下:
CLEAR fc_flat.
fc_flat-fieldname = 'LTEXT' .
fc_flat-seltext_m = '工单长文本' .
APPEND fc_flat.
5.最后激活增强
以上就是MB51报表上增强字段的全部步骤,只要能按逻辑取到的值,都可以按上面步骤添加到MB51报表里面,满足不同业务部门的查询需求。
本例MB51报表增强增加字段后的效果如下:
特别声明:以上纯属个人学习SAP软件应用的心得体会,不代表SAP官方和其它任何公司,仅可作为学习SAP参考,文中操作演示截图来源于SAP软件,相应著作权归SAP公司所有。