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: 

ITAB_DUPLICATE_KEY in BW endroutine

Former Member
0 Kudos


Hi ABAP experts

I am getting a duplicate key error.

Although I delete the duplicates I am getting this error.

Any ideas why?

Thanks

Thomas

1 ACCEPTED SOLUTION

prakashjasti
Contributor
0 Kudos

Hi Thomas,

Sort your ITAB3 with fields FC_VTREF and PSTNG_DATE before deleting the duplicates from ITAB3

and check in debug mode  if still it is containing duplicates with same key.

Regards,

Prakash.

Prakash J
5 REPLIES 5

prakashjasti
Contributor
0 Kudos

Hi Thomas,

Sort your ITAB3 with fields FC_VTREF and PSTNG_DATE before deleting the duplicates from ITAB3

and check in debug mode  if still it is containing duplicates with same key.

Regards,

Prakash.

Prakash J

0 Kudos

Hi Prahash

It works now.

To my coding:

There is no need for a lookup of fields from DSO ZFC_DS31.

I only need the relevant FC_VTREF values from the lookup DSO  to compare it with the source which is an infocube. The performance is very low. Are there any tips to increase the performance?

TYPES : BEGIN OF FSCD_NL,

              FC_OPBEL  TYPE /BI0/OIFC_OPBEL,

              FC_OPUPK  TYPE /BI0/OIFC_OPUPK,

              COMP_CODE TYPE /BI0/OICOMP_CODE,

              BUS_AREA TYPE /BI0/OIBUS_AREA,

              /BIC/ZZBRA3 type  /BIC/OIZZBRA3,

             /BIC/ZZGA_NR type  /BIC/OIZZGA_NR,

              DOC_DATE TYPE /BI0/OIDOC_DATE,

              PSTNG_DATE TYPE /BI0/OIPSTNG_DATE,

              FC_AUGRS TYPE /BI0/OIFC_AUGRS,

              NETDUEDATE TYPE /BI0/OINETDUEDATE,

              FC_STUDT TYPE /BI0/OIFC_STUDT,

              FC_BLART TYPE /BI0/OIFC_BLART,

              CAMNTRANS TYPE /BI0/OICAMNTRANS,

              CASUBTRANS TYPE /BI0/OICASUBTRANS,

               FC_VTREF TYPE /BI0/OIFC_VTREF,

              GL_ACCOUNT TYPE /BI0/OIGL_ACCOUNT,

              CACONT_ACC TYPE /BI0/OICACONT_ACC,

              CHRT_ACCTS TYPE /BI0/OICHRT_ACCTS,

              BPARTNER TYPE /BI0/OIBPARTNER,

              CAAPPLK TYPE /BI0/OICAAPPLK,

              FC_BETRH TYPE /BI0/OIFC_BETRH,

              LOC_CURRCY TYPE /BI0/OILOC_CURRCY,

        END OF FSCD_NL.

DATA: ITAB_TARGET TYPE STANDARD TABLE OF _TY_S_TG_1.
    DATA : ICOUNT TYPE RSARECORD.
    DATA: ITAB2 TYPE HASHED TABLE OF FSCD_NL with Unique Key
    FC_VTREF, WA type FSCD_NL.
    DATA: ITAB3 TYPE STANDARD table of FSCD_NL.
    DATA: WA_FSCD_NL TYPE FSCD_NL.

* Ensuring the source package is not empty


    IF RESULT_PACKAGE IS NOT INITIAL.
      ICOUNT = 1.
      REFRESH ITAB3. REFRESH ITAB2.

      SELECT * FROM /BIC/AZFC_DS3100
      INTO CORRESPONDING FIELDS OF TABLE ITAB3
      for all entries in RESULT_PACKAGE
      WHERE FC_VTREF EQ RESULT_PACKAGE-FC_VTREF
        AND PSTNG_DATE EQ RESULT_PACKAGE-PSTNG_DATE.

      IF sy-subrc = 0.
        SORT ITAB3 BY FC_VTREF PSTNG_DATE.
        DELETE ADJACENT DUPLICATES FROM ITAB3 COMPARING FC_VTREF
        PSTNG_DATE.
        ITAB2[] = ITAB3[].
        FREE: ITAB3.
      ENDIF.

* Processing Refresh itab_target.
      SORT RESULT_PACKAGE BY FC_VTREF PSTNG_DATE.

      LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>.
        READ TABLE ITAB2 INTO WA WITH TABLE KEY
         FC_VTREF = <RESULT_FIELDS>-FC_VTREF.

        If sy-subrc = 0.
          <RESULT_FIELDS>-RECORD = ICOUNT.
          ICOUNT = ICOUNT + 1.
          APPEND <RESULT_FIELDS> TO ITAB_TARGET.
          CLEAR: WA, <result_fields>.
        ENDIF.


      ENDLOOP.

      REFRESH RESULT_PACKAGE.
      RESULT_PACKAGE[] = ITAB_TARGET[].
    ENDIF.

0 Kudos

Hi,

for performance , Create Secondary index base on Select Query and use Sort and Binary Search in READ TABLE ITAB2 statement.

Regards,

0 Kudos

Hi

It won't work with hashed table ITAB2, am I right?

How would you correct the coding?

Thanks.


0 Kudos

Hi Sali

I have followed your advises:

  • Index setting on table /BIC/AZFC_DS3100, fields FC_VTREF and PSTNG_DATE
  • replacing the asterix " * " in the SELECT statement with fields FC_VTREF and PSTNG_DATE
  • Add "TRANSPORTING NO FIELDS" in the LOOP statement
  • No work area any more necessary.

Result: Loading of data took only 3 min. instead of many hours!

Thanks

Thomas