ABAP报表数据处理:内表数据汇总COLLECT和AT END OF、AT*

ABAP报表数据处理:内表数据汇总COLLECT和AT END OF、AT*,第1张

1)在写abap 的过程中可能需要统计、求和等,那么在loop ... endloop 中间,有个AT <LEVEL>,<…>,ENDAT循环。其中的<LEVEL>包括: FRIST,LAST, NEW , END OF。

2)这些可以用来进行内表中按某个<u>字段f</u>进行分组统计。

3)当f字段或者f字段左边的字段内容发生变化时该事件后面的语句都会执行。

以下以处理工资报表数据为例(简化例子):

接下

以上在loop过程中对工资单数据分别按人事范围、部门汇总,最后做总的统计。

ABAP对内表插入数据有3种:APPEND,COLLECT,INSERT。

1) 要计算数字字段之和或要确保内表中没有出现重复条目,使用 COLLECT 语句,它根据标准关键字处理行(将关键字相同的其他数字字段值汇总)。

2)要在内表现有行之前插入新行,请使用 INSERT 语句。

3)要将内表条目内容复制到另一个内表中并且覆盖该目标表格,使用 MOVE 语句。

以下举例说明collect常见用法。

注意:此处itab作为汇总表定义为hashed table 且明确唯一key列(普通内表也可),collect要求非KEY列都得是数据类型(I,P,F)

DATA: itab LIKE TABLE OF wa_data with KEY col1 col WITH HEADER LINE .

具体的可以在程序属性的程序类型选择列表里面看到,主要是下面这几类:

1、可执行程序 (stand-along program类型为 1) ,特点是可以直接执行,而无需事务码,这个也是一般报表开发最常用的程序类型。

2、为屏幕绘制器画出的屏幕所用的模块池 (module pool程序类型为 M) ,包含了来自业务的屏幕模块的处理步骤,它只能通过事务码或者菜单功能调用。

3、包含程序 (include program程序类型为 I) ,包含了不能独立运行的程序代码,也就是说,无论你是在 SE38 里用执行功能还是通过事务码或菜单调用,都无法打开一个包含程序。它们的作用主要是让程序变得清晰和可以被重用,在其他程序里,用 INCLUDE 语句可以把一个包含程序加到程序里。最终的效果相当于用被包含的程序里的全部内容替换调 INCLUDE 语句。

4、子程序 (subroutine pool程序类型为 S) ,这种类型的程序里只包含被外部 PERFORM 语句调用的程序块。也就是说,只包含形如 FORM ... ENDFORM 块的程序代码,从外部程序里,用 PERFORM IN PROGRAM [IF FOUND]. 来调用。

5、函数组 (function group程序类型为 F) ,这类程序包含了函数模块。函数组和函数模块用函数制作器进行管理,事务码 SE37。在创建函数组和函数模块时,函数制作器把程序类型设置为 F。

6、接口池 (interface definitions程序类型为 J) 包含了接口。类和接口都在类制作器中管理,事务码 SE24。

7、类池 (class definitions程序类型为 K) ,包含了类。类和接口都在类制作器中管理,事务码 SE24。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7994332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存