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

improve code performance

Former Member
0 Likes
392

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.

1 REPLY 1
Read only

Former Member
0 Likes
290

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.