ABAP 的 AT NEW 语法

AT NEW一般用在LOOP里面。

当我们在LOOP里面处理数据的时候,经常要执行的是当一个字段值改变了,然后我们怎么怎么做。这个就是要用AT NEW。其实有点像分组。

解释起来就是,我有一个内表itab里面有很多行数据,我现在一条一条的loop,当我里面要考虑的字段field的值变了,那这个AT NEW就被触发了。然后我就要执行一定的操作咯。在ENDAT之前。

就比如说咱处理销售订单表,按订单编号先来排个序之后。

SORT i_tab_VBAP by vbeln.
LOOP AT i_tab_VBAP.
   AT NEW vbeln.

   ENDAT.
ENDLOOP.

 其他类似的还有AT FIRST, AT  LAST, AT END OF。很明显的,咱能看出来,我们要去控制这些的字段值变化后的操作的话,首先得把内表按照这个字段来排序,要不然忙来忙去的,没意义。

AT FIRST就是处理遇到的第一个值。一般就是值处理这个分类组的第一个,也就是一般咱只要处理一次的状况。

SORT i_tab_VBAP by vbeln.
LOOP AT i_tab_VBAP.
 AT FIRST vbeln.
   WRITE: 'first number :", i_tab_VBAP-vbeln.
 ENDAT.
ENDLOOP.

 AT LAST也是一样的,最后一条的更改。

对于AT END OF,我们也来看一个例子:首先是按照werks工厂来排序内表,AT END OF意思是,当我的这条werks有更改了,也就是说可能1-5条工厂都是001,到第六条工厂变成002了,那我这个第五条就是end of werks了。我需要在到达这条时做些更改的。

REPORT z_at_end_of.

TYPES: BEGIN OF ty_tab,
         werks TYPE mard-werks,
         matnr TYPE mard-matnr,
         lgort TYPE mard-lgort,
       END OF ty_tab.

DATA: wtab TYPE ty_tab,
      itab TYPE TABLE OF ty_tab.

START-OF-SELECTION.
  SELECT matnr werks lgort UP TO 30 ROWS FROM mard INTO CORRESPONDING FIELDS OF TABLE itab.
  SORT itab BY werks.

  WRITE: / 'Material Number', 20 'Plant', 27 'Storage Location'.
  ULINE.

  LOOP AT itab INTO wtab.
    WRITE: / wtab-matnr, 20 wtab-werks, 27 wtab-lgort.
    AT END OF werks.
      WRITE: '=== At End Of plant - triggers at line', sy-tabix.
    ENDAT.
  ENDLOOP.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomici

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值