2008 Jan 10 4:59 AM
I am working on a report...where I need to get the document number from table BKPF and then I need to get the line item data from table BSEG such as Net amount, then I need to sum up the net amount of one header and need to display it. ...
My scenario is like this:
doc # itemNet amount
123 1 10
123 2 9
123 3 11
124 1 13
So the output should be:
doc # Net amount
123 30
124 13
and for this I have written the following code:
&----
*& Report ZFI_PAYMENT *
*& *
&----
*& *
*& *
&----
REPORT ZFI_PAYMENT .
data : v_nebtr(15).
data: begin of it_bkpf occurs 0,
belnr like bkpf-belnr,
end of it_bkpf.
data: begin of it_bseg occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_bseg.
data : begin of it_fin occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_fin.
select belnr into table it_bkpf
from bkpf
where blart eq 'SA'.
select belnr nebtr into table it_bseg
from bseg.
loop at it_bkpf.
read table it_bseg with key belnr = it_bkpf-belnr.
if sy-subrc eq 0.
ADD it_bseg-nebtr to v_nebtr.
else.
move it_bseg-nebtr to it_fin-nebtr.
move it_bseg-belnr to it_fin-belnr.
append it_fin.
clear it_fin.
endif.
it_bseg-nebtr = v_nebtr.
endloop.
loop at it_fin.
write: /1 it_fin-nebtr,
/20 it_fin-belnr.
endloop.
But I think I am doing some part wrong ..as I am not getting the desired result and my iternal table it_fin is not returning anything,so can please tell where I am doing it wrong.
Thanks,
Rajeev !!!
2008 Jan 10 5:01 AM
Friends,
Try this...
best way...
REPORT ZFI_PAYMENT .
data : v_nebtr(15).
data: begin of it_bkpf occurs 0,
belnr like bkpf-belnr,
end of it_bkpf.
data: begin of it_bseg occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_bseg.
data : begin of it_fin occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_fin.
select belnr sum(nebtr) from bseg into table it_bseg where belnr in (select belnr from bkpf where blart eq 'SA' ) group by docno.
loop at it_bseg.
write: /1 it_bseg-nebtr,
/20 it_bseg-belnr.
endloop.
I am working on a report...where I need to get the document number from table BKPF and then I need to get the line item data from table BSEG such as Net amount, then I need to sum up the net amount of one header and need to display it. ...
My scenario is like this:
doc # itemNet amount
123 1 10
123 2 9
123 3 11
124 1 13
So the output should be:
doc # Net amount
123 30
124 13
and for this I have written the following code:
&----
*& Report ZFI_PAYMENT *
*& *
&----
*& *
*& *
&----
REPORT ZFI_PAYMENT .
data : v_nebtr(15).
data: begin of it_bkpf occurs 0,
belnr like bkpf-belnr,
end of it_bkpf.
data: begin of it_bseg occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_bseg.
data : begin of it_fin occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_fin.
select belnr into table it_bkpf
from bkpf
where blart eq 'SA'.
select belnr nebtr into table it_bseg
from bseg.
loop at it_bkpf.
read table it_bseg with key belnr = it_bkpf-belnr.
if sy-subrc eq 0.
ADD it_bseg-nebtr to v_nebtr.
else.
move it_bseg-nebtr to it_fin-nebtr.
move it_bseg-belnr to it_fin-belnr.
append it_fin.
clear it_fin.
endif.
it_bseg-nebtr = v_nebtr.
endloop.
loop at it_fin.
write: /1 it_fin-nebtr,
/20 it_fin-belnr.
endloop.
But I think I am doing some part wrong ..as I am not getting the desired result and my iternal table it_fin is not returning anything,so can please tell where I am doing it wrong.
Thanks,
Rajeev !!!
2008 Jan 10 5:01 AM
Friends,
Try this...
best way...
REPORT ZFI_PAYMENT .
data : v_nebtr(15).
data: begin of it_bkpf occurs 0,
belnr like bkpf-belnr,
end of it_bkpf.
data: begin of it_bseg occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_bseg.
data : begin of it_fin occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_fin.
select belnr sum(nebtr) from bseg into table it_bseg where belnr in (select belnr from bkpf where blart eq 'SA' ) group by docno.
loop at it_bseg.
write: /1 it_bseg-nebtr,
/20 it_bseg-belnr.
endloop.
2008 Jan 10 5:03 AM
Thanks for the reply Ramu.....but the way I am doing is wrong? I mean can you guide with my code ???
Thanks,
Rajeev
2008 Jan 10 5:08 AM
REPORT ZFI_PAYMENT .
data: begin of it_bseg occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_bseg.
select belnr sum( nebtr ) from bseg into table it_bseg where belnr in ( select belnr from bkpf where blart eq 'SA' ) group by docno.
loop at it_bseg.
write: /1 it_bseg-nebtr,
/20 it_bseg-belnr.
endloop.
2008 Jan 10 5:13 AM
Your program only....After modification....try this...
data:v_belnr type bseg-belnr.
data : v_nebtr type bseg-netbr.
data: begin of it_bkpf occurs 0,
belnr like bkpf-belnr,
end of it_bkpf.
data: begin of it_bseg occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_bseg.
data : begin of it_fin occurs 0,
belnr like bseg-belnr,
nebtr like bseg-nebtr,
end of it_fin.
select belnr into table it_bkpf
from bkpf
where blart eq 'SA'.
select belnr nebtr into table it_bseg
from bseg.
read table it_bseg index 1.
v_belnr = it_bseg-belnr.
loop at it_bkpf.
read table it_bseg with key belnr = it_bkpf-belnr.
if v_belnr = it_bseg-belnr.
ADD it_bseg-nebtr to v_nebtr.
else.
move v_nebtr to it_fin-nebtr.
move v_belnr to it_fin-belnr.
append it_fin.
clear it_fin.
clear vnebtr.
v_belnr = it_bseg-belnr.
ADD it_bseg-nebtr to v_nebtr.
endif.
endloop.
loop at it_fin.
write: /1 it_fin-nebtr,
/20 it_fin-belnr.
endloop.
Edited by: Ramu on Jan 10, 2008 6:16 AM
2008 Jan 10 5:09 AM
Hi,
as per ur requirement:
select belnr into table it_bkpf
from bkpf
where blart eq 'SA'.
select belnr nebtr into table it_bseg
from bseg.----
> this statemnet is wrong.
Replace the above with the following :
if not it_bkpf is initial.
select belnr nebtr into table it_bseg
from bseg for all entries in it_bkpf where belnr = it_bkpf -belnr.
endif..
Revrt back if still u have issues,
regards,
Naveen
2008 Jan 10 5:14 AM
Hi Naveen,
Thanks for the reply. ..
everything is working properly now...the only problem is when I am trying to print my internal table it_fin,only nebtr field is getting printed but not the belnr.
so whats the possibly error.
Thanks,
Rajeev !!
2008 Jan 10 5:28 AM
Hi,
In ur case, It may be ( for evry record) it is going to sy-subrc = 0. and henceits not allowing to fill thetable with belnr.
So u better make change lik ebelow:
read table it_bseg with key belnr = it_bkpf-belnr.
if sy-subrc eq 0.
move it_bseg-nebtr to it_fin-nebtr.
move it_bseg-belnr to it_fin-belnr.
append it_fin.
clear it_fin.
else.
ADD it_bseg-nebtr to v_nebtr.
endif.
it_bseg-nebtr = v_nebtr.
endloop.
2008 Jan 10 5:29 AM
Hi Rajeev,
you are using read bseg in loop of bkpf.
bseg will have multiple values and hence it will pick only first out of many records.
Hence, you need to have nested loop.
regards,
Mohaiyuddin
2008 Jan 10 5:44 AM
Hello Rajeev,
You can try with this code
and it seems working good.
-
DATA: BEGIN OF it_bkpf OCCURS 0,
belnr LIKE bkpf-belnr,
END OF it_bkpf.
DATA: BEGIN OF it_bseg OCCURS 0,
belnr LIKE bseg-belnr,
nebtr LIKE bseg-nebtr,
END OF it_bseg.
DATA : BEGIN OF it_fin OCCURS 0,
belnr LIKE bseg-belnr,
nebtr LIKE bseg-nebtr,
END OF it_fin.
SELECT belnr INTO TABLE it_bkpf
FROM bkpf
WHERE blart EQ 'SA'.
SORT it_bkpf BY belnr.
DELETE ADJACENT DUPLICATES FROM it_bkpf.
IF sy-subrc = 0.
SELECT belnr nebtr INTO TABLE it_bseg
FROM bseg FOR ALL ENTRIES IN it_bkpf WHERE belnr = it_bkpf-belnr.
ENDIF.
LOOP AT it_bkpf.
LOOP AT it_bseg WHERE belnr = it_bkpf-belnr.
it_fin-nebtr = it_fin-nebtr + it_bseg-nebtr.
ENDLOOP.
it_fin-belnr = it_bkpf-belnr.
APPEND it_fin.
CLEAR it_fin.
ENDLOOP.
SORT it_fin BY belnr.
LOOP AT it_fin.
WRITE: /1 it_fin-belnr,
20 it_fin-nebtr.
ENDLOOP.
-
let me know if there are any issues
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |