2012 May 23 9:47 PM
Hello Experts,
Is it possible to improve the performance on this piece of code?. The program is getting too much data to process and it's taking more than 2 hours to process.
Any ideas?
LOOP AT pt_cond_types INTO lw_cond_types.
* Get Price
READ TABLE pt_konp INTO lw_konp
WITH KEY knumh = lw_cond_types-knumh
kopos = c_01
BINARY SEARCH.
CHECK sy-subrc EQ 0.
*# Positive values
IF lw_konp-kbetr LT 0.
lw_konp-kbetr = lw_konp-kbetr * -1.
ENDIF.
CLEAR l_error.
READ TABLE it_zlcas060
INTO lw_zlcas060
WITH KEY matkl = lw_cond_types-matkl
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_zgfgmrbe INTO lw_zgfgmrbe
WITH KEY zprodcat = lw_zlcas060-matkl_bart.
IF sy-subrc EQ 0.
READ TABLE it_zlcas061
INTO lw_zlcas061
WITH KEY smdl_meins = lw_zgfgmrbe-zruom.
IF sy-subrc = 0.
* Material base UOM
PERFORM f_check_mat_base_uom USING lw_cond_types-matnr
lw_zlcas061-meins
CHANGING lw_konp-kmein
lw_konp-kpein
lw_konp-kbetr
l_error.
CHECK l_error IS INITIAL.
ENDIF.
ENDIF.
ENDIF.
l_datab = lw_cond_types-datab.
l_flag = space.
DO.
*# If year is previous to year entered in screen.
IF l_datab(4) LT p_year.
PERFORM f_add_month CHANGING l_datab.
l_flag = c_x.
ENDIF.
IF l_datab(4) EQ p_year.
IF lw_cond_types-datbi+4(2) EQ l_datab+4(2)
OR l_datab+4(2) EQ c_12.
CONCATENATE l_datab(6) c_01
INTO l_datab_aux.
IF l_datab GT l_datab_aux
AND l_flag IS INITIAL.
l_datab_aux = l_datab.
ENDIF.
PERFORM f_last_day USING l_datab_aux
CHANGING l_datbi.
IF l_datbi GT lw_cond_types-datbi
AND lw_cond_types-datbi(4) EQ p_year.
l_datbi = lw_cond_types-datbi.
ENDIF.
PERFORM f_get_days_qtty USING l_datab_aux
l_datbi
CHANGING l_days_number.
CLEAR lw_prices_month.
lw_prices_month-matnr = lw_cond_types-matnr.
lw_prices_month-matkl = lw_cond_types-matkl.
lw_prices_month-vkorg = lw_cond_types-vkorg.
lw_prices_month-vtweg = lw_cond_types-vtweg.
lw_prices_month-spart = lw_cond_types-spart.
lw_prices_month-days = l_days_number.
lw_prices_month-price = lw_konp-kbetr.
lw_prices_month-month = l_datab+4(2).
lw_prices_month-konwa = lw_konp-konwa.
lw_prices_month-kmein = lw_konp-kmein.
lw_prices_month-kpein = lw_konp-kpein.
lw_prices_month-kolnr = pw_pric_table-kolnr.
PERFORM f_add_price_month USING lw_prices_month
CHANGING pt_prices_month.
EXIT.
ELSE.
CONCATENATE l_datab(6) c_01
INTO l_datab_aux.
IF l_datab GT l_datab_aux
AND l_flag IS INITIAL.
l_datab_aux = l_datab.
ENDIF.
PERFORM f_last_day USING l_datab_aux
CHANGING l_datbi.
IF l_datbi GT lw_cond_types-datbi
AND lw_cond_types-datbi(4) EQ p_year.
l_datbi = lw_cond_types-datbi.
ENDIF.
PERFORM f_get_days_qtty USING l_datab_aux
l_datbi
CHANGING l_days_number.
CLEAR lw_prices_month.
lw_prices_month-matnr = lw_cond_types-matnr.
lw_prices_month-matkl = lw_cond_types-matkl.
lw_prices_month-vkorg = lw_cond_types-vkorg.
lw_prices_month-vtweg = lw_cond_types-vtweg.
lw_prices_month-spart = lw_cond_types-spart.
lw_prices_month-days = l_days_number.
lw_prices_month-price = lw_konp-kbetr.
lw_prices_month-month = l_datab+4(2).
lw_prices_month-konwa = lw_konp-konwa.
lw_prices_month-kmein = lw_konp-kmein.
lw_prices_month-kpein = lw_konp-kpein.
lw_prices_month-kolnr = pw_pric_table-kolnr.
PERFORM f_add_price_month USING lw_prices_month
CHANGING pt_prices_month.
ENDIF.
ELSEIF l_datab(4) GT p_year.
EXIT.
ENDIF.
PERFORM f_add_month CHANGING l_datab.
l_flag = c_x.
ENDDO.
MOVE-CORRESPONDING lw_cond_types TO lw_prices_key.
COLLECT lw_prices_key INTO pt_prices_key.
ENDLOOP.
2012 May 23 10:01 PM
Moderator message - please do not post a large portion of program code and ask the volunteers here to look for the problems. do some research yourself to try to pinpoint the bottleneck and get back with another more specific question.
Locked
Rob
Hint - look at the READ statements without the BINARY SEARCH option. Look at the FORMS that are called from here but you have not included.