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語(yǔ)句區(qū)別:
AT FIRST: 循環(huán)內(nèi)表的第一行時(shí)觸發(fā)執(zhí)行的代碼吕世,只執(zhí)行一次缭裆。
AT LAST: 循環(huán)內(nèi)表的最后一行數(shù)據(jù)時(shí)執(zhí)行代碼市咆,只執(zhí)行一次慢宗。
AT NEW F1: 如果字段F1及F1的左則全部字段的數(shù)據(jù)犁享,與上一行數(shù)據(jù)不一致余素,則執(zhí)行代碼。
AT END OF F1: 如果字段F1及F1的左則全部字段的數(shù)據(jù)炊昆,與下一行數(shù)據(jù)不一致時(shí)桨吊,則執(zhí)行代碼。
注意事項(xiàng):
這四種AT....End AT語(yǔ)句凤巨,都只能用在loop循環(huán)內(nèi)表語(yǔ)句中视乐。
AT NEW F1和AT END OF F1時(shí)需要注意:內(nèi)表中字段F1之后的字段的值都會(huì)變成 *
control level 不能在有where條件的loop內(nèi)表時(shí)使用
代碼檢查報(bào)錯(cuò):
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之后的字段的值,怎么辦磅甩?
可以在使用該語(yǔ)句之前將值賦值給一個(gè)中間變量炊林。