Skip to Content
author's profile photo
Former Member

At new command not working

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.

Add comment
10|10000 characters needed characters exceeded

  • Follow
  • Get RSS Feed

9 Answers

  • Best Answer
    author's profile photo
    Former Member
    Oct 12, 2007 at 04: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

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Oct 12, 2007 at 04: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>

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Oct 11, 2007 at 03:01 PM

    Hi

    Make lifnr as first field in the internal table,

    Regards

    Navneet

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Oct 11, 2007 at 03: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.

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Oct 12, 2007 at 03: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

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Oct 12, 2007 at 04:06 AM

    hi

    good

    you have placed the AT NEW statement in a wrong place plz debug the report ,and checked it.

    thanks

    mrutyun^

    Add comment
    10|10000 characters needed characters exceeded

  • Oct 12, 2007 at 04: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.

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Oct 12, 2007 at 05: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

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Oct 12, 2007 at 05: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......

    Add comment
    10|10000 characters needed characters exceeded