10-08-2007 7:24 PM
I am having internal table with fields ...mblnr werks matnr menge etc. The records are like this
mblnr werks bwart matnr menge etc
1) 2222200123 an20 10 12111111111 20 .....
2) 2222200123 an20 98 12111111119 20 .....
3) 2222200123 an20 99 12111111113 20 .....
4) 2222200124 an20 10 12111111112 20 .....
5) 2222200125 an20 25 12111111115 20 .....
6) 2222200125 an20 98 12111111117 20 .....
7) 2222200125 an20 97 12111111121 20 .....
I want to have the records that have same document number.ie in above i want 1, 2,3, 5,and 6, 7 but not 4 because that is only single document. ie i want a record that have same document num but may have diff bwart , werks , menge etc. I dont want a record which is having only one document num ie mblnr
so please tell me what to do .Thank you very much.
10-08-2007 7:29 PM
Hi,
try the statements
sort <itab> by <field>.
delete adjacent duplicates from <itab>
Regards
10-08-2007 9:01 PM
Please have a look at the code below to give you an idea of what you can do to achieve your stated objectives. Also please reward points if you find the post helpful.
TYPES: BEGIN OF ty_mseg,
mblnr TYPE mseg-mblnr,
werks TYPE mseg-werks,
bwart TYPE mseg-bwart,
matnr TYPE mseg-matnr,
menge TYPE mseg-menge,
del(1) TYPE c ,
END OF ty_mseg,
BEGIN OF ty_mblnr,
mblnr TYPE mseg-mblnr,
END OF ty_mblnr.
DATA: w_count TYPE i ,
w_mseg TYPE ty_mseg ,
t_mseg TYPE TABLE OF ty_mseg ,
w_mblnr TYPE ty_mblnr,
t_mblnr TYPE HASHED TABLE OF ty_mblnr
WITH UNIQUE KEY mblnr .
SORT t_mseg BY mblnr.
LOOP AT t_mseg INTO w_mseg.
AT NEW mblnr.
CLEAR w_count.
ENDAT.
ADD 1 TO w_count.
AT END OF mblnr.
CASE w_count.
WHEN 1.
w_mblnr-mblnr = w_mseg-mblnr.
INSERT w_mblnr INTO TABLE t_mblnr.
ENDCASE.
ENDAT.
ENDLOOP.
LOOP AT t_mseg INTO w_mseg.
w_count = sy-tabix.
READ TABLE t_mblnr WITH KEY mblnr = w_mseg-mblnr
TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
w_mseg-del = 'X'.
MODIFY t_mseg FROM w_mseg TRANSPORTING del.
ENDIF.
ENDLOOP.
DELETE t_mseg WHERE del EQ 'X'.
null
10-09-2007 6:19 AM
data: v_index type sy-index.
declare workarea1 and workarea2 of type your internal table
sort <tab> by mblnr.
loop at <tabname> into <workarea1>.
v_index = sy-index + 1.
read table <same table> into <workarea2> index v_index.
if workarea1-mblnr = workarea2-mblnr.
delete table <itab> indexv_index.
endloop
Reward if helpful.
10-09-2007 1:15 PM
Hi ,
Follow below logic.
data begin of itab occurs 0,
mblnr like mseg-mblnr,
count type i,
end of itab.
assume mblnr werks bwart matnr menge etc are stored in table
itab1.
loop at itab1.
itab-mblnr = itab1-mblnr.
Add 1 to itab-count.
collect itab.
endloop.
delete itab where count > 1.
loop at itab
loop at itab1 where mblnr = itab-mblnr.
delete itab.
endloop.
endloop.
Regards,
Amole
10-10-2007 10:42 AM
Hi Shiva ,
Try this code logic, this will solve your probelm with a single loop itself.
Let your Interanl table be ITAB1.
data: lv_var type sy-tabix.,
wa_itab1 like line of itab1,
wa_itab2 like line of itab2.
sort itab1 by mblnr.
Loop at ITAB1 into WA_itab1.
at new mblnr.
clear lv_var.
clear wa_itab2.
lv_var = sy-tabix.
lv_var = lv_var + 1.
read table itab1 into wa_itab2 index lv_var.
if sy-subrc = 0.
if wa_itab2-mblnr NE wa_itab1-mblnr.
delete Itab1 from wa_itab2.
Else.
continue.
Endif.
endif.
end at.
end loop.
Let me know still you are facing some problem on this regard.
Rewards if find useful.
regards
Antony Thomas