REPORT ZSAPeiros.
* Tabela qualquer, apenas para testar este código
DATA: BEGIN OF t_saida OCCURS 0,
codg(3) TYPE n,
desc(10) TYPE c,
END OF t_saida.
DATA: vl_call_mask(50) TYPE c,
vl_name_exp LIKE ibipparms-path,
vl_filename_exp TYPE string.
* Extenção do arquivo de saída
CONCATENATE ',Excel (*.xls),*.XLS;*.XLSX' ',Texto (*.txt),*.TXT.' INTO vl_call_mask.
* Popup para informar o local onde será gravado o arquivo
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = vl_name_exp
mask = vl_call_mask
mode = 'S' "S = Save, O = Open
IMPORTING
filename = vl_name_exp
EXCEPTIONS
inv_winsys = 04
no_batch = 08
selection_cancel = 12
selection_error = 16.
IF sy-subrc IS INITIAL.
vl_filename_exp = vl_name_exp.
* Popula tabela criada
t_saida-codg = '1'.
t_saida-desc = 'Um'.
APPEND t_saida.
t_saida-codg = '2'.
t_saida-desc = 'Dois'.
APPEND t_saida.
t_saida-codg = '3'.
t_saida-desc = 'Três'.
APPEND t_saida.
t_saida-codg = '4'.
t_saida-desc = 'Quatro'.
APPEND t_saida.
t_saida-codg = '5'.
t_saida-desc = 'Cinco'.
APPEND t_saida.
* Grava o arquivo no local informado
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = vl_filename_exp
write_field_separator = ';'
TABLES
data_tab = t_saida
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 'Gravado com sucesso!' TYPE 'S'.
ELSE.
MESSAGE 'Erro o gravar!' TYPE 'E'.
ENDIF.
ENDIF.
Conteúdo
Salvar arquivo com extensão definida (XLS, TXT ou N outra qualquer)
Quando necessário gravar um arquivo local, o ideal é deixar o usuário escolher o local de uma maneira mais "bonita", e não colocando aquele linguição fixo no parâmetro. O resultado deste código é um popup onde o usuário pode escolher o local a ser gravado o arquivo. Lembrando que este arquivo deverá ter a extensão TXT ou XLS. Pode ser feito para N outras extensões.