ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]MB51直接输出至ALV的解决方案

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

原创 Linux操作系统 作者:ftsz0079 时间:2012-11-06 13:40:09 0 删除 编辑

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

2012-05-03 16:55:09|  分类: SAP |  标签: |字号大中小 

一,前因

标准报表MB51只是增加了ALV function供user选择是否需要显示更明细,如果在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。

三,方案

通过追查MB51的source 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[] export到parameter ID中

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

然而,有了enhancement framework之后,提供可以在任何CLASS/FUNCTION/INCLUDE的begin 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
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16181884/viewspace-748439/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 转关于memory id
请登录后发表评论 登录
全部评论

注册时间:2012-07-16

  • 博文量
    47
  • 访问量
    70567