ABAP LOOP AT内表循环事件块

AT FIRST…ENDAT

在遍历至第一条数据时执行该代码块

AT LAST…ENDAT

在遍历至最后一条数据是时执行该代码块

ON CHANGE OF…ENDON

指定其中一个字段,当该字段发生变化时,执行该代码段,
执行时机:

  1. 第一行
  2. 指定字段与上一条不一致时

代码如下:

*声明一个结构
DATA: BEGIN OF gs_alv,
        va1 TYPE char2,
        va2 TYPE char2,
        va3 TYPE char2,
        va4 TYPE char2,
      END OF gs_alv.
*声明内表
DATA: gt_alv LIKE TABLE OF gs_alv.
*赋值宏
DEFINE append_va.
  gs_alv-va1 = &1.
  gs_alv-va2 = &2.
  gs_alv-va3 = &3.
  gs_alv-va4 = &4.
  APPEND gs_alv TO gt_alv.
  CLEAR gs_alv.
END-OF-DEFINITION.
*给内表赋值
append_va '11' '11' '11' '11'.
append_va '11' '11' '11' '22'.
append_va '22' '11' '11' '33'.
append_va '11' '22' '33' '44'.
*输出表内容:
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv1>).
  WRITE:/1 <fs_alv1>-va1,5 <fs_alv1>-va2,9 <fs_alv1>-va3,13 <fs_alv1>-va4.
ENDLOOP.
*遍历内表,测试on change of 。。。。endon语句,输出触发的那一行
write:/ sy-uline.
write:/'on change of'.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_02>).
  on CHANGE OF <fs_02>-va3.
    WRITE:/1 <fs_02>-va1,5 <fs_02>-va2,9 <fs_02>-va3,13 <fs_02>-va4.
  endon.
ENDLOOP.

测试结果如下:
在这里插入图片描述
在这里插入图片描述

AT NEW…ENDAT

遍历时会检查指定字段及左面所有字段,当其中之一发生改变,则执行该代码段,比如:
指定字段为上例中的va3,则程序会检查va1,va2,va3这三个字段,当其中之一发生变化,则会执行该代码段。其中第一行必执行
代码如下:

write:/ sy-uline.
write:/'AT NEW '.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_01>).
  AT NEW va3.
    WRITE:/1 <fs_01>-va1,5 <fs_01>-va2,9 <fs_01>-va3,13 <fs_01>-va4.
  ENDAT.
ENDLOOP.

测试结果如下:
在这里插入图片描述

AT END OF…ENDAT

遍历时会检查指定字段,及左面所有字段,当其中之一与下一行不一致时,执行该代码段,与AT NEW相反,该语句必然执行的是最后一行
代码如下:

write:/ sy-uline.
write:/'AT END OF '.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_03>).
  AT end of va3.
    WRITE:/1 <fs_03>-va1,5 <fs_03>-va2,9 <fs_03>-va3,13 <fs_03>-va4.
  ENDAT.
ENDLOOP.

测试结果如下:
在这里插入图片描述

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值