‎2008 May 20 10:46 AM
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...
‎2008 May 20 10:59 AM
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.
‎2008 May 20 11:46 AM
Hi,
Join Mara & marc and Makt into the first select statement using Inner join.
Shruthi