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.