Conteúdo

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.