2008 May 28 6:23 AM
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.
2008 May 28 6:33 AM
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
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
2008 May 28 6:29 AM
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
2008 May 28 6:33 AM
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
2008 May 28 6:49 AM
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.
| User | Count |
|---|---|
| 6 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |