‎2008 Mar 21 5:58 AM
Can any body tell me how to increse the performance of following code
only coz of this code my program running very slowly
Helpful answer will definatly rewarded
see the part of the code below
loop at it_zsdtcustser.
select single vkbur into knvv-vkbur
from knvv where kunnr =
it_zsdtcustser-kunnr.
select single name1 into kna1-name1
from kna1 where kunnr =
it_zsdtcustser-kunnr.
if knvv-vkbur1(3) = it_zsdtcustser-werks1(3).
select single rpmkr into kna1-rpmkr
from kna1 where kunnr =
it_zsdtcustser-kunnr.
if kna1-rpmkr+0(1) = 'L'.
w_rmpkr = '0011'.
elseif kna1-rpmkr+0(1) = 'U'.
w_rmpkr = '0010'.
endif.
else.
w_rmpkr = '0012'.
endif.
it_zsdtcustser-custname = kna1-name1.
it_zsdtcustser-u_l_ind = w_rmpkr.
modify it_zsdtcustser transporting u_l_ind custname.
clear w_rmpkr.
CALL FUNCTION 'LAST_DAY_OF_MONTHS' EXPORTING
day_in = it_zsdtcustser-order_date
IMPORTING
LAST_DAY_OF_MONTH = last_date
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. on 26/02/2008
new_date = it_zsdtcustser-order_date + 1.
last_date1 = it_zsdtcustser-order_date + 5.
read table it_zsdtcustser index sy-tabix.
at new werks.
count1 = 0.
count2 = 0.
count3 = 0.
endat.
if ( it_zsdtcustser-order_date = '00000000'
or it_zsdtcustser-order_date = ''
or it_zsdtcustser-odder_time = '000000'
or it_zsdtcustser-odder_time = '' )
or ( it_zsdtcustser-disp_date = '00000000'
or it_zsdtcustser-disp_date = ''
or it_zsdtcustser-disp_time = '000000'
or it_zsdtcustser-disp_time = '' ).
move '0' to it_zsdtcustser-field3.
if sy-subrc = 0.
count3 = count3 + 1.
endif.
elseif
it_zsdtcustser-u_l_ind = '0011'.
if
it_zsdtcustser-order_date LE it_zsdtcustser-disp_date
( it_zsdtcustser-order_date eq it_zsdtcustser-disp_date
and it_zsdtcustser-odder_time le '113000' and it_zsdtcustser-disp_time le '120000' )
or
it_zsdtcustser-order_date LE it_zsdtcustser-disp_date
( it_zsdtcustser-order_date eq it_zsdtcustser-disp_date
and it_zsdtcustser-odder_time between '113000' and '143000' and it_zsdtcustser-disp_time le '153000' )
or
( it_zsdtcustser-order_date eq it_zsdtcustser-disp_date
and it_zsdtcustser-odder_time between '143100' and '150000' and it_zsdtcustser-disp_time le '173000' )
or
( ( it_zsdtcustser-order_date le it_zsdtcustser-disp_date
and it_zsdtcustser-odder_time between '153100' and '240000' )
and ( it_zsdtcustser-disp_date eq it_zsdtcustser-order_date
and it_zsdtcustser-disp_time le '240000' )
or ( it_zsdtcustser-disp_date eq new_date
and it_zsdtcustser-disp_time le '120000' ) )
or ( it_zsdtcustser-order_date eq last_date and it_zsdtcustser-disp_date le last_date1 ).
move '1' to it_zsdtcustser-field3.
if sy-subrc = 0.
count1 = count1 + 1.
endif.
else.
move '2' to it_zsdtcustser-field3.
if sy-subrc = 0.
count2 = count2 + 1.
endif.
endif.
elseif it_zsdtcustser-u_l_ind = '0010' or it_zsdtcustser-u_l_ind = '0012'. " Modified on 26/02/2008.
if ( it_zsdtcustser-order_date eq it_zsdtcustser-disp_date
and it_zsdtcustser-odder_time le '170000' and it_zsdtcustser-disp_time le '240000' )
or
( it_zsdtcustser-order_date le it_zsdtcustser-disp_date and it_zsdtcustser-odder_time ge '170000' )
and ( it_zsdtcustser-disp_date le new_date
and it_zsdtcustser-disp_time le '240000' )
or ( it_zsdtcustser-order_date eq last_date and it_zsdtcustser-disp_date le last_date1 ).
move '1' to it_zsdtcustser-field3.
if sy-subrc = 0.
count1 = count1 + 1.
endif.
else.
move '2' to it_zsdtcustser-field3.
if sy-subrc = 0.
count2 = count2 + 1.
endif.
endif.
endif.
modify it_zsdtcustser transporting field3.
modify zsdtcustser from table it_zsdtcustser.
at new werks.
format color 1 inverse on.
write:/ 'PLANT:', it_zsdtcustser-werks.
endat.
format color 5 inverse on.
write: 20 'WITHIN CSI BENCHMARK:', count1.
format color 6.
write: 55 'BEYOND CSI BENCHMARK:', count2.
format color 7.
write: 85 'NOT ENTERED:', count3.
endloop.
loop at it_zsdtcustser.
clear : x_datediff,x_datetime,x_earliest,gv_final,
w_datediff,w_datetime,w_earliest.
if it_zsdtcustser-cust_rec_time = '000000'.
message 'Enter Customer Receipt Time' type 'I'.
else.
call function 'SD_DATETIME_DIFFERENCE'
exporting
date1 = it_zsdtcustser-cust_rec_date
time1 = it_zsdtcustser-cust_rec_time
date2 = it_zsdtcustser-order_date
time2 = it_zsdtcustser-odder_time
importing
datediff = w_datediff
timediff = w_datetime
earliest = w_earliest
.
if sy-subrc <> 0.
endif.
endif.
x_datediff = w_datediff.
x_datediff = x_datediff * 24.
x_datetime = w_datetime.
x_earliest = w_earliest.
gv_final = x_datediff + x_datetime.
it_zsdtcustser-actual_time_tkn = gv_final.
modify it_zsdtcustser transporting actual_time_tkn.
clear : x_datediff,x_datetime,x_earliest,gv_final.
endloop.
Regards
Shashikant
‎2008 Mar 21 6:06 AM
Hi,
remove all select statments form loop.
Use for all entries.
IF NOT it_zsdtcustser[] IS INITIAL.
select kunnr vkbur into TABLE itab1
from knvv
FOR ALL ENTRIES IN it_zsdtcustser
where kunnr = it_zsdtcustser-kunnr.
select kunnr name1 into
TABLE itab2
FOR ALL ENTRIES IN it_zsdtcustser
from kna1 where kunnr = it_zsdtcustser-kunnr.
ENDIF.
SORT : ITAB1 BY kunnr,ITAB2 by kunnr.
loop at it_zsdtcustser.
READ TABLE itab1 with key kunnr = it_zsdtcustser-kunnr
BINARY SEARCH.
IF sy-subrc EQ 0.
ENDIF.
READ TABLE itab2 with key kunnr = it_zsdtcustser-kunnr
BINARY SEARCH.
IF sy-subrc EQ 0.
ENDIF.