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 一句话,数值型可汇总,金额型汇总一般显示*。