‎2006 Dec 09 9:58 AM
hi SDNs.,
pls check the following code. where program taking more time...
it_final_temp[] = it_final[]. " both tables are of type STANDARD
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-FAULTY'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-CHURN'.
APPEND R_BWTAR.
*
LOOP AT LT_FINAL INTO LW_FINAL WHERE BWTAR IN R_BWTAR OR
BWART = '351' .
*
LW_FINAL-AG_DATE = LW_FINAL-BUDAT.
LW_FINAL-AG_MBLNR = LW_FINAL-MBLNR.
MODIFY LT_FINAL FROM LW_FINAL TRANSPORTING AG_DATE AG_MBLNR.
CLEAR LW_FINAL-AG_DATE.
ENDLOOP.
REFRESH : R_BWTAR.
*
-New ESNs...
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'ABUCAPNEW'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'HNICAPNEW'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'MASSCAPNEW'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-NEW-IND'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-NEW-IMP'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'NEW-IM-PRE'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'NEW-IM-POS'.
APPEND R_BWTAR.
*
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '101'.
APPEND R_BWART.
*
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '105'.
APPEND R_BWART.
*
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = 'Z51'.
APPEND R_BWART.
*
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = 'Y51'.
APPEND R_BWART.
*
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '301'.
APPEND R_BWART.
*
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '561'.
APPEND R_BWART.
**sort lt_final by sernr.
LOOP AT LT_FINAL_TEMP INTO LW_FINAL_TEMP WHERE BWTAR IN R_BWTAR.
ON CHANGE OF LW_FINAL_TEMP-SERNR.
LOOP AT LT_FINAL INTO LW_FINAL WHERE BWART IN R_BWART AND
SERNR = LW_FINAL_TEMP-SERNR.
LW_FINAL-AG_DATE = LW_FINAL-BUDAT.
LW_FINAL-AG_MBLNR = LW_FINAL-MBLNR.
MODIFY LT_FINAL FROM LW_FINAL TRANSPORTING AG_DATE AG_MBLNR WHERE SERNR = LW_FINAL_TEMP-SERNR.
CLEAR : LW_FINAL-AG_DATE, LW_FINAL-BUDAT.
EXIT.
ENDLOOP.
ENDON.
ENDLOOP.
*
-REFURB ESNs
REFRESH : R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-REFURB'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-REF-POS'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-REF-PRE'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-DOA'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'DOA'.
APPEND R_BWTAR.
*
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-BER'.
APPEND R_BWTAR.
*
**sort lt_final by sernr.
LOOP AT LT_FINAL_TEMP INTO LW_FINAL_TEMP WHERE BWTAR IN R_BWTAR.
ON CHANGE OF LW_FINAL_TEMP-SERNR.
LOOP AT LT_FINAL INTO LW_FINAL WHERE SERNR = LW_FINAL_TEMP-SERNR.
IF ( LW_FINAL-BWART = '315' ) OR ( LW_FINAL-BWART = '316' ) .
CONTINUE.
ELSE.
IF ( LW_FINAL-BWART = 'Z51' ) OR ( LW_FINAL-BWART = 'Y51' ) OR
( LW_FINAL-BWART = '561' ) OR ( LW_FINAL-BWART = '101' ) OR
( LW_FINAL-BWART = '301' ).
*
LW_FINAL-AG_DATE = LW_FINAL-BUDAT.
LW_FINAL-AG_MBLNR = LW_FINAL-MBLNR.
ELSE.
IF ( LW_FINAL-SHKZG = 'S' ) AND ( LW_FINAL-BWTAR <> LW_FINAL-UMCHA ).
LW_FINAL-AG_DATE = LW_FINAL-BUDAT.
LW_FINAL-AG_MBLNR = LW_FINAL-MBLNR.
ELSE.
CONTINUE.
ENDIF.
ENDIF.
MODIFY LT_FINAL FROM LW_FINAL TRANSPORTING AG_DATE AG_MBLNR WHERE SERNR = LW_FINAL_TEMP-SERNR.
CLEAR : LW_FINAL.
EXIT.
ENDIF.
ENDLOOP.
ENDON.
ENDLOOP.
----
Can we write the code effective way???
Could any one help me out...
<b>Ram</b>
‎2006 Dec 09 9:49 PM
The problem is with triple nested loops. Try:
it_final_temp[] = it_final[]. " both tables are of type STANDARD
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-FAULTY'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-CHURN'.
APPEND r_bwtar.
LOOP AT lt_final INTO lw_final WHERE bwtar IN r_bwtar OR
bwart = '351' .
lw_final-ag_date = lw_final-budat.
lw_final-ag_mblnr = lw_final-mblnr.
MODIFY lt_final FROM lw_final TRANSPORTING ag_date ag_mblnr.
CLEAR lw_final-ag_date.
ENDLOOP.
REFRESH : r_bwtar.
* -New ESNs...
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'ABUCAPNEW'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'HNICAPNEW'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'MASSCAPNEW'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-NEW-IND'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-NEW-IMP'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'NEW-IM-PRE'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'NEW-IM-POS'.
APPEND r_bwtar.
r_bwart-option = 'EQ'.
r_bwart-sign = 'I'.
r_bwart-low = '101'.
APPEND r_bwart.
r_bwart-option = 'EQ'.
r_bwart-sign = 'I'.
r_bwart-low = '105'.
APPEND r_bwart.
r_bwart-option = 'EQ'.
r_bwart-sign = 'I'.
r_bwart-low = 'Z51'.
APPEND r_bwart.
r_bwart-option = 'EQ'.
r_bwart-sign = 'I'.
r_bwart-low = 'Y51'.
APPEND r_bwart.
r_bwart-option = 'EQ'.
r_bwart-sign = 'I'.
r_bwart-low = '301'.
APPEND r_bwart.
r_bwart-option = 'EQ'.
r_bwart-sign = 'I'.
r_bwart-low = '561'.
APPEND r_bwart.
DATA: tab_index LIKE sy-tabix.
SORT: lt_final BY sernr,
lt_final_temp BY sernr.
LOOP AT lt_final_temp INTO lw_final_temp WHERE bwtar IN r_bwtar.
ON CHANGE OF lw_final_temp-sernr.
READ TABLE lt_final WITH KEY
sernr = lw_final_temp-sernr
BINARY SEARCH.
tab_index = sy-tabix.
WHILE sy-subrc = 0.
IF lt_final-sernr <> lt_final_temp-sernr.
sy-subrc = 9.
ELSE.
IF lt_final-bwart IN r_bwart
LW_FINAL-AG_DATE = lw_final-budat.
lw_final-ag_mblnr = lw_final-mblnr.
MODIFY lt_final FROM lw_final
TRANSPORTING ag_date ag_mblnr.
CLEAR : lw_final-ag_date,
lw_final-budat.
ENDIF.
tab_index = tab_index + 1.
READ TABLE lt_final INDEX tab_index.
ENDIF.
ENDWHILE.
ENDON.
ENDLOOP.
* -REFURB ESNs
REFRESH : r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-REFURB'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-REF-POS'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-REF-PRE'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-DOA'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'DOA'.
APPEND r_bwtar.
r_bwtar-option = 'EQ'.
r_bwtar-sign = 'I'.
r_bwtar-low = 'TR-BER'.
APPEND r_bwtar.
*sort lt_final by sernr.
LOOP AT lt_final_temp INTO lw_final_temp WHERE bwtar IN r_bwtar.
ON CHANGE OF lw_final_temp-sernr.
READ TABLE lt_final WITH KEY
sernr = lw_final_temp-sernr
BINARY SEARCH.
tab_index = sy-tabix.
WHILE sy-subrc = 0.
IF lt_final-sernr <> lt_final_temp-sernr.
sy-subrc = 9.
ELSEIF
( lw_final-bwart = 'Z51' ) OR ( lw_final-bwart = 'Y51' ) OR
( lw_final-bwart = '561' ) OR ( lw_final-bwart = '101' ) OR
( lw_final-bwart = '301' ).
lw_final-ag_date = lw_final-budat.
lw_final-ag_mblnr = lw_final-mblnr.
ELSEIF
( lw_final-shkzg = 'S' ) AND
( lw_final-bwtar <> lw_final-umcha ).
lw_final-ag_date = lw_final-budat.
lw_final-ag_mblnr = lw_final-mblnr.
MODIFY lt_final FROM lw_final
TRANSPORTING ag_date ag_mblnr.
CLEAR : lw_final.
ENDIF.
tab_index = tab_index + 1.
READ TABLE lt_final INDEX tab_index.
ENDWHILE.
ENDON.
ENDLOOP.
Rob
‎2006 Dec 11 5:31 AM
Mr. Rob,
Thanks for the reply...
But, still it is taking time...
Could you please help me out....
in this case will field-string helps me? if so.,
could you pls give syntax and how to use in my case...
waiting for reply...
Thanking you.,
RK
‎2006 Dec 11 2:11 PM
Would you post the complete program please?
Rob
‎2006 Dec 11 1:53 PM
Hi Rama krishna,
Do not use where condition while looping, check the condition inside the loop.
Because you are checking a range in the where condition of a loop, which takes more time.
Better use the condition inside the loop, you may over come your problem.
For Ex. in your code use like following...
loop at lt_final into lw_final.
if lw_final-bwtar IN R_BWTAR
or lw_final-bwart = '351'.
lw_final-ag_date = lw_final-budat.
lw_final-ag_mblnr = lw_final-mblnr.
modify lt_final from lw_final transporting ag_date ag_mblnr.
clear lw_final-ag_date.
endif.
endloop.
You are using <i>LOOP</i> inside a <i>LOOP</i>. which will creates another performance problem. try to aviod the same and use read statment instead of it.
Check the above post to know how to read a table inside a loop.
Thanks,
Sreekanth
<i>* Do not forget to reward points if it helps you ;)</i>
‎2006 Dec 11 9:50 PM
You can try this way:
it_final_temp[] = it_final[]. " both tables are of type STANDARD
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-FAULTY'.
APPEND R_BWTAR.
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-CHURN'.
APPEND R_BWTAR.
sort lt_final by bwart.
read table lt_final with key bwart = '351' binary search transporting no fileds.
if sy-subrc = 0.
loop at lt_final assigning <fs_final> from sy-tabix.
if <fs_final>-bwart ne '351'. exit. endif.
<fs_final>-AG_DATE = <fs_final>-BUDAT.
<fs_final>-AG_MBLNR = <fs_final>-MBLNR.
endloop.
endif.
sort lt_final by bwtar.
loop at r_bwtar.
read table lt_final with key bwtar = r_bwtar-low binary search transporting no fields.
if sy-subrc = 0.
loop at lt_final assigning <fs_final> from sy-tabix.
if <fs_final>-bwtar ne r_bwtar-low. exit. endif.
<fs_final>-AG_DATE = <fs_final>-BUDAT.
<fs_final>-AG_MBLNR = <fs_final>-MBLNR.
endloop.
endif.
endloop.
REFRESH : R_BWTAR.
-New ESNs...
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'ABUCAPNEW'.
APPEND R_BWTAR.
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'HNICAPNEW'.
APPEND R_BWTAR.
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'MASSCAPNEW'.
APPEND R_BWTAR.
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-NEW-IND'.
APPEND R_BWTAR.
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'TR-NEW-IMP'.
APPEND R_BWTAR.
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'NEW-IM-PRE'.
APPEND R_BWTAR.
R_BWTAR-OPTION = 'EQ'.
R_BWTAR-SIGN = 'I'.
R_BWTAR-LOW = 'NEW-IM-POS'.
APPEND R_BWTAR.
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '101'.
APPEND R_BWART.
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '105'.
APPEND R_BWART.
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = 'Z51'.
APPEND R_BWART.
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = 'Y51'.
APPEND R_BWART.
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '301'.
APPEND R_BWART.
R_BWART-OPTION = 'EQ'.
R_BWART-SIGN = 'I'.
R_BWART-LOW = '561'.
APPEND R_BWART.
sort lt_final by sernr.
sort lt_final_temp by bwtar.
loop at r_bwtar.
read table lt_final_temp with key bwtar = r_bwtar-low bunary search transporting no fields.
if sy-subrc = 0.
loop at lt_final_temp into LW_FINAL_TEMP from sy-tabix.
if lw_final_temp-bwtar ne r_bwtar-low. exit. endif.
read table lt_final with key sernr = lw_final_temp-sernr binary search transporting no fields.
if sy-subrc = 0.
loop at lt_final assigning <fs_final> from sy-tabix.
if <fs_final>-sernr ne lw_final_temp-sernr. exit. endif.
if <fs_final>-bwart in r_bwart.
<fs_final>-AG_DATE = <fs_final>-BUDAT.
<fs_final>-AG_MBLNR = <fs_final>-MBLNR.
endif.
endloop.
endif.
endloop.
endloop.
... re-write other part using above as an example.
Should work much faster.