ABAP 报表求和统计功能实现方法


在写abap 的过程中,可能需要统计,求和等

那么如何实现呢?

其实在loop ... endloop 中间,有个AT <LEVEL>,<…>,ENDAT循环. 其中的<LEVEL>包括: FRIST, LAST, NEW , END OF.这些可以用来进行内表中按某个字段进行分组统计.

FIRST 内 表的第一行
 LAST 内 表的最后一 行
NEW <f> 行组 的开头,与 字段 <f> 和 <f> 剩余字段中 的内容相同
 END Of <f> 行组 的结尾,与 字段 <f> 和 <f> 剩余字段中 的内容相同

 

AT - ENDAT 块中的语句 块使用这些 行条件代表 预定义的控 制结构。用 户可以使用 它们处理内 表中的控制 断点,而不 必使用 编程分支和循环 中所述的控 制语句自己 编程。
在 AT - ENDAT 语句块中, 工作区域没 有用当前表 格行进行填 充。初始化 所有不是标 准关键字部 件的字段( 参见
标识表格行 )。对于行 条件 FIRST 和 LAST, 系统用星号 (*) 改写所有标 准关键字段 。对于行条 件 NEW <f> 和 END OF <f>,系 统用星号 (*) 改写所有出 现在工作区 域中指定字 段 <f> 右边的标准 关键字段。 用户可根据 自己的需求 在 AT - ENDAT 语句块中填 充工作区域 。

 

DATA: BEGIN OF LINE,
         COL1 TYPE C,
         COL2 TYPE I,
         COL3 TYPE I,
      END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
LINE-COL1 = A.
DO 3 TIMES.
   LINE-COL2 = SY-INDEX.
   LINE-COL3 = SY-INDEX ** 2.
   APPEND LINE TO ITAB.
ENDDO.
LINE-COL1 = B.
DO 3 TIMES.
   LINE-COL2 = 2 * SY-INDEX.
   LINE-COL3 = ( 2 * SY-INDEX ) ** 2.
   APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
   AT END OF COL1.
      SUM."按Col1 求和.
      ULINE.
      WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
      SKIP.
   ENDAT.

   AT LAST.
      SUM."总求和.
      ULINE.
      WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
   ENDAT.
ENDLOOP.
其输出为:
A          1          1
A          2          4
A          3          9
________________________________
A          6         14

B          2          4
B          4         16
B          6         36
________________________________
B         12         56

________________________________
*         18         70