Chamei ele de preguiçoso, mas não teve como, tive que ajudar o Horácio (braço-curto).
Vai que vc tb tem um amigo Horácio, então isso pode ajudá-lo.
Vou utilizar como exemplo nossa tabela ZSAPEIROS:
Criar visão de atualização para mesma. Grupo de funções ZGFSAPEIROS foi criado:
Buscar o nome do Programa de nosso Grupo de funções. Para isto, ir na SE80 com o grupo de funções criado, e clicar em Programa básico:
Veja como ficou agora o Grupo de funções. Veja que vários objetos foram adicionados:
Associar à interface criada, ou seja, iremos mudar a rotina standard pela individual:
No Status GUI EALX, crie o campo que dará ação no Importar o arquivo:
Após ativar todos os objetos do grupo, veja na SM30 que o botão já existe:
Agora é hora de dar ação no botão. Para isto crie o module ZIMPFILE dentro do PAI:
Duplo clique no módule, e basta copiar e colar o código abaixo:
*----------------------------------------------------------------------*
***INCLUDE LZGFSAPEIROSI01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module ZIMPFILE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE zimpfile INPUT.
DATA:
lv_subrc TYPE sy-subrc,
lv_tabix TYPE sy-tabix,
lt_filetable TYPE filetable,
wa_filetable TYPE file_table,
lv_filename TYPE string,
lt_zsapeiros TYPE TABLE OF zsapeiros,
wa_zsapeiros TYPE zsapeiros,
lt_data_tab TYPE table_of_strings,
wa_data_tab TYPE string.
IF function EQ 'IMPFILE'.
* Popup para escolher o arquivo à ser importado
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
file_filter = '(*.csv)|*.csv|(*.txt)|*.txt|'
CHANGING
file_table = lt_filetable
rc = lv_subrc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc IS INITIAL.
* Importar o arquivo
READ TABLE lt_filetable
INTO wa_filetable
INDEX 1.
IF sy-subrc IS INITIAL.
lv_filename = wa_filetable-filename.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = lv_filename
has_field_separator = ';'
CHANGING
data_tab = lt_data_tab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Passar valores importados para estrutura
LOOP AT lt_data_tab INTO wa_data_tab.
* Quebra linha importada nos campos da estrutura
SPLIT wa_data_tab
AT ';'
INTO wa_zsapeiros-matnr
wa_zsapeiros-maktx.
* Converte o campo material
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_zsapeiros-matnr
IMPORTING
output = wa_zsapeiros-matnr.
* Move os dados da estrutura pra view
'' = wa_zsapeiros.
PERFORM move_extract_to_view_wa.
lv_subrc = 8.
lv_tabix = lv_tabix + 1.
nextline = nextline + 1.
PERFORM check_key.
PERFORM nicht_vorhanden USING lv_subrc lv_tabix.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDMODULE. " ZIMPFILE INPUT
Agradecimentos ao "Amigo" Kazitoris