【 LOOP AT 语句中AT FIRST,AT LAST,AT NEW和AT END OF的用法】

当需要遍历内部表并根据特定条件执行特定操作时,可以在LOOP AT 语句中使用AT FIRST、AT LAST、AT NEW 和 AT END OF等控制结构。

AT FIRST

用于在首次进入内表循环时执行特定操作。当处理循环的第一条记录时,会触发 AT FIRST 之后的代码块。

LOOP AT lt_ekpo INTO ls_ekpo.  
  AT FIRST.  
    WRITE: / '采购订单数据开始:'.  
  ENDAT.  
  WRITE: / ls_ekpo-ebeln, ls_ekpo-ebelp, ls_ekpo-txz01.  
ENDLOOP.

AT LAST

AT LAST 相对应于 AT FIRST,用于在处理内表的最后一条数据时执行特定操作,当循环的最后一行被处理时,会执行 AT LAST 下面的代码。

LOOP AT lt_ekpo INTO ls_ekpo.  
  WRITE: / ls_ekpo-ebeln, ls_ekpo-ebelp, ls_ekpo-txz01.  

  AT LAST.  
    WRITE: / '采购订单数据处理完毕。'.  
  ENDAT.  
ENDLOOP.

AT NEW

用于检测到内表中的关键字段变化时执行特定操作,在循环过程中,如果当前条目的关键字段值与前一个条目不同,则会执行 AT NEW 下面的代码。

SORT lt_ekpo BY ebeln ebelp.  
LOOP AT lt_ekpo INTO ls_ekpo.  

  AT NEW ebeln.  
    WRITE: / '采购订单:', ls_ekpo-ebeln.  
  ENDAT.  

  WRITE: / ls_ekpo-ebelp, ls_ekpo-txz01.  
ENDLOOP.

AT END OF

用于在特定字段的所有记录处理完毕后触发。当循环到同一字段的最后一个条目时,会执行 AT END OF 下面的代码。

SORT lt_ekpo BY ebeln ebelp.  
LOOP AT lt_ekpo INTO ls_ekpo.  

  AT NEW ebeln.  
    WRITE: / '采购订单:', ls_ekpo-ebeln.  
  ENDAT.  

  APPEND ls_ekpo TO lt_ekpo_tmp.  

  AT END OF ebeln.  
    LOOP AT lt_ekpo_tmp INTO DATA(ls_group).  
      WRITE: / ls_group-ebelp, ls_group-txz01.  
    ENDLOOP.  
    WRITE: / '该订单的所有项目处理完毕。'.  
  ENDAT.  
ENDLOOP.

注意:在输出时按采购订单分组,必须在循环之前对内表按 EBELN 排序,这可以确保相同的字段值相邻,当处理每条记录时,只有当 EBELN 改变时,AT NEW 控制结构才能正确触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值