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 Member
0 Likes
463

Hi gurus,

Please check my below code, and give me any valuble suggestions to improve performance.

In runtime analysis , the graph shows , in system it is in red, So please suggest me the performance issues.

REPORT zan_warehouse_stock.

*- Tables Declarartion

TABLES: mara,t001l,t134,t023,t024.

*- Type Pool Declaration.

TYPE-POOLS: slis.

*----


*

  • Structures

*----


*- Structure for Mara

TYPES:BEGIN OF gty_mara,

matnr TYPE mara-matnr,

mtart TYPE mara-mtart,

matkl TYPE mara-matkl,

meins TYPE mara-meins,

END OF gty_mara,

*- Structure for Marc

BEGIN OF gty_marc,

matnr TYPE marc-matnr,

ekgrp TYPE marc-ekgrp,

END OF gty_marc,

*- Structure for Mard

BEGIN OF gty_mard,

matnr TYPE mard-matnr,

werks TYPE mard-werks,

lgort TYPE mard-lgort,

labst TYPE mard-labst,

  • meins TYPE mard-meins,

END OF gty_mard,

*- Structure for Makt

BEGIN OF gty_makt,

matnr TYPE makt-matnr,

maktx TYPE makt-maktx,

END OF gty_makt,

*- Structure for Vbbs

BEGIN OF gty_vbbs,

matnr TYPE vbbs-matnr,

werks TYPE vbbs-werks,

lgort TYPE vbbs-lgort,

omeng TYPE vbbs-omeng,

END OF gty_vbbs,

*- Structure for Final internal Table

BEGIN OF gty_final,

werks TYPE mard-werks,

matnr TYPE mara-matnr,

maktx TYPE makt-maktx,

meins TYPE mara-meins,

balan TYPE mard-labst,

labst TYPE mard-labst,

omeng TYPE vbbs-omeng,

lgort TYPE mard-lgort,

ekgrp TYPE marc-ekgrp,

matkl TYPE mara-matkl,

mtart TYPE mara-mtart,

END OF gty_final.

*----


*

  • Internal Table and Work Areas Declaration

*

*----


DATA:

*- Internal Tables for Structures

gt_mara TYPE STANDARD TABLE OF gty_mara,

gt_marc TYPE STANDARD TABLE OF gty_marc,

gt_mard TYPE STANDARD TABLE OF gty_mard,

gt_makt TYPE STANDARD TABLE OF gty_makt,

gt_vbbs TYPE STANDARD TABLE OF gty_vbbs," WITH UNIQUE KEY matnr werks lgort,

gt_vbbs1 TYPE STANDARD TABLE OF gty_vbbs,

gt_final TYPE STANDARD TABLE OF gty_final,

*- Internal table for Fieldcatalog

gt_fieldcat TYPE slis_t_fieldcat_alv,

*- Internal table for Sort catalog

gt_sortcat TYPE slis_t_sortinfo_alv,

*- Work areas for Structures

gs_mara TYPE gty_mara,

gs_marc TYPE gty_marc,

gs_mard TYPE gty_mard,

gs_makt TYPE gty_makt,

gs_vbbs TYPE gty_vbbs,

gs_vbbs1 TYPE gty_vbbs,

gs_final TYPE gty_final,

*- Work area for Fieldcatalog

gs_fieldcat TYPE slis_fieldcat_alv,

*- Work area for Sortcatalog

gs_sortcat TYPE slis_sortinfo_alv,

*- Work area for Layout

gs_layout TYPE slis_layout_alv.

*data:gv_matnr like mara-matnr,

  • gv_werks like t001l-werks,

  • gv_lgort like t001l-lgort,

  • gv_mtart like t134-mtart,

  • gv_matkl like t023-matkl,

  • gv_ekgrp like t024-ekgrp.

*----


*

  • Selection Screen

*

*----


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:so_matnr FOR mara-matnr," MEMORY ID mat MATCHCODE OBJECT mat1,

so_werks FOR t001l-werks," MEMORY ID wrk,

so_lgort FOR t001l-lgort." MEMORY ID lag.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.

SELECT-OPTIONS:so_mtart FOR t134-mtart,

so_matkl FOR t023-matkl,

so_ekgrp FOR t024-ekgrp.

SELECTION-SCREEN END OF BLOCK b2.

selection-screen begin of block b3 with frame title text-014.

parameters: neg_st as checkbox,

bat_st as checkbox,

zero_st as checkbox,

dis_val as checkbox.

selection-screen end of block b3.

*----


*

  • Selection Screen Validations

*

*----


AT SELECTION-SCREEN.

*- Form declaration for Screen Validation

PERFORM screen_validations.

*- Form Declaration for Authorization.

PERFORM authority_data.

*----


*

  • Start of Selection

*

*----


START-OF-SELECTION.

*- Form declaration for Selection Data

PERFORM get_data.

*- Form definition for Arranging data into final Table

PERFORM format_data.

*----


*

  • End of Selection

*

*----


END-OF-SELECTION.

*- Form Declaration for Field Catalog

PERFORM field_catalog.

*- Form Declaration for Sort Catalog

PERFORM build_sortcat.

gs_layout-zebra = 'X'.

gs_layout-colwidth_optimize = 'X'.

*- Form Declaration for Displaying Alv Grid

PERFORM display_alv.

&----


*& Form SCREEN_VALIDATIONS

&----


  • Form Definition for Screen Validations.

----


FORM screen_validations .

*- Local variable Declarations

DATA:ls_mara TYPE mara,

ls_plant TYPE marc,

ls_sloc TYPE t001l,

ls_mtart TYPE t134,

ls_maktl TYPE t023,

ls_ekgrp TYPE t024.

*- validation on Material Number

IF so_matnr[] IS NOT INITIAL.

SELECT SINGLE matnr

FROM mara

INTO ls_mara

WHERE matnr IN so_matnr.

IF sy-subrc NE 0.

SET CURSOR FIELD 'SO_MATNR_LOW'.

MESSAGE e001(zwhsmsg)." WITH 'Material ' so_MATNR-low 'is incorrect, Please enter correct'.

ENDIF.

ENDIF.

*- validation on Plant

IF so_werks[] IS NOT INITIAL.

SELECT SINGLE werks

FROM marc

INTO ls_plant

WHERE werks IN so_werks.

IF sy-subrc NE 0.

SET CURSOR FIELD 'SO_WERKS_LOW'.

MESSAGE e002(zwhsmsg)." WITH 'Plant' so_werks-low ' is incorrect, Please enter Correct'.

ENDIF.

ENDIF.

*- Validation on Sloc.

IF so_lgort[] IS NOT INITIAL.

SELECT SINGLE lgort

FROM t001l

INTO ls_sloc

WHERE lgort IN so_lgort.

IF sy-subrc NE 0.

SET CURSOR FIELD 'SO_LGORT-LOW'.

MESSAGE e003(zwhsmsg)." WITH 'Sloc' so_lgort-low ' is incorrect, Please enter correct'.

ENDIF.

ENDIF.

*- Validation on Material Type.

IF so_mtart[] IS NOT INITIAL.

SELECT SINGLE mtart

FROM t134

INTO ls_mtart

WHERE mtart IN so_mtart.

IF sy-subrc NE 0.

SET CURSOR FIELD 'SO_MTART-LOW'.

MESSAGE e004(zwhsmsg)." WITH 'Material type' so_mtart-low ' is incorrect, Please enter corret'.

ENDIF.

ENDIF.

*- Validation on Material Group.

IF so_matkl[] IS NOT INITIAL.

SELECT SINGLE matkl

FROM t023

INTO ls_maktl

WHERE matkl IN so_matkl.

IF sy-subrc NE 0.

SET CURSOR FIELD 'SO_MATKL-LOW'.

MESSAGE e005(zwhsmsg)." WITH 'Materail Group' so_matkl-low 'is incorrect, Please enter correct'.

ENDIF.

ENDIF.

*- Validation on Purchasing Group.

IF so_ekgrp[] IS NOT INITIAL.

SELECT SINGLE ekgrp

FROM t024

INTO ls_ekgrp

WHERE ekgrp IN so_ekgrp.

IF sy-subrc NE 0.

SET CURSOR FIELD 'SO_EKGRP-LOW'.

MESSAGE e006(zwhsmsg)." WITH 'Purchasing Group' so_ekgrp-low 'is incorrect, Please enter correct'.

ENDIF.

ENDIF.

ENDFORM. " SCREEN_VALIDATIONS

&----


*& Form GET_DATA

&----


  • Form definition for Selecting Data

----


FORM get_data .

IF gt_mara IS INITIAL.

SELECT matnr

matkl

mtart

meins

FROM mara

INTO TABLE gt_mara

WHERE matnr IN so_matnr

AND mtart IN so_mtart

AND matkl IN so_matkl.

IF sy-subrc NE 0.

MESSAGE s007(zwhsmsg)." WITH 'No data Found'.

leave list-processing.

ELSE.

SORT gt_mara BY matnr.

ENDIF.

ENDIF.

IF NOT gt_mara IS INITIAL.

SELECT matnr

ekgrp

FROM marc

INTO TABLE gt_marc

FOR ALL ENTRIES IN gt_mara

WHERE matnr = gt_mara-matnr

AND ekgrp IN so_ekgrp.

IF sy-subrc EQ 0.

SORT gt_marc BY matnr.

ELSE.

  • LEAVE SCREEN.

MESSAGE s008(zwhsmsg). "with 'No stock Exist for specified data'.

leave list-processing.

ENDIF.

if zero_st eq 'X' and neg_st eq 'X'.

select matnr

werks

lgort

labst

from mard

into table gt_mard

for all entries in gt_mara

where matnr = gt_mara-matnr

and werks in so_werks

and lgort in so_lgort

and labst gt 0.

if sy-subrc eq 0.

sort gt_mard by matnr.

else.

message s008(zwhsmsg). "With no stock exist for specified data'.

leave list-processing.

endif.

elseif zero_st eq 'X'.

select matnr

werks

lgort

labst

from mard

into table gt_mard

for all entries in GT_mara

where matnr = gt_mara-matnr

and werks in so_werks

and lgort in so_lgort

and labst ne 0.

if sy-subrc eq 0.

sort gt_mard by matnr.

else.

message s008(zwhsmsg). "With no stock exist for specified data'.

leave list-processing.

endif.

elseif neg_st eq 'X'.

select matnr

werks

lgort

labst

from mard

into table gt_mard

for all entries in gt_mara

where matnr = gt_mara-matnr

and werks in so_werks

and lgort in so_lgort

and labst lt 0.

if sy-subrc eq 0.

sort gt_mard by matnr.

else.

message s008(zwhsmsg). "With no stock exist for specified data'.

leave list-processing.

endif.

else.

SELECT matnr

werks

lgort

labst

FROM mard

INTO TABLE gt_mard

FOR ALL ENTRIES IN gt_mara

WHERE matnr = gt_mara-matnr

AND werks IN so_werks

AND lgort IN so_lgort.

IF sy-subrc EQ 0.

SORT gt_mard BY matnr.

ELSE.

MESSAGE s008(zwhsmsg). "with 'No stock Exist for specified data'.

leave list-processing.

ENDIF.

endif.

SELECT matnr

maktx

FROM makt

INTO TABLE gt_makt

FOR ALL ENTRIES IN gt_mara

WHERE matnr = gt_mara-matnr.

IF sy-subrc EQ 0.

SORT gt_makt BY matnr.

ELSE.

MESSAGE s008(zwhsmsg). "with 'No stock Exist for specified data'.

leave list-processing.

ENDIF.

SELECT matnr

werks

lgort

omeng

FROM vbbs

INTO TABLE gt_vbbs

WHERE matnr IN so_matnr

AND werks IN so_werks

AND lgort IN so_lgort.

IF sy-subrc EQ 0.

SORT gt_vbbs BY matnr.

ENDIF.

ENDIF.

ENDFORM. " GET_DATA

&----


*& Form FORMAT_DATA

&----


  • Form Definition for Arranging data into final Table

----


FORM format_data .

LOOP AT gt_vbbs INTO gs_vbbs.

gs_vbbs1 = gs_vbbs.

COLLECT gs_vbbs1 INTO gt_vbbs1.

CLEAR gs_vbbs1.

ENDLOOP.

LOOP AT gt_mard INTO gs_mard.

READ TABLE gt_mara INTO gs_mara WITH KEY matnr = gs_mard-matnr BINARY SEARCH.

IF sy-subrc EQ 0.

READ TABLE gt_marc INTO gs_marc WITH KEY matnr = gs_mard-matnr BINARY SEARCH.

IF sy-subrc EQ 0.

READ TABLE gt_makt INTO gs_makt WITH KEY matnr = gs_mard-matnr BINARY SEARCH.

IF sy-subrc EQ 0.

gs_final-werks = gs_mard-werks.

gs_final-lgort = gs_mard-lgort.

gs_final-labst = gs_mard-labst.

gs_final-matnr = gs_mara-matnr.

gs_final-meins = gs_mara-meins.

gs_final-matkl = gs_mara-matkl.

gs_final-mtart = gs_mara-mtart.

gs_final-ekgrp = gs_marc-ekgrp.

gs_final-maktx = gs_makt-maktx.

LOOP AT gt_vbbs1 INTO gs_vbbs1 WHERE matnr = gs_mard-matnr

AND werks = gs_mard-werks

AND lgort = gs_mard-lgort.

gs_final-omeng = gs_vbbs1-omeng.

ENDLOOP.

gs_final-balan = gs_mard-labst - gs_final-omeng.

APPEND gs_final TO gt_final.

CLEAR gs_final.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

ENDFORM. " FORMAT_DATA

&----


*& Form FIELD_CATALOG

&----


  • Form Definition for Field Catalog

----


FORM field_catalog .

gs_fieldcat-fieldname = 'WERKS'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-003.

gs_fieldcat-col_pos = 1.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'MATNR'.

gs_fieldcat-tabname = 'GT_FINAL'.

gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-004.

gs_fieldcat-col_pos = 2.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'MAKTX'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '2'.

gs_fieldcat-seltext_l = text-005.

gs_fieldcat-col_pos = 3.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'MEINS'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-006.

gs_fieldcat-col_pos = 4.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'BALAN'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-007.

gs_fieldcat-qfieldname = 'MEINS'.

gs_fieldcat-col_pos = 5.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'LABST'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-008.

gs_fieldcat-qfieldname = 'MEINS'.

gs_fieldcat-col_pos = 6.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'OMENG'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-009.

gs_fieldcat-qfieldname = 'MEINS'.

gs_fieldcat-col_pos = 7.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'LGORT'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-010.

gs_fieldcat-col_pos = 8.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'EKGRP'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-011.

gs_fieldcat-col_pos = 9.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'MATKL'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-012.

gs_fieldcat-col_pos = 10.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

gs_fieldcat-fieldname = 'MTART'.

gs_fieldcat-tabname = 'GT_FINAL'.

  • gs_fieldcat-key = '1'.

gs_fieldcat-seltext_l = text-013.

gs_fieldcat-col_pos = 11.

APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.

ENDFORM. " FIELD_CATALOG

&----


*& Form BUILD_SORTCAT

&----


  • Form Definition for Sort Catalog

----


FORM build_sortcat .

gs_sortcat-spos = 1.

gs_sortcat-fieldname = 'MATNR'.

gs_sortcat-up = 'X'.

APPEND gs_sortcat TO gt_sortcat.

CLEAR gs_sortcat.

ENDFORM. " BUILD_SORTCAT

&----


*& Form DISPLAY_ALV

&----


  • Form Definition for Displaying ALV

----


FORM display_alv .

IF NOT gt_final IS INITIAL.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

i_callback_program = sy-repid

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

  • I_CALLBACK_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 =

is_layout = gs_layout

it_fieldcat = gt_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

it_sort = gt_sortcat

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

  • IT_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

  • I_HTML_HEIGHT_TOP = 0

  • I_HTML_HEIGHT_END = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • IR_SALV_FULLSCREEN_ADAPTER =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = gt_final.

  • EXCEPTIONS

  • program_error = 1

  • OTHERS = 2 .

ELSE.

MESSAGE i000(zwhsmsg)." WITH 'No data Found'.

ENDIF.

ENDFORM. " DISPLAY_ALV

&----


*& Form AUTHORITY_DATA

&----


  • form definition for Authorizations

----


FORM authority_data .

AUTHORITY-CHECK OBJECT 'M_BEST_EKG'

ID 'ACTVT' FIELD '03'

ID 'EKGRP' FIELD so_ekgrp-low.

IF sy-subrc NE 0.

MESSAGE e009(zwhsmsg)." WITH 'You are not authorised'.

ENDIF.

ENDFORM. " AUTHORITY_DATA

Thanks in Advance..

Thanks and Regards

Siri...

2 REPLIES 2
Read only

Former Member
0 Likes
391

Hi,

try it as follows.

1st select querry.....

IF so_matnr[] IS NOT INITIAL.

SELECT matnr

FROM mara

INTO gt_mara

WHERE matnr IN so_matnr.

since ur select option so_matnr will be having one or more values...........if u write select single it will selct only one record from the table at a time...........so what ever u want from one table u should get all those at a time.

all ur select querries are like that that only...please change them as about

in perform get data also ur hitting the database table again.......so do one thing.......

in validation perform itself get whatever data u want......

i think this helpfull to u,

kk.

Read only

Former Member
0 Likes
391

Hi,

Join Mara & marc and Makt into the first select statement using Inner join.

Shruthi