‎2008 Nov 12 10:19 AM
Hi All,
I got an requirement to reduce the execution time ,that is Loop under Loop statements and i have reduce the time for execution and to use Read statement .so below the code please any one can correct the code and send me detailly with the every statement. iam thank ful to them.i have indicated as 1st and 2nd Loop statements.
SORT gvt_header BY vbeln posnr.
LOOP AT gvt_header.----
>1st Read statement
l_tabix = sy-tabix.
CLEAR ls_header.
MOVE gvt_header TO ls_header.
AT NEW vbeln.
CLEAR: lt_fpla,lt_vbak,lt_vbpa.
READ TABLE lt_vbak WITH KEY vbeln = ls_header-vbeln
BINARY SEARCH.
READ TABLE lt_fpla WITH KEY vbeln = ls_header-vbeln
BINARY SEARCH.
READ TABLE lt_vbpa WITH KEY vbeln = ls_header-vbeln
BINARY SEARCH.
ENDAT.
AT NEW posnr.
CLEAR: lt_veda,lt_vbap.
READ TABLE lt_vbap WITH KEY vbeln = ls_header-vbeln
posnr = ls_header-posnr
BINARY SEARCH.
READ TABLE lt_veda WITH KEY vbeln = ls_header-vbeln
posnr = ls_header-posnr
BINARY SEARCH.
IF sy-subrc <> 0.
READ TABLE lt_veda WITH KEY vbeln = ls_header-vbeln
posnr = '000000'
BINARY SEARCH.
ENDIF.
ENDAT.
ls_header-zz_crm_id = lt_vbak-zz_crm_id.
ls_header-ktext = lt_vbak-ktext.
ls_header-faksk = lt_vbak-faksk.
ls_header-fpbez = lt_fpla-fpbez.
ls_header-bezeich = lt_fpla-bezeich.
ls_header-faksp = lt_vbap-faksp.
ls_header-anndat = lt_veda-venddat.
ls_header-pstyv = lt_vbap-pstyv.
ls_header-fpart = lt_fpla-fpart.
IF lt_fpla-autte = 'X'.
ls_header-autte = 'Advance'.
ELSE.
ls_header-autte = 'Arrears'.
ENDIF.
Insert by BRDK933549, modify the anniversary logic
IF ls_header-anndat IS INITIAL.
CLEAR lt_veda2.
READ TABLE lt_veda2 WITH KEY vbeln = ls_header-vbeln
vposn = lt_vbap-uepos
BINARY SEARCH.
ls_header-anndat = lt_veda2-venddat.
ENDIF.
IF lt_veda-vbedkue IS NOT INITIAL.
ls_header-stats = 'Cancelled'.
ls_header-stats = lt_veda-venddat.
ELSEIF ls_header-anndat < sy-datum.
ls_header-stats = 'Expired'.
ELSE.
ls_header-stats = 'Active'.
ENDIF.
End of BRDK933549
IF lt_veda-vwundat IS NOT INITIAL.
ls_header-candat = lt_veda-venddat.
ls_header-stats = 'Cancelled'.
ELSEIF lt_veda-venddat < sy-datum.
ls_header-stats = 'Expired'.
ELSE.
ls_header-stats = 'Active'.
ENDIF.
IF spernr[] IS NOT INITIAL AND lt_vbpa-pernr NOT IN spernr.
DELETE gvt_header INDEX l_tabix.
DELETE gvt_item WHERE vbeln = ls_header-vbeln AND
posnr = ls_header-posnr.
CONTINUE.
ELSE.
ls_header-cmana = lt_vbpa-pernr.
ls_header-ename = lt_vbpa-ename.
ENDIF.
CLEAR l_stats.
l_stats = ls_header-stats.
TRANSLATE l_stats TO UPPER CASE.
TRANSLATE ls_header-stats TO UPPER CASE.
TRANSLATE ls_header-autte TO UPPER CASE.
TRANSLATE ls_header-BEZEICH TO UPPER CASE.
IF sstats[] IS NOT INITIAL AND l_stats NOT IN sstats.
DELETE gvt_header INDEX l_tabix.
DELETE gvt_item WHERE vbeln = ls_header-vbeln AND
posnr = ls_header-posnr.
CONTINUE.
ENDIF.
LOOP AT gvt_item WHERE vbeln = ls_header-vbeln AND----
>2nd ReadStatement
posnr = ls_header-posnr.
gvt_item-zz_crm_id = ls_header-zz_crm_id.
gvt_item-ktext = ls_header-ktext.
gvt_item-faksk = ls_header-faksk.
gvt_item-fpbez = ls_header-fpbez.
gvt_item-bezeich = ls_header-bezeich.
gvt_item-faksp = ls_header-faksp.
gvt_item-anndat = ls_header-anndat.
gvt_item-candat = ls_header-candat.
gvt_item-stats = ls_header-stats.
gvt_item-autte = ls_header-autte.
gvt_item-cmana = ls_header-cmana.
gvt_item-ename = ls_header-ename.
gvt_item-pstyv = ls_header-pstyv.
gvt_item-fpart = ls_header-fpart.
Insert by BRDK933549, modify the anniversary logic
End of BRDK933549
MODIFY gvt_item INDEX sy-tabix
TRANSPORTING zz_crm_id ktext faksk fpbez bezeich
faksp anndat candat stats autte cmana ename pstyv fpart.
ENDLOOP.
MODIFY gvt_header FROM ls_header
TRANSPORTING zz_crm_id ktext faksk fpbez bezeich
faksp anndat candat stats autte cmana ename pstyv fpart.
ENDLOOP.
‎2008 Nov 12 12:23 PM
In future, please use a more meaningful subject line for your questions
Use HASHED Tables for lookup - SORTED if you must. binary search is really old tech. now. unless you're on a very old system.
matt
‎2008 Nov 12 3:26 PM