Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Help on Report !!!!

Former Member
0 Likes
1,107

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 !!!

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,074

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.

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.

9 REPLIES 9
Read only

Former Member
0 Likes
1,075

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.

Read only

0 Likes
1,074

Thanks for the reply Ramu.....but the way I am doing is wrong? I mean can you guide with my code ???

Thanks,

Rajeev

Read only

0 Likes
1,074

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.

Read only

0 Likes
1,074

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

Read only

Former Member
0 Likes
1,074

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

Read only

0 Likes
1,074

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 !!

Read only

0 Likes
1,074

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.

Read only

Former Member
0 Likes
1,074

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

Read only

UdayS
Participant
0 Likes
1,074

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