Conteúdo
Procurar/Localizar por conteúdo
Google? kkkkkkkkkkkkkkkkkkkkkk #SQN
A questão é simples: Como encontrar um conteúdo/texto específico dentro de programas SAP?
A transação mágica é a EWK1 ou o programa RS_ABAP_SOURCE_SCAN, ambos intuitivos e não requerem explicações.
Quebra de linha via código utilizando ASCII
Pular linha é fácil né? É só dar Enter. Tá bom, então tenta fazer isto concatenando variáveis.
REPORT ZSAPeiros.
TYPES:
BEGIN OF ty_data,
linha(20) TYPE c,
END OF ty_data.
DATA:
gt_data TYPE TABLE OF ty_data,
wa_data TYPE ty_data,
lv_string TYPE string,
lv_pula TYPE string.
lv_pula = cl_abap_conv_in_ce=>uccp( '000A' ). "CÓDIGO ASCII DO PULO DE LINHA
CONCATENATE '1' lv_pula '2' lv_pula '3' INTO lv_string.
wa_data-linha = lv_string.
APPEND wa_data TO gt_data.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = 'C:\PULOLINHA.txt'
CHANGING
data_tab = gt_data
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
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
* ABRA NO NOTEPAD++ O ARQUIVO GERADO
Copiar arquivo entre Unix e Local, e também eliminar
Já precisou copiar aquele arquivo para o servidor para testar seu desenvolvimento né? Ou então enviar um arquivo para o servidor. Pois bem, este código faz isto, e ainda por cima também elimina, converte em texto ou binário, manda de Unix para Local, Local para Unix, Unix para Unix. Tudo isto e mais um pouco.
REPORT ZSAPeiros.
*********************************************************************************
* COPIAR ARQUIVOS DO UNIX PARA LOCAL E VICE-VERSA
*********************************************************************************
*&---------------------------------------------------------------------*
* Tela de seleção
*&---------------------------------------------------------------------*
PARAMETERS: p_origem LIKE rlgrap-filename OBLIGATORY,
p_destin LIKE rlgrap-filename OBLIGATORY,
p_get RADIOBUTTON GROUP g0,
p_put RADIOBUTTON GROUP g0,
p_unix RADIOBUTTON GROUP g0,
p_deleta AS CHECKBOX,
p_tex RADIOBUTTON GROUP g1,
p_bin RADIOBUTTON GROUP g1.
*&---------------------------------------------------------------------*
*Initialization
*&---------------------------------------------------------------------*
INITIALIZATION.
%_p_origem_%_app_%-text = 'Arquivo de Origem'.
%_p_destin_%_app_%-text = 'Arquivo de Destino'.
%_p_get_%_app_%-text = 'Copiar do UNIX para PC'.
%_p_put_%_app_%-text = 'Copiar do PC para o UNIX'.
%_p_unix_%_app_%-text = 'Copiar do UNIX para UNIX'.
%_p_deleta_%_app_%-text = 'Deletar Arquivo Origem'.
%_p_tex_%_app_%-text = 'Arquivo Texto'.
%_p_bin_%_app_%-text = 'Arquivo Binário'.
*&---------------------------------------------------------------------*
* Tabelas Internas
*&---------------------------------------------------------------------*
DATA: tg_file(1200) TYPE c OCCURS 0 WITH HEADER LINE.
*&---------------------------------------------------------------------*
* Variáveis
*&---------------------------------------------------------------------*
DATA: vg_filename TYPE string,
vg_texto(100) type c.
*&---------------------------------------------------------------------*
*Start-of-selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
IF p_get = 'X'.
PERFORM get_unix. "Copiar do UNIX para o Local
ELSEIF p_unix = 'X'.
PERFORM move_unix. "Copiar do UNIX para o UNIX
ELSE.
PERFORM put_unix. "Copiar do Local para o UNIX
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_unix
*&---------------------------------------------------------------------*
FORM get_unix.
clear vg_filename.
vg_filename = p_destin.
IF p_tex = 'X'.
OPEN DATASET p_origem FOR INPUT IN TEXT MODE ENCODING DEFAULT.
ELSE.
OPEN DATASET p_origem FOR INPUT IN BINARY MODE.
ENDIF.
IF sy-subrc NE 0.
WRITE: / 'Erro na abertura do arquivo UNIX'.
EXIT.
ENDIF.
DO.
READ DATASET p_origem INTO tg_file.
IF sy-subrc NE 0.
EXIT.
ENDIF.
APPEND tg_file.
ENDDO.
CLOSE DATASET p_origem.
CHECK sy-subrc = 0.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = vg_filename
filetype = 'ASC'
TABLES
data_tab = tg_file
EXCEPTIONS
OTHERS = 8.
IF sy-subrc NE 0.
WRITE: / 'Erro no Download do arquivo local'.
ELSE.
WRITE: / 'Transferência p/o Local executada com sucesso!'.
IF p_deleta = 'X'.
DELETE DATASET p_origem.
IF NOT sy-subrc IS INITIAL.
WRITE: / 'Erro ao deletar Arquivo Origem!'.
ELSE.
WRITE: / 'Arquivo Origem deletado com sucesso!'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "get_unix
*&---------------------------------------------------------------------*
*& Form put_unix
*&---------------------------------------------------------------------*
FORM put_unix.
clear vg_filename.
vg_filename = p_origem.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = vg_filename
filetype = 'ASC'
TABLES
data_tab = tg_file
EXCEPTIONS
OTHERS = 8.
IF sy-subrc NE 0.
WRITE: / 'Erro no Upload do arquivo local'.
EXIT.
ENDIF.
IF p_tex = 'X'.
OPEN DATASET p_destin FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
ELSE.
OPEN DATASET p_destin FOR OUTPUT IN BINARY MODE.
ENDIF.
IF sy-subrc NE 0.
WRITE: / 'Erro na abertura do arquivo UNIX'.
EXIT.
ENDIF.
LOOP AT tg_file.
TRANSFER tg_file TO p_destin.
ENDLOOP.
CLOSE DATASET p_destin.
WRITE: / 'Transferência p/o UNIX executada com sucesso!'.
ENDFORM. "put_unix
*&---------------------------------------------------------------------*
*& Form move_unix
*&---------------------------------------------------------------------*
FORM move_unix.
OPEN DATASET p_origem FOR INPUT IN TEXT MODE ENCODING DEFAULT.
clear vg_texto(100).
IF sy-subrc NE 0.
CONCATENATE 'Erro na abertura do arquivo:' p_origem
INTO vg_texto SEPARATED BY space.
WRITE:/ vg_texto COLOR COL_NEGATIVE INTENSIFIED OFF.
EXIT.
ENDIF.
OPEN DATASET p_destin FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
CONCATENATE 'Erro na abertura do arquivo:' p_destin
INTO vg_texto SEPARATED BY space.
WRITE:/ vg_texto COLOR COL_NEGATIVE INTENSIFIED OFF.
EXIT.
ENDIF.
WHILE sy-subrc EQ 0.
READ DATASET p_origem INTO tg_file.
IF sy-subrc EQ 0.
TRANSFER tg_file TO p_destin.
ENDIF.
ENDWHILE.
CLOSE DATASET p_origem.
IF sy-subrc EQ 0.
IF NOT p_deleta IS INITIAL.
DELETE DATASET p_origem.
ENDIF.
CONCATENATE 'O arquivo' p_origem 'foi movido para' p_destin
INTO vg_texto SEPARATED BY space.
WRITE:/ vg_texto COLOR COL_POSITIVE INTENSIFIED OFF.
ENDIF.
CLOSE DATASET p_destin.
ENDFORM. "move_unix
Comparação do conteúdo de 2 arquivos
Digamos que você vez fez performane num programa que gera um relatório ou tem uma tabela de saída, e agora você precisa comparar o conteúdo, para ver se o resultado final é o mesmo. Está desenhado para comparar arquivos excel e texto. Informa quais são as linhas que estão diferentes e ainda gera um arquivo contendo apenas o que ficou diferente.
REPORT ZSAPeiros.
TYPES: BEGIN OF ty_file,
line TYPE string,
cont(10) TYPE n,
END OF ty_file,
BEGIN OF ty_file_fim,
line TYPE string,
END OF ty_file_fim,
BEGIN OF ty_file_aux,
cont(10) TYPE c,
line TYPE string,
END OF ty_file_aux.
DATA: lv_hora_ini TYPE sy-uzeit,
lv_hora_fim TYPE sy-uzeit,
lv_hora TYPE sy-uzeit,
lv_cont(8) TYPE c,
lv_cont1(8) TYPE c,
lv_cont2(8) TYPE c,
lv_text(5000) TYPE c,
lv_filetype(10) TYPE c,
lv_filename(30) TYPE c,
lv_name_exp_srt TYPE string.
DATA: gt_file1 TYPE TABLE OF ty_file WITH HEADER LINE.
DATA: gt_file1_xls TYPE TABLE OF ty_file_aux WITH HEADER LINE.
DATA: gt_file1_xls_exp TYPE TABLE OF ty_file_fim WITH HEADER LINE.
DATA: gt_file2 TYPE TABLE OF ty_file WITH HEADER LINE.
DATA: gt_file2_xls TYPE TABLE OF ty_file_aux WITH HEADER LINE.
DATA: gt_file2_xls_exp TYPE TABLE OF ty_file_fim WITH HEADER LINE.
DATA: lv_call_mask(50) TYPE c,
lv_name_exp TYPE ibipparms-path.
************************************************************************
PARAMETERS: p_file1 TYPE string OBLIGATORY,
p_file2 TYPE string OBLIGATORY.
************************************************************************
INITIALIZATION.
CLEAR lv_call_mask.
CONCATENATE ',Excel (*.xls),*.XLS;*.XLSX' ',Texto (*.txt),*.TXT.'
INTO lv_call_mask.
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = space
mask = lv_call_mask
mode = 'O'
IMPORTING
filename = lv_name_exp
EXCEPTIONS
inv_winsys = 04
no_batch = 08
selection_cancel = 12
selection_error = 16.
p_file1 = lv_name_exp.
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file2.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = space
mask = lv_call_mask
mode = 'O'
IMPORTING
filename = lv_name_exp
EXCEPTIONS
inv_winsys = 04
no_batch = 08
selection_cancel = 12
selection_error = 16.
p_file2 = lv_name_exp.
************************************************************************
END-OF-SELECTION.
lv_hora_ini = sy-uzeit.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file1
TABLES
data_tab = gt_file1.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file2
TABLES
data_tab = gt_file2.
************************************************************************
LOOP AT gt_file1.
gt_file1-cont = sy-tabix.
MODIFY gt_file1 INDEX sy-tabix.
ENDLOOP.
LOOP AT gt_file2.
gt_file2-cont = sy-tabix.
MODIFY gt_file2 INDEX sy-tabix.
ENDLOOP.
SORT: gt_file1 BY line,
gt_file2 BY line.
************************************************************************
LOOP AT gt_file1.
READ TABLE gt_file2 WITH KEY line = gt_file1-line BINARY SEARCH.
IF sy-subrc IS NOT INITIAL.
lv_cont1 = lv_cont1 + 1.
CONDENSE lv_cont1 NO-GAPS.
gt_file1_xls-cont = gt_file1-cont.
gt_file1_xls-line = gt_file1-line.
APPEND gt_file1_xls.
ENDIF.
ENDLOOP.
LOOP AT gt_file2.
READ TABLE gt_file1 WITH KEY line = gt_file2-line BINARY SEARCH.
IF sy-subrc IS NOT INITIAL.
lv_cont2 = lv_cont2 + 1.
CONDENSE lv_cont2 NO-GAPS.
gt_file2_xls-cont = gt_file2-cont.
gt_file2_xls-line = gt_file2-line.
APPEND gt_file2_xls.
ENDIF.
ENDLOOP.
************************************************************************
SORT: gt_file1_xls BY cont,
gt_file2_xls BY cont.
************************************************************************
CLEAR lv_text.
CONCATENATE sy-vline
'TEM NO ARQUIVO ARQUIVO'
p_file1
'E NÃO TEM NO ARQUIVO'
p_file2
INTO lv_text SEPARATED BY space.
WRITE: / lv_text COLOR COL_HEADING.
WRITE: / sy-uline.
LOOP AT gt_file1_xls.
gt_file1_xls_exp-line = gt_file1_xls-line.
APPEND gt_file1_xls_exp.
IF sy-tabix = 1.
CLEAR lv_text.
lv_text+0(1) = sy-vline.
lv_text+2(10) = 'Linha'.
lv_text+13(1) = sy-vline.
lv_text+15 = 'Valor da linha'.
WRITE: / lv_text COLOR COL_GROUP INTENSIFIED OFF.
WRITE: / sy-uline.
ENDIF.
CLEAR lv_text.
lv_text+0(1) = sy-vline.
lv_text+2(10) = gt_file1_xls-cont.
lv_text+13(1) = sy-vline.
lv_text+15 = gt_file1_xls-line.
WRITE: / lv_text COLOR COL_HEADING INTENSIFIED OFF.
ENDLOOP.
************************************************************************
WRITE: / sy-uline.
CLEAR lv_text.
lv_text(1) = sy-vline.
WRITE: / lv_text COLOR COL_NEGATIVE INTENSIFIED.
WRITE: / sy-uline.
************************************************************************
CLEAR lv_text.
CONCATENATE sy-vline
'TEM NO ARQUIVO ARQUIVO'
p_file2
'E NÃO TEM NO ARQUIVO'
p_file1
INTO lv_text SEPARATED BY space.
WRITE: / lv_text COLOR COL_HEADING.
WRITE: / sy-uline.
LOOP AT gt_file2_xls.
gt_file2_xls_exp-line = gt_file2_xls-line.
APPEND gt_file2_xls_exp.
IF sy-tabix = 1.
CLEAR lv_text.
lv_text+0(1) = sy-vline.
lv_text+2(10) = 'Linha'.
lv_text+13(1) = sy-vline.
lv_text+15 = 'Valor da linha'.
WRITE: / lv_text COLOR COL_GROUP INTENSIFIED OFF.
WRITE: / sy-uline.
ENDIF.
CLEAR lv_text.
lv_text+0(1) = sy-vline.
lv_text+2(10) = gt_file2_xls-cont.
lv_text+13(1) = sy-vline.
lv_text+15 = gt_file2_xls-line.
WRITE: / lv_text COLOR COL_HEADING INTENSIFIED OFF.
ENDLOOP.
************************************************************************
WRITE: / sy-uline.
************************************************************************
* Linhas do arquivo 1
CONDENSE lv_cont1 NO-GAPS.
CLEAR lv_text.
CONCATENATE sy-vline
lv_cont1
'linhas diferentes no arquivo'
p_file1
INTO lv_text SEPARATED BY space.
IF lv_cont1 IS INITIAL.
WRITE: / lv_text.
ELSE.
WRITE: / lv_text COLOR COL_TOTAL INTENSIFIED ON.
ENDIF.
************************************************************************
WRITE: / sy-uline.
************************************************************************
* Linhas do arquivo 2
CONDENSE lv_cont2 NO-GAPS.
CLEAR lv_text.
CONCATENATE sy-vline
lv_cont2
'linhas diferentes no arquivo'
p_file2
INTO lv_text SEPARATED BY space.
IF lv_cont2 IS INITIAL.
WRITE: / lv_text.
ELSE.
WRITE: / lv_text COLOR COL_TOTAL INTENSIFIED ON.
ENDIF.
************************************************************************
WRITE: / sy-uline.
************************************************************************
* Linhas do arquivo 1 e 2
lv_cont = lv_cont1 + lv_cont2.
CONDENSE lv_cont NO-GAPS.
CLEAR lv_text.
CONCATENATE sy-vline
lv_cont
'linhas diferentes no total'
INTO lv_text SEPARATED BY space.
IF lv_cont IS INITIAL.
WRITE: / lv_text.
ELSE.
WRITE: / lv_text COLOR COL_TOTAL INTENSIFIED ON.
ENDIF.
************************************************************************
WRITE: / sy-uline.
************************************************************************
lv_hora_fim = sy-uzeit.
lv_hora = lv_hora_fim - lv_hora_ini.
CLEAR lv_text.
CONCATENATE sy-vline
'Tempo gasto:'
lv_hora
INTO lv_text SEPARATED BY space.
WRITE: / lv_text COLOR COL_POSITIVE INTENSIFIED ON USING EDIT MASK '_________________:__:__'.
************************************************************************
WRITE: / sy-uline.
************************************************************************
CLEAR lv_text.
CONCATENATE sy-vline
'Duplo clique para exportar as linhas diferentes do arquivo 1:'
p_file1
'para TXT ou XLS'
INTO lv_text SEPARATED BY space.
WRITE: / lv_text COLOR COL_GROUP INTENSIFIED OFF.
************************************************************************
WRITE: / sy-uline.
************************************************************************
CLEAR lv_text.
CONCATENATE sy-vline
'Duplo clique para exportar as linhas diferentes do arquivo 2:'
p_file2
'para TXT ou XLS'
INTO lv_text SEPARATED BY space.
WRITE: / lv_text COLOR COL_GROUP INTENSIFIED OFF.
WRITE: / sy-uline.
************************************************************************
AT LINE-SELECTION.
IF sy-ucomm EQ 'PICK'.
************************************************************************
IF sy-lisel+2(26) = 'Duplo clique para exportar' AND
sy-lisel+61(1) = '1'.
lv_cont = STRLEN( p_file1 ).
lv_cont = lv_cont - 4.
CONCATENATE p_file1(lv_cont)
'_DIF'
INTO lv_filename.
CLEAR lv_name_exp.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = lv_filename
def_path = space
mask = lv_call_mask
mode = 'S'
IMPORTING
filename = lv_name_exp
EXCEPTIONS
inv_winsys = 04
no_batch = 08
selection_cancel = 12
selection_error = 16.
IF sy-subrc IS INITIAL.
lv_cont = STRLEN( lv_name_exp ).
lv_cont = lv_cont - 3.
IF lv_name_exp+lv_cont(3) = 'XLS'.
lv_filetype = 'DAT'.
ELSE.
lv_filetype = 'ASC'.
ENDIF.
lv_name_exp_srt = lv_name_exp.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_name_exp_srt
filetype = lv_filetype
write_field_separator = 'X'
TABLES
data_tab = gt_file1_xls_exp.
ENDIF.
ENDIF.
************************************************************************
IF sy-lisel+2(26) = 'Duplo clique para exportar' AND
sy-lisel+61(1) = '2'.
lv_cont = STRLEN( p_file2 ).
lv_cont = lv_cont - 4.
CONCATENATE p_file2(lv_cont)
'_DIF'
INTO lv_filename.
CLEAR lv_name_exp.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = lv_filename
def_path = space
mask = lv_call_mask
mode = 'S'
IMPORTING
filename = lv_name_exp
EXCEPTIONS
inv_winsys = 04
no_batch = 08
selection_cancel = 12
selection_error = 16.
IF sy-subrc IS INITIAL.
lv_cont = STRLEN( lv_name_exp ).
lv_cont = lv_cont - 3.
IF lv_name_exp+lv_cont(3) = 'XLS'.
lv_filetype = 'DAT'.
ELSE.
lv_filetype = 'ASC'.
ENDIF.
lv_name_exp_srt = lv_name_exp.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_name_exp_srt
filetype = lv_filetype
write_field_separator = 'X'
TABLES
data_tab = gt_file2_xls_exp.
ENDIF.
ENDIF.
ENDIF.
Adicionar espaços em branco no final do registro
E quem já não precisou gerar um arquivo com espaços até o limite solicitado pelo cliente? Bom, eu já, e na época ninguém me ensinou, e agora está mastigadinho pra você.
REPORT ZSAPeiros.
***************************************************************************
* NO SERVIDOR, UTILIZAR:
***************************************************************************
TRANSFER tabela-campo
TO tabela_dest-campo_dest
LENGTH 100. "Ou seja, 100 caracteres, adicionando brancos no final
***************************************************************************
* PARA ARQUIVOS LOCAIS, UTILIZAR:
***************************************************************************
* Tipo para tabela / estrutura principal
TYPES: BEGIN OF ty_data,
linha(20) TYPE c, "Linha
END OF ty_data.
* Variáveis globais
DATA: gv_campo_espc TYPE string, "Espaço convertido
gv_campo_qtde TYPE i, "Quantidade caracteres
gv_qtde_vezes TYPE i, "Quantidade espaços a serem inseridos
gv_campo_size(50) TYPE c. "Tamanho real do campo
* Tabela principal
DATA: gt_data TYPE TABLE OF ty_data. "Tabela
* Estrutura principal
DATA: wa_data TYPE ty_data. "Estrutura
* Encode do espaço em branco
gv_campo_espc = cl_abap_conv_in_ce=>uccp( '00a0' ).
* Tamanho real do campo
DESCRIBE FIELD wa_data-linha LENGTH gv_campo_size IN CHARACTER MODE.
* Registro 1
wa_data-linha = '12345'.
gv_campo_qtde = STRLEN( wa_data-linha ).
gv_qtde_vezes = gv_campo_size - gv_campo_qtde.
DO gv_qtde_vezes TIMES.
wa_data-linha+gv_campo_qtde(1) = gv_campo_espc.
gv_campo_qtde = gv_campo_qtde + 1.
ENDDO.
CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
EXPORTING
intext = wa_data-linha
IMPORTING
outtext = wa_data-linha
EXCEPTIONS
invalid_codepage = 1
codepage_mismatch = 2
internal_error = 3
cannot_convert = 4
fields_not_type_c = 5
OTHERS = 6.
APPEND wa_data TO gt_data.
* Registro 2
wa_data-linha = '67890'.
gv_campo_qtde = STRLEN( wa_data-linha ).
gv_qtde_vezes = gv_campo_size - gv_campo_qtde.
DO gv_qtde_vezes TIMES.
wa_data-linha+gv_campo_qtde(1) = gv_campo_espc.
gv_campo_qtde = gv_campo_qtde + 1.
ENDDO.
APPEND wa_data TO gt_data.
* Gera arquivo
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = 'C:\espacos_final.txt'
CHANGING
data_tab = gt_data
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
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
IF sy-subrc IS INITIAL.
WRITE: / 'Arquivo gerado com sucesso!'.
ELSE.
WRITE: / 'Erro ao gerar arquivo!'.
ENDIF.
Assinar:
Postagens (Atom)

