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

help on performance

Former Member
0 Likes
1,028

Hi

ALL

I am new to this forum

I am jez learning ABAP . I anm sure that this site will help me grow in SAP via the help of all the gurus

I thank U all in advance

I have written a code and there is a Performance issue . The particular form 'cal_no_of_orders' is taking lotof time say more than 5 mins to execute can anyone suggest me the better way of writing this where I need to pass the valid to and valid from dates to calculate the noof orders and dollars . please tell me the flaw inthe code

report orders .

*----


  • DICTIONARY TABLES

*----


tables: vbak, "Sales Document: Header Data

vbpa, "Sales Document: Partner

vbuk, "Sales Document: Header Status and Administrative Data

adrc.

----


  • ALV Declarations *

----


type-pools: slis, kkblo.

data: g_repid like sy-repid,

gs_layout type slis_layout_alv,

gt_fieldcat type slis_t_fieldcat_alv,

fieldcat_in like line of gt_fieldcat,

cos_pos type i,

months like komp-anz_monate.

data: g_anzlines type i.

data : t_list_top_of_page type slis_t_listheader.

data : t_list_end_of_list type slis_t_listheader.

data : t_events type slis_t_event.

*----


  • DATA

*----


data: gv_netwr like vbak-netwr,

gv_netwr0 like vbak-netwr,

zvbeln like vbak-vbeln,

gv_count(6) type n,

gv_count0(6) type n,

erdat1 like vbak-erdat,

erdat2 like vbak-erdat,

vkorg like vbak-vkorg,

erdat(25),

hyphen(3) value '---',

p_name1 like adrc-name1,

zlines type i.

*----


  • INTERNAL TABLES

*----


data: begin of zvbak occurs 0,

vbeln like vbak-vbeln, "order no

vgbel like vbak-vgbel, "reference doc num

netwr like vbak-netwr, " amount

end of zvbak.

data: zvbak0 like zvbak occurs 0 with header line.

data: begin of zvbpa occurs 0,

vbeln like vbpa-vbeln,

parvw like vbpa-parvw, " partner function

kunnr like vbpa-kunnr,

adrnr like vbpa-adrnr,

netwr like vbak-netwr,

name1 like adrc-name1,

end of zvbpa.

data: zvbpa0 like zvbpa occurs 0 with header line.

data: alv_tab like zvbpa occurs 0 with header line,

alv_dat like zvbpa occurs 0 with header line.

data: begin of zvbuk occurs 0,

vbeln like vbak-vbeln,

netwr like vbak-netwr,

end of zvbuk.

data: begin of ztab_period occurs 0.

include structure scscp_period_str.

data: name(10) type c,

end of ztab_period.

data ztab_period0 like ztab_period occurs 0 with header line.

*----


  • SELECTION SCREEN

*----


selection-screen begin of block b with frame title text-001 .

select-options: s_erdat for vbak-erdat obligatory,

s_vkorg for vbak-vkorg obligatory.

selection-screen end of block b.

----


*INITIALIZATION.

----


initialization.

g_repid = sy-repid.

----


*START-OF-SELECTION.

----


start-of-selection.

perform select_orders.

*----


**END-OF-SELECTION.

*----


end-of-selection.

describe table alv_tab lines g_anzlines.

if g_anzlines gt 0.

perform display_list.

endif.

&----


*& Form select_orders

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form select_orders.

data: gv_index like sy-tabix,

ztab like ztab_period,

erdath like vbak-erdat,

erdat_h like vbak-erdat.

erdat1 = s_erdat-low(8).

erdath = s_erdat-high(8).

concatenate erdat1 hyphen erdat_h erdath into erdat.

vkorg = s_vkorg+3(4).

*calculate the no of orders and dollars month wise from the selection

*date

call function 'CSCP_PARA1_GET_PERIODS'

exporting

i_datuv = s_erdat-low

i_datub = s_erdat-high

i_timeunit = 'D'

tables

et_dates = ztab_period.

append ztab_period.

clear ztab_period.

clear gv_index.

*calculate the names of the months

sort ztab_period by datuv.

describe table ztab_period lines zlines.

loop at ztab_period.

gv_index = sy-tabix.

*always delete first record inthe internal table

if ztab_period-sindex = 1.

delete ztab_period.

clear ztab_period.

endif.

endloop.

*Assign Month name and calculate no of orders

clear gv_index.

loop at ztab_period.

gv_index = sy-tabix.

if ztab_period-datuv+4(2) = '01'.

move 'JANUARY' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '01'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '02'.

move 'FEBRUARY' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '02'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '03'.

move 'MARCH' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '03'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '04'.

move 'APRIL' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '04'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '05'.

move 'MAY' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '05'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '06'.

move 'JUNE' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '06'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '07'.

move 'JULY' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '07'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '08'.

move 'AUGUST' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '08'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '09'.

move 'SEPTEMBER' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '09'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '10'.

move 'OCTOBER' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '10'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '11'.

move 'NOVEMBER' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '11'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

elseif ztab_period-datuv+4(2) = '12'.

move 'DECEMBER' to ztab_period-name.

loop at ztab_period into ztab.

if ztab_period-datuv+4(2) = '12'.

move ztab_period-datuv to ztab-datuv.

move ztab_period-datub to ztab-datub.

endif.

erdat1 = ztab-datuv.

erdat2 = ztab-datub.

perform cal_no_of_orders tables alv_dat

using erdat1 erdat2

changing gv_count0 gv_netwr0.

modify ztab_period index gv_index.

clear : erdat1 , ztab-datuv, erdat2, ztab-datub.

endloop.

clear: erdat1, erdat2, ztab_period-datuv, ztab_period-datub, ztab.

endif.

clear ztab_period-datuv+4(2).

endloop.

endform. " select_orders

*&----


*

*& Form DISPLAY_LIST

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

form display_list.

g_repid = sy-repid.

perform fillevents.

perform comment_build using t_list_top_of_page.

perform create_layout.

perform create_fieldcat.

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

i_callback_program = g_repid

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

i_callback_top_of_page = 'TOP_OF_PAGE'

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE =

  • I_GRID_SETTINGS = gs_settings

is_layout = gs_layout

it_fieldcat = gt_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT = 'X'

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

i_save = 'A'

  • IS_VARIANT =

it_events = t_events

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IT_ALV_GRAPHICS =

  • IT_ADD_FIELDCAT =

  • IT_HYPERLINK =

  • I_HTML_HEIGHT_TOP =

  • I_HTML_HEIGHT_END =

  • IT_EXCEPT_QINFO =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

tables

t_outtab = alv_tab

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

endform. " DISPLAY_LIST

&----


*& Form comment_build

&----


  • text

----


  • -->P_t_list_top_of_page text

----


form comment_build using t_list_top_of_page type slis_t_listheader.

data : ls_line type slis_listheader.

data : ldate(10),hdate(10).

refresh : t_list_top_of_page.

clear ls_line.

ls_line-info = sy-repid.

ls_line-typ = 'H'.

ls_line-info = 'ORDERS AND DOLLARS REPORT'.

append ls_line to t_list_top_of_page.

write sy-datum to ldate using edit mask '__.__.____' .

clear ls_line.

ls_line-typ = 'A'.

concatenate 'Run Date :' ldate

into ls_line-info separated by space.

append ls_line to t_list_top_of_page.

clear ls_line.

ls_line-typ = 'A'.

ls_line-info = 'User ID :'.

ls_line-info+12 = sy-uname.

append ls_line to t_list_top_of_page.

clear ls_line.

ls_line-typ = 'A'.

ls_line-info = 'No OF ORDERS :'.

ls_line-info+17 = gv_count.

append ls_line to t_list_top_of_page.

clear ls_line.

ls_line-typ = 'A'.

ls_line-info = 'TOTAL dOLLAR AMOUNT :'.

ls_line-info+25 = gv_netwr.

append ls_line to t_list_top_of_page.

clear ls_line.

ls_line-typ = 'A'.

ls_line-info = 'Date Range for Documents :'.

ls_line-info+25 = erdat.

append ls_line to t_list_top_of_page.

clear ls_line.

ls_line-typ = 'A'.

ls_line-info = 'Sales Organization :'.

ls_line-info+25 = vkorg.

append ls_line to t_list_top_of_page.

endform. " comment_build

&----


*& Form fillevents

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form fillevents.

data l_events type line of slis_t_event.

clear l_events.

l_events-name = 'TOP_OF_PAGE'.

l_events-form = 'TOP_OF_PAGE'.

append l_events to t_events.

*perform top-of-page1.

endform. " fillevents

&----


*& Form create_fieldcat

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form create_fieldcat.

perform fill_fieldcat using 'KUNNR' 'ALV_TAB' 'SOLD-TO-PARTY' '1' ''.

perform fill_fieldcat using 'NAME1' 'ALV_TAB' 'NAME' '2' ''.

perform fill_fieldcat using 'NETWR' 'ALV_TAB' 'NETVALUE' '3' ''.

endform. " create_fieldcat

&----


*& Form create_layout

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form create_layout.

gs_layout-colwidth_optimize = 'X'.

gs_layout-zebra = 'X'.

gs_layout-no_totalline = 'X'.

endform. " create_layout

&----


*& Form fill_fieldcat

&----


  • text

----


  • -->P_0564 text

  • -->P_0565 text

  • -->P_0566 text

  • -->P_0567 text

  • -->P_0568 text

----


form fill_fieldcat using p_fname

p_tabname

p_seltext

p_colpos

p_do_sum.

clear fieldcat_in.

fieldcat_in-fieldname = p_fname.

fieldcat_in-tabname = p_tabname.

fieldcat_in-seltext_m = p_seltext.

fieldcat_in-col_pos = p_colpos.

fieldcat_in-do_sum = p_do_sum.

append fieldcat_in to gt_fieldcat.

endform. " fill_fieldcat

&----


*& Form TOP_OF_PAGE

----


form top_of_page.

call function 'REUSE_ALV_COMMENTARY_WRITE'

exporting

i_logo = 'ENJOYSAP_LOGO'

it_list_commentary = t_list_top_of_page.

endform.

.

&----


*& Form cal_no_of_orders

&----


  • text

----


  • -->P_ALV_DAT text

  • -->P_ERDAT1 text

  • -->P_ERDAT2 text

  • <--P_KUNNR text

  • <--P_GV_COUNT text

  • <--P_GV_NETWR text

  • <--P_GV_NAME1 text

----


form cal_no_of_orders tables atv_tab

using p_erdat1

p_erdat2

changing p_gv_count

p_gv_netwr.

data: g_tabix like sy-tabix,

gv_index like sy-tabix.

*Select Orders Processed

select vbeln netwr vgbel from vbak

into corresponding fields of table zvbak where

erdat between p_erdat1 and p_erdat2 and

vkorg in s_vkorg and

vgbel ne space and

auart = 'TA' and

( ( bsark = 'DFUA' ) or

( bsark = 'DFUE' ) or

( bsark = 'DFUI' ) ).

if sy-subrc = 0.

clear sy-subrc .

select vbeln parvw kunnr adrnr from vbpa

into corresponding fields of table zvbpa

for all entries in zvbak

where vbeln = zvbak-vgbel

and parvw = 'AG'.

if sy-subrc = 0.

loop at zvbpa.

g_tabix = sy-tabix.

read table zvbak with key vgbel = zvbpa-vbeln.

if sy-subrc eq 0.

move :zvbak-netwr to zvbpa-netwr.

modify zvbpa index g_tabix.

endif.

select single name1 into (p_name1 )

from adrc

where addrnumber = zvbpa-adrnr.

if sy-subrc = 0.

move p_name1 to zvbpa-name1.

modify zvbpa index g_tabix.

endif.

endloop.

endif.

endif.

  • move Processed Orders to ALV display table

loop at zvbpa.

move-corresponding zvbpa to alv_tab.

append alv_tab.

clear alv_tab.

endloop.

  • Select Open Quotaions

select vbeln netwr vgbel from vbak

into corresponding fields of table zvbak0 where

erdat between p_erdat1 and p_erdat2 and

vkorg in s_vkorg and

vbtyp = 'B' and

vgbel = space and

auart = 'ZEDI'.

loop at zvbak0.

select single vbeln from vbuk

into (zvbeln )

where vbeln = zvbak0-vbeln

and vbtyp = 'B'

and gbstk = 'A'.

if sy-subrc = 0.

read table zvbak0 with key vbeln = zvbeln.

if sy-subrc = 0.

move: zvbak0-vbeln to zvbuk-vbeln,

zvbak0-netwr to zvbuk-netwr.

append zvbuk.

clear zvbuk.

endif.

endif.

endloop.

  • move Open Quotations to ALV display table

sort zvbuk.

loop at zvbuk.

move-corresponding zvbuk to alv_tab.

append alv_tab.

clear alv_tab.

endloop.

*get the total no of orders and dollar amount

sort alv_tab by kunnr.

loop at alv_tab.

gv_netwr = alv_tab-netwr + gv_netwr.

gv_count = gv_count + 1.

endloop.

endform. " cal_no_of_orders

thanks for taking time to read and go thru my code

ur suggestions would help me to grow and may be one day become a part of this forum .

thanks

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
974

The first thing to do when you encounter a perfomance problem is use the performance trace (ST05) to find if there are database access problems.

Rob

The first thing to do when you encounter a perfomance problem is use the performance trace (ST05) to find if there are database access problems.

Rob

7 REPLIES 7
Read only

Former Member
0 Likes
975

The first thing to do when you encounter a perfomance problem is use the performance trace (ST05) to find if there are database access problems.

Rob

Read only

0 Likes
974

And look at the lines I've marked:


FORM cal_no_of_orders TABLES atv_tab
USING p_erdat1
p_erdat2
CHANGING p_gv_count
p_gv_netwr.
  DATA: g_tabix LIKE sy-tabix,
  gv_index LIKE sy-tabix.

*Select Orders Processed
  SELECT vbeln netwr vgbel FROM vbak
  INTO CORRESPONDING FIELDS OF TABLE zvbak WHERE
  erdat BETWEEN p_erdat1 AND p_erdat2 AND
  vkorg IN s_vkorg AND
  vgbel NE space AND
  auart = 'TA' AND
  ( ( bsark = 'DFUA' ) OR
  ( bsark = 'DFUE' ) OR
  ( bsark = 'DFUI' ) ).
  IF sy-subrc = 0.
    CLEAR sy-subrc .
    SORT zvbak BY vgbel.                    "<==========================
    SELECT vbeln parvw kunnr adrnr FROM vbpa
    INTO CORRESPONDING FIELDS OF TABLE zvbpa
    FOR ALL ENTRIES IN zvbak
    WHERE vbeln = zvbak-vgbel
    AND parvw = 'AG'.
    IF sy-subrc = 0.
      LOOP AT zvbpa.
        g_tabix = sy-tabix.
        READ TABLE zvbak WITH KEY vgbel = zvbpa-vbeln
          BINARY SEARCH.                    "<==========================
        IF sy-subrc EQ 0.
          MOVE :zvbak-netwr TO zvbpa-netwr.
          MODIFY zvbpa INDEX g_tabix.
        ENDIF.
        SELECT SINGLE name1 INTO (p_name1 )
        FROM adrc
        WHERE addrnumber = zvbpa-adrnr.
        IF sy-subrc = 0.
          MOVE p_name1 TO zvbpa-name1.
          MODIFY zvbpa INDEX g_tabix.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.
* move Processed Orders to ALV display table
  LOOP AT zvbpa.
    MOVE-CORRESPONDING zvbpa TO alv_tab.
    APPEND alv_tab.
    CLEAR alv_tab.
  ENDLOOP.
* Select Open Quotaions
  SELECT vbeln netwr vgbel FROM vbak
  INTO CORRESPONDING FIELDS OF TABLE zvbak0 WHERE
  erdat BETWEEN p_erdat1 AND p_erdat2 AND
  vkorg IN s_vkorg AND
  vbtyp = 'B' AND
  vgbel = space AND
  auart = 'ZEDI'.
  LOOP AT zvbak0.
    SELECT SINGLE vbeln FROM vbuk
    INTO (zvbeln )
    WHERE vbeln = zvbak0-vbeln
    AND vbtyp = 'B'
    AND gbstk = 'A'.
    IF sy-subrc = 0.
      READ TABLE zvbak0 WITH KEY vbeln = zvbeln.
      IF sy-subrc = 0.
        MOVE: zvbak0-vbeln TO zvbuk-vbeln,
        zvbak0-netwr TO zvbuk-netwr.
        APPEND zvbuk.
        CLEAR zvbuk.
      ENDIF.
    ENDIF.
  ENDLOOP.

* move Open Quotations to ALV display table

  SORT zvbuk.
  LOOP AT zvbuk.
    MOVE-CORRESPONDING zvbuk TO alv_tab.
    APPEND alv_tab.
    CLEAR alv_tab.
  ENDLOOP.

*get the total no of orders and dollar amount

  SORT alv_tab BY kunnr.
  LOOP AT alv_tab.
    gv_netwr = alv_tab-netwr + gv_netwr.
    gv_count = gv_count + 1.
  ENDLOOP.
ENDFORM. " cal_no_of_orders

Rob

Read only

0 Likes
974

Hi

Rob

I appreciate ur immediate response

I have checked in the Runtime analysis that the particular form takes the whole time

I have checked in Trace(ST05) too with the same results

with the select statement

select vbeln netwr vgbel from vbak

into corresponding fields of table zvbak0 where

erdat between p_erdat1 and p_erdat2 and

i dont understand the problem

please suggest

thanks

Read only

0 Likes
974

VBAK table does not have any index on ERDAT so it's going to do a table scan.

We created a secondary index on ERDAT, VKORG, AUART since we had several programs which selected data using these fields.

Before creating any new index - please check which indexes you have for VBAk already and if any of those has ERDAT - try to modify your select so this index is used.

(like if you have an index on VKORG & ERDAT - it will be much faster to select ALL sales orgs defined in your system and then select form VBAK with VKORG & ERDAT).

Read only

0 Likes
974

How long is the range of dates between p_erdat1 and p_erdat2. There is an index on this field, so that should help.

On the other hand, maybe it doesn't like the BETWEEN. Have you tried:


  SELECT vbeln netwr vgbel FROM vbak
    INTO CORRESPONDING FIELDS OF TABLE zvbak
    WHERE erdat >= p_erdat1
      AND erdat <= p_erdat2 ....

Read only

0 Likes
974

THANKYOU gurus for the help

that solved my problem and learnt many things

Read only

0 Likes
974

Are you on 4.6C or 4.7. There is an index on ERDAT in 4.7.

Rob