ABAP中 Collect 的用法

简单来说:collect在非数值字段相同的情况下,起到了 数值或者金额字段 汇总的作用。

                 如果非数据字段值相等,那么数值字段值相加,其实这种描述不准确。


非数值字段不同的情况下,效果和append相同执行插入内表操作,当非数值字段相同的时候,则相当于modify的效果,只不过是将数值字段进行汇总相加后更新。

要点一:COLLECT实际运用中loop的内表不需要排序,直接loop累加计算。

要点二:只有在 COLLECT 命令的所有非关键字段均为数字(类型 I、P 或F)时才可在表中使用该命令。numeric (type I, P, or F)

使用collect就要求所有的非key fields均是I,P或者F数据类型,另外要注意的是对于standard table 而言,如果不指定key fields那么它的key fields就那些非I, P,F数据类型的fields,sorted table 和 hash table均必须指定key fields。

注意:货币类型CURR实际类型是P,所以也可以使用collect累加

*对ALV 展示的数据进行合计整理

  sort gt_out by matnr1 ktext aedat ascending.

  loop at gt_out assigning <fs_out> .      "保证只有主键和数量字段有值
    gw_alv1-matnr1 = <fs_out>-matnr1.
    gw_alv1-ktext = <fs_out>-ktext.
    gw_alv1-kwmeng = <fs_out>-kwmeng.
    append gw_alv1 to gt_alv1.
  endloop.


  loop at gt_alv1 into gw_alv1 .          "collect 累加求和

    collect gw_alv1 into gt_alv.

  endloop.


  loop at gt_alv into gw_alv.            "将其余日期、描述等字段在赋给汇总表

    read table gt_out into gw_out with  key matnr1 = gw_alv-matnr1 ktext = gw_alv-ktext.
    if sy-subrc = 0.
      gw_alv-maktx = gw_out-maktx.
      gw_alv-aufnr = gw_out-aufnr.
      gw_alv-aedat = gw_out-aedat.
      gw_alv-bukrs = gw_out-bukrs.

      modify gt_alv from gw_alv.
    endif.

  endloop.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值