分享

at new, at end of

 细想生活 2014-12-15
AT NEW fields 只能用于LOOP table 循环中,使用之前需要AT NEW fields之前,需按照该fields先SORT,当fields值改变时或fields 左边任何一个字段的值改变时,执行at new,一般用于按照相同字段汇总的业务操作. 而且不能对 LOOP 加任何条件.
*&---------------------------------------------------------------------*
*& Report  Z_AF_025

REPORT  z_af_025.
TYPES: BEGIN OF ty_tab ,
  num TYPE i,
  str(3) TYPE c,
END OF ty_tab.

DATA: itab TYPE TABLE OF ty_tab WITH HEADER LINE.
data: wa_itab TYPE ty_tab.
DATA: i_out TYPE TABLE OF ty_tab WITH HEADER LINE.

START-OF-SELECTION.

  itab-num 100.
  itab-str 'AAA'.
  APPEND itab.
  itab-num 100.
  itab-str 'BBB'.
  APPEND itab.
  itab-num 200.
  itab-str 'AAA'.
  APPEND  itab.
  itab-num 200.
  itab-str 'BBB'.
  APPEND itab.
  itab-num 200.
  itab-str 'CCC'.
  APPEND  itab.
  CLEAR itab.
  SORT itab BY num.
  LOOP AT itab .
    WRITE:/ itab-num, itab-str.
    MOVE itab to wa_itab.
    AT END OF num.
      i_out-num wa_itab-num.
      i_out-str wa_itab-str.
      APPEND i_out.
      CLEAR i_out.
    ENDAT.
    CLEAR itab.
  ENDLOOP.
  ULINE.
  WRITE: 'At End of Result: '.
  LOOP AT i_out.
    WRITE:/ i_out-num, i_out-str.
  ENDLOOP.
  CLEAR: i_out, i_out[].
  ULINE.
  LOOP AT itab .
    move itab to wa_itab.
    AT new num.
      i_out-num wa_itab-num.
      i_out-str wa_itab-str.
      APPEND i_out.
      CLEAR i_out.
    ENDAT.
    CLEAR itab.
  ENDLOOP.
  WRITE: 'At New Result: '.
    LOOP AT i_out.
    WRITE:/ i_out-num, i_out-str.
  ENDLOOP.

结果:
       100  AAA
       100  BBB
       200  AAA
       200  BBB
       200  CCC
--------------------------------------
At End of Result:
       100  BBB
       200  CCC
---------------------------------------
At New Result:
       100  AAA
       200  AAA

更深的测试学习:
at <wbr>new, <wbr>at <wbr>end <wbr>of

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多