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

Update Internal table where items repeating more than once

former_member70391
Contributor
0 Kudos
421

Hello Colleagues,

I need to know the best possible solution to achive the below goal. I have an internal table with following fields & entries.

ID Amount

10 150.00

20 100.00

30 120.00

40 150.00

40 100.00

My requirement is:

ID Amount Method

10 150.00

20 100.00

30 120.00

40 150.00 01

40 100.00 02

Thanks & Regards,

Nagaraj Kalbavi

1 ACCEPTED SOLUTION
Read only

Former Member
0 Kudos
359

Hi,

use this code... this will resolve your issue for sure....

DATA : W_TEMP TYPE I.
DATA : W_METHOD TYPE I.
DATA : W_ROW TYPE I.

W_METHOD = 1.
LOOP AT ITAB.
  W_ROW = SY-TABIX.
  AT END OF ITAB-ID.
    IF W_METHOD = 1.
       CONTINUE.
   ENDIF.
  ENDAT.
  ITAB-METHOD = W_METHOD.
  MODIFY ITAB FROM ITAB INDEX W_ROW.
  ADD 1 TO W_METHOD.
ENDLOOP.

REGARDS,

Siddarth

4 REPLIES 4
Read only

Former Member
0 Kudos
359

Hi,

Try this sample code.

TYPES: BEGIN OF ty_s_char,

id TYPE char10,

amount TYPE char10,

method TYPE i,

END OF ty_s_char.

DATA it_char TYPE TABLE OF ty_s_char.

DATA ls_char TYPE ty_s_char.

DATA: lv_id TYPE char10,

lv_id1 TYPE char10.

data lv_method type i.

FIELD-SYMBOLS <gf_char> TYPE ty_s_char.

DATA lv_tabix TYPE sy-tabix.

MOVE '10' TO ls_char-id.

MOVE '150.00' TO ls_char-amount.

APPEND ls_char TO it_char.

CLEAR ls_char.

MOVE '20' TO ls_char-id.

MOVE '100.00' TO ls_char-amount.

APPEND ls_char TO it_char.

CLEAR ls_char.

MOVE '30' TO ls_char-id.

MOVE '120.00' TO ls_char-amount.

APPEND ls_char TO it_char.

CLEAR ls_char.

MOVE '40' TO ls_char-id.

MOVE '150.00' TO ls_char-amount.

APPEND ls_char TO it_char.

CLEAR ls_char.

MOVE '40' TO ls_char-id.

MOVE '100.00' TO ls_char-amount.

APPEND ls_char TO it_char.

CLEAR ls_char.

LOOP AT it_char ASSIGNING <gf_char>.

CLEAR: lv_id,lv_tabix.

MOVE <gf_char>-id TO lv_id.

IF lv_id = lv_id1.

LOOP AT it_char INTO ls_char WHERE id = lv_id.

lv_method = lv_method + 1.

move lv_method to ls_char-method.

MODIFY it_char FROM ls_char TRANSPORTING method.

ENDLOOP.

ENDIF.

MOVE lv_id TO lv_id1.

MOVE sy-tabix TO lv_tabix.

ENDLOOP.

Regards

Ansari

Read only

Former Member
0 Kudos
360

Hi,

use this code... this will resolve your issue for sure....

DATA : W_TEMP TYPE I.
DATA : W_METHOD TYPE I.
DATA : W_ROW TYPE I.

W_METHOD = 1.
LOOP AT ITAB.
  W_ROW = SY-TABIX.
  AT END OF ITAB-ID.
    IF W_METHOD = 1.
       CONTINUE.
   ENDIF.
  ENDAT.
  ITAB-METHOD = W_METHOD.
  MODIFY ITAB FROM ITAB INDEX W_ROW.
  ADD 1 TO W_METHOD.
ENDLOOP.

REGARDS,

Siddarth

Read only

Former Member
0 Kudos
359

Hi Nagaraj,

You can achieve by having a counter in the internal table.

But need to change the order of the fields first

data : begin of itab occurs 0,

amount type bseg-wrbtr,

id type i,

counter type i,

end of itab.

itab-amount = '150.00'.

itab-id = '10'.

append itab.

itab-amount = '120.00'.

itab-id = '20'.

append itab.

itab-amount = '150.00'.

itab-id = '30'.

append itab.

itab-amount = '100.00'.

itab-id = '20'.

append itab.

itab-amount = '150.00'.

itab-id = '40'.

append itab.

sort itab by amount.

data: amt like itab-amount.

data: flag type char01.

data: counter type i.

loop at itab .

at new amount.

flag = 'X'.

endat.

if flag = 'X'.

itab-counter = 1.

modify itab transporting counter.

clear flag.

endif.

if amt = itab-amount.

counter = counter + 1.

itab-counter = counter + 1.

modify itab transporting counter.

endif.

amt = itab-amount.

endloop.

Try the above code.

Rgds,

Sripal

Read only

Former Member
0 Kudos
359

Hi,

Try below code, its working.

TYPES : BEGIN OF t_type,

id(2) TYPE c,

amt TYPE i,

END OF t_type,

BEGIN OF t_temp,

id(2) TYPE c,

amt TYPE i,

method TYPE i,

END OF t_temp.

DATA : i_temp TYPE STANDARD TABLE OF t_type,

wa_temp LIKE LINE OF i_temp,

i_data TYPE STANDARD TABLE OF t_type,

wa_data LIKE LINE OF i_data,

i_table TYPE STANDARD TABLE OF t_temp,

wa_table LIKE LINE OF i_table.

DATA : l_count TYPE i,

l_counter TYPE i.

wa_temp-id = '10'.

wa_temp-amt = '150'.

APPEND wa_temp TO i_temp.

wa_temp-id = '20'.

wa_temp-amt = '100'.

APPEND wa_temp TO i_temp.

wa_temp-id = '30'.

wa_temp-amt = '120'.

APPEND wa_temp TO i_temp.

wa_temp-id = '40'.

wa_temp-amt = '150'.

APPEND wa_temp TO i_temp.

wa_temp-id = '40'.

wa_temp-amt = '100'.

APPEND wa_temp TO i_temp.

wa_temp-id = '40'.

wa_temp-amt = '100'.

APPEND wa_temp TO i_temp.

i_data[] = i_temp[].

DELETE ADJACENT DUPLICATES FROM i_temp COMPARING id.

LOOP AT i_temp INTO wa_temp.

CLEAR l_count.

LOOP AT i_data INTO wa_data WHERE id = wa_temp-id.

IF sy-subrc = 0.

l_count = l_count + 1.

wa_table-id = wa_data-id.

wa_table-amt = wa_data-amt.

APPEND wa_table TO i_table.

IF l_count = 2.

wa_table-method = l_count - 1.

l_counter = sy-tabix - 1.

MODIFY i_table INDEX l_counter FROM wa_table TRANSPORTING method.

wa_table-method = l_count.

MODIFY i_table INDEX sy-tabix FROM wa_table TRANSPORTING method.

ELSEIF l_count > 2.

wa_table-method = l_count.

MODIFY i_table INDEX sy-tabix FROM wa_table TRANSPORTING method.

ENDIF.

ENDIF.

CLEAR wa_data.

ENDLOOP.

CLEAR wa_temp.

ENDLOOP.

Edited By

Tejaswini Khante