SAP ABAP COLLECT的用法

#COLLECT的作用
假设目前有两种总账科目 ,一种是 8开头,一种是非8开头
那么,现在想要将两种总账科目的数据进行合计,其中非80开头的根据科目名称将金额合计,而80开头的数据,除了科目名称以外,多一个合计维度,那就是根据订单合计
我们的代码就应该如下写


SELECT belnr,BUKRS,kostl,GJAHR,SGTXT,HKONT,SHKZG,
  aufnr,
  "SUM( DMBTR ) AS DMBTR,
  "SUM( WRBTR ) AS WRBTR
  dmbtr,
  wrbtr
  FROM bseg
  INTO CORRESPONDING FIELDS OF TABLE @i_bseg
  WHERE belnr = @i_belnr
  AND   bukrs = @i_bukrs
  AND   gjahr = @i_gjahr.
  "GROUP BY belnr,BUKRS,kostl,GJAHR,SGTXT,HKONT,aufnr,SHKZG.
   sort  i_bseg by SGTXT belnr BUKRS GJAHR  SHKZG kostl HKONT.
"从上述代码可以看到,原本我们是不区分80开头和非80开头的,统一都合并掉
"为了区分80开头和非80开头的数据,我们将语句中的 SUM 和 group先去掉,在未合并之前,先统一先放进变量I_BSEG里面

“然后在下述代码里循环 将非80开头的去除订单号放到变量 I_BSEG_50 里面,然后COLLECT,由于没有订单号,所以只按照科目名称进行合并
将80开头的变量不去除订单号放到 I_BSEG_80里面,由于有订单号,所以按照订单号和科目名称合并,比非80开头的多了一个维度订单号。
“”然后分别进行COLLECT,就会发现
LOOP AT I_BSEG INTO LS_BSEG.
  if  LS_BSEG-HKONT+0(2) <> '80'.
    clear LS_BSEG-aufnr.
     collect  LS_BSEG into  I_BSEG_50.
   elseif  LS_BSEG-HKONT+0(2) = '80'.
      collect  LS_BSEG into  I_BSEG_80.
  endif.
ENDLOOP.

sort  I_BSEG_50 by SGTXT belnr BUKRS GJAHR  SHKZG kostl HKONT.
sort  I_BSEG_80 by SGTXT belnr BUKRS GJAHR  SHKZG kostl HKONT.

CLEAR I_BSEG.
APPEND LINES OF I_BSEG_50 to I_BSEG.
APPEND LINES OF I_BSEG_80 to I_BSEG.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值