关于汇总

MONAT BUKRS BELNR      GJAHR BLART BUDAT    SHKZG WRBTR           SGTXT
09    |1100 |1600000218|2006 |     |20060902|H    |       1000.00 |12   
09   |1100 |1600000218|2006 |     |20060902|H    |       5000.00 |       
09   |1100 |1600000219|2006 |     |20060902|H    |       4000.00 |12   
09   |1100 |1600000219|2006 |     |20060902|S    |       2000.00 | 
09   |1100 |1600000220|2006 |     |20060904|H    |       2250.00 |  
09   |1100 |1600000221|2006 |     |20060904|H    |        500.00 |12      <


如何得到如下结果:

09   |1100 |1600000218|2006 |     |20060902|H    |       6000.00 |12 
09   |1100 |1600000219|2006 |     |20060902|H    |       2000.00 |12 
09   |1100 |1600000220|2006 |     |20060904|H    |       2250.00 |  
09   |1100 |1600000221|2006 |     |20060904|H    |        500.00 |12      < 

 

方法:
一、
我先简单写一种方法。

1.根据贷借FLAG,改变金额值

LOOP AT IT_TAB1 INTO WA_TAB1.

  IF WA_TAB1-SHKZG = 'S'.

    WA_TAB1-WRBTR变为负。

  ENDIF.

ENDLOOP.

2.用影子方法避开文本求金额合计。

SORT IT_TAB1 BY BUKRS GJAHR BELNR .

LOOP AT IT_TAB1 INTO WA_TAB1.

  WA_TAB2 = WA_TAB1.  “影子工作区

  AT END OF BELNR.

  SUM.

  WA_TAB2-WRBTR = WA_TAB1-WRBTR.

  APPEND WA_TAB2 TO IT_TAB2.

ENDLOOP.

IT_TAB2表中数据为处理后的结果数据。

二、

data itab2 like itab1 occurs 0 with header line.

sort itab1 by belnr sgtxt.

itab2[] = itab1[]

loop at itab2 where sgtxt eq space.

read table itab1 with key belnr = itab2-belnr
                          sgtxt ne space.

if sy-subrc = 0.

  itab2-sgtxt = itab1-sgtxt.

  modify itab2.

endif.

endloop.

refresh itab1.clear itab1.

loop at itab2.

  move-corresponding itab2 to itab1.

collect itab1.

endloop.

endif.


三、我自己的方法
来源zfisr025
  LOOP AT itab_2.
    DATA:sgtxt LIKE bseg-sgtxt.   "定义文本
    DATA:dmbtr LIKE bseg-wrbtr. "定义金额一
    DATA:dmbtb LIKE bseg-wrbtr."定义金额二
    SELECT SINGLE sgtxt INTO sgtxt FROM bseg
     WHERE gjahr = p_gjahr "年度
     AND   bukrs = p_bukrs "公司代码
     AND   belnr = itab_2-belnr "取bseg中的和内表itab_2中凭证号相同的凭证
     AND   koart = 'D' "D为客户
     AND   kunnr = s_kunnr. "客户号码
    dmbtr = itab_2-dmbtr1 - itab_2-dmbtr2. "在循环之前就把为借贷分别放在dmbtr1和dmbtr2中
    dmbtb = dmbtr . "结果放到另外的变量
    IF dmbtr < 0 . "判断正负
      itab_2-shkzg = 'H'.  "添加到itab_2中
      dmbtb = ABS( dmbtr )."变为正
      itab_2-wrbtr = dmbtb."转换后放到itab_2相同的兰位中
    ELSE.
      itab_2-shkzg = 'S'.
      itab_2-wrbtr = dmbtb.
    ENDIF.
    itab_2-sgtxt = sgtxt. "把从bseg读到的文本放在相同的栏位
    MODIFY itab_2.
    CLEAR itab_2.
    CLEAR dmbtb.
    CLEAR dmbtr.
  ENDLOOP.

I,P,F  一句话,数值型可汇总,金额型汇总一般显示*。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值