2009 Sep 01 6:35 AM
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
2009 Sep 01 7:04 AM
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
2009 Sep 01 6:54 AM
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
2009 Sep 01 7:04 AM
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
2009 Sep 01 7:12 AM
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
2009 Sep 01 8:33 AM
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