Skip to Content
0
Former Member
May 28, 2008 at 05:23 AM

performance

26 Views

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.