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

performance issue

former_member206396
Active Participant
0 Likes
507

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>

5 REPLIES 5
Read only

Former Member
0 Likes
477

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

Read only

0 Likes
477

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

Read only

0 Likes
477

Would you post the complete program please?

Rob

Read only

sreekanthgo
Contributor
0 Likes
477

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>

Read only

Former Member
0 Likes
477

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.