COLLECT 用法

*&---------------------------------------------------------------------*
*& Report ZLXF22
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zlxf22.


TYPES:BEGIN OF ty_test,
        id(3)  TYPE c,
        id2(3TYPE c,
        menge  TYPE i,
      END OF ty_test.

DATA:i_test  TYPE TABLE OF ty_test,
     w_test  TYPE ty_test,
     w_test2 TYPE ty_test.
DATA:i_test2 TYPE TABLE OF ty_test.

w_test-id '001'.
w_test-id2 'XX'.
w_test-menge 10.
APPEND w_test TO i_test.
CLEAR  w_test  .

w_test-id '001'.
w_test-menge 70.
APPEND w_test TO i_test.
CLEAR  w_test  .

w_test-id '002'.
w_test-menge 20.
APPEND w_test TO i_test.
CLEAR  w_test  .

w_test-id '002'.
w_test-menge 50.
APPEND w_test TO i_test.
CLEAR  w_test  .

w_test-id '002'.
w_test-menge 80.
APPEND w_test TO i_test.
CLEAR  w_test  .

w_test-id '003'.
w_test-menge 30.
APPEND w_test TO i_test.
CLEAR  w_test  .

w_test-id '003'.
w_test-menge 90.
APPEND w_test TO i_test.
CLEAR  w_test  .



WRITE:'Collect前的内容:'  .
WRITE:/1(12'编号' ,   '数量'.
LOOP AT i_test INTO w_test.
  WRITE:/ w_test-id ' 'w_test-id2 ' 'w_test-menge.
  CLEAR:w_test.
ENDLOOP.


WRITE:.




WRITE:'Collect后的结果:'  .
WRITE:/1(12'编号' ,   '数量'.

LOOP AT i_test INTO w_test.

*  COLLECT w_test INTO i_test2."关键一步。。。"

  w_test2-id w_test-id.
  w_test2-menge w_test-menge .

  "虽然结构中有,但是是没有赋值,仍然不会以此条件分类汇总
  COLLECT w_test2 INTO i_test2."关键一步。。。"

  CLEAR:w_test,w_test2 .
ENDLOOP.

LOOP AT i_test2 INTO w_test.

  WRITE:/ w_test-id ' ',w_test-menge.
  CLEAR:w_test.
ENDLOOP.





WRITE:'Collect后的结果2:'  .
WRITE:/1(12'编号' ,   '数量'.

LOOP AT i_test INTO w_test.
  COLLECT w_test INTO i_test2."关键一步。。。"
  CLEAR:w_test.
  EXIT .  "运行了一次退出循环
ENDLOOP.

LOOP AT i_test2 INTO w_test.
  WRITE:/ w_test-id ' ',w_test-menge.
  CLEAR:w_test.
ENDLOOP.



WRITE:'Collect后的结果3:'  .
WRITE:/1(12'编号' ,   '数量'.
DATAlv_i TYPE .
lv_i ..
LOOP AT i_test INTO w_test.
  lv_i lv_i + .
  COLLECT w_test INTO i_test2."关键一步。。。"
  CLEAR:w_test.
  IF lv_i EQ 2.
    EXIT .  "运行了二次退出循环
  ENDIF .
ENDLOOP.

LOOP AT i_test2 INTO w_test.
  WRITE:/ w_test-id ' ',w_test-menge.
  CLEAR:w_test.
ENDLOOP.


结果1中虽然汇总前有001-空白和001-XX ,应该分两行的。但是在LOOP过程中没赋ID2没赋值,所以也显示一行

结果2中 有EXIT 所以只COLLECT 了一次,但恰好又是带XX的,所以与原来结果不汇总。

结果3中 有EXIT 所以只COLLECT 了二次,按正常汇总。

总之 汇总结果跟COLLECT 后面那个结构中是否有值 有关。

另:非字符类都是过滤条件,数值类都要汇总,如果过滤的条件是值需转换成字符。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT养家和SAP养家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值