SAP Program/ABAP

Internal table에서 중복 데이타 찾기

유부사모 2017. 11. 23. 15:51

REPORT y_dupl_find MESSAGE-ID zmc_qm001.


DATAgt_mseg TYPE TABLE OF mseg,
      gs_mseg LIKE LINE OF gt_mseg,
      cp_mseg LIKE LINE OF gt_mseg.


SELECT  mblnr
        mjahr
        zeile
        bwart
        xauto
        matnr
        werks
        lgort
        charg
        insmk
        zusch
        zustd
        sobkz
        lifnr
        kunnr
        kdauf
        kdpos
  INTO  CORRESPONDING FIELDS OF TABLE gt_mseg
  FROM  mseg
  UP TO 500 ROWS
 WHERE  budat_mkpf '20170501'
  order by PRIMARY KEY.

gs_mseg-mblnr '4910157785'.
gs_mseg-mjahr '2017'.
gs_mseg-zeile '0002'.
append gs_mseg to gt_mseg.

gs_mseg-mblnr '4910157956'.
gs_mseg-mjahr '2017'.
gs_mseg-zeile '0003'.
append gs_mseg to gt_mseg.


SORT gt_mseg BY mblnr mjahr zeile.

DATAall_cnt TYPE i,
      chk_cnt TYPE i.

LOOP AT gt_mseg INTO gs_mseg.
  cp_mseg gs_mseg.
  ADD TO all_cnt.

  AT NEW zeile.
    ADD TO chk_cnt.

    IF chk_cnt <> all_cnt.
      "바로 이전 데이타에서 중복 발생
      WRITE:/ cp_mseg-mblnrAT 20 cp_mseg-mjahrAT 30 cp_mseg-zeile.
      all_cnt all_cnt 1.
    ENDIF.
  ENDAT.
ENDLOOP.



단순하게 중복된 데이타가 있는지만 check 하고자 할때는


IT_ERR[] = ITBA[].

DELETE ADJACENT DUPLICATES FROM IT_ERR.

if sy-subrc = 0.

Message E123(ZK_MSGCLS).

endif.