10-11-2007 3:53 PM
Hi all,
I pasted my sample code below. In this i have used "At new event" this command is not working in my code, the values are redundant, How to rectify this problem. Pls help me.
Thanks in advance.
Tables : RBKP,
RSEG.
Data : Begin of itab,
BELNR like RBKP-BELNR, " Invoice Document Number
BUZEI like RSEG-BUZEI, " Invoice Item Number
GJAHR like RBKP-GJAHR, " Fiscal Year
EBELN like RSEG-EBELN, " Purchase Order Number
MENGE like RSEG-MENGE, " Invoice Quantity
RMWWR like RBKP-RMWWR, " Invoice Amount
WAERS like RBKP-WAERS, " Currency
MATNR like RSEG-MATNR, " Material Number
LIFNR like RBKP-LIFNR, " Vendor Code
ZTERM like RBKP-ZTERM, " Terms of payment key
End of itab.
Data itab2 like itab occurs 0 WITH HEADER LINE.
data a like rbkp-lifnr.
Selection-screen : Begin of block a with frame title text-001.
Select-options : LIF For RBKP-LIFNR.
Select-options : gjahr For RBKP-gjahr.
Selection-screen : End of block a.
Start-of-selection.
select * from rbkp where LIFNR in LIF and GJAHR in gjahr.
if sy-subrc = 0.
select * from rseg where BELNR = rbkp-BELNR and gjahr = rbkp-gjahr.
if sy-subrc = 0.
itab-BELNR = RBKP-BELNR.
itab-BUZEI = RSEG-BUZEI.
itab-GJAHR = RBKP-GJAHR.
itab-EBELN = RSEG-EBELN.
itab-MENGE = RSEG-MENGE.
itab-RMWWR = RBKP-RMWWR.
itab-WAERS = RBKP-WAERS.
itab-MATNR = RSEG-MATNR.
itab-LIFNR = RBKP-LIFNR.
append itab to itab2.
endif.
endselect.
endif.
endselect.
Sort itab2 by LIFNR.
loop at itab2.
Move itab2 to itab.
at new LIFNR.
write : / itab-lifnr.
endat.
endloop.
Regards,
Kesav.
10-12-2007 5:01 AM
Hi,
Declare the LIFNR as the first field in your internal table...The field position matters when you use AT NEW..AT END OF..
Because if you use AT NEW lifnr...The fields that are defined leftmost to that field will also be considered..Meaning if there is change in the value then AT NEW triggers..
You have two options..
1) Change the declaration.
Data : Begin of itab,
<b>LIFNR like RBKP-LIFNR, " Vendor Code</b>
BELNR like RBKP-BELNR, " Invoice Document Number
BUZEI like RSEG-BUZEI, " Invoice Item Number
GJAHR like RBKP-GJAHR, " Fiscal Year
EBELN like RSEG-EBELN, " Purchase Order Number
MENGE like RSEG-MENGE, " Invoice Quantity
RMWWR like RBKP-RMWWR, " Invoice Amount
WAERS like RBKP-WAERS, " Currency
MATNR like RSEG-MATNR, " Material Number
ZTERM like RBKP-ZTERM, " Terms of payment key
End of itab.
2) Instead of AT NEW..use ON CHANGE OF ..
loop at itab2.
Move itab2 to itab.
<b>ON CHANGE OF itab2-LIFNR.</b>
write : / itab-lifnr.
<b>ENDON.</b>
endloop.
Thanks
Naren
10-11-2007 4:01 PM
10-11-2007 4:03 PM
Hi,
Your select query seems to be wrong. try like this
select * from rbkp into itab1
where LIFNR in LIF and GJAHR in gjahr.
if sy-subrc = 0.
select * from rseg
into itab2 for all entries in itab1
where BELNR = itab1-BELNR and gjahr = itab1.-gjahr.
10-12-2007 4:45 AM
Hi Kesava,
The key field in RBKP table is BELNR. So while sorting sort with this also. Chk fro the changes in your code ( block letters)
Tables : RBKP,
RSEG.
Data : Begin of itab,
BELNR like RBKP-BELNR, " Invoice Document Number
BUZEI like RSEG-BUZEI, " Invoice Item Number
GJAHR like RBKP-GJAHR, " Fiscal Year
EBELN like RSEG-EBELN, " Purchase Order Number
MENGE like RSEG-MENGE, " Invoice Quantity
RMWWR like RBKP-RMWWR, " Invoice Amount
WAERS like RBKP-WAERS, " Currency
MATNR like RSEG-MATNR, " Material Number
LIFNR like RBKP-LIFNR, " Vendor Code
ZTERM like RBKP-ZTERM, " Terms of payment key
End of itab.
Data itab2 like itab occurs 0 WITH HEADER LINE.
data a like rbkp-lifnr.
Selection-screen : Begin of block a with frame title text-001.
Select-options : LIF For RBKP-LIFNR.
Select-options : gjahr For RBKP-gjahr.
Selection-screen : End of block a.
Start-of-selection.
select * from rbkp where LIFNR in LIF and GJAHR in gjahr.
if sy-subrc = 0.
select * from rseg where BELNR = rbkp-BELNR and gjahr = rbkp-gjahr.
if sy-subrc = 0.
itab-BELNR = RBKP-BELNR.
itab-BUZEI = RSEG-BUZEI.
itab-GJAHR = RBKP-GJAHR.
itab-EBELN = RSEG-EBELN.
itab-MENGE = RSEG-MENGE.
itab-RMWWR = RBKP-RMWWR.
itab-WAERS = RBKP-WAERS.
itab-MATNR = RSEG-MATNR.
itab-LIFNR = RBKP-LIFNR.
append itab to itab2.
endif.
endselect.
endif.
endselect.
<b>Sort itab2 by belnr LIFNR.</b>
loop at itab2.
Move itab2 to itab.
at new LIFNR.
write : / itab-lifnr.
endat.
endloop.
Reward if useful.
Regards,
Chitra
10-12-2007 5:01 AM
Hi,
Declare the LIFNR as the first field in your internal table...The field position matters when you use AT NEW..AT END OF..
Because if you use AT NEW lifnr...The fields that are defined leftmost to that field will also be considered..Meaning if there is change in the value then AT NEW triggers..
You have two options..
1) Change the declaration.
Data : Begin of itab,
<b>LIFNR like RBKP-LIFNR, " Vendor Code</b>
BELNR like RBKP-BELNR, " Invoice Document Number
BUZEI like RSEG-BUZEI, " Invoice Item Number
GJAHR like RBKP-GJAHR, " Fiscal Year
EBELN like RSEG-EBELN, " Purchase Order Number
MENGE like RSEG-MENGE, " Invoice Quantity
RMWWR like RBKP-RMWWR, " Invoice Amount
WAERS like RBKP-WAERS, " Currency
MATNR like RSEG-MATNR, " Material Number
ZTERM like RBKP-ZTERM, " Terms of payment key
End of itab.
2) Instead of AT NEW..use ON CHANGE OF ..
loop at itab2.
Move itab2 to itab.
<b>ON CHANGE OF itab2-LIFNR.</b>
write : / itab-lifnr.
<b>ENDON.</b>
endloop.
Thanks
Naren
10-12-2007 5:06 AM
hi
good
you have placed the AT NEW statement in a wrong place plz debug the report ,and checked it.
thanks
mrutyun^
10-12-2007 5:21 AM
Hi Kesava...
Change the code like this .. it will work..
Note:
1.Use joins instead of Nested SELECTs which gives the Worst performance.
2. You can use ON CHANGE OF <field> since the LIFNR is not the first field in ITAB.
Tables : RBKP,
RSEG.
Data : Begin of itab,
BELNR like RBKP-BELNR, " Invoice Document Number
BUZEI like RSEG-BUZEI, " Invoice Item Number
GJAHR like RBKP-GJAHR, " Fiscal Year
RMWWR like RBKP-RMWWR, " Invoice Amount
WAERS like RBKP-WAERS, " Currency
LIFNR like RBKP-LIFNR, " Vendor Code
ZTERM like RBKP-ZTERM, " Terms of payment key
EBELN like RSEG-EBELN, " Purchase Order Number
MATNR like RSEG-MATNR, " Material Number
MENGE like RSEG-MENGE, " Invoice Quantity
End of itab.
Data itab2 like itab occurs 0 WITH HEADER LINE.
data a like rbkp-lifnr.
Selection-screen : Begin of block a with frame title text-001.
Select-options : LIF For RBKP-LIFNR.
Select-options : gjahr For RBKP-gjahr.
Selection-screen : End of block a.
Start-of-selection.
SELECT RBKPBELNR RBKPGJAHR RBKPBUZEI RBKPRMWWR.
RBKPWAERS RBKPLIFNR RBKP~ZTERM
RSEGEBELN RSEGMATNR RSEG~MENGE
FROM RBKP
INNER JOIN RSEG
ON RBKPBELNR = RSEGBELNR
AND RBKPGJAHR = RSEGGJAHR
AND RBKPBUZEI = RSEGBUZEI
INTO TABLE ITAB2
WHERE RBKPLIFNR IN LIF AND RBKPGJAHR IN GJAHR.
Sort itab2 by LIFNR.
loop at itab2.
Move itab2 to itab.
on change of itab-LIFNR.
write : / itab-lifnr.
endat.
endloop.
REWARD IF HELPFUL.
10-12-2007 5:44 AM
Hi
i am sending a sample code where that events worked
you can understand very easily
REPORT ZDAN108.
Using AT FIRST , AT NEW, AT THE END OF , AT LAST.
DATA: BEGIN OF ITAB OCCURS 0,
F1 TYPE I,
F2(6) TYPE C,
F3(10) TYPE N,
F4(16) TYPE P DECIMALS 2,
END OF ITAB.
DATA: SUB_TOT(10) TYPE P DECIMALS 3.
**--1
ITAB-F1 = 1.
ITAB-F2 = 'ONE'.
ITAB-F3 = 10.
ITAB-F4 = '1000.00'.
APPEND ITAB.
CLEAR ITAB.
ITAB-F1 = 1.
ITAB-F2 = 'ONE'.
ITAB-F3 = 20.
ITAB-F4 = '2000.00'.
APPEND ITAB.
CLEAR ITAB.
ITAB-F1 = 1.
ITAB-F2 = 'ONE'.
ITAB-F3 = 30.
ITAB-F4 = '3000.00'.
APPEND ITAB.
CLEAR ITAB.
*--2
ITAB-F1 = 2.
ITAB-F2 = 'TWO'.
ITAB-F3 = 10.
ITAB-F4 = '1000.00'.
APPEND ITAB.
CLEAR ITAB.
ITAB-F1 = 2.
ITAB-F2 = 'TWO'.
ITAB-F3 = 20.
ITAB-F4 = '2000.00'.
APPEND ITAB.
CLEAR ITAB.
*-- 3
ITAB-F1 = 3.
ITAB-F2 = 'THREE'.
ITAB-F3 = 10.
ITAB-F4 = '1000.00'.
APPEND ITAB.
CLEAR ITAB.
ITAB-F1 = 3.
ITAB-F2 = 'THREE'.
ITAB-F3 = 20.
ITAB-F4 = '2000.00'.
APPEND ITAB.
CLEAR ITAB.
SORT ITAB BY F1.
LOOP AT ITAB.
AT FIRST.
WRITE: /35 ' MATERIAL DETAILS:'.
ULINE.
ENDAT.
AT NEW F1.
WRITE: / 'DETAILS OF MATERIAL:' COLOR 7 , ITAB-F1.
ULINE.
ENDAT.
WRITE: / ITAB-F1, ITAB-F2, ITAB-F3, ITAB-F4.
SUB_TOT = SUB_TOT + ITAB-F4.
AT END OF F1.
ULINE.
WRITE: / 'SUB TOTAL :' COLOR 3 INVERSE ON, SUB_TOT COLOR 3 INVERSE ON.
CLEAR SUB_TOT.
ENDAT.
AT LAST.
SUM.
ULINE.
WRITE: 'SUM:', ITAB-F4.
ULINE.
ENDAT.
ENDLOOP.
<b>Reward if usefull</b>
10-12-2007 6:51 AM
HI,
change the code like this
Data : Begin of itab,
LIFNR like RBKP-LIFNR, " Vendor Code
BELNR like RBKP-BELNR, " Invoice Document Number
BUZEI like RSEG-BUZEI, " Invoice Item Number
GJAHR like RBKP-GJAHR, " Fiscal Year
EBELN like RSEG-EBELN, " Purchase Order Number
MENGE like RSEG-MENGE, " Invoice Quantity
RMWWR like RBKP-RMWWR, " Invoice Amount
WAERS like RBKP-WAERS, " Currency
MATNR like RSEG-MATNR, " Material Number
ZTERM like RBKP-ZTERM, " Terms of payment key
End of itab.
Rgds,
Prajith
10-12-2007 6:57 AM
after every control break statement u have read table statement with sy-index ......
its actually a bug in sap..................u can find this in OSS also......