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

DELETE DUPLICATES ENTRIES

Former Member
0 Likes
1,097

HI EXPERTS,

I HAVE TO DELETE THE DUPLICATES ENTRIES IN AN INTERNAL TABLE .

ALREADY SHORTED THE ITAB BY MATNR AND WERKS.

SUPPOSE :

MATNR WERKS

GX0072 1120

GX0073 1120

GX0073 1120

GX0074 1120

GX0074 1130

GX0074 1140

I NEED TO SHOW ONLY MATERIAL NO GX0074 SINCE GX0074 ONLY

BELONGS TO DIFFERENT PLANT.

PLEASE SUGGEST ME IN WRITING THE EXACT CODE, SO THAT I CAN SHOW ONLY

GX0074.

PLEASE HELP ME OUT.

THANKS IN ADVANCE.

VIVEK

1 ACCEPTED SOLUTION
Read only

RaymondGiuseppi
Active Contributor
0 Likes
1,067

Try something like

LOOP AT itab ASSIGNING <fs>.

  AT NEW matnr. " new material
    CLEAR nb_of_werks.
  ENDAT.

  AT NEW werks. " new plant
    ADD 1 TO nb_of_werks.
  ENDAT.

  AT END OF matnr. " and now somewhat ...
    IF nb_of_werks GT 1.
      WRITE <fs>-matnr.
    ENDIF.
  ENDAT.

ENDLOOP.

Regards,

Raymond

Try something like

LOOP AT itab ASSIGNING <fs>.

  AT NEW matnr. " new material
    CLEAR nb_of_werks.
  ENDAT.

  AT NEW werks. " new plant
    ADD 1 TO nb_of_werks.
  ENDAT.

  AT END OF matnr. " and now somewhat ...
    IF nb_of_werks GT 1.
      WRITE <fs>-matnr.
    ENDIF.
  ENDAT.

ENDLOOP.

Regards,

Raymond

10 REPLIES 10
Read only

MarcinPciak
Active Contributor
0 Likes
1,067

For deleting duplicates use


DELETE ADJACENT DUPLICATES FROM itab COMPARING matnr.

This will remove all entires having common material and will leave first one.

Regards

Marcin

Read only

Former Member
0 Likes
1,067

Hello,

First of all donot post your question in ALL CAPS. That's against the forum rules.

for your question try this snippet


data: begin of itab OCCURS 0,
      matnr(10) type c,
      werks(4)  type c,
      end of itab.

itab-matnr = 'GX0072'.
itab-werks = '1120'.
append itab.


itab-matnr = 'GX0073'.
itab-werks = '1120'.
append itab.

itab-matnr = 'GX0073'.
itab-werks = '1120'.
append itab.

itab-matnr = 'GX0074'.
itab-werks = '1120'.
append itab.

itab-matnr = 'GX0074'.
itab-werks = '1130'.
append itab.

itab-matnr = 'GX0074'.
itab-werks = '1140'.
append itab.

sort itab by werks ASCENDING matnr DESCENDING.

DELETE ADJACENT DUPLICATES FROM itab COMPARING werks.

loop at itab.
write: / itab-matnr, itab-werks.
endloop.

Vikranth

Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
1,067

Hello,

I think this should give some idea:


DATA: V_COUNT TYPE I.

SORT ITAB BY MATNR WERKS.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING MATNR WERKS.

LOOP AT ITAB INTO WA.

V_COUNT = V_COUNT + 1.

AT END OF MATNR.

IF V_COUNT > 1.
WRITE: WA-MATNR, 20 'belongs to different plants'.
CLEAR V_COUNT.
ENDIF.

ENDAT.
ENDLOOP.

BR,

Suhas

Read only

RaymondGiuseppi
Active Contributor
0 Likes
1,068

Try something like

LOOP AT itab ASSIGNING <fs>.

  AT NEW matnr. " new material
    CLEAR nb_of_werks.
  ENDAT.

  AT NEW werks. " new plant
    ADD 1 TO nb_of_werks.
  ENDAT.

  AT END OF matnr. " and now somewhat ...
    IF nb_of_werks GT 1.
      WRITE <fs>-matnr.
    ENDIF.
  ENDAT.

ENDLOOP.

Regards,

Raymond

Read only

0 Likes
1,067

Dear Raymond,

You are very much right , what i have done something like this ,

SORT IT_MKPF[] BY MATNR WERKS.

DELETE IT_MKPF[] WHERE MATNR = ''.

LOOP AT IT_MKPF INTO WA_MKPF.

CLEAR:V_FLAG.

ON CHANGE OF WA_MKPF-MATNR.

ADD 1 TO V_FLAG.

ENDON.

IF V_FLAG = 0.

APPEND WA_MKPF TO IT_MKPF1.

CLEAR: WA_MKPF.

ENDIF.

ENDLOOP.

and it works.

Thanks a lot dear.

Vivek

Read only

Former Member
0 Likes
1,067

I_table is <your table>.

wa_table is <your work area>.

var type matnr is null.

i_newtab <your table type>

wa_newtab<new work area>

loop i_table into wa_table.

on change of wa_table-matnr wa_table-werks.

if var == null.

wa_newtab = wa_table.

else if var!=null and wa_table-matnr = wa_newtab-matnr.

append wa_newtab into i_newtab.

wa_newtab = wa_table.

var = wa_newtab-matnr.

endif.

endon.

endloop.

< now you will have only the matnrs which are having atleast 2

Read only

Former Member
0 Likes
1,067

now you will have the records which are ...same materials stored in atleast two different plants in the new internal table ...

I hope that is your requirement ..

Regards,

Read only

Former Member
0 Likes
1,067

loop at it_mat into wa_mat.

endloop.

delete table it_mat where matnr <> wa_mat-matnr.

please try this code

TYPES : BEGIN OF ty_mat,

MATNR TYPE MARC-MATNR,

WERKS TYPE MARC-WERKS,

END OF ty_mat.

DATA : it_mat TYPE STANDARD TABLE OF ty_mat,

wa_mat TYPE ty_mat.

wa_mat-matnr = 'GX0074'.

wa_mat-werks = '1130'.

APPEND wa_mat to it_mat.

wa_mat-matnr = 'GX0074'.

wa_mat-werks = '1120'.

APPEND wa_mat to it_mat.

wa_mat-matnr = 'GX0072'.

wa_mat-werks = '1120'.

APPEND wa_mat to it_mat.

wa_mat-matnr = 'GX0073'.

wa_mat-werks = '1120'.

APPEND wa_mat to it_mat.

wa_mat-matnr = 'GX0074'.

wa_mat-werks = '1140'.

APPEND wa_mat to it_mat.

wa_mat-matnr = 'GX0073'.

wa_mat-werks = '1120'.

APPEND wa_mat to it_mat.

SORT it_mat by matnr werks.

DELETE ADJACENT DUPLICATES FROM it_mat.

LOOP AT it_mat INTO wa_mat.

ENDLOOP.

DELETE it_mat WHERE matnr <> wa_mat-matnr.

LOOP AT it_mat INTO wa_mat.

WRITE : / wa_mat-matnr, wa_mat-werks.

ENDLOOP.

Thanks

Chinni

Read only

Former Member
0 Likes
1,067

I run Vikranth.Reddy 's report its not working as per vivek srivastava so i modify Vikranth.Reddy 's now its working fine

run this


data: begin of itab OCCURS 0,
      matnr like mara-matnr,
      werks(4)  type c,
      end of itab.

itab-matnr = 'GX0072'.
itab-werks = '1120'.
append itab.


itab-matnr = 'GX0073'.
itab-werks = '1120'.
append itab.

itab-matnr = 'GX0073'.
itab-werks = '1120'.
append itab.

itab-matnr = 'GX0074'.
itab-werks = '1120'.
append itab.

itab-matnr = 'GX0074'.
itab-werks = '1130'.
append itab.

itab-matnr = 'GX0074'.
itab-werks = '1140'.
append itab.


sort itab by werks ASCENDING matnr DESCENDING.


DELETE ADJACENT DUPLICATES FROM itab COMPARING werks .
DELETE ADJACENT DUPLICATES FROM itab COMPARING matnr.


loop at itab.
write: / itab-matnr, itab-werks.
endloop.


Read only

kesavadas_thekkillath
Active Contributor
0 Likes
1,067

What about this record ?

GX0072 1120