1. AT FIRST
描述:用于在第一次循环时执行的逻辑。
示例:
LOOP AT lt_data INTO ls_data. "处理逻辑
AT FIRST.
WRITE: / 'First record reached.'.
ENDAT.
ENDLOOP.
说明:
在上述示例中,"AT FIRST"会在循环开始时触发,并执行其下的逻辑。在本例中,它输出一条消息表示已达到第一条记录。
2. AT LAST
描述:用于在循环的最后一轮执行的逻辑。
示例:
LOOP AT lt_data INTO ls_data. "处理逻辑
AT LAST.
WRITE: / 'Last record reached.'.
ENDAT.
ENDLOOP.
说明:
在上述示例中,"AT LAST"会在循环结束前的最后一个记录处触发,并执行其下的逻辑。在本例中,它输出一条消息表示已达到最后一条记录。
3. AT NEW [field]
描述:用于在循环中识别指定字段field及之前的字段组合是新组时执行该逻辑。
示例:
LOOP AT lt_data INTO ls_data.
AT NEW field1.
WRITE: / 'Group:', ls_data-field1.
WRITE: / '-------------'.
ENDAT.
"其他处理逻辑
ENDLOOP.
说明:
在上述示例中,当字段field1和该字段前面的字段的值发生变化时,AT NEW field1会被触发,并执行其下的逻辑。在本例中,它输出一个新组的标题。
4. AT END OF [field]
描述:用于在循环中识别指定字段field及之前的字段组合是与下一行不同时,执行的逻辑,也就是组的最后一行执行的逻辑。
示例:
LOOP AT lt_data INTO ls_data.
"处理逻辑
AT END OF field1.
WRITE: / 'End of loop.'.
ENDAT.
ENDLOOP.
说明:
在上述示例中,AT END OF field1会在循环到当前组的最后一行时触发,并执行其下的逻辑。在本例中,它输出一条消息表示循环结束。
4. 示例
REPORT ztest_at_usage.
TYPE-POOLS: abap.
DATA: BEGIN OF it_data OCCURS 0,
col1 TYPE c,
col2 TYPE c,
col3 TYPE c,
END OF it_data.
DEFINE fill_data.
it_data-col1 = '&1'.
it_data-col2 = '&2'.
it_data-col3 = '&3'.
APPEND it_data.
CLEAR it_data.
END-OF-DEFINITION.
fill_data:
a a a,
a a a,
a b a,
a a b,
a b b,
a b c,
a b f,
a b c,
a c c,
a c d,
a d d,
a d g.
SORT it_data BY col1 ASCENDING
col2 ASCENDING.
LOOP AT it_data.
AT NEW col2.
WRITE:/ 'AT NEW col2',
it_data-col1,
it_data-col2,
it_data-col3.
ENDAT.
* 其他逻辑
WRITE: /1(8)'遍历到第',9(1) sy-tabix,'行',
it_data-col1,
it_data-col2,
it_data-col3.
AT END OF col2.
WRITE:/ 'AT END col2',
it_data-col1,
it_data-col2,
it_data-col3.
WRITE:/.
ENDAT.
ENDLOOP.
总体说明
这些控制语句可以与循环语句(如LOOP AT、DO…ENDDO等)结合使用,以便根据特定的条件或循环位置执行相应的逻辑。它们对于处理分组、边界情况和循环的特殊需求非常有用。