ABAP LOOP AT事件块

AT FIRST

AT FIRST.
  代码块
ENDAT.
循环的第一条时执行代码块

AT LAST

AT LAST.
  代码块
ENDAT.
循环的最后一条时执行代码块

AT NEW

AT NEW 字段.
    代码块
ENDAT.
当该字段及其左边的任一字段发生改变时触发代码块,
即与上一行的相关字段有区别时触发代码块
第一行必定执行

AT END OF

AT END OF 字段.
    代码块
ENDAT.
若该字段及其左边任一字段将要发生改变时触发代码块,
即与下一行的相关字段有区别就触发
最后一行必定触发

ON CHANGE OF

ON CHANGE OF 字段.
    代码块
ENDON.
当该字段发生改变时触发代码块
该字段与上一行字段不同时触发
第一行必定触发

特别注意

使用AT事件时要提前对内表进行排序sort;

LOOP不能加where条件;

再AT 和 ENDAT之间不能再使用LOOP语法;

进入AT事件块后,工作区中的值除了key字段,其他字段会全部变为默认值,字符型字段值全变为*,数值全部变为0。(ON CHANGE OF不会)

DATA: BEGIN OF ls_data,
  c1 TYPE char2,
  c2 TYPE char2,
  c3 TYPE char2,
  c4 TYPE char2,
  END OF ls_data.
DATA: lt_data LIKE TABLE OF ls_data.

lt_data = VALUE #( c1 = '11' c2 = '11' ( c3 = '13' c4 = '14' )
                                       ( c3 = '23' c4 = '24' )
                                       ( c3 = '33' c4 = '34' )
                             c2 = '42' ( c3 = '43' c4 = '44' ) ).

LOOP AT lt_data INTO ls_data.
  AT NEW c2.
    WRITE:/ 'AT NEW', ls_data-c1,ls_data-c2,ls_data-c3,ls_data-c4.
  ENDAT.
  WRITE:/ '非AT', ls_data-c1,ls_data-c2,ls_data-c3,ls_data-c4.
ENDLOOP.

 

例子

DATA: BEGIN OF ls_data,
  c1 TYPE char2,
  c2 TYPE char2,
  c3 TYPE char2,
  c4 TYPE char2,
  END OF ls_data.
DATA: lt_data LIKE TABLE OF ls_data.

lt_data = VALUE #( c1 = '11' c2 = '11' ( c3 = '13' c4 = '14' )
                                       ( c3 = '23' c4 = '24' )
                             c2 = '42' ( c3 = '33' c4 = '34' )
                                       ( c3 = '43' c4 = '44' ) ).

"AT NEW
LOOP AT lt_data INTO ls_data.
  AT NEW c2.
    WRITE:/ 'AT NEW:', ls_data-c1,ls_data-c2,ls_data-c3,ls_data-c4,sy-tabix.
  ENDAT.
ENDLOOP.

ULINE.
"AT END OF
LOOP AT lt_data INTO ls_data.
  AT END OF c2.
    WRITE:/ 'AT AT END OF:', ls_data-c1,ls_data-c2,ls_data-c3,ls_data-c4,sy-tabix.
  ENDAT.
ENDLOOP.

ULINE.
"ON CHANGE OF
LOOP AT lt_data INTO ls_data.
  ON CHANGE OF ls_data-c2.
    WRITE:/ 'ON CHANGE OF:', ls_data-c1,ls_data-c2,ls_data-c3,ls_data-c4,sy-tabix.
  ENDON.
ENDLOOP.

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值