[转载]MB51直接输出至ALV的解决方案

http://gdxnskhy.blog.163.com/blog/static/6652021920124344446342/  

2012-05-03 16:55:09|  分类: SAP |  标签: |字号 订阅

一,前因

标准报表MB51只是增加了ALV functionuser选择是否需要显示更明细,如果在background job的情况,spool只能显示standard list

User提出需求,希望在后台执行时,能够直接跑出ALV格式的明细记录。

Standard format

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky

ALV format

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky

二,需求

后台执行时能够直接跑出如同点击[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky后,同样格式的ALV format report

三,方案

通过追查MB51source program RM07DOCS,可以发现MB51在点击[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky会触发user-command‘DETAIL’,同时调用subroutine‘detail_list’。(line 2600

subroutine没有任何参数,也就是说,所有的变量都是global或者local的,report display的数据源也全部存在全局变量list[]里。

这样就给了我们机会能够在user跑完MB51进行list output时做modification

enhancement framework出来之前,针对这种状况,我们只能期待SAP有提供享用的user-exit,或者将list[] exportparameter ID

再终结的方法就是参考MB51全部重新写一个ZBM51的程序出来,幸好这支report不是很复杂,不然~

然而,有了enhancement framework之后,提供可以在任何CLASS/FUNCTION/INCLUDEbegin line & end line加上自己需要的处理代码的机会。

所以,针对此次修改的目的,找到MB51程序中默认输出的subroutine,在end-of-selection event之后的subroutineoutput_list(line 1200)中进行修改。

修改步骤如下:

1,进入enhancement修改状态

2,显示implicit enhancement

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 点击之后程序中会多一些这样的横线,这就是我们可以增加enhancement spot的地方啦~~~~

3,创建enhancement spot

Step 1.

方法1,直接右击上图中引号行,按下图方式选择menu

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

方法2,置鼠标焦点于引号行,从menu进行创建

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

Step 2.选择enhancement mode(差别在于一个只定义,一个需要)

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

Step 3.创建新的enhancement implementation

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

Step 4. 创建composite enhancement implementation

新建一个composite enhancement implementation,他可以用来收集一般的enhancement implementation,后续检查除错会比较方便。

(如无特殊需求,请不要在创建时勾选上个画面的复选框,use this enhancement implementation without query in future,不然建好了想重来,就看不到了)

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

Step 5.创建enhancement implementation

4,对implementation进行coding

Step 1.

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

Step 2.已经可以在如下字段写入自己想要的代码

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

代码如下,我们只需要在background时,才会直接调用detail list,这样spool中就会同时存在ALV/STANDARD的两种format,看user需要啦~~

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

Step 3.保存&激活

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

5,大功告成,测试看看。

四,结果

前台跑:

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

后台跑:会比正常的多一个All spool lists

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 

点击all spool lists会出现两个spool no,因为此处我既保留了原有的format,又有新的ALV format,号码大一点的就是ALV格式的啦。

[转载]MB51直接输出至ALV的解决方案 - Jocky - Jocky
 
请使用浏览器的分享功能分享到微信等