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: 

code performance

Former Member
0 Kudos

Hi, all !!!

I have problem with this code , because table VBRK is to much big ( 890.000 rec).

and have runtime errorrror, how to improve this code?!

SELECT * FROM mkpf INTO TABLE lt_mkpf

WHERE mjahr = fgodina

AND budat IN budat.

LOOP AT lt_mkpf INTO ls_mkpf.

SELECT * FROM mseg INTO ls_mseg " table lt_mseg

WHERE mblnr = ls_mkpf-mblnr

AND mjahr = ls_mkpf-mjahr

AND werks = plant

AND lgort = stocc.

APPEND ls_mseg TO lt_mseg.

CLEAR ls_mseg.

ENDSELECT.

IF ls_mkpf-xblnr NE ' '.

SELECT * FROM vbrp INTO ls_vbrp

WHERE vgbel = ls_mkpf-xblnr.

APPEND ls_vbrp TO lt_vbrp.

ENDSELECT.

ENDIF.

ENDLOOP.

LOOP AT lt_mseg INTO ls_mseg.

MOVE-CORRESPONDING ls_mseg TO zintrec.

LOOP AT lt_mkpf INTO ls_mkpf

WHERE mblnr = ls_mseg-mblnr

AND mjahr = ls_mseg-mjahr.

MOVE-CORRESPONDING ls_mkpf TO zintrec.

ENDLOOP.

zintrec-status = '5'.

IF l_loc_curr IS INITIAL.

IF ls_mkpf-xblnr <> ' '.

CONCATENATE '0' mseg-zeile '0' INTO xvgpos.

LOOP AT lt_vbrp INTO ls_vbrp

WHERE vgbel = ls_mkpf-xblnr.

  • SELECT * FROM vbrp WHERE vgbel = ls_mkpf-xblnr.

  • AND vgpos = xvgpos.

IF zintrec-charg = ls_vbrp-charg. "

zintrec-vbeln = ls_vbrp-vbeln.

zintrec-netwr = ls_vbrp-netwr.

zintrec-wavwr = ls_vbrp-wavwr.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

can Improve more..but try like this...


SELECT * FROM mkpf INTO TABLE lt_mkpf
WHERE mjahr = fgodina
AND budat IN budat.


*LOOP AT lt_mkpf INTO ls_mkpf.
*  SELECT * FROM mseg INTO ls_mseg " table lt_mseg
SELECT * FROM mseg INTO TABLE lt_mseg " table lt_mseg
FOR ALL ENTRIES IN lt_mkpf
*  WHERE mblnr = ls_mkpf-mblnr
WHERE mblnr = lt_mkpf-mblnr
AND mjahr = ls_mkpf-mjahr
AND werks = plant
AND lgort = stocc.
*    APPEND ls_mseg TO lt_mseg.
*    CLEAR ls_mseg.
*  ENDSELECT.
*  IF ls_mkpf-xblnr NE ' '.
*    SELECT * FROM vbrp INTO ls_vbrp
SELECT * FROM vbrp INTO lt_vbrp
FOR ALL ENTRIES IN lt_mkpf
WHERE vgbel = lt_mkpf-xblnr.
*      APPEND ls_vbrp TO lt_vbrp.
*    ENDSELECT.
*  ENDIF.
*ENDLOOP.


  LOOP AT lt_mseg INTO ls_mseg.
    MOVE-CORRESPONDING ls_mseg TO zintrec.

*  LOOP AT lt_mkpf INTO ls_mkpf WHERE mblnr = ls_mseg-mblnr
*                               AND   mjahr = ls_mseg-mjahr.
*  MOVE-CORRESPONDING ls_mkpf TO zintrec.
*  ENDLOOP.
    READ TABLE lt_mkpf INTO ls_mkpf WITH KEY mblnr = ls_mseg-mblnr
                                             mjahr = ls_mseg-mjahr.
    CHECK sy-subrc EQ 0.
    MOVE-CORRESPONDING ls_mkpf TO zintrec.

    zintrec-status = '5'.
    IF l_loc_curr IS INITIAL.
      IF ls_mkpf-xblnr ' '.
        CONCATENATE '0' mseg-zeile '0' INTO xvgpos.
        LOOP AT lt_vbrp INTO ls_vbrp
        WHERE vgbel = ls_mkpf-xblnr.


          SELECT * FROM vbrp WHERE vgbel = ls_mkpf-xblnr.
            and vgpos = xvgpos.
            IF zintrec-charg = ls_vbrp-charg. "
              zintrec-vbeln = ls_vbrp-vbeln.
              zintrec-netwr = ls_vbrp-netwr.
              zintrec-wavwr = ls_vbrp-wavwr.

4 REPLIES 4

Former Member
0 Kudos

Try to avoid Select...Endselect loop.

make use of for all entries instead of SELECT....ENDSELECT.

Check the sample code below.

SELECT * FROM mkpf INTO TABLE lt_mkpf

WHERE mjahr = fgodina

AND budat IN budat.

SELECT * FROM mseg INTO table lt_mseg for all entries in it_mkpf

WHERE mblnr = lt_mkpf-mblnr

AND mjahr = lt_mkpf-mjahr

AND werks = plant

AND lgort = stocc.

SELECT * FROM vbrp INTO table lt_vbrp for all entries in it_mkpf

WHERE vgbel = ls_mkpf-xblnr

and lt_mkpf-xblnr NE ' '..

Former Member
0 Kudos

Your problem is that you are doing two unindexed SELECTs on VBRP. You may be able to find a solution by using sales document flow (table VBFA).

Rob

Former Member
0 Kudos

can Improve more..but try like this...


SELECT * FROM mkpf INTO TABLE lt_mkpf
WHERE mjahr = fgodina
AND budat IN budat.


*LOOP AT lt_mkpf INTO ls_mkpf.
*  SELECT * FROM mseg INTO ls_mseg " table lt_mseg
SELECT * FROM mseg INTO TABLE lt_mseg " table lt_mseg
FOR ALL ENTRIES IN lt_mkpf
*  WHERE mblnr = ls_mkpf-mblnr
WHERE mblnr = lt_mkpf-mblnr
AND mjahr = ls_mkpf-mjahr
AND werks = plant
AND lgort = stocc.
*    APPEND ls_mseg TO lt_mseg.
*    CLEAR ls_mseg.
*  ENDSELECT.
*  IF ls_mkpf-xblnr NE ' '.
*    SELECT * FROM vbrp INTO ls_vbrp
SELECT * FROM vbrp INTO lt_vbrp
FOR ALL ENTRIES IN lt_mkpf
WHERE vgbel = lt_mkpf-xblnr.
*      APPEND ls_vbrp TO lt_vbrp.
*    ENDSELECT.
*  ENDIF.
*ENDLOOP.


  LOOP AT lt_mseg INTO ls_mseg.
    MOVE-CORRESPONDING ls_mseg TO zintrec.

*  LOOP AT lt_mkpf INTO ls_mkpf WHERE mblnr = ls_mseg-mblnr
*                               AND   mjahr = ls_mseg-mjahr.
*  MOVE-CORRESPONDING ls_mkpf TO zintrec.
*  ENDLOOP.
    READ TABLE lt_mkpf INTO ls_mkpf WITH KEY mblnr = ls_mseg-mblnr
                                             mjahr = ls_mseg-mjahr.
    CHECK sy-subrc EQ 0.
    MOVE-CORRESPONDING ls_mkpf TO zintrec.

    zintrec-status = '5'.
    IF l_loc_curr IS INITIAL.
      IF ls_mkpf-xblnr ' '.
        CONCATENATE '0' mseg-zeile '0' INTO xvgpos.
        LOOP AT lt_vbrp INTO ls_vbrp
        WHERE vgbel = ls_mkpf-xblnr.


          SELECT * FROM vbrp WHERE vgbel = ls_mkpf-xblnr.
            and vgpos = xvgpos.
            IF zintrec-charg = ls_vbrp-charg. "
              zintrec-vbeln = ls_vbrp-vbeln.
              zintrec-netwr = ls_vbrp-netwr.
              zintrec-wavwr = ls_vbrp-wavwr.

kesavadas_thekkillath
Active Contributor
0 Kudos

SELECT * FROM mkpf INTO TABLE lt_mkpf

WHERE mjahr = fgodina

AND budat IN budat.

if lt_mkpf[] is not initial.

sort lt_mkpf[] ascending.

SELECT * FROM mseg INTO ls_mseg

for all entries in lt_mkpf

WHERE mblnr = ls_mkpf-mblnr

AND mjahr = ls_mkpf-mjahr

AND werks = plant

AND lgort = stocc.

LOOP AT lt_mkpf INTO ls_mkpf where xblnr is not initial.

move-corresponding ls_mkpf to ls_mkpf1.

append ls_mkpf1 to mkpf1.

endloop.

if mkpf1 is not initial.

SELECT * FROM vbrp INTO ls_vbrp for all entries in mkpf1

WHERE vgbel = ls_mkpf-xblnr.

endif.