Application Development 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: 

How can we increse this coding Part

Former Member
0 Kudos

Hi there

I came across some coding to improve .while looking the progam it is unique .some say it is correct as per the Sap point of view .but some dosent.

Please verify is this the correct way for coding .

IF NOT skont IS INITIAL.

IF NOT aksaldo IS INITIAL.

IF NOT summen IS INITIAL.

LOOP AT organ.

CLEAR: f_bwkey, f_bklas, f_bwtty, f_bwtar, sum.

SELECT bwkey bklas bwtty bwtar SUM( salk3 ) FROM mbew

INTO (f_bwkey, f_bklas, f_bwtty, f_bwtar, sum)

WHERE bwkey EQ organ-bwkey

AND matnr IN matnr

AND bklas IN ibklas

AND bwtar IN bwtar

GROUP BY bwkey bklas bwtty bwtar.

CHECK NOT sum IS INITIAL.

MOVE f_bwkey TO xmbew-bwkey.

MOVE f_bklas TO xmbew-bklas.

MOVE f_bwtty TO xmbew-bwtty.

MOVE f_bwtar TO xmbew-bwtar.

MOVE sum TO xmbew-salk3.

COLLECT xmbew.

ENDSELECT.

CLEAR: f_bwkey, f_bklas, f_bwtty, f_bwtar, sum.

SELECT bwkey bklas bwtty bwtar SUM( salk3 ) FROM ebew

INTO (f_bwkey, f_bklas, f_bwtty, f_bwtar, sum)

WHERE bwkey EQ organ-bwkey

AND matnr IN matnr

AND bklas IN ibklas

AND bwtar IN bwtar

GROUP BY bwkey bklas bwtty bwtar.

CHECK NOT sum IS INITIAL.

MOVE f_bwkey TO xmbew-bwkey.

MOVE f_bklas TO xmbew-bklas.

MOVE f_bwtty TO xmbew-bwtty.

MOVE f_bwtar TO xmbew-bwtar.

MOVE sum TO xmbew-salk3.

COLLECT xmbew.

ENDSELECT.

CLEAR: f_bwkey, f_bklas, f_bwtty, f_bwtar, sum.

SELECT bwkey bklas bwtty bwtar SUM( salk3 ) FROM qbew

INTO (f_bwkey, f_bklas, f_bwtty, f_bwtar, sum)

WHERE bwkey EQ organ-bwkey

AND matnr IN matnr

AND bklas IN ibklas

AND bwtar IN bwtar

GROUP BY bwkey bklas bwtty bwtar.

CHECK NOT sum IS INITIAL.

MOVE f_bwkey TO xmbew-bwkey.

MOVE f_bklas TO xmbew-bklas.

MOVE f_bwtty TO xmbew-bwtty.

MOVE f_bwtar TO xmbew-bwtar.

MOVE sum TO xmbew-salk3.

COLLECT xmbew.

ENDSELECT.

  • consider valuated subcontractor stocks from OBEW "n497391

CLEAR: f_bwkey, f_bklas, f_bwtty, f_bwtar, sum. "n497391

SELECT bwkey bklas bwtty bwtar SUM( salk3 ) "n497391

FROM obew "n497391

INTO (f_bwkey, f_bklas, f_bwtty, f_bwtar, sum) "n497391

WHERE bwkey EQ organ-bwkey "n497391

AND matnr IN matnr "n497391

AND bklas IN ibklas "n497391

AND bwtar IN bwtar "n497391

GROUP BY bwkey bklas bwtty bwtar. "n497391

CHECK NOT sum IS INITIAL. "n497391

MOVE f_bwkey TO xmbew-bwkey. "n497391

MOVE f_bklas TO xmbew-bklas. "n497391

MOVE f_bwtty TO xmbew-bwtty. "n497391

MOVE f_bwtar TO xmbew-bwtar. "n497391

MOVE sum TO xmbew-salk3. "n497391

COLLECT xmbew. "n497391

ENDSELECT. "n497391

ENDLOOP.

ELSEIF summen IS INITIAL.

CLEAR xmbew. "388498

SELECT mandt matnr bwkey bwtar lvorm lbkum salk3

vprsv verpr stprs peinh bklas salkv lfgja lfmon

bwtty pstat vksal eklas qklas

FROM mbew INTO CORRESPONDING FIELDS OF xmbew

FOR ALL ENTRIES IN organ WHERE bwkey EQ organ-bwkey

AND matnr IN matnr

AND bklas IN ibklas

AND bwtar IN bwtar.

APPEND xmbew.

ENDSELECT.

  • Begin of Optima APP 037

IF NOT xmbew IS INITIAL.

  • Start of Insert E_FIR.018 PRADHSA1

SELECT matnr werks prctr

FROM marc

INTO TABLE i_marc

FOR ALL ENTRIES IN xmbew

WHERE matnr = xmbew-matnr

AND werks = xmbew-bwkey.

  • End of Insert E_FIR.018 PRADHSA1

ENDIF.

  • Begin of Optima APP 037

CLEAR xmbew. "388498

SELECT mandt matnr bwkey bwtar lbkum salk3

vprsv verpr stprs peinh bklas salkv lfgja lfmon

bwtty vksal sobkz vbeln posnr

FROM ebew INTO CORRESPONDING FIELDS OF xmbew

FOR ALL ENTRIES IN organ WHERE bwkey EQ organ-bwkey

AND matnr IN matnr

AND bklas IN ibklas

AND bwtar IN bwtar.

xmbew-no_sum = 'X'.

APPEND xmbew.

ENDSELECT.

CLEAR xmbew. "388498

SELECT mandt matnr bwkey bwtar lbkum salk3

vprsv verpr stprs peinh bklas salkv lfgja lfmon

bwtty vksal sobkz pspnr

FROM qbew INTO CORRESPONDING FIELDS OF xmbew

FOR ALL ENTRIES IN organ WHERE bwkey EQ organ-bwkey

AND matnr IN matnr

AND bklas IN ibklas

AND bwtar IN bwtar.

xmbew-no_sum = 'X'.

APPEND xmbew.

ENDSELECT.

  • consider valuated subcontractor stocks from OBEW "n497391

CLEAR xmbew. "n497391

SELECT mandt matnr bwkey bwtar lbkum salk3 "n497391

vprsv verpr stprs peinh bklas salkv "n497391

lfgja lfmon bwtty vksal sobkz lifnr "n497391

FROM obew INTO CORRESPONDING FIELDS OF xmbew "n497391

FOR ALL ENTRIES IN organ "n497391

WHERE bwkey EQ organ-bwkey "n497391

AND matnr IN matnr "n497391

AND bklas IN ibklas "n497391

AND bwtar IN bwtar. "n497391

xmbew-no_sum = 'X'. "n497391

APPEND xmbew. "n497391

ENDSELECT. "n497391

ENDIF.

Thanks in advance

Raja

2 REPLIES 2

Former Member
0 Kudos

Hi,

Few comments on this code.

1. There is a endloop statement in the code copied by you.. but there is no loop at statement..

it looks like the Select statements are inside a loop. you might want to avoid that... use data type ranges

2. the statement Select has end selects for collect. might as well get all the data for the selection in internal table and then do the operations for collect

i think that would improve a lot ..

Hope this helps.

Regards,

Kinshuk

Former Member
0 Kudos

Hi Raj,

1) Avoid select statements inside a loop which will effect the performance of your program

2) First get all the required data from tables mbew, ebew, qbew, obew, qbew, obew in to separate internal tables using for all entries from internal table organ instead of using select----endselect in a loop

3) use nested loops instead of select------endselect but use parallel cursor method in nested loop to improve performance.

The below example shows how to improve performance if we use nested loop using parallel cursor method

Nested Loop using Parallel Cursor:

REPORT zparallel_cursor2.

TABLES:

likp,

lips.

DATA:

t_likp TYPE TABLE OF likp,

t_lips TYPE TABLE OF lips.

DATA:

w_runtime1 TYPE i,

w_runtime2 TYPE i,

w_index LIKE sy-index.

START-OF-SELECTION.

SELECT *

FROM likp

INTO TABLE t_likp.

SELECT *

FROM lips

INTO TABLE t_lips.

GET RUN TIME FIELD w_runtime1.

SORT t_likp BY vbeln.

SORT t_lips BY vbeln.

LOOP AT t_likp INTO likp.

LOOP AT t_lips INTO lips FROM w_index.

IF likp-vbeln NE lips-vbeln.

w_index = sy-tabix.

EXIT.

ENDIF.

ENDLOOP.

ENDLOOP.

GET RUN TIME FIELD w_runtime2.

w_runtime2 = w_runtime2 - w_runtime1.

WRITE w_runtime2.

Thanks,

Naveen Kumar.