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- pls help urgent

Former Member
0 Likes
1,177

Hi SDN's

Pls help me to improve the performance of the following code

form get_data .

SELECT budat HKONT aufnr sgtxt blart dmbtr waers

INTO TABLE it_detail

FROM bsis

WHERE bukrs = p_bukrs

AND blart IN s_blart

AND budat IN s_budat

AND HKONT in S_HKONT

AND aufnr in S_aufnr

AND werks = p_werks.

SORT it_detail.

IF p_waers IS NOT INITIAL.

LOOP AT it_detail.

CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'

EXPORTING

date = p_xdate

foreign_currency = p_waers

local_amount = it_detail-dmbtr

local_currency = it_detail-waers

type_of_rate = p_kurst

IMPORTING

foreign_amount = it_detail-dmbtr

EXCEPTIONS

no_rate_found = 1

overflow = 2

no_factors_found = 3

OTHERS = 4.

IF sy-subrc = 0.

CLEAR it_detail-waers.

it_detail-waers = p_waers.

MODIFY it_detail. " transporting dmbtr.

ENDIF.

ENDLOOP.

ENDIF.

endform. " get_data

&----


*& Form get_sum

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form get_cost .

LOOP AT it_detail.

it_sum-budat = it_detail-budat.

it_sum-hkont = it_detail-hkont.

it_sum-aufnr = it_detail-aufnr.

it_sum-blart = it_detail-blart.

it_sum-sgtxt = it_detail-sgtxt.

IF it_detail-blart = 'GI' .

it_sum-raw = it_detail-dmbtr.

ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) NE 'S' . .

it_sum-external = it_detail-dmbtr.

ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) = 'S' .

it_sum-standard = it_detail-dmbtr.

ELSEIF it_detail-blart = 'SA' AND it_detail-sgtxt(2) = 'DR' .

it_sum-machine = it_detail-dmbtr.

ELSE.

it_sum-others = it_detail-dmbtr.

ENDIF.

APPEND it_sum.

CLEAR it_sum.

ENDLOOP.

  • Calculate Line item total for Summary Option

LOOP AT it_sum.

it_sum-total = it_sum-raw + it_sum-external + it_sum-standard + it_sum-machine + it_sum-others.

MODIFY it_sum INDEX sy-tabix TRANSPORTING total.

CLEAR it_sum.

ENDLOOP.

ENDFORM. " get_cost

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,151

Hi Kumar try this out...


*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data .
  SELECT hkont  budat  waers blart dmbtr sgtxt  aufnr
  INTO TABLE it_detail
  FROM bsis
  WHERE bukrs = p_bukrs  AND hkont IN s_hkont AND
        budat IN s_budat AND blart IN s_blart AND
        aufnr IN s_aufnr AND werks = p_werks.

  SORT it_detail.

  CHECK p_waers IS NOT INITIAL.

  LOOP AT it_detail.
    CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'
      EXPORTING
        date             = p_xdate
        foreign_currency = p_waers
        local_amount     = it_detail-dmbtr
        local_currency   = it_detail-waers
        type_of_rate     = p_kurst
      IMPORTING
        foreign_amount   = it_detail-dmbtr
      EXCEPTIONS
        no_rate_found    = 1
        overflow         = 2
        no_factors_found = 3
        OTHERS           = 4.
        
    IF sy-subrc = 0.
      CLEAR it_detail-waers.
      it_detail-waers = p_waers.
      MODIFY it_detail. " transporting dmbtr.
    ENDIF.

    MOVE-CORRESPONDING it_detail TO it_sum.

    IF it_detail-blart = 'GI' .
      it_sum-raw = it_detail-dmbtr.
    ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) NE 'S' .
      it_sum-external = it_detail-dmbtr.
    ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) = 'S' .
      it_sum-standard = it_detail-dmbtr.
    ELSEIF it_detail-blart = 'SA' AND it_detail-sgtxt(2) = 'DR' .
      it_sum-machine = it_detail-dmbtr.
    ELSE.
      it_sum-others = it_detail-dmbtr.
    ENDIF.

    it_sum-total = it_sum-raw     + it_sum-external + it_sum-standard +
                   it_sum-machine + it_sum-others.
    APPEND   it_sum.
    CLEAR  : it_sum, it_detail.
  ENDLOOP.
ENDFORM. " get_data

Hi SDN's

Pls help me to improve the performance of the following code

form get_data .

SELECT budat HKONT aufnr sgtxt blart dmbtr waers

INTO TABLE it_detail

FROM bsis

WHERE bukrs = p_bukrs

AND blart IN s_blart

AND budat IN s_budat

AND HKONT in S_HKONT

AND aufnr in S_aufnr

AND werks = p_werks.

SORT it_detail.

IF p_waers IS NOT INITIAL.

LOOP AT it_detail.

CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'

EXPORTING

date = p_xdate

foreign_currency = p_waers

local_amount = it_detail-dmbtr

local_currency = it_detail-waers

type_of_rate = p_kurst

IMPORTING

foreign_amount = it_detail-dmbtr

EXCEPTIONS

no_rate_found = 1

overflow = 2

no_factors_found = 3

OTHERS = 4.

IF sy-subrc = 0.

CLEAR it_detail-waers.

it_detail-waers = p_waers.

MODIFY it_detail. " transporting dmbtr.

ENDIF.

ENDLOOP.

ENDIF.

endform. " get_data

&----


*& Form get_sum

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form get_cost .

LOOP AT it_detail.

it_sum-budat = it_detail-budat.

it_sum-hkont = it_detail-hkont.

it_sum-aufnr = it_detail-aufnr.

it_sum-blart = it_detail-blart.

it_sum-sgtxt = it_detail-sgtxt.

IF it_detail-blart = 'GI' .

it_sum-raw = it_detail-dmbtr.

ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) NE 'S' . .

it_sum-external = it_detail-dmbtr.

ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) = 'S' .

it_sum-standard = it_detail-dmbtr.

ELSEIF it_detail-blart = 'SA' AND it_detail-sgtxt(2) = 'DR' .

it_sum-machine = it_detail-dmbtr.

ELSE.

it_sum-others = it_detail-dmbtr.

ENDIF.

APPEND it_sum.

CLEAR it_sum.

ENDLOOP.

  • Calculate Line item total for Summary Option

LOOP AT it_sum.

it_sum-total = it_sum-raw + it_sum-external + it_sum-standard + it_sum-machine + it_sum-others.

MODIFY it_sum INDEX sy-tabix TRANSPORTING total.

CLEAR it_sum.

ENDLOOP.

ENDFORM. " get_cost

9 REPLIES 9
Read only

Former Member
0 Likes
1,151

Any one pls give me some idea

Read only

Former Member
0 Likes
1,151

Hi Kumar,

Please try to give the fields in order in where condition and also when u are selecting.

SELECT HKONT  budat  waers blart dmbtr sgtxt  aufnr 
INTO TABLE it_detail
FROM bsis
WHERE bukrs = p_bukrs
  AND HKONT in S_HKONT
  AND budat IN s_budat
  AND blart IN s_blart
  AND aufnr in S_aufnr
  AND werks = p_werks.

Best regards,

raam

Read only

Former Member
0 Likes
1,151

Hi,

1) First of all try to use as many keys for selecting the BSIS table in the correct order.

2) Sort it_detail with a particular field. If possible declare the internal table as binary sort.

3) Use a structure for it_details.

4) Instead of passing

it_sum-budat = it_detail-budat.

it_sum-hkont = it_detail-hkont.

it_sum-aufnr = it_detail-aufnr.

it_sum-blart = it_detail-blart.

it_sum-sgtxt = it_detail-sgtxt.

use move-corresponding it_detail to it_sum.

5) Use read table as much as you can.

Reward points if this were useful.

Rgds,

Abhishek

Read only

0 Likes
1,151

Hi Abi

Can u pls tell me how to do below one

3) Use a structure for it_details.

5) Use read table as much as you can.

Read only

0 Likes
1,151

Hi Kumar,

If u are modifying all records in the internal table then u need to use loop statement.

Read statement fetches/reads only one record. so u can't modify all the records with the read statement. again u need to keep the read ststement in some looping condition to modify all records.

according to ur requirment loop statement is required.

But u are using the function module to convert currency. It may be the problem u are facing.

Best regards,

raam

Read only

0 Likes
1,151

anyone pls help me out.

Read only

Former Member
0 Likes
1,151

Hi

You have issue in the loop statement wherein you are using the function module inside. Its better use the table tcurf wherein the same currency convertion data is available. Either use for all entries or else use at the end of writing so that u can save more runtime.

Hope it can resolve your problem.

Thiru

Read only

Former Member
0 Likes
1,151

Hi Kumar,

write ur select statement as follows,

select bukrs hkont budat waers blart dmbtr sgtxt aufnr

from bsis

into table i_details

where bukrs = p_bukrs

AND HKONT in S_HKONT

AND budat in s_budate

AND blart IN s_blart

AND aufnr in S_aufnr

AND werks = p_werks.

and ur i_detail structure should in the same order as u selected in the select querry.

if database table contains huge entries then select statement will give u performence issue.

so if the above select is also giving performence issue,

try to write select querry as follows

select * from bsis into i_detail.

i_detail here is type table of bsis.

and one more is........

loop at i_details.

endloop.

second time also u have used it for getting data into i_sum.

here u can get this data in the first loop it self.

i hope it will work,

Regards,

kk.

Edited by: kusuma kurapati on May 8, 2008 8:29 AM

Edited by: kusuma kurapati on May 8, 2008 8:33 AM

Read only

Former Member
0 Likes
1,152

Hi Kumar try this out...


*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data .
  SELECT hkont  budat  waers blart dmbtr sgtxt  aufnr
  INTO TABLE it_detail
  FROM bsis
  WHERE bukrs = p_bukrs  AND hkont IN s_hkont AND
        budat IN s_budat AND blart IN s_blart AND
        aufnr IN s_aufnr AND werks = p_werks.

  SORT it_detail.

  CHECK p_waers IS NOT INITIAL.

  LOOP AT it_detail.
    CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'
      EXPORTING
        date             = p_xdate
        foreign_currency = p_waers
        local_amount     = it_detail-dmbtr
        local_currency   = it_detail-waers
        type_of_rate     = p_kurst
      IMPORTING
        foreign_amount   = it_detail-dmbtr
      EXCEPTIONS
        no_rate_found    = 1
        overflow         = 2
        no_factors_found = 3
        OTHERS           = 4.
        
    IF sy-subrc = 0.
      CLEAR it_detail-waers.
      it_detail-waers = p_waers.
      MODIFY it_detail. " transporting dmbtr.
    ENDIF.

    MOVE-CORRESPONDING it_detail TO it_sum.

    IF it_detail-blart = 'GI' .
      it_sum-raw = it_detail-dmbtr.
    ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) NE 'S' .
      it_sum-external = it_detail-dmbtr.
    ELSEIF it_detail-blart = 'GG' AND it_detail-sgtxt(1) = 'S' .
      it_sum-standard = it_detail-dmbtr.
    ELSEIF it_detail-blart = 'SA' AND it_detail-sgtxt(2) = 'DR' .
      it_sum-machine = it_detail-dmbtr.
    ELSE.
      it_sum-others = it_detail-dmbtr.
    ENDIF.

    it_sum-total = it_sum-raw     + it_sum-external + it_sum-standard +
                   it_sum-machine + it_sum-others.
    APPEND   it_sum.
    CLEAR  : it_sum, it_detail.
  ENDLOOP.
ENDFORM. " get_data