Skip to Content
avatar image
Former Member

problem in internal table calculation

i have internal table values as follows ( for eg.)

person month amount1 amount2

A jan rs.500(1) rs.1000 (3)

A feb rs.500 (2) rs.1000

B jan rs.1000(1) rs.2000(4)

B feb rs.1500(2) rs.2000

B mar rs.1000(3) rs.1000

i need to total the values - total = 123+4 and populate to another table as

person amount

A 123 so the value will be 2000

B 123+4 the value will be 5500.

i have written the code using AT NEW AND AT END OF... but i need to work it with IF condition... so plz help me in this regard...

<removed_by_moderator>

thank you

Edited by: Julius Bussche on Sep 5, 2008 7:55 PM

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

5 Answers

  • Best Answer
    avatar image
    Former Member
    Sep 03, 2008 at 03:13 PM

    Hi,

    Use the logic.

    person month amount1 amount2

    A jan rs.500(1) rs.1000 (3)

    A feb rs.500 (2) rs.1000

    B jan rs.1000(1) rs.2000(4)

    B feb rs.1500(2) rs.2000

    B mar rs.1000(3) rs.1000

    Sort it on person.

    take temporary variables for Person.

    g_1 and g_2.

    g_var is for the amount.

    loop on itab.

    MOve itab-peson to g_1.

    g_index = sY-tabix + 1.

    read itab into wa index g_index.

    if sy-subrc eq 0 and wa-person = itab-person.

    g_var = amount 1 + amount2 + g_var.

    elseif sy-subrc eq 0 and wa-person NE itab-person.

    append a new record.

    clear: g_var.

    else.

    append a new record with the data

    clear: g_var.

    endif.

    endloop.

    Regards,

    Venkatesh

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member

      thanks for your immediate response venkatesh.

      r u asking me to take g_1 and g_2 for person A and B. here i have given an example showing 2 persons alone. but i need to calculate for 1000's of person. in that case what i should do?

      plz guide me...

      sri.

  • avatar image
    Former Member
    Sep 04, 2008 at 02:25 PM

    Hi ,

    As i see the requirement,

    You need the sum of

    total for the amount1 for each person

    and amount2 for first month

    Loop at itab into wa
    
    at new person.
    clear amt1.
    v_amt2 = wa-amount2. "ONLY FIRST RECORD
    endat.
    v_amt1 = wa_amount1 + v_amt1 . "EACH TIME
    
    at end of person.
    tot_amount = v_amt1 + v_amt2 .
    clear  : v_amt1 ,v_amt2 .
    

    Add comment
    10|10000 characters needed characters exceeded

  • Sep 04, 2008 at 02:43 PM

    Hi Shakthi,

    Its very simple. I hope u have the records in internal table.

    Just Sort the table by person.

    LOOP AT itab INTO wa.

    AT END OF person.

    SUM.

    CLEAR l_sum.

    l_sum = wa-amount1 + wa-amount2.

    WRITE: /1 wa-person, l_sum.

    ENDAT.

    ENDLOOP.

    Thanks,

    Vinod.

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Sep 04, 2008 at 02:44 PM

    Hi,

    By Sakthi sri

    thanks for your immediate response venkatesh.

    r u asking me to take g_1 and g_2 for person A and B. here i have given an example showing 2 persons alone. but i need to calculate for 1000's of person. in that case what i should do?

    plz guide me...

    By Venkatesh

    I am sorry to mis guide you with the two variable called G_1 and g_2. there is no use at all for these variables.

    What ever may be number of persons in the list. I mean they are not effecting the logic.

    for eg Persons from 1 to 100 or 1 to 1000 what ever it is the logic will work.

    Regards,

    Venkatesh

    Add comment
    10|10000 characters needed characters exceeded

  • Sep 04, 2008 at 02:32 PM

    hi,

    something like this:

    SORT itab.
    LOOP AT itab INTO wa.
    wa_temp = wa. "because of the control break statements
    AT FIRST person.
    total = total + wa_temp-amount2. "amount2 only needed if first line for person
    ENDAT.
    total = total + wa-amount1. "amount1 always needed
    AT LAST person.
    APPEND total TO itab2. "last line of person => data into another internal table
    CLEAR total.
    ENDAT.
    ENDLOOP.

    hope this helps

    ec

    Add comment
    10|10000 characters needed characters exceeded