2013 Mar 20 5:13 AM
Hi Experts,
select bukrs
kunnr
budat
wrbtr
belnr
shkzg
from bsad
into table it_bsad
where bukrs in s_bukrs and kunnr in s_kunnr and budat in s_date.
select bukrs
kunnr
budat
wrbtr
belnr
shkzg
into table it_bsid
from bsid
* for all entries in it_bsad
where bukrs in s_bukrs and kunnr in s_kunnr and budat in s_date.
break-point.
it_final = it_bsad.
append lines of it_bsid to it_final.
loop at it_final into wa_final.
if wa_final-shkzg = 'S'.
wa_final-dr = wa_final-wrbtr.
else.
wa_final-cr = wa_final-wrbtr.
endif.
wa_final-balance = wa_final-balance + wa_final-dr - wa_final-cr.
modify it_final from wa_Final.
endloop.
I am trying to calculate the balance in the above code. In debugger, after crossing the loop the value of wa_final-balance becomes 0. why? I am sure its easy. I am lacking somewhere. Please guide.
Regards
Purnand
2013 Mar 20 7:36 AM
Hello,
when your loop processing then it comes 0. you tell this..i think your next row in internal table hold field balance = 0. for that reason , when loop start it takes 0.
Jst E.G: dr cr balance
100 0 100 => this is your internal table....
30 0 0
when loop processng it takes 1st row....then endloop. next it takes 2nd row...see balance = 0.
i think for that reason it takes 0.
loop at it_final into wa_final.
if wa_final-shkzg = 'S'.
wa_final-dr = wa_final-wrbtr.
else. DAta: bal type p.
wa_final-cr = wa_final-wrbtr.
endif.
wa_final-balance = bal + wa_final-dr - wa_final-cr.
bal = wa_final-balance.
modify it_final from wa_Final.
endloop.
i think your problem will be solved.........if not then let me know....
Thanks
Sabyasachi
Hello,
when your loop processing then it comes 0. you tell this..i think your next row in internal table hold field balance = 0. for that reason , when loop start it takes 0.
Jst E.G: dr cr balance
100 0 100 => this is your internal table....
30 0 0
when loop processng it takes 1st row....then endloop. next it takes 2nd row...see balance = 0.
i think for that reason it takes 0.
loop at it_final into wa_final.
if wa_final-shkzg = 'S'.
wa_final-dr = wa_final-wrbtr.
else. DAta: bal type p.
wa_final-cr = wa_final-wrbtr.
endif.
wa_final-balance = bal + wa_final-dr - wa_final-cr.
bal = wa_final-balance.
modify it_final from wa_Final.
endloop.
i think your problem will be solved.........if not then let me know....
Thanks
Sabyasachi
2013 Mar 20 5:32 AM
Im not sure what u are trying to do here , but when u use FOR ALL ENTRIES in the second select shouldn't there be a condition for it in the where addition ?
2013 Mar 20 5:38 AM
hi purnand
I think you are missing transporting in modify staement
try this.
loop at it_final into wa_final.
if wa_final-shkzg = 'S'.
a = sy-tabix.
wa_final-dr = wa_final-wrbtr.
else.
wa_final-cr = wa_final-wrbtr.
a = sy-tabix.
endif.
wa_final-balance = wa_final-balance + wa_final-dr - wa_final-cr.
modify it_final from wa_Final transporting balance index a.
clear a.
clear wa_final.
endloop.
regards
vaibhav
2013 Mar 20 5:48 AM
Hi Purnand,
Use below code.
loop at it_final into wa_final.
if wa_final-shkzg = 'S'.
wa_final-dr = wa_final-wrbtr.
else.
wa_final-cr = wa_final-wrbtr.
endif.
wa_final-balance = wa_final-balance + wa_final-dr - wa_final-cr.
modify it_final from wa_Final index sy-tabix.
endloop.
Above will work.
Thanks
Tarak
2013 Mar 20 7:02 AM
First sort your internal table by bukrs, kunnr, budat.
At each iteration of the loop wa_final is copied from the internal table, so _final-balance is always initial before calculation.
Other solution, keep wa_final-balance = wa_final-dr - wa_final-cr and sum the column, no need of the new work field.
Regards,
Raymond
2013 Mar 20 7:21 AM
Hi Purnand,
U are getting the Balance value 0 because of logic.
wa_final-balance = wa_final-balance + wa_final-dr - wa_final-cr.
When u debug, plz check for 2 things
1. The value of wa_final-dr and wa_final-cr.
2. The value of wa_final-balance for the last record of the loop.
I'm hope U'll get the answer and able to proceed.
Thanks
Vivek
2013 Mar 20 7:22 AM
Declare a variable outside the loop with a TYPE of wa_final-balance say TOTAL_BALANCE TYPE wa_final-balance. Now inside the loop just replace the below code
"wa_final-balance = wa_final-balance + wa_final-dr - wa_final-cr"
with
TOTAL_BALANCE = TOTAL_BALANCE + wa_final-dr - wa_final-cr.
wa_final-balance = TOTAL_BALANCE.
Thanks,
Supratik
2013 Mar 20 7:36 AM
Hello,
when your loop processing then it comes 0. you tell this..i think your next row in internal table hold field balance = 0. for that reason , when loop start it takes 0.
Jst E.G: dr cr balance
100 0 100 => this is your internal table....
30 0 0
when loop processng it takes 1st row....then endloop. next it takes 2nd row...see balance = 0.
i think for that reason it takes 0.
loop at it_final into wa_final.
if wa_final-shkzg = 'S'.
wa_final-dr = wa_final-wrbtr.
else. DAta: bal type p.
wa_final-cr = wa_final-wrbtr.
endif.
wa_final-balance = bal + wa_final-dr - wa_final-cr.
bal = wa_final-balance.
modify it_final from wa_Final.
endloop.
i think your problem will be solved.........if not then let me know....
Thanks
Sabyasachi
2013 Mar 20 8:48 AM
Dear Purnand,
Please check the below code which is working ok.
TABLES: BSID.
SELECTION-SCREEN: BEGIN OF BLOCK B1.
SELECT-OPTIONS: S_BUKRS FOR BSID-BUKRS,
S_KUNNR FOR BSID-KUNNR,
S_DATE FOR BSID-BUDAT.
SELECTION-SCREEN: END OF BLOCK B1.
DATA: BEGIN OF IT_BSAD OCCURS 0,
BUKRS LIKE BSAD-BUKRS,
KUNNR LIKE BSAD-KUNNR,
BUDAT LIKE BSAD-BUDAT,
WRBTR LIKE BSAD-WRBTR,
BELNR LIKE BSAD-BELNR,
SHKZG LIKE BSAD-SHKZG,
END OF IT_BSAD.
DATA: BEGIN OF IT_BSID OCCURS 0,
BUKRS LIKE BSAD-BUKRS,
KUNNR LIKE BSAD-KUNNR,
BUDAT LIKE BSAD-BUDAT,
WRBTR LIKE BSAD-WRBTR,
BELNR LIKE BSAD-BELNR,
SHKZG LIKE BSAD-SHKZG,
END OF IT_BSID.
DATA: BEGIN OF IT_FINAL OCCURS 0,
BUKRS LIKE BSAD-BUKRS,
KUNNR LIKE BSAD-KUNNR,
BUDAT LIKE BSAD-BUDAT,
WRBTR LIKE BSAD-WRBTR,
BELNR LIKE BSAD-BELNR,
SHKZG LIKE BSAD-SHKZG,
DR(15) TYPE P DECIMALS 2,
CR(15) TYPE P DECIMALS 2,
BALANCE(15) TYPE P DECIMALS 2,
END OF IT_FINAL.
DATA: WA_FINAL LIKE IT_FINAL.
select bukrs
kunnr
budat
wrbtr
belnr
shkzg
from bsad
into table it_bsad
where bukrs in s_bukrs and kunnr in s_kunnr and budat in s_date.
select bukrs
kunnr
budat
wrbtr
belnr
shkzg
into table it_bsid
from bsid
* for all entries in it_bsad
where bukrs in s_bukrs and kunnr in s_kunnr and budat in s_date.
break-point.
it_final[] = it_bsad[].
append lines of it_bsid to it_final.
loop at it_final into wa_final.
if wa_final-shkzg = 'S'.
wa_final-dr = wa_final-wrbtr.
else.
wa_final-cr = wa_final-wrbtr.
endif.
wa_final-balance = wa_final-balance + wa_final-dr - wa_final-cr.
modify it_final from wa_Final.
endloop.
BREAK-POINT.
2013 Mar 20 9:03 AM
Hi,
Please use transporting addtion in modify statement and transport only the relevant fields.
Regards,
Kartik
2013 Mar 20 9:11 AM
2013 Mar 20 11:24 AM
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |