You are on page 1of 23

*&---------------------------------------------------------------------*

*& Report  ZFIR_RATING_CLIENTES
*&---------------------------------------------------------------------*
*& Carga Rating de Clientes
*&---------------------------------------------------------------------*

REPORT  ZFIR_RATING_CLIENTES.

*&---------------------------------------------------------------------*
*&  Tabelas
*&---------------------------------------------------------------------*
TABLES:
  bkpf,
  bsid,
  bsad,
  kna1.

*&---------------------------------------------------------------------*
*&  Tipos
*&---------------------------------------------------------------------*
TYPE-POOLS: truxs.

TYPES:
  BEGIN OF ty_chave_ge,
    kunnr TYPE kna1-kunnr,
    name1 TYPE kna1-name1,
    regio TYPE kna1-regio,
    konzs TYPE kna1-konzs,
  END OF ty_chave_ge,

  BEGIN OF ty_descr_ge,
    kunnr TYPE kna1-kunnr,
    name1 TYPE kna1-name1,
  END OF ty_descr_ge.

*&---------------------------------------------------------------------*
*&  Tabelas internas
*&---------------------------------------------------------------------*
DATA: it_bsxd     TYPE TABLE OF bsid,
      it_bkpf     TYPE TABLE OF bkpf,

      it_chave_ge TYPE TABLE OF ty_chave_ge,
      it_descr_ge TYPE TABLE OF ty_descr_ge,

      it_dados      TYPE TABLE OF ZFIS_RATING_CLIENTES.

DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
      it_msg  TYPE TABLE OF bdcmsgcoll WITH HEADER LINE.

*&---------------------------------------------------------------------*
*&  Estruturas
*&---------------------------------------------------------------------*
DATA: st_bsxd     TYPE bsid,
      st_bkpf     TYPE bkpf,

      st_chave_ge TYPE ty_chave_ge,
      st_descr_ge TYPE ty_descr_ge,
      st_dados      TYPE ZFIS_RATING_CLIENTES.

*&---------------------------------------------------------------------*
*&      ALV
*&---------------------------------------------------------------------*
DATA: grid TYPE REF TO cl_gui_alv_grid.

*&---------------------------------------------------------------------*
*&  Seleção
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

  SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs,
                  s_kunnr FOR kna1-kunnr,
                  s_budat FOR bkpf-budat.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.

  PARAMETERS: p_alv   TYPE c RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND aaa,
              p_excel TYPE c RADIOBUTTON GROUP g1,
              p_csv   TYPE c RADIOBUTTON GROUP g1.

SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.

  PARAMETERS: p_local TYPE c RADIOBUTTON GROUP g2 DEFAULT 'X' USER-COMMAND bbb,
              p_servi TYPE c RADIOBUTTON GROUP g2,
              p_arq   TYPE localfile MODIF ID g2.

SELECTION-SCREEN END OF BLOCK b3.

*&---------------------------------------------------------------------*
*&  Consistência dos parâmetros
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_arq.
  PERFORM diretorio.

AT SELECTION-SCREEN OUTPUT.
  PERFORM modifica_tela.

*&---------------------------------------------------------------------*
*&  Processo
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM campo_obrigatorio.
  PERFORM selecionar_dados.

END-OF-SELECTION.
  PERFORM imprimir_dados.

*&---------------------------------------------------------------------*
*&      Form  DIRETORIO
*&---------------------------------------------------------------------*
FORM DIRETORIO .
  DATA tl_file_table TYPE filetable.

  DATA: vl_window_title TYPE string,
        vl_rc           TYPE i.

  FIELD-SYMBOLS <l_file_table> LIKE LINE OF tl_file_table.

  CASE abap_true.
    WHEN p_local.
      CLEAR vl_window_title.
      MOVE 'Informar nome do arquivo'(017) TO vl_window_title.

      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title   = vl_window_title
          multiselection = abap_false
        CHANGING
          file_table     = tl_file_table
          rc             = vl_rc
        EXCEPTIONS
          OTHERS         = 1.

      IF sy-subrc NE 0.
        RETURN.
      ENDIF.

      IF <l_file_table> IS ASSIGNED. UNASSIGN <l_file_table>. ENDIF.
      READ TABLE tl_file_table ASSIGNING <l_file_table> INDEX 1.

      IF sy-subrc EQ 0.
        MOVE <l_file_table>-filename TO p_arq.
      ENDIF.

    WHEN p_servi.
      CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
        IMPORTING
          serverfile       = p_arq
        EXCEPTIONS
          canceled_by_user = 1
          OTHERS           = 2.

      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
  ENDCASE.

ENDFORM.                    " DIRETORIO

*&---------------------------------------------------------------------*
*&      Form  MODIFICA_TELA
*&---------------------------------------------------------------------*
FORM MODIFICA_TELA .

  LOOP AT SCREEN.

    IF screen-name CS 'P_LOCAL' OR
       screen-name CS 'P_SERVI' OR
       screen-name CS 'P_ARQ'.

      IF p_excel IS INITIAL AND
         p_csv   IS INITIAL.

        screen-input = 0.
        screen-invisible = 1.

      ELSE.

        screen-input = 1.
        screen-invisible = 0.

      ENDIF.

    ENDIF.

    MODIFY SCREEN.

  ENDLOOP.

ENDFORM.                    " MODIFICA_TELA

*&---------------------------------------------------------------------*
*&      Form  CAMPO_OBRIGATORIO
*&---------------------------------------------------------------------*
FORM CAMPO_OBRIGATORIO .

  IF S_BUKRS-LOW IS INITIAL.

    MESSAGE 'Campo Empresa é obrigatório!' TYPE 'I' DISPLAY LIKE 'E'.
    STOP.

  ELSEIF S_KUNNR-LOW IS INITIAL.

    MESSAGE 'Campo Conta do Cliente é obrigatório!' TYPE 'I' DISPLAY LIKE 'E'.
    STOP.

    ELSEIF S_BUDAT-LOW IS INITIAL.

      MESSAGE 'Campo Data de Lançamento é obrigatório!' TYPE 'I' DISPLAY LIKE 'E'.
      STOP.

  ENDIF.

ENDFORM.                    " CAMPO_OBRIGATORIO

*&---------------------------------------------------------------------*
*&      Form  SELECIONAR_DADOS
*&---------------------------------------------------------------------*
FORM SELECIONAR_DADOS .

  CLEAR: it_bsxd, it_bkpf, it_chave_ge, it_descr_ge,
         it_bsxd[], it_bkpf[], it_chave_ge[], it_descr_ge[].

  SELECT *
    INTO TABLE it_bsxd
    FROM bsid
   WHERE bukrs IN s_bukrs
     AND kunnr IN s_kunnr
     AND budat IN s_budat
     AND blart <> 'ES'
     AND shkzg  = 'S'
     AND umskz <> 'R'.

  SELECT *
    APPENDING TABLE it_bsxd
    FROM bsad
   WHERE bukrs IN s_bukrs
     AND kunnr IN s_kunnr
     AND augdt IN s_budat
     AND blart <> 'ES'
     AND shkzg  = 'S'
     AND UMSKZ <> 'R'.

  IF NOT it_bsxd[] IS INITIAL.

    SELECT *
      INTO TABLE it_bkpf
      FROM bkpf
       FOR ALL ENTRIES IN it_bsxd
     WHERE bukrs = it_bsxd-bukrs
       AND belnr = it_bsxd-belnr
       AND gjahr = it_bsxd-gjahr.

    IF sy-subrc EQ 0.
      PERFORM chave_grupo_empresa.
    ENDIF.

  ENDIF.

ENDFORM.                    " SELECIONAR_DADOS

*&---------------------------------------------------------------------*
*&      Form  CHAVE_GRUPO_EMPRESA
*&---------------------------------------------------------------------*
FORM CHAVE_GRUPO_EMPRESA .

  " 5.1 CHAVE GRUPO EMPRESAS
  " 5.3 NOME CLIENTE
  " 5.4 REGIÃO

  SELECT kunnr name1 regio konzs
    INTO TABLE it_chave_ge
    FROM kna1
     FOR ALL ENTRIES IN it_bsxd
   WHERE kunnr = it_bsxd-kunnr.

  IF sy-subrc EQ 0.
    PERFORM descr_grupo_empresa.
  ENDIF.

ENDFORM.                    " CHAVE_GRUPO_EMPRESA

*&---------------------------------------------------------------------*
*&      Form  DESCR_GRUPO_EMPRESA
*&---------------------------------------------------------------------*
FORM DESCR_GRUPO_EMPRESA .

  " 5.2 DESCRIÇÃO GRUPO EMPRESAS

  SELECT kunnr name1
    INTO TABLE it_descr_ge
    FROM kna1
     FOR ALL ENTRIES IN it_chave_ge
   WHERE kunnr = it_chave_ge-konzs.

ENDFORM.                    " DESCR_GRUPO_EMPRESA

*&---------------------------------------------------------------------*
*&      Form  IMPRIMIR_DADOS
*&---------------------------------------------------------------------*
FORM IMPRIMIR_DADOS .

  IF NOT p_alv IS INITIAL.
    PERFORM imprimir_alv.
  ELSEIF NOT p_excel IS INITIAL.
    PERFORM gerar_excel.
  ELSE.
    PERFORM gerar_csv.
  ENDIF.

ENDFORM.                    " IMPRIMIR_DADOS

*&---------------------------------------------------------------------*
*&      Form  IMPRIMIR_ALV
*&---------------------------------------------------------------------*
FORM IMPRIMIR_ALV .

  PERFORM carregar_dados.

  IF it_dados[] IS INITIAL.
    MESSAGE 'Nenhum dado selecionado.' TYPE 'S'.
    RETURN.
  ENDIF.

  CALL SCREEN '9000'.

ENDFORM.                    " IMPRIMIR_ALV

*&---------------------------------------------------------------------*
*&      Form  GERAR_EXCEL
*&---------------------------------------------------------------------*
FORM GERAR_EXCEL .

  PERFORM carregar_dados.

  IF it_dados[] IS INITIAL.
    MESSAGE 'Nenhum dado selecionado.' TYPE 'S'.
    RETURN.
  ENDIF.

  IF NOT p_local IS INITIAL.
    PERFORM planilha_excel_local.
  ELSE.
    PERFORM planilha_excel_servidor.
  ENDIF.

ENDFORM.                    " GERAR_EXCEL

*&---------------------------------------------------------------------*
*&      Form  GERAR_CSV
*&---------------------------------------------------------------------*
FORM GERAR_CSV .

  PERFORM carregar_dados.

  IF it_dados[] IS INITIAL.
    MESSAGE 'Nenhum dado selecionado.' TYPE 'S'.
    RETURN.
  ENDIF.

  IF NOT p_local IS INITIAL.
    PERFORM gerar_csv_local.
  ELSE.
    PERFORM gerar_csv_servidor.
  ENDIF.

ENDFORM.                    " GERAR_CSV

*&---------------------------------------------------------------------*
*&      Form  CARREGAR_DADOS
*&---------------------------------------------------------------------*
FORM CARREGAR_DADOS .

  CLEAR: it_dados, it_dados[].

  LOOP AT it_bsxd INTO st_bsxd.

    MOVE-CORRESPONDING st_bsxd TO st_dados.

    READ TABLE it_chave_ge INTO st_chave_ge
      WITH KEY kunnr = st_dados-kunnr.

    IF sy-subrc EQ 0.

      st_dados-konzs = st_chave_ge-konzs.
      st_dados-name2 = st_chave_ge-name1.
      st_dados-regio = st_chave_ge-regio.

      READ TABLE it_descr_ge INTO st_descr_ge
        WITH KEY kunnr = st_chave_ge-konzs.

      IF sy-subrc EQ 0.
        st_dados-name1 = st_descr_ge-name1.
      ENDIF.

    ENDIF.

    st_dados-venc_liq = st_bsxd-zfbdt + st_bsxd-zbd1t.
    READ TABLE it_bkpf INTO st_bkpf
      WITH KEY bukrs = st_bsxd-bukrs
               belnr = st_bsxd-belnr
               gjahr = st_bsxd-gjahr.

    IF sy-subrc EQ 0.

      st_dados-usnam    = st_bkpf-usnam.
      st_dados-bktxt    = st_bkpf-bktxt.
      st_dados-xref1_hd = st_bkpf-xref1_hd.
      st_dados-xref2_hd = st_bkpf-xref2_hd.

    ENDIF.

    APPEND st_dados TO it_dados.

    CLEAR st_dados.

  ENDLOOP.

ENDFORM.                    " CARREGAR_DADOS

*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.

  SET PF-STATUS 'S9000'.
  SET TITLEBAR 'T9000'.

  PERFORM imprimir.

ENDMODULE.                 " STATUS_9000  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.

  CASE sy-ucomm.

    WHEN 'BACK'.
      LEAVE TO SCREEN 0.

    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.

    WHEN 'CANC'.
      LEAVE TO SCREEN 0.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_9000  INPUT

*&---------------------------------------------------------------------*
*&      Form  IMPRIMIR
*&---------------------------------------------------------------------*
FORM IMPRIMIR .
  DATA: lt_fieldcat TYPE lvc_t_fcat,
        wl_fieldcat TYPE lvc_s_fcat,
        wl_layout   TYPE lvc_s_layo,
        wl_variant  TYPE disvariant,
        wl_stable   TYPE lvc_s_stbl.

  DATA dock TYPE REF TO cl_gui_docking_container.

  IF NOT grid IS BOUND.

    IF NOT grid IS BOUND.
      CREATE OBJECT grid
        EXPORTING
          i_parent = dock.
    ENDIF.

    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'ZFIS_RATING_CLIENTES'
      CHANGING
        ct_fieldcat      = lt_fieldcat.

    LOOP AT lt_fieldcat INTO wl_fieldcat.

      CASE wl_fieldcat-fieldname.

        WHEN 'NAME1'.

          wl_fieldcat-scrtext_s = 'Dsc.GrpEmp.'.
          wl_fieldcat-scrtext_m = 'Dscr.Grp.Empr.'.
          wl_fieldcat-scrtext_l = 'Descrição Grupo Empresa'.

        WHEN 'NAME2'.

          wl_fieldcat-scrtext_s = 'Nome Cli.'.
          wl_fieldcat-scrtext_m = 'Nome Cliente'.
          wl_fieldcat-scrtext_l = 'Nome do Cliente'.

      ENDCASE.

      MODIFY lt_fieldcat FROM wl_fieldcat.

    ENDLOOP.

    CLEAR wl_layout.

    MOVE abap_true TO: wl_layout-zebra,
                       wl_layout-col_opt,
                       wl_layout-cwidth_opt.

    MOVE 'A' TO wl_layout-sel_mode.

    MOVE: sy-repid TO wl_variant-report,
          sy-uname TO wl_variant-username.

    CALL METHOD grid->set_table_for_first_display
      EXPORTING
        i_save          = 'A'
        is_layout       = wl_layout
        is_variant      = wl_variant
      CHANGING
        it_outtab       = it_dados
        it_fieldcatalog = lt_fieldcat
      EXCEPTIONS
        OTHERS          = 1.

    IF sy-subrc NE 0.
      RETURN.
    ENDIF.

  ELSE.

    CLEAR wl_stable.

    MOVE abap_true TO: wl_stable-col,
                       wl_stable-row.

    CALL METHOD grid->refresh_table_display
      EXPORTING
        is_stable = wl_stable.

  ENDIF.

ENDFORM.                    " IMPRIMIR

*&---------------------------------------------------------------------*
*&      Form  PLANILHA_EXCEL_LOCAL
*&---------------------------------------------------------------------*
FORM PLANILHA_EXCEL_LOCAL .

  DATA: lo_excel        TYPE REF TO zcl_excel,
        lo_worksheet    TYPE REF TO zcl_excel_worksheet,
        lo_excel_writer TYPE REF TO zif_excel_writer.

  DATA: lv_cont         TYPE i VALUE 1,
        lv_file         TYPE xstring,
        lv_bytecount    TYPE i,
        lt_file_tab     TYPE solix_tab,
        lv_full_path    TYPE string.

  CREATE OBJECT lo_excel.

  lo_worksheet = lo_excel->get_active_worksheet( ).

  " Cabeçalho
  TRY .

    lo_worksheet->set_cell( ip_column = 'A' ip_row = lv_cont ip_value = 'Empresa' ).
    lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_cont ip_value = 'Local de neg
ócios' ).
    lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_cont ip_value = 'Chave grupo 
empresas' ).
    lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_cont ip_value = 'Descrição gr
upo empresas' ).
    lo_worksheet->set_cell( ip_column = 'E' ip_row = lv_cont ip_value = 'Código do Cl
iente' ).
    lo_worksheet->set_cell( ip_column = 'F' ip_row = lv_cont ip_value = 'Nome do Clie
nte' ).
    lo_worksheet->set_cell( ip_column = 'G' ip_row = lv_cont ip_value = 'Número docum
ento' ).
    lo_worksheet->set_cell( ip_column = 'H' ip_row = lv_cont ip_value = 'Número atrib
uição' ).
    lo_worksheet->set_cell( ip_column = 'I' ip_row = lv_cont ip_value = 'Tipo documen
to' ).
    lo_worksheet->set_cell( ip_column = 'J' ip_row = lv_cont ip_value = 'Número docum
ento de referência' ).
    lo_worksheet->set_cell( ip_column = 'K' ip_row = lv_cont ip_value = 'Número linha 
lançamento' ).
    lo_worksheet->set_cell( ip_column = 'L' ip_row = lv_cont ip_value = 'Suplemento f
orma pagamento' ).
    lo_worksheet->set_cell( ip_column = 'M' ip_row = lv_cont ip_value = 'Código Razão 
Especial' ).
    lo_worksheet->set_cell( ip_column = 'N' ip_row = lv_cont ip_value = 'Montante' ).
    lo_worksheet->set_cell( ip_column = 'O' ip_row = lv_cont ip_value = 'Vencimento l
íquido' ).
    lo_worksheet->set_cell( ip_column = 'P' ip_row = lv_cont ip_value = 'Data documen
to' ).
    lo_worksheet->set_cell( ip_column = 'Q' ip_row = lv_cont ip_value = 'Data compens
ação' ).
    lo_worksheet->set_cell( ip_column = 'R' ip_row = lv_cont ip_value = 'Número docum
ento compensação' ).
    lo_worksheet->set_cell( ip_column = 'S' ip_row = lv_cont ip_value = 'Data lançame
nto' ).
    lo_worksheet->set_cell( ip_column = 'T' ip_row = lv_cont ip_value = 'Número docum
ento solicitação letra de câmbio' ).
    lo_worksheet->set_cell( ip_column = 'U' ip_row = lv_cont ip_value = 'Chave banco 
da empresa' ).
    lo_worksheet->set_cell( ip_column = 'V' ip_row = lv_cont ip_value = 'Chave conta' 
).
    lo_worksheet->set_cell( ip_column = 'W' ip_row = lv_cont ip_value = 'Chave referê
ncia item doc.' ).
    lo_worksheet->set_cell( ip_column = 'X' ip_row = lv_cont ip_value = 'Instrução 1' 
).
    lo_worksheet->set_cell( ip_column = 'Y' ip_row = lv_cont ip_value = 'Chave bloque
io pagamento' ).
    lo_worksheet->set_cell( ip_column = 'Z' ip_row = lv_cont ip_value = 'Texto do ite
m' ).
    lo_worksheet->set_cell( ip_column = 'AA' ip_row = lv_cont ip_value = 'Região' ).
    lo_worksheet->set_cell( ip_column = 'AB' ip_row = lv_cont ip_value = 'Usuário' ).
    lo_worksheet->set_cell( ip_column = 'AC' ip_row = lv_cont ip_value = 'Forma de pa
gamento' ).
    lo_worksheet->set_cell( ip_column = 'AD' ip_row = lv_cont ip_value = 'Centro de c
usto' ).
    lo_worksheet->set_cell( ip_column = 'AE' ip_row = lv_cont ip_value = 'Texto de ca
beçalho' ).
    lo_worksheet->set_cell( ip_column = 'AF' ip_row = lv_cont ip_value = 'Chave ref.1 
interna cabeçalho' ).
    lo_worksheet->set_cell( ip_column = 'AG' ip_row = lv_cont ip_value = 'Chave ref.2 
interna cabeçalho' ).

    ADD 1 TO lv_cont.

  CATCH ZCX_EXCEL.
  ENDTRY.

  " Item
  LOOP AT it_dados INTO st_dados.

    TRY .

      lo_worksheet->set_cell( ip_column = 'A' ip_row = lv_cont ip_value = st_dados-
bukrs ).
      lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_cont ip_value = st_dados-
bupla ).
      lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_cont ip_value = st_dados-
konzs ).
      lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_cont ip_value = st_dados-
name1 ).
      lo_worksheet->set_cell( ip_column = 'E' ip_row = lv_cont ip_value = st_dados-
kunnr ).
      lo_worksheet->set_cell( ip_column = 'F' ip_row = lv_cont ip_value = st_dados-
name2 ).
      lo_worksheet->set_cell( ip_column = 'G' ip_row = lv_cont ip_value = st_dados-
belnr ).
      lo_worksheet->set_cell( ip_column = 'H' ip_row = lv_cont ip_value = st_dados-
zuonr ).
      lo_worksheet->set_cell( ip_column = 'I' ip_row = lv_cont ip_value = st_dados-
blart ).
      lo_worksheet->set_cell( ip_column = 'J' ip_row = lv_cont ip_value = st_dados-
xblnr ).
      lo_worksheet->set_cell( ip_column = 'K' ip_row = lv_cont ip_value = st_dados-
buzei ).
      lo_worksheet->set_cell( ip_column = 'L' ip_row = lv_cont ip_value = st_dados-
uzawe ).
      lo_worksheet->set_cell( ip_column = 'M' ip_row = lv_cont ip_value = st_dados-
umskz ).
      lo_worksheet->set_cell( ip_column = 'N' ip_row = lv_cont ip_value = st_dados-
dmbtr ).
      lo_worksheet->set_cell( ip_column = 'O' ip_row = lv_cont ip_value = st_dados-
venc_liq ).
      lo_worksheet->set_cell( ip_column = 'P' ip_row = lv_cont ip_value = st_dados-
bldat ).
      lo_worksheet->set_cell( ip_column = 'Q' ip_row = lv_cont ip_value = st_dados-
augdt ).
      lo_worksheet->set_cell( ip_column = 'R' ip_row = lv_cont ip_value = st_dados-
augbl ).
      lo_worksheet->set_cell( ip_column = 'S' ip_row = lv_cont ip_value = st_dados-
budat ).
      lo_worksheet->set_cell( ip_column = 'T' ip_row = lv_cont ip_value = st_dados-
anfbn ).
      lo_worksheet->set_cell( ip_column = 'U' ip_row = lv_cont ip_value = st_dados-
hbkid ).
      lo_worksheet->set_cell( ip_column = 'V' ip_row = lv_cont ip_value = st_dados-
hktid ).
      lo_worksheet->set_cell( ip_column = 'W' ip_row = lv_cont ip_value = st_dados-
xref3 ).
      lo_worksheet->set_cell( ip_column = 'X' ip_row = lv_cont ip_value = st_dados-
dtws1 ).
      lo_worksheet->set_cell( ip_column = 'Y' ip_row = lv_cont ip_value = st_dados-
zlspr ).
      lo_worksheet->set_cell( ip_column = 'Z' ip_row = lv_cont ip_value = st_dados-
sgtxt ).
      lo_worksheet->set_cell( ip_column = 'AA' ip_row = lv_cont ip_value = st_dados-
regio ).
      lo_worksheet->set_cell( ip_column = 'AB' ip_row = lv_cont ip_value = st_dados-
usnam ).
      lo_worksheet->set_cell( ip_column = 'AC' ip_row = lv_cont ip_value = st_dados-
zlsch ).
      lo_worksheet->set_cell( ip_column = 'AD' ip_row = lv_cont ip_value = st_dados-
kostl ).
      lo_worksheet->set_cell( ip_column = 'AE' ip_row = lv_cont ip_value = st_dados-
bktxt ).
      lo_worksheet->set_cell( ip_column = 'AF' ip_row = lv_cont ip_value = st_dados-
xref1_hd ).
      lo_worksheet->set_cell( ip_column = 'AG' ip_row = lv_cont ip_value = st_dados-
xref2_hd ).

      ADD 1 TO lv_cont.

    CATCH ZCX_EXCEL.
    ENDTRY.

  ENDLOOP.

  CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007.

  lv_file = lo_excel_writer->write_file( lo_excel ).

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = lv_file
    IMPORTING
      output_length = lv_bytecount
    TABLES
      binary_tab    = lt_file_tab.

  CONCATENATE p_arq 'xlsx' INTO lv_full_path SEPARATED BY '.'.

*  cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
*                                                    filename     = lv_full_
path
*                                                    filetype     = 'BIN'
*                                           CHANGING data_tab     = lt_file_t
ab ).

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize = lv_bytecount
      filename     = lv_full_path
      filetype     = 'BIN'
    TABLES
      data_tab     = lt_file_tab
    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.
    IF sy-batch IS INITIAL.
      MESSAGE 'Arquivo gravado com sucesso!' TYPE 'S'.
    ENDIF.
  ELSE.
    IF sy-batch IS INITIAL.
      MESSAGE 'Erro ao gravar arquivo!' TYPE 'S' DISPLAY LIKE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.                    " PLANILHA_EXCEL_LOCAL

*&---------------------------------------------------------------------*
*&      Form  PLANILHA_EXCEL_SERVIDOR
*&---------------------------------------------------------------------*
FORM PLANILHA_EXCEL_SERVIDOR .

  DATA: lo_excel        TYPE REF TO zcl_excel,
        lo_worksheet    TYPE REF TO zcl_excel_worksheet,
        lo_excel_writer TYPE REF TO zif_excel_writer.

  DATA: lv_cont         TYPE i VALUE 1,
        lv_file         TYPE xstring,
        lv_bytecount    TYPE i,
        lt_file_tab     TYPE solix_tab,
        lv_full_path    TYPE string,
        lv_servidor     TYPE string,
        lv_msg_txt      TYPE string.

  CREATE OBJECT lo_excel.

  lo_worksheet = lo_excel->get_active_worksheet( ).

  " Cabeçalho
  TRY .

    lo_worksheet->set_cell( ip_column = 'A' ip_row = lv_cont ip_value = 'Empresa' ).
    lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_cont ip_value = 'Local de neg
ócios' ).
    lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_cont ip_value = 'Chave grupo 
empresas' ).
    lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_cont ip_value = 'Descrição gr
upo empresas' ).
    lo_worksheet->set_cell( ip_column = 'E' ip_row = lv_cont ip_value = 'Código do Cl
iente' ).
    lo_worksheet->set_cell( ip_column = 'F' ip_row = lv_cont ip_value = 'Nome do Clie
nte' ).
    lo_worksheet->set_cell( ip_column = 'G' ip_row = lv_cont ip_value = 'Número docum
ento' ).
    lo_worksheet->set_cell( ip_column = 'H' ip_row = lv_cont ip_value = 'Número atrib
uição' ).
    lo_worksheet->set_cell( ip_column = 'I' ip_row = lv_cont ip_value = 'Tipo documen
to' ).
    lo_worksheet->set_cell( ip_column = 'J' ip_row = lv_cont ip_value = 'Número docum
ento de referência' ).
    lo_worksheet->set_cell( ip_column = 'K' ip_row = lv_cont ip_value = 'Número linha 
lançamento' ).
    lo_worksheet->set_cell( ip_column = 'L' ip_row = lv_cont ip_value = 'Suplemento f
orma pagamento' ).
    lo_worksheet->set_cell( ip_column = 'M' ip_row = lv_cont ip_value = 'Código Razão 
Especial' ).
    lo_worksheet->set_cell( ip_column = 'N' ip_row = lv_cont ip_value = 'Montante' ).
    lo_worksheet->set_cell( ip_column = 'O' ip_row = lv_cont ip_value = 'Vencimento l
íquido' ).
    lo_worksheet->set_cell( ip_column = 'P' ip_row = lv_cont ip_value = 'Data documen
to' ).
    lo_worksheet->set_cell( ip_column = 'Q' ip_row = lv_cont ip_value = 'Data compens
ação' ).
    lo_worksheet->set_cell( ip_column = 'R' ip_row = lv_cont ip_value = 'Número docum
ento compensação' ).
    lo_worksheet->set_cell( ip_column = 'S' ip_row = lv_cont ip_value = 'Data lançame
nto' ).
    lo_worksheet->set_cell( ip_column = 'T' ip_row = lv_cont ip_value = 'Número docum
ento solicitação letra de câmbio' ).
    lo_worksheet->set_cell( ip_column = 'U' ip_row = lv_cont ip_value = 'Chave banco 
da empresa' ).
    lo_worksheet->set_cell( ip_column = 'V' ip_row = lv_cont ip_value = 'Chave conta' 
).
    lo_worksheet->set_cell( ip_column = 'W' ip_row = lv_cont ip_value = 'Chave referê
ncia item doc.' ).
    lo_worksheet->set_cell( ip_column = 'X' ip_row = lv_cont ip_value = 'Instrução 1' 
).
    lo_worksheet->set_cell( ip_column = 'Y' ip_row = lv_cont ip_value = 'Chave bloque
io pagamento' ).
    lo_worksheet->set_cell( ip_column = 'Z' ip_row = lv_cont ip_value = 'Texto do ite
m' ).
    lo_worksheet->set_cell( ip_column = 'AA' ip_row = lv_cont ip_value = 'Região' ).
    lo_worksheet->set_cell( ip_column = 'AB' ip_row = lv_cont ip_value = 'Usuário' ).
    lo_worksheet->set_cell( ip_column = 'AC' ip_row = lv_cont ip_value = 'Forma de pa
gamento' ).
    lo_worksheet->set_cell( ip_column = 'AD' ip_row = lv_cont ip_value = 'Centro de c
usto' ).
    lo_worksheet->set_cell( ip_column = 'AE' ip_row = lv_cont ip_value = 'Texto de ca
beçalho' ).
    lo_worksheet->set_cell( ip_column = 'AF' ip_row = lv_cont ip_value = 'Chave ref.1 
interna cabeçalho' ).
    lo_worksheet->set_cell( ip_column = 'AG' ip_row = lv_cont ip_value = 'Chave ref.2 
interna cabeçalho' ).
    ADD 1 TO lv_cont.

  CATCH ZCX_EXCEL.
  ENDTRY.

  " Item
  LOOP AT it_dados INTO st_dados.

    TRY .

      lo_worksheet->set_cell( ip_column = 'A' ip_row = lv_cont ip_value = st_dados-
bukrs ).
      lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_cont ip_value = st_dados-
bupla ).
      lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_cont ip_value = st_dados-
konzs ).
      lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_cont ip_value = st_dados-
name1 ).
      lo_worksheet->set_cell( ip_column = 'E' ip_row = lv_cont ip_value = st_dados-
kunnr ).
      lo_worksheet->set_cell( ip_column = 'F' ip_row = lv_cont ip_value = st_dados-
name2 ).
      lo_worksheet->set_cell( ip_column = 'G' ip_row = lv_cont ip_value = st_dados-
belnr ).
      lo_worksheet->set_cell( ip_column = 'H' ip_row = lv_cont ip_value = st_dados-
zuonr ).
      lo_worksheet->set_cell( ip_column = 'I' ip_row = lv_cont ip_value = st_dados-
blart ).
      lo_worksheet->set_cell( ip_column = 'J' ip_row = lv_cont ip_value = st_dados-
xblnr ).
      lo_worksheet->set_cell( ip_column = 'K' ip_row = lv_cont ip_value = st_dados-
buzei ).
      lo_worksheet->set_cell( ip_column = 'L' ip_row = lv_cont ip_value = st_dados-
uzawe ).
      lo_worksheet->set_cell( ip_column = 'M' ip_row = lv_cont ip_value = st_dados-
umskz ).
      lo_worksheet->set_cell( ip_column = 'N' ip_row = lv_cont ip_value = st_dados-
dmbtr ).
      lo_worksheet->set_cell( ip_column = 'O' ip_row = lv_cont ip_value = st_dados-
venc_liq ).
      lo_worksheet->set_cell( ip_column = 'P' ip_row = lv_cont ip_value = st_dados-
bldat ).
      lo_worksheet->set_cell( ip_column = 'Q' ip_row = lv_cont ip_value = st_dados-
augdt ).
      lo_worksheet->set_cell( ip_column = 'R' ip_row = lv_cont ip_value = st_dados-
augbl ).
      lo_worksheet->set_cell( ip_column = 'S' ip_row = lv_cont ip_value = st_dados-
budat ).
      lo_worksheet->set_cell( ip_column = 'T' ip_row = lv_cont ip_value = st_dados-
anfbn ).
      lo_worksheet->set_cell( ip_column = 'U' ip_row = lv_cont ip_value = st_dados-
hbkid ).
      lo_worksheet->set_cell( ip_column = 'V' ip_row = lv_cont ip_value = st_dados-
hktid ).
      lo_worksheet->set_cell( ip_column = 'W' ip_row = lv_cont ip_value = st_dados-
xref3 ).
      lo_worksheet->set_cell( ip_column = 'X' ip_row = lv_cont ip_value = st_dados-
dtws1 ).
      lo_worksheet->set_cell( ip_column = 'Y' ip_row = lv_cont ip_value = st_dados-
zlspr ).
      lo_worksheet->set_cell( ip_column = 'Z' ip_row = lv_cont ip_value = st_dados-
sgtxt ).
      lo_worksheet->set_cell( ip_column = 'AA' ip_row = lv_cont ip_value = st_dados-
regio ).
      lo_worksheet->set_cell( ip_column = 'AB' ip_row = lv_cont ip_value = st_dados-
usnam ).
      lo_worksheet->set_cell( ip_column = 'AC' ip_row = lv_cont ip_value = st_dados-
zlsch ).
      lo_worksheet->set_cell( ip_column = 'AD' ip_row = lv_cont ip_value = st_dados-
kostl ).
      lo_worksheet->set_cell( ip_column = 'AE' ip_row = lv_cont ip_value = st_dados-
bktxt ).
      lo_worksheet->set_cell( ip_column = 'AF' ip_row = lv_cont ip_value = st_dados-
xref1_hd ).
      lo_worksheet->set_cell( ip_column = 'AG' ip_row = lv_cont ip_value = st_dados-
xref2_hd ).

      ADD 1 TO lv_cont.

    CATCH ZCX_EXCEL.
    ENDTRY.

  ENDLOOP.

  CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007.

  lv_file = lo_excel_writer->write_file( lo_excel ).

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = lv_file
    IMPORTING
      output_length = lv_bytecount
    TABLES
      binary_tab    = lt_file_tab.

*  CONCATENATE p_arq 'xlsx' INTO lv_full_path SEPARATED BY '.'.
  lv_full_path = 'C:\temp\local.xlsx'.

  CONCATENATE p_arq 'xlsx' INTO lv_servidor SEPARATED BY '.'.

  cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
                                                    filename     = lv_full_path
                                                    filetype     = 'BIN'
                                           CHANGING data_tab     = lt_file_tab ).

  CLEAR: BDCDATA, BDCDATA[], it_msg, it_msg[].

  PERFORM f_bdcdata_program USING 'SAPLC13Z'  '1020'  'X'.

  PERFORM f_bdcdata_data USING    'BDC_CURSOR'          'RCGFILETR-IEFOW'.
  PERFORM f_bdcdata_data USING    'BDC_OKCODE'          '=EIMP'.
  PERFORM f_bdcdata_data USING    'RCGFILETR-FTFRONT'   'C:\temp\local.xlsx'.
  PERFORM f_bdcdata_data USING    'RCGFILETR-FTAPPL'    lv_servidor.
  PERFORM f_bdcdata_data USING    'RCGFILETR-FTFTYPE'   'BIN'.
  PERFORM f_bdcdata_data USING    'RCGFILETR-IEFOW'     'X'.
  CALL TRANSACTION 'CG3Z' USING BDCDATA
                          MODE   'N'
                          UPDATE 'S'
                          MESSAGES INTO it_msg.

  CLEAR lv_msg_txt.

  LOOP AT it_msg.

    IF it_msg-msgtyp = 'E'.

      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = it_msg-msgid
          lang      = 'PT'
          no        = it_msg-msgnr
          v1        = it_msg-msgv1
          v2        = it_msg-msgv2
          v3        = it_msg-msgv3
          v4        = it_msg-msgv4
        IMPORTING
          msg       = lv_msg_txt
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.

    ENDIF.

    IF it_msg-msgtyp = 'S'    AND
       it_msg-msgid  = 'C$'   AND
       it_msg-msgnr  = '159'.

      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = it_msg-msgid
          lang      = 'PT'
          no        = it_msg-msgnr
          v1        = it_msg-msgv1
          v2        = it_msg-msgv2
          v3        = it_msg-msgv3
          v4        = it_msg-msgv4
        IMPORTING
          msg       = lv_msg_txt
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.

    ENDIF.

  ENDLOOP.

  IF NOT lv_msg_txt IS INITIAL.
    MESSAGE lv_msg_txt TYPE 'S'.
  ENDIF.

ENDFORM.                    " PLANILHA_EXCEL_SERVIDOR
*&---------------------------------------------------------------------*
*&      Form  GERAR_CSV_LOCAL
*&---------------------------------------------------------------------*
FORM GERAR_CSV_LOCAL .

  TYPES:  BEGIN OF ly_rating_clientes,
            bukrs     TYPE  c LENGTH 7,
            bupla     TYPE  c LENGTH 17,
            konzs     TYPE  c LENGTH 20,
            name1     TYPE  c LENGTH 50,
            kunnr     TYPE  c LENGTH 17,
            name2     TYPE  c LENGTH 50,
            belnr     TYPE  c LENGTH 16,
            zuonr     TYPE  c LENGTH 17,
            blart     TYPE  c LENGTH 14,
            xblnr     TYPE  c LENGTH 30,
            buzei     TYPE  c LENGTH 23,
            uzawe     TYPE  c LENGTH 26,
            umskz     TYPE  c LENGTH 21,
            dmbtr     TYPE  c LENGTH 15,
            venc_liq  TYPE  c LENGTH 28,
            bldat     TYPE  c LENGTH 14,
            augdt     TYPE  c LENGTH 16,
            augbl     TYPE  c LENGTH 28,
            budat     TYPE  c LENGTH 15,
            anfbn     TYPE  c LENGTH 44,
            hbkid     TYPE  c LENGTH 22,
            hktid     TYPE  c LENGTH 11,
            xref3     TYPE  c LENGTH 26,
            dtws1     TYPE  c LENGTH 11,
            zlspr     TYPE  c LENGTH 24,
            sgtxt     TYPE  c LENGTH 50,
            regio     TYPE  c LENGTH 6,
            usnam     TYPE  c LENGTH 12,
            zlsch     TYPE  c LENGTH 18,
            kostl     TYPE  c LENGTH 15,
            bktxt     TYPE  c LENGTH 18,
            xref1_hd  TYPE  c LENGTH 29,
            xref2_hd  TYPE  c LENGTH 29,
          END OF ly_rating_clientes.

  DATA: lt_dados      TYPE TABLE OF ly_rating_clientes,
        ls_dados      TYPE ly_rating_clientes,
        lt_txt        TYPE truxs_t_text_data,

        local_arquivo TYPE string.

  " Cabeçalho
  ls_dados-bukrs    = 'Empresa'.
  ls_dados-bupla    = 'Local de negócios'.
  ls_dados-konzs    = 'Chave grupo empresas'.
  ls_dados-name1    = 'Descrição grupo empresas'.
  ls_dados-kunnr    = 'Código do Cliente'.
  ls_dados-name2    = 'Nome do Cliente'.
  ls_dados-belnr    = 'Número documento'.
  ls_dados-zuonr    = 'Número atribuição'.
  ls_dados-blart    = 'Tipo documento'.
  ls_dados-xblnr    = 'Número documento de referência'.
  ls_dados-buzei    = 'Número linha lançamento'.
  ls_dados-uzawe    = 'Suplemento forma pagamento'.
  ls_dados-umskz    = 'Código Razão Especial'.
  ls_dados-dmbtr    = 'Montante'.
  ls_dados-venc_liq = 'Vencimento líquido'.
  ls_dados-bldat    = 'Data documento'.
  ls_dados-augdt    = 'Data compensação'.
  ls_dados-augbl    = 'Número documento compensação'.
  ls_dados-budat    = 'Data lançamento'.
  ls_dados-anfbn    = 'Número documento solicitação letra de câmbio'.
  ls_dados-hbkid    = 'Chave banco da empresa'.
  ls_dados-hktid    = 'Chave conta'.
  ls_dados-xref3    = 'Chave referência item doc.'.
  ls_dados-dtws1    = 'Instrução 1'.
  ls_dados-zlspr    = 'Chave bloqueio pagamento'.
  ls_dados-sgtxt    = 'Texto do item'.
  ls_dados-regio    =  'Região'.
  ls_dados-usnam    =  'Usuário'.
  ls_dados-zlsch    =  'Forma de pagamento'.
  ls_dados-kostl    =  'Centro de custo'.
  ls_dados-bktxt    =  'Texto de cabeçalho'.
  ls_dados-xref1_hd =  'Chave ref.1 interna cabeçalho'.
  ls_dados-xref2_hd =  'Chave ref.2 interna cabeçalho'.

  APPEND ls_dados TO lt_dados.

  " Item
  LOOP AT it_dados INTO st_dados.

    ls_dados-bukrs    = st_dados-bukrs   .
    ls_dados-bupla    = st_dados-bupla   .
    ls_dados-konzs    = st_dados-konzs   .
    ls_dados-name1    = st_dados-name1   .
    ls_dados-kunnr    = st_dados-kunnr   .
    ls_dados-name2    = st_dados-name2   .
    ls_dados-belnr    = st_dados-belnr   .
    ls_dados-zuonr    = st_dados-zuonr   .
    ls_dados-blart    = st_dados-blart   .
    ls_dados-xblnr    = st_dados-xblnr   .
    ls_dados-buzei    = st_dados-buzei   .
    ls_dados-uzawe    = st_dados-uzawe   .
    ls_dados-umskz    = st_dados-umskz   .
    ls_dados-dmbtr    = st_dados-dmbtr   .
    ls_dados-venc_liq = st_dados-venc_liq.
    ls_dados-bldat    = st_dados-bldat   .
    ls_dados-augdt    = st_dados-augdt   .
    ls_dados-augbl    = st_dados-augbl   .
    ls_dados-budat    = st_dados-budat   .
    ls_dados-anfbn    = st_dados-anfbn   .
    ls_dados-hbkid    = st_dados-hbkid   .
    ls_dados-hktid    = st_dados-hktid   .
    ls_dados-xref3    = st_dados-xref3   .
    ls_dados-dtws1    = st_dados-dtws1   .
    ls_dados-zlspr    = st_dados-zlspr   .
    ls_dados-sgtxt    = st_dados-sgtxt   .
    ls_dados-regio    = st_dados-regio   .
    ls_dados-usnam    = st_dados-usnam   .
    ls_dados-zlsch    = st_dados-zlsch   .
    ls_dados-kostl    = st_dados-kostl   .
    ls_dados-bktxt    = st_dados-bktxt   .
    ls_dados-xref1_hd = st_dados-xref1_hd.
    ls_dados-xref2_hd = st_dados-xref2_hd.

    APPEND ls_dados TO lt_dados.

  ENDLOOP.

  CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
    EXPORTING
      i_field_seperator          = ';'
    TABLES
      i_tab_sap_data             = lt_dados
    CHANGING
      i_tab_converted_data       = lt_txt
    EXCEPTIONS
      CONVERSION_FAILED          = 1
      OTHERS                     = 2.

  CONCATENATE p_arq 'csv' INTO local_arquivo SEPARATED BY '.'.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename                = local_arquivo
      filetype                = 'ASC'
*      write_field_separator   = ';'
    TABLES
*      data_tab                = lt_dados
      data_tab                = lt_txt
    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.
    IF sy-batch IS INITIAL.
      MESSAGE 'Arquivo gravado com sucesso!' TYPE 'S'.
    ENDIF.
  ELSE.
    IF sy-batch IS INITIAL.
      MESSAGE 'Erro ao gravar arquivo!' TYPE 'S' DISPLAY LIKE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.                    " GERAR_CSV_LOCAL

*&---------------------------------------------------------------------*
*&      Form  GERAR_CSV_SERVIDOR
*&---------------------------------------------------------------------*
FORM GERAR_CSV_SERVIDOR .

  DATA: servidor_arquivo TYPE string,

        lv_linha  TYPE string,
        lv_dmbtr  TYPE c LENGTH 15.

  CONCATENATE p_arq 'csv' INTO servidor_arquivo SEPARATED BY '.'.

  OPEN DATASET servidor_arquivo FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

  CONCATENATE 'Empresa'  'Local de negócios'  'Chave grupo empresas'  'Descrição grup
o empresas'  'Código do Cliente'
              'Nome do Cliente'  'Número documento'  'Número atribuição'  'Tipo docum
ento'  'Número documento de referência'
              'Número linha lançamento'  'Suplemento forma pagamento'  'Código Razão 
Especial'  'Montante'  'Vencimento líquido'
              'Data documento'  'Data compensação'  'Número documento compensação'  '
Data lançamento'  'Número documento solicitação letra de câmbio'
              'Chave banco da empresa'  'Chave conta'  'Chave referência item doc.'  
'Instrução 1'  'Chave bloqueio pagamento'
              'Texto do item'  'Região'  'Usuário'  'Forma de pagamento'  'Centro de 
custo'  'Texto de cabeçalho'
              'Chave ref.1 interna cabeçalho'  'Chave ref.2 interna cabeçalho'
         INTO lv_linha SEPARATED BY ';'.

  TRANSFER lv_linha TO servidor_arquivo.

  LOOP AT it_dados INTO st_dados.

    CLEAR lv_linha.

    lv_dmbtr = st_dados-dmbtr.

    CONCATENATE st_dados-bukrs      st_dados-bupla      st_dados-konzs
                st_dados-name1      st_dados-kunnr      st_dados-name2
                st_dados-belnr      st_dados-zuonr      st_dados-blart
                st_dados-xblnr      st_dados-buzei      st_dados-uzawe
                st_dados-umskz      lv_dmbtr            st_dados-venc_liq
                st_dados-bldat      st_dados-augdt      st_dados-augbl
                st_dados-budat      st_dados-anfbn      st_dados-hbkid
                st_dados-hktid      st_dados-xref3      st_dados-dtws1
                st_dados-zlspr      st_dados-sgtxt      st_dados-regio
                st_dados-usnam      st_dados-zlsch      st_dados-kostl
                st_dados-bktxt      st_dados-xref1_hd   st_dados-xref2_hd
           INTO lv_linha SEPARATED BY ';'.
    TRANSFER lv_linha TO servidor_arquivo.

  ENDLOOP.

  CLOSE DATASET servidor_arquivo.

  IF sy-subrc = 0.
    IF sy-batch IS INITIAL.
      MESSAGE 'Arquivo gravado com sucesso!' TYPE 'S'.
    ENDIF.
  ELSE.
    IF sy-batch IS INITIAL.
      MESSAGE 'Erro ao gravar arquivo!' TYPE 'S' DISPLAY LIKE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.                    " GERAR_CSV_SERVIDOR

*&---------------------------------------------------------------------*
*&      Form  F_BDCDATA_PROGRAM
*&---------------------------------------------------------------------*
FORM F_BDCDATA_PROGRAM  USING    VALUE(p_program)
                                 VALUE(p_dynpro)
                                 VALUE(p_dynbegin).

  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = p_program.
  BDCDATA-DYNPRO   = p_dynpro.
  BDCDATA-DYNBEGIN = p_dynbegin.
  APPEND BDCDATA.

ENDFORM.                    " F_BDCDATA_PROGRAM

*&---------------------------------------------------------------------*
*&      Form  F_BDCDATA_DATA
*&---------------------------------------------------------------------*
FORM F_BDCDATA_DATA  USING    VALUE(p_fnam)
                              VALUE(p_fval).

  CLEAR BDCDATA.
  BDCDATA-FNAM = p_fnam.
  BDCDATA-FVAL = p_fval.
  APPEND BDCDATA.

ENDFORM.                    " F_BDCDATA_DATA

You might also like