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

Former Member
0 Likes
528

Hi

Pls help me to improve the performance of the following code

************************************************************************

AT SELECTION-SCREEN.

************************************************************************

  • perform tcode_auth_check.

perform check_user_authority.

  • user requires Plant authority

perform check_plant_authorisation.

perform retrieve_client_id.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pcfile.

PERFORM get-file.

AT SELECTION-SCREEN

ON VALUE-REQUEST FOR p_vari.

PERFORM get_variant_list.

START-OF-SELECTION.

SELECT SINGLE * FROM z1ychclientid INTO it_z1ychclientid . "WHERE werks = p_werks.

IF sy-subrc = 0.

  • set the file name at runtime to prevent file over write

GET TIME.

  • set up the file names 'D:\PCCCPPPPXXX_YYYYMMDD_HHMMSS.XLS'.

REPLACE 'D:\' WITH it_z1ychclientid-lcdrive INTO p_pcfile.

REPLACE 'PCCCPPPP' WITH it_z1ychclientid-prefix INTO p_pcfile.

REPLACE 'YYYYMMDD' WITH sy-datum INTO p_pcfile.

REPLACE 'HHMMSS' WITH sy-uzeit INTO p_pcfile.

ENDIF.

PERFORM get_data.

IF p_extpc = 'X'.

PERFORM download_data_pc.

ENDIF.

PERFORM build_gi_fieldcatalog_detail.

PERFORM build_sort.

PERFORM build_layout.

PERFORM build_events.

PERFORM build_print_params.

PERFORM display_alv_report.

&----


*& Form GET_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_data.

SELECT matnr lvorm werks

FROM marc

INTO TABLE it_marc

WHERE matnr IN s_matnr

AND lvorm NE 'X'

AND werks = p_werks

AND mmsta IN s_mmsta

AND dispo IN s_dispo

AND beskz IN s_beskz

AND lgpro IN s_lgpro

AND lgfsb IN s_lgfsb.

if sy-subrc ne 0.

MESSAGE I408.

endif.

IF NOT it_marc[] IS INITIAL.

SELECT matnr vkorg scmng FROM

mvke INTO TABLE it_mvke

FOR ALL ENTRIES IN it_marc

WHERE matnr = it_marc-matnr

AND vkorg = p_vkorg.

SELECT mandt matnr meins laeda aenam

FROM mara

INTO TABLE it_mara

FOR ALL ENTRIES IN it_mvke

WHERE matnr = it_mvke-matnr

AND mtart IN s_mtart.

SELECT matnr maktx

FROM makt

INTO TABLE it_makt

FOR ALL ENTRIES IN it_mara

WHERE matnr = it_mara-matnr

AND spras = 'E'.

SELECT matnr zppqt zspqt zpmqt_3

INTO TABLE it_zmpkg

FROM zmpkg

FOR ALL ENTRIES IN it_mara

WHERE matnr = it_mara-matnr

AND werks = p_werks.

ENDIF.

LOOP AT it_mara.

it_material-mandt = it_mara-mandt.

it_material-matnr = it_mara-matnr.

it_material-meins = it_mara-meins.

it_material-laeda = it_mara-laeda.

it_material-aenam = it_mara-aenam.

it_material-date = sy-datum.

it_material-time = sy-uzeit.

it_material-user = sy-uname.

it_material-file = p_pcfile.

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

EXPORTING

input = it_material-meins

IMPORTING

output = it_material-meins.

READ TABLE it_marc WITH KEY matnr = it_mara-matnr.

IF sy-subrc EQ 0.

it_material-werks = it_marc-werks.

ENDIF.

READ TABLE it_makt WITH KEY matnr = it_mara-matnr.

IF sy-subrc EQ 0.

it_material-maktx = it_makt-maktx.

ENDIF.

READ TABLE it_zmpkg WITH KEY matnr = it_mara-matnr.

IF sy-subrc EQ 0.

it_material-zppqt = it_zmpkg-zppqt.

it_material-zspqt = it_zmpkg-zspqt.

it_material-zpmqt_3 = it_zmpkg-zpmqt_3.

ENDIF.

APPEND it_material.

CLEAR : it_material, it_marc, it_makt, it_zmpkg, it_mara.

ENDLOOP.

ENDFORM. " GET_DATA

&----


*& Form DOWNLOAD_DATA_PC

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM download_data_pc .

DATA: lv_filename TYPE string.

CLEAR lv_filename.

DATA : BEGIN OF t_header OCCURS 0,

name(40) TYPE c,

END OF t_header.

CLEAR t_header.

t_header-name = 'Client'.

APPEND t_header.

t_header-name = 'Plant Code'.

APPEND t_header.

t_header-name = 'Product Code'.

APPEND t_header.

t_header-name = 'Product Description'.

APPEND t_header.

t_header-name = 'Base UM'.

APPEND t_header.

t_header-name = 'Inner Pack'.

APPEND t_header.

t_header-name = 'Outer Pack'.

APPEND t_header.

t_header-name = 'Ship Pack'.

APPEND t_header.

t_header-name = 'Lst Upd Dt'.

APPEND t_header.

t_header-name = 'Lst Upd By'.

APPEND t_header.

t_header-name = 'Ext date'.

APPEND t_header.

t_header-name = 'Ext Time'.

APPEND t_header.

t_header-name = 'Ext By'.

APPEND t_header.

t_header-name = 'File Name'.

APPEND t_header.

MOVE p_pcfile TO lv_filename.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

filename = lv_filename

filetype = 'DBF'

write_field_separator = 'X'

  • IMPORTING

  • filelength = lv_file_len

TABLES

data_tab = it_material

fieldnames = t_header

EXCEPTIONS

file_write_error = 1

no_batch = 2

gui_refuse_filetransfer = 3

invalid_type = 4

no_authority = 5

unknown_error = 6

header_not_allowed = 7

separator_not_allowed = 8

filesize_not_allowed = 9

header_too_long = 10

dp_error_create = 11

dp_error_send = 12

dp_error_write = 13

unknown_dp_error = 14

access_denied = 15

dp_out_of_memory = 16

disk_full = 17

dp_timeout = 18

file_not_found = 19

dataprovider_exception = 20

control_flush_error = 21

OTHERS = 22.

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. " DOWNLOAD_DATA_PC

&----


*& Form BUILD_GI_FIELDCATALOG_DETAIL

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_gi_fieldcatalog_detail .

gi_fieldcatalog-fieldname = 'MANDT'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Client'.

gi_fieldcatalog-col_pos = 01.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'WERKS'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Plant Code'.

gi_fieldcatalog-col_pos = 02.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'MATNR'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Product Code'.

gi_fieldcatalog-lzero = ' '.

gi_fieldcatalog-col_pos = 03.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'MAKTX'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Product Description'.

gi_fieldcatalog-col_pos = 04.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'MEINS'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Base Unit of Measure'.

gi_fieldcatalog-col_pos = 05.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'ZPPQT'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Carton Pack Size(Inner)'.

gi_fieldcatalog-col_pos = 06.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'ZSPQT'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Carton Pack Size(Outer)'.

gi_fieldcatalog-col_pos = 07.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'ZPMQT_3'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Carton Pack Size(Ship)'.

gi_fieldcatalog-col_pos = 08.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'LAEDA'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'MM Last Update Date'.

gi_fieldcatalog-col_pos = 09.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'AENAM'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'MM Last Update By'.

gi_fieldcatalog-col_pos = 10.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'DATE'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Extracted Date'.

gi_fieldcatalog-col_pos = 11.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'TIME'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Extracted Time'.

gi_fieldcatalog-col_pos = 12.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'USER'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'Extracted By'.

gi_fieldcatalog-col_pos = 13.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

gi_fieldcatalog-fieldname = 'FILE'.

gi_fieldcatalog-tabname = 'IT_MATERIAL'.

gi_fieldcatalog-seltext_m = 'File Name'.

gi_fieldcatalog-col_pos = 14.

APPEND gi_fieldcatalog TO gi_fieldcatalog.

CLEAR gi_fieldcatalog.

ENDFORM. " BUILD_GI_FIELDCATALOG_DETAIL

&----


*& Form BUILD_SORT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_sort .

wa_sort-fieldname = 'WERKS'.

wa_sort-tabname = 'IT_MATERIAL'.

wa_sort-up = 'X'.

APPEND wa_sort TO it_sort.

CLEAR wa_sort.

ENDFORM. " BUILD_SORT

&----


*& Form BUILD_LAYOUT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_layout .

gi_layout-no_input = 'X'.

gi_layout-colwidth_optimize = 'X'.

gi_layout-totals_text = 'Totals'(301).

gi_layout-f2code = 'DISP'. "Sets fcode for when double

ENDFORM. " BUILD_LAYOUT

&----


*& Form BUILD_EVENTS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_events .

DATA: ls_event TYPE slis_alv_event.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

i_list_type = 0

IMPORTING

et_events = gi_events[].

READ TABLE gi_events WITH KEY name = slis_ev_end_of_page

INTO ls_event.

IF sy-subrc = 0.

MOVE 'END_OF_PAGE' TO ls_event-form.

APPEND ls_event TO gi_events.

ENDIF.

READ TABLE gi_events WITH KEY name = slis_ev_end_of_list

INTO ls_event.

IF sy-subrc = 0.

MOVE 'END_OF_LIST' TO ls_event-form.

APPEND ls_event TO gi_events.

ENDIF.

ENDFORM. " BUILD_EVENTS

&----


*& Form BUILD_PRINT_PARAMS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_print_params .

gi_prntparams-reserve_lines = '3'. "Lines reserved for footer

gi_prntparams-no_coverpage = 'X'.

ENDFORM. " BUILD_PRINT_PARAMS

&----


*& Form DISPLAY_ALV_REPORT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_alv_report .

gi_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = gi_repid

i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM

i_callback_user_command = 'USER_COMMAND'

i_grid_title = 'Material Master Item Detail'

is_layout = gi_layout

it_sort = it_sort[]

it_fieldcat = gi_fieldcatalog[]

  • it_special_groups = gd_tabgroup

it_events = gi_events

is_print = gi_prntparams

  • i_save = 'X'

  • is_variant = z_template

TABLES

t_outtab = it_material

EXCEPTIONS

program_error = 1

OTHERS = 2.

IF sy-subrc <> 0.

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

ENDIF.

ENDFORM. " DISPLAY_ALV_REPORT

----


*FORM top-of-page.

*

    • Program Title

  • lw_line-typ = 'H'.

  • lw_line-info = 'ITEM MASTER DATA'.

  • APPEND lw_line TO lw_header.

  • CLEAR lw_line.

*

**Displar Date.

  • lw_line-typ = 'S'.

  • lw_line-key = 'Date: '.

  • CONCATENATE sy-datum+6(2) '/'

  • sy-datum+4(2) '/'

  • sy-datum(4) INTO lw_line-info. "todays date

  • APPEND lw_line TO lw_header.

  • CLEAR: lw_line.

*

  • IF it_material[] IS NOT INITIAL.

  • DESCRIBE TABLE it_material LINES ld_lines.

  • ENDIF.

  • ld_linesc = ld_lines.

  • CONCATENATE 'Total No. of Records Selected: ' ld_linesc

  • INTO t_line SEPARATED BY space.

  • lw_line-typ = 'A'.

  • lw_line-info = t_line.

  • APPEND lw_line TO lw_header.

  • CLEAR: lw_line, t_line.

*

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

  • CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

  • EXPORTING

  • it_list_commentary = lw_header

  • i_logo = 'MX100RD'.

*ENDFORM. "top-of-page

----


FORM top-of-page.

CLEAR lw_header.

IF p_report = 'X'.

lw_line-typ = 'S'.

lw_line-key = text-018.

lw_line-info = text-009.

APPEND lw_line TO lw_header.

CLEAR lw_line.

ENDIF.

  • Program Title

lw_line-typ = 'H'.

lw_line-info = 'ITEM MASTER DATA'.

APPEND lw_line TO lw_header.

CLEAR lw_line.

*Displar Date.

lw_line-typ = 'S'.

lw_line-key = 'Date: '.

CONCATENATE sy-datum+6(2) '/'

sy-datum+4(2) '/'

sy-datum(4) INTO lw_line-info. "todays date

APPEND lw_line TO lw_header.

CLEAR: lw_line.

IF it_material[] IS NOT INITIAL.

DESCRIBE TABLE it_material LINES ld_lines.

ENDIF.

ld_linesc = ld_lines.

CONCATENATE 'Total No. of Records Selected: ' ld_linesc

INTO t_line SEPARATED BY space.

lw_line-typ = 'A'.

lw_line-info = t_line.

APPEND lw_line TO lw_header.

CLEAR: lw_line, t_line.

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

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

it_list_commentary = lw_header

i_logo = 'MX100RD'.

ENDFORM. "top-of-page

*----


FORM end_of_page.

DATA: listwidth TYPE i,

ld_pagepos(10) TYPE c,

ld_page(10) TYPE c.

WRITE: sy-uline(50).

SKIP.

WRITE:/40 'Page:', sy-pagno .

ENDFORM. "END_OF_PAGE

----


  • FORM alv_layout_init *

----


  • ........ *

----


  • --> rs_layout *

----


FORM alv_layout_init USING rs_layout TYPE slis_layout_alv.

*"Build layout for list display

rs_layout-detail_popup = 'X'.

ENDFORM.

*FORM get-file.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
502

SELECT matnr lvorm werks

FROM marc

INTO TABLE it_marc

WHERE matnr IN s_matnr

AND werks = p_werks (give proper flow in key

........................................fieldsmatner next werks)

and lvorm NE 'X'

AND mmsta IN s_mmsta

AND dispo IN s_dispo

AND beskz IN s_beskz

AND lgpro IN s_lgpro

AND lgfsb IN s_lgfsb.

create index for the field which ur using in where condition

use read ststement using binary search

if it is usefull Plz Reward

regards

Anbu

3 REPLIES 3
Read only

Former Member
0 Likes
502

sort these tables by matnr

it_marc

it_makt

it_zmpkg

And use Binary Search while reading this will improve the performance of your program,

You can check it in t-code SE30.

Reward points if helpful

Regards

Bikas

Read only

Former Member
0 Likes
503

SELECT matnr lvorm werks

FROM marc

INTO TABLE it_marc

WHERE matnr IN s_matnr

AND werks = p_werks (give proper flow in key

........................................fieldsmatner next werks)

and lvorm NE 'X'

AND mmsta IN s_mmsta

AND dispo IN s_dispo

AND beskz IN s_beskz

AND lgpro IN s_lgpro

AND lgfsb IN s_lgfsb.

create index for the field which ur using in where condition

use read ststement using binary search

if it is usefull Plz Reward

regards

Anbu

Read only

Former Member
0 Likes
502

See i have modified the code....

IF NOT it_marc[] IS INITIAL.

SELECT matnr vkorg scmng FROM

mvke INTO TABLE it_mvke

FOR ALL ENTRIES IN it_marc

WHERE matnr = it_marc-matnr

AND vkorg = p_vkorg.

IF NOT it_mvke[] IS INITIAL.

SELECT mandt matnr meins laeda aenam

FROM mara

INTO TABLE it_mara

FOR ALL ENTRIES IN it_mvke

WHERE matnr = it_mvke-matnr

AND mtart IN s_mtart.

endif.

IF NOT it_mara[] IS INITIAL.

SELECT matnr maktx

FROM makt

INTO TABLE it_makt

FOR ALL ENTRIES IN it_mara

WHERE matnr = it_mara-matnr

AND spras = 'E'.

SELECT matnr zppqt zspqt zpmqt_3

INTO TABLE it_zmpkg

FROM zmpkg

FOR ALL ENTRIES IN it_mara

WHERE matnr = it_mara-matnr

AND werks = p_werks.

endif.

ENDIF.

sort it_marc by matnr.

sort it_makt by matnr.

sort it_zmpkg by matnr.

LOOP AT it_mara.

it_material-mandt = it_mara-mandt.

it_material-matnr = it_mara-matnr.

it_material-meins = it_mara-meins.

it_material-laeda = it_mara-laeda.

it_material-aenam = it_mara-aenam.

it_material-date = sy-datum.

it_material-time = sy-uzeit.

it_material-user = sy-uname.

it_material-file = p_pcfile.

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

EXPORTING

input = it_material-meins

IMPORTING

output = it_material-meins.

READ TABLE it_marc WITH KEY matnr = it_mara-matnr.

IF sy-subrc EQ 0.

it_material-werks = it_marc-werks.

ENDIF.

READ TABLE it_makt WITH KEY matnr = it_mara-matnr.

IF sy-subrc EQ 0.

it_material-maktx = it_makt-maktx.

ENDIF.

READ TABLE it_zmpkg WITH KEY matnr = it_mara-matnr.

IF sy-subrc EQ 0.

it_material-zppqt = it_zmpkg-zppqt.

it_material-zspqt = it_zmpkg-zspqt.

it_material-zpmqt_3 = it_zmpkg-zpmqt_3.

ENDIF.

APPEND it_material.

CLEAR : it_material, it_marc, it_makt, it_zmpkg, it_mara.

ENDLOOP.

ENDFORM. " GET_DATA

Hope it will improve your report performance.

Regards,

Madan.