Skip to Content
0
Former Member
Sep 13, 2007 at 06:28 AM

Performance Enhancement for Custom Data Extractor

68 Views

Hi Folks,

We have a Custom Datasource ZDS_LINE_ITEM that is based on Faglflexa Table. To have the the currency ,amount fields and some other fields we have enhanced the Datasource.

We are doing individual look ups from different tables (BSEG, BSEG_ADD, BKPF) to populate the data in the extractor. Right now it is taking some 6 odd hrs to fetch the data into PSA .Heres the coding we have used in the enhancement.

****coding for enhancement*********

TYPES: BEGIN OF TY_FAGLFLEXA,

RYEAR TYPE GJAHR,

DOCNR TYPE BELNR_D,

RLDNR TYPE FAGL_RLDNR,

RBUKRS TYPE BUKRS,

DOCLN TYPE DOCLN6,

TSL TYPE VTCUR12,

HSL TYPE VLCUR12,

KSL TYPE VGCUR12,

OSL TYPE VOCUR12,

MSL TYPE QUAN1_12,

WSL TYPE VWCUR12,

END OF TY_FAGLFLEXA,

BEGIN OF TY_BSEG,

BUKRS TYPE BUKRS,

BELNR TYPE BELNR_D,

GJAHR TYPE GJAHR,

BUZEI TYPE BUZEI,

SGTXT TYPE SGTXT,

END OF TY_BSEG,

BEGIN OF TY_BKPF,

BUKRS TYPE BUKRS,

BELNR TYPE BELNR_D,

GJAHR TYPE GJAHR,

BLART TYPE BLART,

XBLNR TYPE XBLNR1,

BKTXT TYPE BKTXT,

END OF TY_BKPF,

BEGIN OF TY_SKA1,

SAKNR TYPE SAKNR,

KTOPL TYPE KTOPL,

END OF TY_SKA1,

BEGIN OF TY_T882G,

RBUKRS TYPE BUKRS,

CURR1 TYPE CURR1,

CURR2 TYPE CURR2,

END OF TY_T882G.

*-- Internal Table

  • Internal Table to hold data from the table FAGLFLEXA

DATA:

  • T_FAGLFLEXA LIKE TABLE OF FAGLFLEXA with header line,

T_FAGLFLEXA TYPE STANDARD TABLE OF TY_FAGLFLEXA,

  • Internal Table to hold data from the table BSEG

T_BSEG TYPE SORTED TABLE OF TY_BSEG

WITH UNIQUE KEY BUKRS BELNR GJAHR BUZEI,

*Internal Table to hold data from the table BKPF

T_BKPF TYPE STANDARD TABLE OF TY_BKPF,

  • Internal Table to hold data from the table SKA1

T_SKA1 TYPE STANDARD TABLE OF TY_SKA1,

  • Internal Table to hold data from the table SKA1

T_T882G TYPE STANDARD TABLE OF TY_T882G,

  • Internal Table to hold data fetched into the structure ZOXED0178

T_ZOXECD0178 LIKE TABLE OF ZOXECD0178 with header line,

*-- Work Area

  • Work Area to hold records obtained from FAGLFLEXA table

  • W_FAGLFLEXA LIKE FAGLFLEXA,

W_FAGLFLEXA TYPE TY_FAGLFLEXA,

  • Work Area to hold records obtained from BSEG table

W_BSEG TYPE TY_BSEG,

  • Work Area to hold records obtained from BKPF table

W_BKPF TYPE TY_BKPF,

  • Work Area to hold records obtained from SKA1 table

W_SKA1 TYPE TY_SKA1,

  • Work Area to hold records obtained from T882G table

W_T882G TYPE TY_T882G,

  • Work Area to hold data coming from the extractor ZDS_LINE_ITEM

W_ZOXECD0178 TYPE ZOXECD0178,

W_TABIX TYPE SYTABIX.

case i_datasource.

when 'ZDS_LINE_ITEM'.

REFRESH: T_ZOXECD0178,

T_FAGLFLEXA,

T_BSEG,

T_BKPF,

T_SKA1,

T_T882G.

CLEAR: W_FAGLFLEXA,

W_BSEG,

W_BKPF,

W_SKA1,

W_TABIX,

W_T882G.

T_ZOXECD0178[] = C_T_DATA[].

IF NOT T_ZOXECD0178[] IS INITIAL.

*Fetching all the records into internal table t_FAGLFLEXA from the transparent table FAGLFLEXA

SELECT RYEAR

DOCNR

RLDNR

RBUKRS

DOCLN

TSL

HSL

KSL

OSL

MSL

WSL

FROM FAGLFLEXA

INTO CORRESPONDING FIELDS OF TABLE T_FAGLFLEXA

FOR ALL ENTRIES IN T_ZOXECD0178

WHERE RYEAR = T_ZOXECD0178-RYEAR

AND DOCNR = T_ZOXECD0178-DOCNR

AND RLDNR = T_ZOXECD0178-RLDNR

AND RBUKRS = T_ZOXECD0178-RBUKRS

AND DOCLN = T_ZOXECD0178-DOCLN.

*Fetching all the records into internal table t_BSEG from the transparent table BSEG

SELECT BUKRS

BELNR

GJAHR

BUZEI

SGTXT

FROM BSEG INTO CORRESPONDING FIELDS OF TABLE T_BSEG

FOR ALL ENTRIES IN T_ZOXECD0178

WHERE BUKRS = T_ZOXECD0178-RBUKRS

AND BELNR = T_ZOXECD0178-BELNR

AND GJAHR = T_ZOXECD0178-GJAHR

AND BUZEI = T_ZOXECD0178-BUZEI.

  • Fetching all the records into internal table t_BKPF from the transparent table BKPF

SELECT BUKRS

BELNR

GJAHR

BLART

XBLNR

BKTXT

FROM BKPF INTO CORRESPONDING FIELDS OF TABLE T_BKPF

FOR ALL ENTRIES IN T_ZOXECD0178

WHERE BUKRS = T_ZOXECD0178-RBUKRS

AND BELNR = T_ZOXECD0178-BELNR

AND GJAHR = T_ZOXECD0178-GJAHR.

  • Fetching all the records into internal table t_SKA1 from the transparent table SKA1

SELECT SAKNR

KTOPL

FROM SKA1 INTO CORRESPONDING FIELDS OF TABLE T_SKA1

FOR ALL ENTRIES IN T_ZOXECD0178

WHERE SAKNR = T_ZOXECD0178-RACCT.

  • Fetching all the records into internal table t_t882g from the transparent table BKPF

SELECT RBUKRS

CURR1

CURR2

FROM T882G INTO CORRESPONDING FIELDS OF TABLE T_T882G

FOR ALL ENTRIES IN T_ZOXECD0178

WHERE RBUKRS = T_ZOXECD0178-RBUKRS.

SORT T_FAGLFLEXA BY RYEAR DOCNR RLDNR RBUKRS DOCLN.

IF NOT T_FAGLFLEXA IS INITIAL.

LOOP AT T_ZOXECD0178 INTO W_ZOXECD0178.

W_TABIX = SY-TABIX.

READ TABLE T_FAGLFLEXA INTO W_FAGLFLEXA

WITH KEY RYEAR = W_ZOXECD0178-RYEAR

DOCNR = W_ZOXECD0178-DOCNR

RLDNR = W_ZOXECD0178-RLDNR

RBUKRS = W_ZOXECD0178-RBUKRS

DOCLN = W_ZOXECD0178-DOCLN

BINARY SEARCH.

IF SY-SUBRC = 0.

W_ZOXECD0178-ZZTSL = W_FAGLFLEXA-TSL.

W_ZOXECD0178-ZZHSL = W_FAGLFLEXA-HSL.

W_ZOXECD0178-ZZKSL = W_FAGLFLEXA-KSL.

W_ZOXECD0178-ZZOSL = W_FAGLFLEXA-OSL.

W_ZOXECD0178-ZZMSL = W_FAGLFLEXA-MSL.

W_ZOXECD0178-ZZWSL = W_FAGLFLEXA-WSL.

ENDIF.

READ TABLE T_BSEG INTO W_BSEG

WITH KEY BUKRS = w_ZOXECD0178-rbukrs

BELNR = W_ZOXECD0178-BELNR

GJAHR = W_ZOXECD0178-GJAHR

BINARY SEARCH.

IF SY-SUBRC = 0.

W_ZOXECD0178-ZZSGTXT = W_BSEG-SGTXT.

ENDIF.

READ TABLE T_BKPF INTO W_BKPF

WITH KEY BUKRS = w_ZOXECD0178-rbukrs

BELNR = W_ZOXECD0178-BELNR

GJAHR = W_ZOXECD0178-GJAHR

BINARY SEARCH.

IF SY-SUBRC = 0.

W_ZOXECD0178-ZZBLART = W_BKPF-BLART.

W_ZOXECD0178-ZZXBLNR = W_BKPF-XBLNR.

W_ZOXECD0178-ZZBkTXT = W_BKPF-BKTXT.

endif.

READ TABLE T_SKA1 INTO W_SKA1

WITH KEY SAKNR = W_ZOXECD0178-racct

BINARY SEARCH.

IF SY-SUBRC = 0.

W_ZOXECD0178-ZZKTOPL = W_SKA1-KTOPL.

endif.

READ TABLE T_T882G INTO W_T882G

WITH KEY RBUKRS = w_ZOXECD0178-rbukrs

BINARY SEARCH.

IF SY-SUBRC = 0.

W_ZOXECD0178-ZZCURR1 = W_T882G-CURR1.

W_ZOXECD0178-ZZCURR2 = W_T882G-CURR2.

endif.

MODIFY T_ZOXECD0178 FROM w_ZOXECD0178

TRANSPORTING ZZTSL

ZZHSL

ZZKSL

ZZOSL

ZZMSL

ZZWSL

ZZSGTXT

ZZBLART

ZZXBLNR

zzbktxt

ZZKTOPL

ZZCURR1

ZZCURR2.

CLEAR: W_TABIX,

W_FAGLFLEXA,

W_BSEG,

W_BKPF,

W_SKA1,

W_T882G,

W_ZOXECD0178.

ENDLOOP.

ENDIF.

REFRESH C_T_DATA.

C_T_DATA[] = T_ZOXECD0178[].

REFRESH: T_FAGLFLEXA,

T_BSEG,

T_BKPF,

T_SKA1,

T_T882G,

T_ZOXECD0178.

endcase.

Can Some one suggest us if we can make any further changes to the coding so that it fetches the data more quickly. I Promise to award full points for your sugestions

regards,

sasidahr gunturu