Application Development and Automation 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: 
Read only

performance Issue

Former Member
0 Likes
1,197

Hi All,

The following code takes long time to run. Any inputs on how it can be tuned.

SELECT vbak~vbeln vbap~posnr vbak~erdat vbak~erzet

vbak~auart vbak~waerk vbkd~kdgrp vbak~lifsk

vbak~vsbed vbak~bstnk vbak~rplnr vbak~bsark vbak~kunnr

vbap~matnr vbap~arktx vbap~kzwi3 vbap~kzwi4 vbap~abgru

vbap~netwr

vbap~kwmeng vbak~vkorg vbkd~bzirk vbkd~ihrez

vbkd~bsark vbkd~zterm vbkd~prsdt

vbak~zzwebuname vbak~augru

vbap~matkl vbap~prodh

vbak~zzwebpid

INTO TABLE t_order

FROM vbak INNER JOIN vbkd

ON vbak~vbeln EQ vbkd~vbeln

INNER JOIN vbap

ON vbak~vbeln EQ vbap~vbeln

WHERE vbak~vkorg IN s_vkorg

AND vbak~erdat IN s_erdat

AND vbak~auart IN s_auart

AND vbkd~posnr EQ '000000'

AND vbkd~kdgrp IN s_kdgrp

AND vbkd~bzirk IN s_bzirk.

SORT t_order BY vbeln posnr.

CLEAR z_total_rec.

LOOP AT t_order.

CLEAR t_outso.

ON CHANGE OF t_order-vbeln.

CLEAR: fpltc, v_ccnum.

CLEAR: v_cre_rev, v_frd_rev, v_frd_rvr,

v_frd_rrr, v_crg_back.

IF NOT t_order-rplnr IS INITIAL.

SELECT fpltr ccins ccnum datbi rcavr ccold

audat autim aunum autra rcrsp cctyp

FROM fpltc UP TO 1 ROWS

INTO (fpltc-fpltr, fpltc-ccins, fpltc-ccnum,

fpltc-datbi, fpltc-rcavr, fpltc-ccold,

fpltc-audat, fpltc-autim, fpltc-aunum,

fpltc-autra, fpltc-rcrsp, fpltc-cctyp)

WHERE fplnr = t_order-rplnr

ORDER BY fpltr DESCENDING.

ENDSELECT.

ENDIF.

CONCATENATE sy-mandt t_order-vbeln INTO v_tabkey.

REFRESH cdpos_tab.

CLEAR: cdpos_tab,z5_block,z5_block_released.

SELECT * FROM cdpos INTO TABLE cdpos_tab

WHERE objectclas EQ 'VERKBELEG' AND

objectid EQ t_order-vbeln AND

tabname EQ 'VBAK' AND

tabkey EQ v_tabkey AND

fname EQ 'LIFSK'.

IF sy-subrc EQ 0.

LOOP AT cdpos_tab.

IF cdpos_tab-value_new = 'Z5' OR cdpos_tab-value_old = 'Z5'.

z5_block = 'Y'.

ENDIF.

IF cdpos_tab-value_new = ' ' AND cdpos_tab-value_old = 'Z5'.

z5_block_released = 'Y'.

ENDIF.

ENDLOOP.

IF z5_block IS INITIAL.

IF t_order-lifsk = 'Z5'.

z5_block = 'Y'.

ENDIF.

ENDIF.

SELECT SINGLE cmgst INTO vbuk-cmgst

FROM vbuk

WHERE vbeln EQ t_order-vbeln.

IF vbuk-cmgst EQ 'B'.

v_cre_rev = 'YES'.

ELSE.

CLEAR cdpos.

SELECT value_old FROM cdpos INTO cdpos-value_old

UP TO 1 ROWS

WHERE objectclas EQ c_verkbeleg

AND objectid EQ t_order-vbeln

AND tabname EQ c_vbuk

AND fname EQ c_cmgst

AND value_old EQ c_charb.

ENDSELECT.

IF sy-subrc EQ 0.

v_cre_rev = 'YES'.

ELSE.

v_cre_rev = 'NO'.

ENDIF.

ENDIF.

IF NOT t_order-rplnr IS INITIAL.

CLEAR: zcc_groupid, zcc_fraudres.

SELECT SINGLE groupid FROM zcc_groupid

INTO zcc_groupid-groupid

WHERE vbeln EQ t_order-vbeln.

CLEAR: w_oid,w_zcvm,w_zvbv,w_ex_resultcode,w_ex_resultmsg,

w_audat, w_autim, w_zavr.

CLEAR : w_rcrsp, w_score.

SELECT ex_resultcode ex_resultmsg audat autim

rcrsp score

FROM zcc_fraudres UP TO 1 ROWS

INTO (w_ex_resultcode , w_ex_resultmsg, w_audat,

w_autim, w_rcrsp, w_score)

WHERE groupid EQ zcc_groupid-groupid

ORDER BY audat DESCENDING

autim DESCENDING.

ENDSELECT.

CLEAR : t_zzoid, w_temp_zzoid, w_counter.

REFRESH t_zzoid.

SELECT * FROM zzoid INTO TABLE t_zzoid

WHERE z_groupid EQ zcc_groupid-groupid.

DELETE t_zzoid WHERE ccnum NE fpltc-ccnum.

SORT t_zzoid BY audat ASCENDING autim ASCENDING.

READ TABLE t_zzoid INDEX 1.

MOVE t_zzoid-zcvm TO w_zcvm.

MOVE t_zzoid-zvbv TO w_zvbv.

MOVE t_zzoid-oid TO w_oid.

MOVE t_zzoid-audat TO w_audat.

MOVE t_zzoid-autim TO w_autim.

SELECT zrsp INTO w_zrsp FROM zzoid UP TO 1 ROWS

WHERE audat = fpltc-audat

AND autim = fpltc-autim

AND aunum = fpltc-aunum

AND ccnum = fpltc-ccnum

AND autra = fpltc-autra.

ENDSELECT.

SELECT oid FROM zcc_fraudres

INTO zcc_fraudres-oid UP TO 1 ROWS

WHERE groupid EQ zcc_groupid-groupid

AND rcrsp EQ '05'.

ENDSELECT.

IF sy-subrc EQ 0.

v_frd_rev = 'YES'.

SELECT message_num FROM zcc_fraudres

INTO zcc_fraudres-message_num

WHERE groupid EQ zcc_groupid-groupid

AND message_num NE ' '.

IF v_frd_rvr IS INITIAL.

v_frd_rvr = zcc_fraudres-message_num.

ELSE.

CONCATENATE v_frd_rvr zcc_fraudres-message_num

INTO v_frd_rvr SEPARATED BY ','.

ENDIF.

ENDSELECT.

ELSE.

v_frd_rev = 'NO'.

ENDIF.

CLEAR zcc_fraudres.

SELECT res_code chargeback

FROM zcc_fraudres

INTO (zcc_fraudres-res_code,

zcc_fraudres-chargeback)

UP TO 1 ROWS

WHERE groupid EQ zcc_groupid-groupid

AND ( rcrsp EQ '06' OR

rcrsp EQ '07' ).

ENDSELECT.

IF sy-subrc EQ 0.

v_frd_rrr = zcc_fraudres-res_code.

ENDIF.

IF zcc_fraudres-chargeback IS INITIAL.

v_crg_back = 'NO'.

ELSE.

v_crg_back = 'YES'.

ENDIF.

CLEAR: v_zchk.

SELECT COUNT(*) INTO v_zchk FROM zcc_fraudres

WHERE groupid = zcc_groupid-groupid

AND message_num EQ space

AND source = 'ZCHK'.

FREE t_fpltc.

CLEAR: v_rtext, v_rtext_0002.

PERFORM get_header_text USING t_order-vbeln 'ZWBH'.

PERFORM get_header_text USING t_order-vbeln '0002'.

ENDON.

t_outso-vbeln = t_order-vbeln.

t_outso-posnr = t_order-posnr.

t_outso-erdat = t_order-erdat.

t_outso-erzet = t_order-erzet.

t_outso-auart = t_order-auart.

t_outso-waerk = t_order-waerk.

t_outso-kdgrp = t_order-kdgrp.

t_outso-bstnk = t_order-bstnk.

t_outso-matnr = t_order-matnr.

t_outso-kunnr_sp = t_order-kunnr.

t_outso-arktx = t_order-arktx.

t_outso-bsark = t_order-bsark.

t_outso-kwmeng = t_order-kwmeng.

v_kzwi0 = t_order-kzwi3 + t_order-kzwi4.

t_outso-zzwebuname = t_order-zzwebuname.

t_outso-augru = t_order-augru.

t_outso-matkl = t_order-matkl.

t_outso-prodh = t_order-prodh.

t_outso-zzwebpid = t_order-zzwebpid.

Regards

Brain

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,040

I think there are two many database hits within the loop endloop. Try to get the data beforehand into internal tables and try and use the same.

Regards

Anurag

9 REPLIES 9
Read only

Former Member
0 Likes
1,040

Hi Brain,

Try removing SELECT ..... ENDSELECTS. Your code has too many SELECT ...ENDSELECTS. It will reducce ur performance.

Instead use array fetch and use READ with BINARY search.

Check this link...it gives some good tips

http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_Introduction.asp

Cheers

VJ

Message was edited by: Vijayendra Rao

Read only

rahulkavuri
Active Contributor
0 Likes
1,040

Instead of using Inner Join try out using "For all Entries"

This will optimise ur program

For more info about how to use it check this

Please reward points if found helpful

Read only

Former Member
0 Likes
1,040

Hi,

Remove the SELECTs from the LOOP and use FOR ALL ENTRIES to get the data. Then use the READ STATEMENT OR LOOP AT..EXIT.ENDLOOP within the LOOP.

THanks,

Naren

Read only

Former Member
0 Likes
1,040

Have you done a performance trace (ST05) to see where the bottleneck is?

If s_erdat is empty, that will cause problems.

Rob

Read only

Former Member
0 Likes
1,041

I think there are two many database hits within the loop endloop. Try to get the data beforehand into internal tables and try and use the same.

Regards

Anurag

Read only

0 Likes
1,040

Hi All,

I have changed the code according to the suggestions. However there is no improvement in the performance. The updated code is below...Any suggestions...

SELECT vbak~vbeln vbak~vbeln vbap~posnr vbak~erdat vbak~erzet

vbak~auart vbak~waerk vbkd~kdgrp vbak~lifsk

vbak~vsbed vbak~bstnk vbak~rplnr vbak~bsark vbak~kunnr

vbap~matnr vbap~arktx vbap~kzwi3 vbap~kzwi4 vbap~abgru

vbap~netwr

vbap~kwmeng vbak~vkorg vbkd~bzirk vbkd~ihrez

vbkd~bsark vbkd~zterm vbkd~prsdt

vbak~zzwebuname vbak~augru

vbap~matkl vbap~prodh

vbak~zzwebpid

INTO TABLE t_order

FROM vbak INNER JOIN vbkd

ON vbak~vbeln EQ vbkd~vbeln

INNER JOIN vbap

ON vbak~vbeln EQ vbap~vbeln

WHERE vbak~vkorg IN s_vkorg

AND vbak~erdat IN s_erdat

AND vbak~auart IN s_auart

AND vbkd~posnr EQ '000000'

AND vbkd~kdgrp IN s_kdgrp

AND vbkd~bzirk IN s_bzirk.

IF sy-subrc NE 0.

WRITE: /5 text-e01 COLOR COL_NEGATIVE.

EXIT.

ENDIF.

t_order1[] = t_order[].

SORT t_order BY vbeln posnr.

SORT t_order1 BY vbeln posnr.

DELETE ADJACENT DUPLICATES FROM t_order1 COMPARING vbeln.

CLEAR z_total_rec.

IF t_order[] IS NOT INITIAL.

SELECT fplnr fpltr ccins ccnum datbi rcavr ccold

audat autim aunum autra rcrsp cctyp autwr ccpre

INTO TABLE t_ccdata

FROM fpltc FOR ALL ENTRIES IN t_order1

WHERE fplnr = t_order1-rplnr.

ENDIF.

SORT t_ccdata BY fplnr fpltr DESCENDING.

IF t_order[] IS NOT INITIAL.

SELECT objectid value_new value_old

INTO TABLE cdpos_tab

FROM cdpos FOR ALL ENTRIES IN t_order1

WHERE objectclas EQ 'VERKBELEG' AND

objectid EQ t_order1-vbeln1 AND

tabname EQ 'VBAK' AND

fname EQ 'LIFSK'.

SELECT vbeln cmgst

INTO TABLE t_vbuk

FROM vbuk FOR ALL ENTRIES IN t_order1

WHERE vbeln EQ t_order1-vbeln.

SELECT vbeln groupid

INTO TABLE t_zcc_groupid

FROM zcc_groupid FOR ALL ENTRIES IN t_order1

WHERE vbeln EQ t_order1-vbeln.

ENDIF.

IF t_zcc_groupid[] IS NOT INITIAL.

SELECT groupid ex_resultcode ex_resultmsg audat autim rcrsp

score oid message_num res_code chargeback source

INTO TABLE t_zcc_fraudres

FROM zcc_fraudres FOR ALL ENTRIES IN t_zcc_groupid

WHERE groupid EQ t_zcc_groupid-groupid.

SELECT *

INTO TABLE t_zzoid

FROM zzoid FOR ALL ENTRIES IN t_zcc_groupid

WHERE z_groupid EQ t_zcc_groupid-groupid.

ENDIF.

LOOP AT t_order.

CLEAR t_outso.

ON CHANGE OF t_order-vbeln.

CLEAR: v_ccnum.

CLEAR: v_cre_rev, v_frd_rev, v_frd_rvr,

v_frd_rrr, v_crg_back.

IF NOT t_order-rplnr IS INITIAL.

READ TABLE t_ccdata WITH KEY fplnr = t_order-rplnr BINARY SEARCH.

ENDIF.

CLEAR v_email.

PERFORM get_ip_or_email_address USING c_zeml.

CLEAR v_ipadr.

PERFORM get_ip_or_email_address USING c_zwip.

PERFORM get_shipping_condition_desc.

CLEAR: z5_block,z5_block_released.

LOOP AT cdpos_tab WHERE objectid EQ t_order-vbeln1.

IF cdpos_tab-value_new = 'Z5' OR cdpos_tab-value_old = 'Z5'.

z5_block = 'Y'.

ENDIF.

IF cdpos_tab-value_new = ' ' AND cdpos_tab-value_old = 'Z5'.

z5_block_released = 'Y'.

ENDIF.

ENDLOOP.

IF z5_block IS INITIAL.

IF t_order-lifsk = 'Z5'.

z5_block = 'Y'.

ENDIF.

ENDIF.

READ TABLE t_vbuk WITH KEY vbeln = t_order-vbeln BINARY SEARCH.

IF t_vbuk-cmgst EQ 'B'.

v_cre_rev = 'YES'.

ELSE.

CLEAR cdpos.

SELECT value_old FROM cdpos INTO cdpos-value_old

UP TO 1 ROWS

WHERE objectclas EQ c_verkbeleg

AND objectid EQ t_order-vbeln

AND tabname EQ c_vbuk

AND fname EQ c_cmgst

AND value_old EQ c_charb.

ENDSELECT.

IF sy-subrc EQ 0.

v_cre_rev = 'YES'.

ELSE.

v_cre_rev = 'NO'.

ENDIF.

ENDIF.

IF NOT t_order-rplnr IS INITIAL.

READ TABLE t_zcc_groupid WITH KEY vbeln = t_order-vbeln BINARY SEARCH.

CLEAR: w_oid,w_zcvm,w_zvbv,

w_audat, w_autim, w_zavr.

DELETE t_zzoid WHERE z_groupid EQ t_order-vbeln AND ccnum NE t_ccdata-ccnum.

SORT t_zzoid BY audat ASCENDING autim ASCENDING.

READ TABLE t_zzoid WITH KEY z_groupid = t_order-vbeln BINARY SEARCH.

IF SY-SUBRC = 0.

MOVE t_zzoid-zcvm TO w_zcvm.

MOVE t_zzoid-zvbv TO w_zvbv.

MOVE t_zzoid-oid TO w_oid.

MOVE t_zzoid-audat TO w_audat.

MOVE t_zzoid-autim TO w_autim.

ENDIF.

SELECT zrsp INTO w_zrsp FROM zzoid UP TO 1 ROWS

WHERE audat = t_ccdata-audat

AND autim = t_ccdata-autim

AND aunum = t_ccdata-aunum

AND ccnum = t_ccdata-ccnum

AND autra = t_ccdata-autra.

ENDSELECT.

CLEAR: v_zchk.

LOOP AT t_zcc_fraudres WHERE groupid = t_zcc_groupid-groupid.

IF t_zcc_fraudres-rcrsp = '05'.

v_frd_rev = 'YES'.

ENDIF.

IF ( t_zcc_fraudres-rcrsp = '06' OR t_zcc_fraudres-rcrsp = '07' ).

v_frd_rrr = t_zcc_fraudres-res_code.

IF t_zcc_fraudres-chargeback IS INITIAL.

v_crg_back = 'NO'.

ELSE.

v_crg_back = 'YES'.

ENDIF.

ENDIF.

IF t_zcc_fraudres-message_num NE ' '.

IF v_frd_rvr IS INITIAL.

v_frd_rvr = t_zcc_fraudres-message_num.

ELSE.

CONCATENATE v_frd_rvr t_zcc_fraudres-message_num

INTO v_frd_rvr SEPARATED BY ','.

ENDIF.

ENDIF.

IF t_zcc_fraudres-message_num EQ space AND t_zcc_fraudres-source EQ 'ZCHK'.

v_zchk = v_zchk + 1.

ENDIF.

ENDLOOP.

IF v_frd_rev = ' '.

v_frd_rev = 'NO'.

ENDIF.

v_auth_1 = 'N'.

v_decl_1 = 'N'.

v_auth_full = 'N'.

v_decl_full = 'N'.

LOOP AT t_ccdata WHERE fplnr = t_order-rplnr.

IF t_ccdata-ccpre EQ 'X' AND

( t_ccdata-autwr EQ 0 OR

t_ccdata-autwr EQ 1 ) AND

t_ccdata-rcrsp EQ '02'.

v_auth_1 = 'Y'.

ENDIF.

IF t_ccdata-ccpre EQ 'X' AND

( t_ccdata-autwr EQ 0 OR

t_ccdata-autwr EQ 1 ) AND

t_ccdata-rcrsp EQ '03'.

v_decl_1 = 'Y'.

ENDIF.

IF t_ccdata-ccpre NE 'X' AND

t_ccdata-autwr GT 1 AND

t_ccdata-rcrsp EQ '02'.

v_auth_full = 'Y'.

ENDIF.

IF t_ccdata-ccpre NE 'X' AND

t_ccdata-autwr GT 1 AND

t_ccdata-rcrsp EQ '03'.

v_decl_full = 'Y'.

ENDIF.

ENDLOOP.

ENDIF.

ENDON.

PERFORM get_name USING c_charre.

PERFORM get_name USING c_charwe.

t_outso-vbeln = t_order-vbeln.

t_outso-posnr = t_order-posnr.

t_outso-erdat = t_order-erdat.

t_outso-erzet = t_order-erzet.

t_outso-auart = t_order-auart.

t_outso-waerk = t_order-waerk.

t_outso-kdgrp = t_order-kdgrp.

t_outso-bstnk = t_order-bstnk.

t_outso-matnr = t_order-matnr.

t_outso-kunnr_sp = t_order-kunnr.

t_outso-arktx = t_order-arktx.

t_outso-bsark = t_order-bsark.

t_outso-kwmeng = t_order-kwmeng.

v_kzwi0 = t_order-kzwi3 + t_order-kzwi4.

t_outso-zzwebuname = t_order-zzwebuname.

t_outso-augru = t_order-augru.

t_outso-matkl = t_order-matkl.

t_outso-prodh = t_order-prodh.

t_outso-zzwebpid = t_order-zzwebpid.

IF t_outso-prodh IS NOT INITIAL.

PERFORM get_prodh_desc.

ENDIF.

t_outso-kzwi0 = v_kzwi0.

t_outso-ccins = t_ccdata-ccins.

t_outso-ccnum = t_ccdata-ccnum.

t_outso-datbi = t_ccdata-datbi.

t_outso-rcavr = t_ccdata-rcavr.

t_outso-ccold = t_ccdata-ccold.

t_outso-vtext = tvsbt-vtext.

t_outso-abgru = t_order-abgru.

t_outso-z5_block = z5_block.

t_outso-z5_block_released = z5_block_released.

t_outso-email = v_email.

t_outso-ipadr = v_ipadr.

t_outso-vkorg = t_order-vkorg.

t_outso-bzirk = t_order-bzirk.

IF t_order-lifsk EQ 'Z7'.

t_outso-z7block = 'YES'.

ELSE.

t_outso-z7block = 'NO'.

ENDIF.

t_outso-cre_rev = v_cre_rev.

t_outso-frd_rev = v_frd_rev.

t_outso-frd_rvr = v_frd_rvr.

t_outso-frd_rrr = v_frd_rrr.

t_outso-crg_back = v_crg_back.

t_outso-groupid = t_zcc_groupid-groupid.

t_outso-ihrez = t_order-ihrez.

t_outso-zchk = v_zchk.

t_outso-auth_1 = v_auth_1.

t_outso-decl_1 = v_decl_1.

t_outso-auth_full = v_auth_full.

t_outso-decl_full = v_decl_full.

t_outso-rtext = v_rtext.

t_outso-rtext_0002 = v_rtext_0002.

t_outso-bsark1 = t_order-bsark1.

t_outso-zterm = t_order-zterm.

t_outso-zcvm = w_zcvm.

t_outso-zvbv = w_zvbv.

t_outso-ex_resultcode = t_zcc_fraudres-ex_resultcode.

t_outso-ex_resultmsg = t_zcc_fraudres-ex_resultmsg.

t_outso-rcrsp = t_ccdata-rcrsp.

t_outso-score = t_zcc_fraudres-score.

t_outso-zrsp = w_zrsp.

t_outso-cctyp = t_ccdata-cctyp.

APPEND t_outso.

z_total_rec = z_total_rec + 1.

ENDIF.

ENDLOOP.

*****************

FORM get_name USING l_parvw.

CLEAR vbpa.

SELECT posnr adrnr FROM vbpa UP TO 1 ROWS

INTO (vbpa-posnr, vbpa-adrnr)

WHERE vbeln = t_order-vbeln

AND ( posnr = t_order-posnr OR

posnr = c_posnr )

AND parvw = l_parvw

ORDER BY posnr DESCENDING.

ENDSELECT.

SELECT SINGLE name1 name2 street city1 region post_code1

country tel_number

FROM adrc

INTO (adrc-name1, adrc-name2, adrc-street, adrc-city1,

adrc-region, adrc-post_code1, adrc-country, adrc-tel_number)

WHERE addrnumber = vbpa-adrnr

AND date_from = c_date_from

AND nation = ' ' .

CASE l_parvw.

WHEN c_charre.

t_outso-name_bp = adrc-name1.

t_outso-name2_bp = adrc-name2.

t_outso-street_bp = adrc-street.

t_outso-city_bp = adrc-city1.

t_outso-region_bp = adrc-region.

t_outso-pcode_bp = adrc-post_code1.

t_outso-country_bp = adrc-country.

t_outso-tel_bp = adrc-tel_number.

WHEN c_charwe.

t_outso-name_sh = adrc-name1.

t_outso-name2_sh = adrc-name2.

t_outso-street_sh = adrc-street.

t_outso-city_sh = adrc-city1.

t_outso-region_sh = adrc-region.

t_outso-pcode_sh = adrc-post_code1.

t_outso-country_sh = adrc-country.

t_outso-tel_sh = adrc-tel_number.

ENDCASE.

Read only

0 Likes
1,040

Nested loops! Try:


DATA: cd_index LIKE sy-tabix.

SORT t_order BY vbeln posnr,
     cdpos_tab by objectid.

LOOP AT t_order.

  READ TABLE cd_pos WITH KEY
    objectid = t_order-vbeln1.
  binary search.

  WHILE sy-subrc = 0.

    cd_index = sy-tabix + 1.

    IF cdpos_tab-value_new = 'Z5' OR cdpos_tab-value_old = 'Z5'.
      z5_block = 'Y'.
    ENDIF.
    IF cdpos_tab-value_new = ' ' AND cdpos_tab-value_old = 'Z5'.
      z5_block_released = 'Y'.
    ENDIF.

    READ TABLE cd_pos INDEX cd_index.

    IF sy-subrc = 0.
      IF cd_pos OBJECTID <> T_ORDER-VBELN1.
        sy-subrc = 9.
      ENDIF.
    ENDIF.

  ENDWHILE.
ENDLOOP.

I wasn't able to test this, so you'll have to check it thoroughly.

Rob

Added ENDLOOP.

Message was edited by: Rob Burbank

Read only

0 Likes
1,040

thanks rob, will try it out and keep you posted.

Regards

Brain.

Read only

0 Likes
1,040

Hi Brain,

As the others have said, remove the select...endselect, use for all entries statement instead of joins, use binary search when reading internal tables, use INTO TABLE when inserting records in an internal table. And most important of all is CHECK your where clause. Try to use all the primary keys of that database table and if not possible, use secondary indexes to help speed up your select statement. That will give you a boost in performance.

Hope this helps...

P.S. Please award points for useful answers.