Application Development 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: 

Hello experts..deleting entries in internal table.

Former Member
0 Kudos

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.

5 REPLIES 5

rodrigo_paisante3
Active Contributor
0 Kudos

Hi,

try the statements

sort <itab> by <field>.

delete adjacent duplicates from <itab>

Regards

Former Member
0 Kudos

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

Former Member
0 Kudos

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.

Former Member
0 Kudos

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

Former Member
0 Kudos

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