09-11-2014 9:05 AM
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
09-11-2014 9:12 AM
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.
09-11-2014 9:12 AM
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.
09-11-2014 10:44 AM
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.
09-11-2014 12:22 PM
Hi,
for performance , Create Secondary index base on Select Query and use Sort and Binary Search in READ TABLE ITAB2 statement.
Regards,
09-11-2014 12:43 PM
Hi
It won't work with hashed table ITAB2, am I right?
How would you correct the coding?
Thanks.
09-16-2014 6:24 AM
Hi Sali
I have followed your advises:
Result: Loading of data took only 3 min. instead of many hours!
Thanks
Thomas