DATA: BEGIN OF itab OCCURS 0,
f1 TYPE i,
f2(6) TYPE c,
f3(10) TYPE n,
f4(16) TYPE p DECIMALS 2,
END OF itab.
DATA: sub_tot(10) TYPE p DECIMALS 3.
**--1
itab-f1 = 1.
itab-f2 = 'ONE'.
itab-f3 = 10.
itab-f4 = '1000.00'.
APPEND itab.
CLEAR itab.
itab-f1 = 1.
itab-f2 = 'ONE'.
itab-f3 = 20.
itab-f4 = '2000.00'.
APPEND itab.
CLEAR itab.
itab-f1 = 1.
itab-f2 = 'ONE'.
itab-f3 = 30.
itab-f4 = '3000.00'.
APPEND itab.
CLEAR itab.
*--2
itab-f1 = 2.
itab-f2 = 'TWO'.
itab-f3 = 10.
itab-f4 = '1000.00'.
APPEND itab.
CLEAR itab.
itab-f1 = 2.
itab-f2 = 'TWO'.
itab-f3 = 20.
itab-f4 = '2000.00'.
APPEND itab.
CLEAR itab.
*-- 3
itab-f1 = 3.
itab-f2 = 'THREE'.
itab-f3 = 10.
itab-f4 = '1000.00'.
APPEND itab.
CLEAR itab.
itab-f1 = 3.
itab-f2 = 'THREE'.
itab-f3 = 20.
itab-f4 = '2000.00'.
APPEND itab.
CLEAR itab.
SORT itab BY f1.
LOOP AT itab.
AT FIRST.
WRITE: /35 ' MATERIAL DETAILS:'.
ULINE.
ENDAT.
AT NEW f1.
WRITE: / 'DETAILS OF MATERIAL:' COLOR 7 , itab-f1.
ULINE.
ENDAT.
WRITE: / itab-f1, itab-f2, itab-f3, itab-f4.
sub_tot = sub_tot + itab-f4.
AT END OF f1.
ULINE.
WRITE: / 'SUB TOTAL :' COLOR 3 INVERSE ON, sub_tot COLOR 3 INVERSE ON.
CLEAR sub_tot.
ENDAT.
AT LAST.
SUM.
ULINE.
WRITE: 'SUM:', itab-f4.
ULINE.
ENDAT.
ENDLOOP.
AT....End AT语句区别:
AT FIRST: 循环内表的第一行时触发执行的代码,只执行一次。
AT LAST: 循环内表的最后一行数据时执行代码,只执行一次。
AT NEW F1: 如果字段F1及F1的左则全部字段的数据,与上一行数据不一致,则执行代码。
AT END OF F1: 如果字段F1及F1的左则全部字段的数据,与下一行数据不一致时,则执行代码。
注意事项:
这四种AT....End AT语句,都只能用在loop循环内表语句中。
AT NEW F1和AT END OF F1时需要注意:内表中字段F1之后的字段的值都会变成 *
control level 不能在有where条件的loop内表时使用
代码检查报错:
The LOOP statement processing will be limited
(FROM, TO and WHERE additions in LOOP)
Interaction with group change processing (AT NEW, ...) is undefined
如果在AT NEW F1和AT END OF F1中需要用到F1之后的字段的值,怎么办?
可以在使用该语句之前将值赋值给一个中间变量。