You are on page 1of 66

*======================================================================*

* LOJAS AMERICANAS S/A *


*======================================================================*
* Transao: ZFI311 *
* Programa : ZFINTESOR015 *
* Funo : Pr-seleo de NF para envio aos Bancos de Fomentos. *
* Analista : Klber Souza *
* Autor : Bruno Santos *
* Data : 08.12.2014 *
*======================================================================*
* Log de Modificaes: *
*======================================================================*
* Data |Descrio |Autor *
* | | *
*======================================================================*
REPORT zfintesor015 MESSAGE-ID z1
NO STANDARD PAGE HEADING
LINE-SIZE 120
LINE-COUNT 65.

*======================================================================*
* INCLUDES
*======================================================================*
INCLUDE <icon>.

*======================================================================*
* ESTRUTURAS
*======================================================================*
TYPES:
"Estrutura SISPRO
BEGIN OF y_sispro,
zlifnrnf(20) TYPE c,
hkont TYPE bseg-hkont,
sgtxt TYPE bseg-sgtxt,
branch TYPE j_1bbranc_,
kostl TYPE bseg-kostl,
zbem_inc(20) TYPE c,
zbem(15) TYPE c,
zinc(4) TYPE c,
zdesc_bem(200) TYPE c,
zbranch TYPE j_1bbranc_,
znf(20) TYPE c,
zloc(20) TYPE c,
zesp(20) TYPE c,
zsli(20) TYPE c,
zgitem(20) TYPE c,
zprojeto(20) TYPE c,
zqtd TYPE int4,
zpedforn(20) TYPE c,
zrespinv(20) TYPE c,
zdtaquis TYPE bkpf-budat,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
wrbtr TYPE bseg-wrbtr,
zvldep TYPE bseg-wrbtr,
zvlres TYPE bseg-wrbtr,
zvlicms TYPE bseg-wrbtr,
budat TYPE bkpf-budat,
zdtinidpr TYPE bkpf-budat,
zdtultdpr TYPE bkpf-budat,
zpercdpr(6) TYPE c,
achou,
END OF y_sispro,

"Estrutura CAPEX
BEGIN OF y_capex,
zsq TYPE int4,
zclas(20) TYPE c,
zgrupo(20) TYPE c,
zhist(50) TYPE c,
bldat TYPE bkpf-bldat,
zdocfis(20) TYPE c,
wrbtr2 TYPE bseg-wrbtr,
blart TYPE bkpf-blart,
belnr TYPE bseg-belnr,
hkont2 TYPE bseg-hkont,
sgtxt2 TYPE bseg-sgtxt,
zlifnrnf(20) TYPE c,
gjahr TYPE gjahr,
augdt TYPE bseg-augdt,
augbl TYPE bseg-augbl,
wrbtr3 TYPE bseg-wrbtr,
stcd1 TYPE lfa1-stcd1,
zlspr(23) TYPE c,
budat2 TYPE bkpf-bldat,
nebtr TYPE bseg-nebtr,
END OF y_capex,

"Estrutura de Sada
BEGIN OF y_saida,
"CAPEX
status(18) TYPE c,
zsq TYPE int4,
zclas(20) TYPE c,
zgrupo(20) TYPE c,
zhist(50) TYPE c,
bldat TYPE bkpf-bldat,
zdocfis(20) TYPE c,
wrbtr2 TYPE bseg-wrbtr,
blart TYPE bkpf-blart,
belnr TYPE bseg-belnr,
hkont2 TYPE bseg-hkont,
sgtxt2 TYPE bseg-sgtxt,
"SISPRO
zlifnrnf(20) TYPE c,
hkont TYPE bseg-hkont,
sgtxt TYPE bseg-sgtxt,
branch TYPE j_1bbranc_,
kostl TYPE bseg-kostl,
zbem_inc(20) TYPE c,
zbem(15) TYPE c,
zinc(4) TYPE c,
zdesc_bem(200) TYPE c,
zbranch TYPE j_1bbranc_,
znf(20) TYPE c,
zloc(20) TYPE c,
zesp(20) TYPE c,
zsli(20) TYPE c,
zgitem(20) TYPE c,
zprojeto(20) TYPE c,
zqtd TYPE int4,
zpedforn(20) TYPE c,
zrespinv(20) TYPE c,
zdtaquis TYPE bkpf-budat,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
wrbtr TYPE bseg-wrbtr,
zvldep TYPE bseg-wrbtr,
zvlres TYPE bseg-wrbtr,
zvlicms TYPE bseg-wrbtr,
budat TYPE bkpf-budat,
zdtinidpr TYPE bkpf-budat,
zdtultdpr TYPE bkpf-budat,
zpercdpr(6) TYPE c,
"OUTROS
augdt TYPE bseg-augdt,
augbl TYPE bseg-augbl,
wrbtr3 TYPE bseg-wrbtr,
stcd1 TYPE lfa1-stcd1,
zlspr(23) TYPE c,
budat2 TYPE bkpf-bldat,
nebtr TYPE bseg-nebtr,
END OF y_saida.

*======================================================================*
* TABELAS INTERNAS
*======================================================================*
DATA: t_sheets TYPE soi_sheets_table,
t_data TYPE soi_generic_table,
t_ranges TYPE soi_range_list,
t_sheets2 TYPE soi_sheets_table,
t_capex TYPE TABLE OF y_capex,
t_sispro TYPE TABLE OF y_sispro,
t_saida TYPE TABLE OF y_saida,
t_fieldcat TYPE lvc_t_fcat,
t_sort TYPE lvc_t_sort,
t_color TYPE lvc_t_scol.

*======================================================================*
* WORK AREAS
*======================================================================*
DATA: wa_saida TYPE y_saida.

*======================================================================*
* VARIVEIS GLOBAIS
*======================================================================*
DATA: vg_document_url TYPE c LENGTH 500,
vg_document_url2 TYPE c LENGTH 500.

*======================================================================*
* OBJETOS
*======================================================================*
DATA: dir_container TYPE REF TO cl_gui_frontend_services,
ref_document TYPE REF TO i_oi_document_proxy,
ref_spreadsheet TYPE REF TO i_oi_spreadsheet,
ref_error TYPE REF TO i_oi_error,
ref_control TYPE REF TO i_oi_container_control,
ref_container TYPE REF TO cl_gui_custom_container,
dir_container2 TYPE REF TO cl_gui_frontend_services,
ref_document2 TYPE REF TO i_oi_document_proxy,
ref_spreadsheet2 TYPE REF TO i_oi_spreadsheet,
ref_error2 TYPE REF TO i_oi_error,
ref_control2 TYPE REF TO i_oi_container_control,
ref_container2 TYPE REF TO cl_gui_custom_container,
vg_variant TYPE disvariant,
og_splitter TYPE REF TO cl_gui_docking_container ,
dockingtop TYPE REF TO cl_gui_docking_container,
alv_bottom TYPE REF TO cl_gui_alv_grid,
alv_top TYPE REF TO cl_gui_alv_grid,
og_document TYPE REF TO cl_dd_document,
og_doctable TYPE REF TO cl_dd_table_element,
og_column TYPE REF TO cl_dd_area,
lo_columns TYPE REF TO cl_salv_columns_table.

*======================================================================*
* TELA DE SELEO
*======================================================================*
* Local de Carregamento da Planilha
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-004.
*
PARAMETERS: p_loc RADIOBUTTON GROUP g2 DEFAULT 'X' USER-COMMAND trata_tela,
p_ser RADIOBUTTON GROUP g2.
*
SELECTION-SCREEN END OF BLOCK b3.
*
* Carregar Planilha - Servidor
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
*
PARAMETERS: p_fil TYPE localfile MODIF ID gr4.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 16(17) text-024 MODIF ID gr4.
SELECTION-SCREEN POSITION 33.
PARAMETERS: p_asis TYPE localfile MODIF ID gr4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
PARAMETERS: p_fil2 TYPE localfile MODIF ID gr4.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 16(17) text-024 MODIF ID gr4.
SELECTION-SCREEN POSITION 33.
PARAMETERS: p_acap TYPE localfile MODIF ID gr4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
*
SELECTION-SCREEN END OF BLOCK b1.
*
* Carregar Planilha - Local
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-001.
* Carregar Planilha - Local
PARAMETERS: p_file TYPE localfile MODIF ID gr3.
SELECTION-SCREEN SKIP.
PARAMETERS: p_file2 TYPE localfile MODIF ID gr3.
*
SELECTION-SCREEN END OF BLOCK b4.
*
* Opo de Salvamento
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
*
* Servidor
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER: p_rede RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND ac.
SELECTION-SCREEN COMMENT 04(28) text-021.
SELECTION-SCREEN POSITION 33.
PARAMETERS: p_dir2 LIKE rlgrap-filename MODIF ID di2.
SELECTION-SCREEN END OF LINE.
* - Nome Arquivo
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 11(18) text-024.
SELECTION-SCREEN POSITION 33.
PARAMETERS: p_arq LIKE rlgrap-filename MODIF ID ar1.
SELECTION-SCREEN END OF LINE.
*- Extenso Arquivo
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 33.
SELECTION-SCREEN COMMENT 11(21) text-027.
PARAMETER: p_typ1 TYPE char3 OBLIGATORY DEFAULT 'CSV' MODIF ID tp1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Local
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER: p_local RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 04(25) text-022.
SELECTION-SCREEN POSITION 33.
PARAMETERS: p_dir LIKE rlgrap-filename MODIF ID dir.
SELECTION-SCREEN END OF LINE.
* - Nome Arquivo
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 11(18) text-024.
SELECTION-SCREEN POSITION 33.
PARAMETERS: p_arq2 LIKE rlgrap-filename MODIF ID ar2.
SELECTION-SCREEN END OF LINE.
*- Extenso Arquivo
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 33.
SELECTION-SCREEN COMMENT 11(21) text-027.
PARAMETER: p_typ2 TYPE char3 OBLIGATORY DEFAULT 'CSV' MODIF ID tp2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Interface Grfica
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER: p_graf RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 04(28) text-023.
SELECTION-SCREEN END OF LINE.
*
SELECTION-SCREEN END OF BLOCK b2.

*======================================================================*
* AT SELECTION-SCREEN OUTPUT
*======================================================================*
AT SELECTION-SCREEN OUTPUT.
"Valida o local de salvamento do arquivo
PERFORM valida_local_salvamento.

"Tratamento se para buscar no SERVIDOR ou LOCAL


PERFORM trata_tela.
*======================================================================*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_typ1.
"Ajuda de pesquisa da extenso de arquivo SERVIDOR
PERFORM matchcode_tp_salvamento CHANGING p_typ1.

*======================================================================*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_typ2.
"Ajuda de pesquisa da extenso de arquivo LOCAL
PERFORM matchcode_tp_salvamento CHANGING p_typ2.

*======================================================================*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
"Ajuda de pesquisa para exibio do caminho que ser salvo o arquivo
PERFORM pesquisa_dir CHANGING p_dir.

*======================================================================*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
"Ajuda de pesquisa para exibio do caminho que ser salvo o arquivo
PERFORM caminho_dir.

*======================================================================*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file2.
"Ajuda de pesquisa para exibio do caminho que ser salvo o arquivo
PERFORM caminho_dir_2.

*======================================================================*
* INICIALIZAO
*======================================================================*
INITIALIZATION.

"Monta o container para a leitura da planilha


PERFORM inicializa_container_excel.

"Monta o container para a leitura da planilha


PERFORM inicializa_container_excel_2.

*======================================================================*
* INCIO DO PROCESSAMENTO
*======================================================================*
START-OF-SELECTION.

"Se o Carregamento da Planilha for LOCAL


IF p_loc IS NOT INITIAL.

"Monta os arquivos da planilha LOCAL


PERFORM monta_arquivos_locais.

ELSE.
"Monta os arquivos da planilha no SERVIDOR
PERFORM busca_arquivos_servidor.

ENDIF.

"Monta os dados de sada


PERFORM monta_dados.

"Verifica opo de salvamento


PERFORM verifica_salvamento.

END-OF-SELECTION.
*
*======================================================================*
* FORMS
*======================================================================*
*&---------------------------------------------------------------------*
*& Form INICIALIZA_CONTAINER_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM inicializa_container_excel .

"Inicia o container para a leitura da planilha do Excel


CALL METHOD c_oi_container_control_creator=>get_container_control
IMPORTING
control = ref_control
error = ref_error
* retcode =
.

"Verifica se ocorreu algum erro na gerao


IF ref_error->has_failed = 'X'.
CALL METHOD ref_error->raise_message
EXPORTING
type = 'E'.
ENDIF.

"Monta o container
CREATE OBJECT ref_container
EXPORTING
* parent =
container_name = 'CONT'
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH 'Error while creating container'.
ENDIF.

"Gera e inicializa o controle


CALL METHOD ref_control->init_control
EXPORTING
* dynpro_nr = SY-DYNNR
* gui_container = ' '
inplace_enabled = 'X'
* inplace_mode = 0
* inplace_resize_documents = ' '
* inplace_scroll_documents = ' '
* inplace_show_toolbars = 'X'
* no_flush = ' '
* parent_id = cl_gui_cfw=>dynpro_0
r3_application_name = 'EXCEL CONTAINER'
* register_on_close_event = ' '
* register_on_custom_event = ' '
* rep_id = SY-REPID
* shell_style = 1384185856
parent = ref_container
* name =
* autoalign = 'x'
IMPORTING
error = ref_error
* retcode =
EXCEPTIONS
javabeannotsupported = 1
OTHERS = 2.

"Verifica se ocorreu algum erro na gerao


IF ref_error->has_failed = 'X'.
CALL METHOD ref_error->raise_message
EXPORTING
type = 'E'.
ENDIF.

"Cria uma instncia para a gesto de um documento


CALL METHOD ref_control->get_document_proxy
EXPORTING
* document_format = 'NATIVE'
document_type = soi_doctype_excel_sheet
* no_flush = ' '
* register_container = ' '
IMPORTING
document_proxy = ref_document
error = ref_error
* retcode =
.
"Verifica se ocorreu algum erro
IF ref_error->has_failed = 'X'.
CALL METHOD ref_error->raise_message
EXPORTING
type = 'E'.
ENDIF.

ENDFORM. " INICIALIZA_CONTAINER_EXCEL


*&---------------------------------------------------------------------*
*& Form INICIALIZA_CONTAINER_EXCEL_2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM inicializa_container_excel_2.

"Inicia o container para a leitura da planilha do Excel


CALL METHOD c_oi_container_control_creator=>get_container_control
IMPORTING
control = ref_control2
error = ref_error2
* retcode =
.

"Verifica se ocorreu algum erro na gerao


IF ref_error2->has_failed = 'X'.
CALL METHOD ref_error2->raise_message
EXPORTING
type = 'E'.
ENDIF.

"Monta o container
CREATE OBJECT ref_container2
EXPORTING
* parent =
container_name = 'CONT2'
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.

IF sy-subrc <> 0.
MESSAGE e001(00) WITH 'Error while creating container'.
ENDIF.

"Gera e inicializa o controle


CALL METHOD ref_control2->init_control
EXPORTING
* dynpro_nr = SY-DYNNR
* gui_container = ' '
inplace_enabled = 'X'
* inplace_mode = 0
* inplace_resize_documents = ' '
* inplace_scroll_documents = ' '
* inplace_show_toolbars = 'X'
* no_flush = ' '
* parent_id = cl_gui_cfw=>dynpro_0
r3_application_name = 'EXCEL CONTAINER'
* register_on_close_event = ' '
* register_on_custom_event = ' '
* rep_id = SY-REPID
* shell_style = 1384185856
parent = ref_container2
* name =
* autoalign = 'x'
IMPORTING
error = ref_error2
* retcode =
EXCEPTIONS
javabeannotsupported = 1
OTHERS = 2.

"Verifica se ocorreu algum erro na gerao


IF ref_error2->has_failed = 'X'.
CALL METHOD ref_error2->raise_message
EXPORTING
type = 'E'.
ENDIF.

"Cria uma instncia para a gesto de um documento


CALL METHOD ref_control2->get_document_proxy
EXPORTING
* document_format = 'NATIVE'
document_type = soi_doctype_excel_sheet
* no_flush = ' '
* register_container = ' '
IMPORTING
document_proxy = ref_document2
error = ref_error2
* retcode =
.
"Verifica se ocorreu algum erro
IF ref_error2->has_failed = 'X'.
CALL METHOD ref_error2->raise_message
EXPORTING
type = 'E'.
ENDIF.

ENDFORM. " INICIALIZA_CONTAINER_EXCEL_2


*&---------------------------------------------------------------------*
*& Form CAMINHO_DIR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM caminho_dir .

"Variveis locais
DATA: t_path TYPE filetable,
wa_path LIKE file_table,
vl_rc TYPE i.

"Chama o mtodo construtor da classe cl_gui_frontend_services


CREATE OBJECT dir_container.
"Chama o mtodo que abre a caixa de dilogo pra escolha do arquivo
"com os materiais e quantidades
CALL METHOD dir_container->file_open_dialog
EXPORTING
window_title = 'Selecionar Arquivo'
default_extension = 'XLS'
initial_directory = 'C:\'
CHANGING
file_table = t_path
rc = vl_rc.

"Se cancelar a busca


IF t_path[] IS INITIAL.
STOP.
ELSE.

"Atribui o caminho escolhido ao parmetro da tela de seleo


READ TABLE t_path INTO wa_path INDEX 1.

p_file = wa_path-filename.

ENDIF.

CALL METHOD dir_container->free.

ENDFORM. " CAMINHO_DIR


*&---------------------------------------------------------------------*
*& Form CAMINHO_DIR_2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM caminho_dir_2 .

"Variveis locais
DATA: t_path TYPE filetable,
wa_path LIKE file_table,
vl_rc TYPE i.

"Chama o mtodo construtor da classe cl_gui_frontend_services


CREATE OBJECT dir_container2.

"Chama o mtodo que abre a caixa de dilogo pra escolha do arquivo


"com os materiais e quantidades
CALL METHOD dir_container2->file_open_dialog
EXPORTING
window_title = 'Selecionar Arquivo'
default_extension = 'XLS'
initial_directory = 'C:\'
CHANGING
file_table = t_path
rc = vl_rc.

"Se cancelar a busca


IF t_path[] IS INITIAL.
STOP.
ELSE.
"Atribui o caminho escolhido ao parmetro da tela de seleo
READ TABLE t_path INTO wa_path INDEX 1.

p_file2 = wa_path-filename.

ENDIF.

CALL METHOD dir_container2->free.

ENDFORM. " CAMINHO_DIR_2


*&---------------------------------------------------------------------*
*& Form MATCHCODE_TP_SALVAMENTO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM matchcode_tp_salvamento CHANGING p_typ1.

"Estruturas Lcoais
TYPES: BEGIN OF y_op_salvamento,
extensao TYPE char3,
END OF y_op_salvamento.

"Declaraes Locais
DATA: t_ret_tab TYPE TABLE OF ddshretval,
wa_ret_tab LIKE LINE OF t_ret_tab,
t_fields TYPE TABLE OF dfies,
wa_fields LIKE LINE OF t_fields,
t_value TYPE TABLE OF text100,
t_op_salvamento TYPE TABLE OF y_op_salvamento,
wa_op_salvamento TYPE y_op_salvamento.

"Monta as opes da ajuda de pesquisa


wa_op_salvamento = 'CSV'.
APPEND wa_op_salvamento TO t_op_salvamento.

wa_op_salvamento = 'TXT'.
APPEND wa_op_salvamento TO t_op_salvamento.

"Cria a ajuda de pesquisa


CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'EXTENSAO'
window_title = 'Opes de Salvamento'
value_org = 'S'
dynpprog = sy-cprog
dynpnr = sy-dynnr
display = 'F'
TABLES
value_tab = t_op_salvamento
return_tab = t_ret_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.

"Retorna o valor selecionado


READ TABLE t_ret_tab INTO wa_ret_tab INDEX 1.
IF sy-subrc EQ 0.
p_typ1 = wa_ret_tab-fieldval.
ENDIF.

ENDFORM. " MATCHCODE_TP_SALVAMENTO


*&---------------------------------------------------------------------*
*& Form PESQUISA_DIR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_PA_DIR text
*----------------------------------------------------------------------*
FORM pesquisa_dir CHANGING lc_arq.

DATA: lc_window TYPE string,


vg_path_local TYPE string.

lc_window = 'Diretrio de Destino'.

* Atribui o Diretrio Local de Sada para o Download.


CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = lc_window
* initial_folder = 'Q:'
CHANGING
selected_folder = vg_path_local
EXCEPTIONS
cntl_error = 1.

*=---------------------------------------------------------------------
CALL METHOD cl_gui_cfw=>flush.
*=---------------------------------------------------------------------
IF sy-subrc <> 0.
* Erro ao acessar o Diretrio de Sada.
MESSAGE s001(zl) WITH 'Erro ao acessar o Diretrio de Sada'.
STOP.
ELSE.
lc_arq = vg_path_local.
ENDIF.

CONCATENATE lc_arq '\' INTO lc_arq.

ENDFORM. " PESQUISA_DIR


*&---------------------------------------------------------------------*
*& Form LEITURA_PLANILHA_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM leitura_planilha_excel .

"Verifica se o caminho do arquivo foi preenchida


IF p_file IS INITIAL OR
p_file2 IS INITIAL.

MESSAGE s900 WITH 'O Caminho da Planilha de '


'Preenchimento Obrigatrio!' DISPLAY LIKE 'E'.
STOP.

ENDIF.

"Monta o caminho da planilha


CONCATENATE 'FILE://' p_file INTO vg_document_url.

"Abre a planilha
CALL METHOD ref_document->open_document
EXPORTING
document_title = 'Excel'
document_url = vg_document_url
* no_flush = ' '
open_inplace = 'X'
* open_readonly = ' '
* protect_document = ' '
* onsave_macro = 'X'
* startup_macro = 'X'
* user_info =
IMPORTING
error = ref_error
* retcode =
.

"Verifica se ocorreu algum erro na abertura da planilha


IF ref_error->has_failed = 'X'.
CALL METHOD ref_error->raise_message
EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.
ENDIF.

"Fornece uma referncia de interface


CALL METHOD ref_document->get_spreadsheet_interface
EXPORTING
no_flush = ' '
IMPORTING
error = ref_error
sheet_interface = ref_spreadsheet
* retcode =
.
"Verifica se ocorreu algum erro na referncia de interface
IF ref_error->has_failed = 'X'.
CALL METHOD ref_error->raise_message
EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.
ENDIF.

"Obtm o nome das planilhas


CALL METHOD ref_spreadsheet->get_sheets
EXPORTING
no_flush = ' '
* updating = -1
IMPORTING
sheets = t_sheets
error = ref_error
* retcode =
.
"Verifica se ocorreu algum erro na obteo do nome das planilhas
IF ref_error->has_failed = 'X'.
CALL METHOD ref_error->raise_message
EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.
ENDIF.

ENDFORM. " LEITURA_PLANILHA_EXCEL


*&---------------------------------------------------------------------*
*& Form MONTA_TABELAS_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_tabelas_excel .

TYPES:
"Estrutura SISPRO para excel
BEGIN OF y_sispro_ex,
zlifnrnf TYPE char256,
hkont TYPE char256,
sgtxt TYPE char256,
branch TYPE char256,
kostl TYPE char256,
zbem_inc TYPE char256,
zbem TYPE char256,
zinc TYPE char256,
zdesc_bem TYPE char256,
zbranch TYPE char256,
znf TYPE char256,
zloc TYPE char256,
zesp TYPE char256,
zsli TYPE char256,
zgitem TYPE char256,
zprojeto TYPE char256,
zqtd TYPE char256,
zpedforn TYPE char256,
zrespinv TYPE char256,
zdtaquis TYPE char256,
lifnr TYPE char256,
name1 TYPE char256,
wrbtr TYPE char256,
zvldep TYPE char256,
zvlres TYPE char256,
zvlicms TYPE char256,
budat TYPE char256,
zdtinidpr TYPE char256,
zdtultdpr TYPE char256,
zpercdpr TYPE char256,
END OF y_sispro_ex.

"Tabelas locais
DATA: t_sispro_ex TYPE TABLE OF y_sispro_ex,
t_rcode TYPE soi_ret_string,
wa_sispro_ex TYPE y_sispro_ex,
wa_sispro TYPE y_sispro,
wa_ranges TYPE soi_range_item.

"Work areas locais


DATA: wa_sheets TYPE soi_sheets,
wa_data TYPE soi_generic_item.

"Variveis locais
DATA: vl_cont TYPE numc4,
vl_tabix TYPE sy-tabix,
vl_num TYPE numc07,
vg_rows TYPE i VALUE 9000, "1000000,
vg_cols TYPE i,
vl_wrbtr TYPE wrbtr,
vl_rows(4) TYPE c.

* * MONTA A PLANILHA 1 - SISPRO * *

* "L a tabela com as informaes e monta a tabela interna


* LOOP AT t_sheets INTO wa_sheets.

* "Seleciona a planilha
* CALL METHOD ref_spreadsheet->select_sheet
* EXPORTING
* name = wa_sheets-sheet_name
** no_flush = ' '
* IMPORTING
* error = ref_error
** retcode =
* .
* "Verifica se ocorreu algum erro
* IF ref_error->has_failed = 'X'.
* EXIT.
* ENDIF.
*
* "Limpa a varivel
* CLEAR vg_cols.
*
* "Adiciona o nmero de colunas
* vg_cols = 3000.
*
* "Busca a quantidade de linhas e colunas da planilha
* CALL METHOD ref_spreadsheet->set_selection
* EXPORTING
* top = 1
* left = 1
* rows = vg_rows
* columns = vg_cols.
*
* CALL METHOD ref_spreadsheet->insert_range
* EXPORTING
* columns = vg_cols
* rows = vg_cols
* name = wa_sheets-sheet_name
* IMPORTING
* retcode = t_rcode.
*
*CALL METHOD ref_spreadsheet->get_ranges_names
* IMPORTING
* ranges = t_ranges
* retcode = t_rcode.
*
** DELETE t_range_list WHERE name <> lsc_range.
*
* CALL METHOD ref_spreadsheet->get_ranges_data
* IMPORTING
* contents = t_data
* retcode = t_rcode
* CHANGING
* ranges = t_ranges.
*
** wa_ranges-name = wa_sheets-sheet_name.
** wa_ranges-rows = vg_rows.
** wa_ranges-columns = vg_cols.
** APPEND wa_ranges TO t_ranges.
*
** "Limpa a tabela
** REFRESH t_data[].
*
** "Obtm o nome e os dados da rea
** CALL METHOD ref_spreadsheet->get_ranges_data
** EXPORTING
** all = 'X'
*** updating = -1
*** rangesdef =
** IMPORTING
** contents = t_data
** error = ref_error
*** retcode =
** CHANGING
** ranges = t_ranges.
*
* LOOP AT t_data INTO wa_data.
*
* vl_tabix = sy-tabix.
*
* "Insere zeros esquerda
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_data-row
* IMPORTING
* output = wa_data-row.
*
* "Insere zeros esquerda
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_data-column
* IMPORTING
* output = wa_data-column.
*
* MODIFY t_data FROM wa_data INDEX vl_tabix.
*
* ENDLOOP.
*
* READ TABLE t_ranges INTO wa_ranges INDEX 1.
*
* CLEAR vl_rows.
*
* vl_rows = wa_ranges-rows + 1.
*
* "Insere zeros esquerda
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = vl_rows
* IMPORTING
* output = vl_rows.
*
* DELETE t_data WHERE row GT vl_rows.
*
* CLEAR wa_ranges.

"Monta a tabela com os valores da planilha excel


LOOP AT t_data INTO wa_data.

"Verifica o nmero da coluna


CASE wa_data-column.

WHEN 0001.
wa_sispro_ex-zlifnrnf = wa_data-value.
WHEN 0002.
wa_sispro_ex-hkont = wa_data-value.
WHEN 0003.
wa_sispro_ex-sgtxt = wa_data-value.
WHEN 0004.
wa_sispro_ex-branch = wa_data-value.
WHEN 0005.
wa_sispro_ex-kostl = wa_data-value.
WHEN 0006.
wa_sispro_ex-zbem_inc = wa_data-value.
WHEN 0007.
wa_sispro_ex-zbem = wa_data-value.
WHEN 0008.
wa_sispro_ex-zinc = wa_data-value.
WHEN 0009.
wa_sispro_ex-zdesc_bem = wa_data-value.
WHEN 0010.
wa_sispro_ex-zbranch = wa_data-value.
WHEN 0011.
wa_sispro_ex-znf = wa_data-value.
WHEN 0012.
wa_sispro_ex-zloc = wa_data-value.
WHEN 0013.
wa_sispro_ex-zesp = wa_data-value.
WHEN 0014.
wa_sispro_ex-zsli = wa_data-value.
WHEN 0015.
wa_sispro_ex-zgitem = wa_data-value.
WHEN 0016.
wa_sispro_ex-zprojeto = wa_data-value.
WHEN 0017.
wa_sispro_ex-zqtd = wa_data-value.
WHEN 0018.
wa_sispro_ex-zpedforn = wa_data-value.
WHEN 0019.
wa_sispro_ex-zrespinv = wa_data-value.
WHEN 0020.
wa_sispro_ex-zdtaquis = wa_data-value.
WHEN 0021.
wa_sispro_ex-lifnr = wa_data-value.
WHEN 0022.
wa_sispro_ex-name1 = wa_data-value.
WHEN 0023.
wa_sispro_ex-wrbtr = wa_data-value.
WHEN 0024.
wa_sispro_ex-zvldep = wa_data-value.
WHEN 0025.
wa_sispro_ex-zvlres = wa_data-value.
WHEN 0026.
wa_sispro_ex-zvlicms = wa_data-value.
WHEN 0027.
wa_sispro_ex-budat = wa_data-value.
WHEN 0028.
wa_sispro_ex-zdtinidpr = wa_data-value.
WHEN 0029.
wa_sispro_ex-zdtultdpr = wa_data-value.
WHEN 0030.
wa_sispro_ex-zpercdpr = wa_data-value.
ENDCASE.

"Controla a mudana de linha


AT END OF row.
APPEND wa_sispro_ex TO t_sispro_ex.
CLEAR wa_sispro_ex.
ENDAT.

ENDLOOP.

* ENDLOOP.

"Se a tabela vier preenchida


IF t_sispro_ex[] IS NOT INITIAL.

LOOP AT t_sispro_ex INTO wa_sispro_ex.

"Pula o cabealho
IF sy-tabix = 1.
CONTINUE.
ENDIF.

"Se o campo fornecedor estiver em branco, no existem mais dados


IF wa_sispro_ex-zlifnrnf IS INITIAL.
EXIT.
ENDIF.

wa_sispro-zlifnrnf = wa_sispro_ex-zlifnrnf.
wa_sispro-hkont = wa_sispro_ex-hkont.
wa_sispro-sgtxt = wa_sispro_ex-sgtxt.
wa_sispro-branch = wa_sispro_ex-branch.
wa_sispro-kostl = wa_sispro_ex-kostl.
wa_sispro-zbem_inc = wa_sispro_ex-zbem_inc.
wa_sispro-zbem = wa_sispro_ex-zbem.
wa_sispro-zinc = wa_sispro_ex-zinc.
TRANSLATE wa_sispro_ex-zdesc_bem USING ';,'.
wa_sispro-zdesc_bem = wa_sispro_ex-zdesc_bem.
wa_sispro-zbranch = wa_sispro_ex-zbranch.
wa_sispro-znf = wa_sispro_ex-znf.
wa_sispro-zloc = wa_sispro_ex-zloc.
wa_sispro-zesp = wa_sispro_ex-zesp.
wa_sispro-zsli = wa_sispro_ex-zsli.
wa_sispro-zgitem = wa_sispro_ex-zgitem.
wa_sispro-zprojeto = wa_sispro_ex-zprojeto.
wa_sispro-zqtd = wa_sispro_ex-zqtd.
wa_sispro-zpedforn = wa_sispro_ex-zpedforn.
wa_sispro-zrespinv = wa_sispro_ex-zrespinv.
CONCATENATE wa_sispro_ex-zdtaquis+6(4) wa_sispro_ex-zdtaquis+3(2)
wa_sispro_ex-zdtaquis(2) INTO wa_sispro-zdtaquis.
wa_sispro-lifnr = wa_sispro_ex-lifnr.
wa_sispro-name1 = wa_sispro_ex-name1.
TRANSLATE wa_sispro_ex-wrbtr USING '. '.
CONDENSE wa_sispro_ex-wrbtr NO-GAPS.
TRANSLATE wa_sispro_ex-wrbtr USING ',.'.
wa_sispro-wrbtr = wa_sispro_ex-wrbtr.
TRANSLATE wa_sispro_ex-zvldep USING '. '.
CONDENSE wa_sispro_ex-zvldep NO-GAPS.
TRANSLATE wa_sispro_ex-zvldep USING ',.'.
wa_sispro-zvldep = wa_sispro_ex-zvldep.
TRANSLATE wa_sispro_ex-zvlres USING '. '.
CONDENSE wa_sispro_ex-zvlres NO-GAPS.
TRANSLATE wa_sispro_ex-zvlres USING ',.'.
wa_sispro-zvlres = wa_sispro_ex-zvlres.
TRANSLATE wa_sispro_ex-zvlicms USING '. '.
CONDENSE wa_sispro_ex-zvlicms NO-GAPS.
TRANSLATE wa_sispro_ex-zvlicms USING ',.'.
wa_sispro-zvlicms = wa_sispro_ex-zvlicms.
CONCATENATE wa_sispro_ex-budat+6(4) wa_sispro_ex-budat+3(2)
wa_sispro_ex-budat(2) INTO wa_sispro-budat.
CONCATENATE wa_sispro_ex-zdtinidpr+6(4) wa_sispro_ex-zdtinidpr+3(2)
wa_sispro_ex-zdtinidpr(2) INTO wa_sispro-zdtinidpr.
CONCATENATE wa_sispro_ex-zdtultdpr+6(4) wa_sispro_ex-zdtultdpr+3(2)
wa_sispro_ex-zdtultdpr(2) INTO wa_sispro-zdtultdpr.
TRANSLATE wa_sispro_ex-zpercdpr USING '. '.
CONDENSE wa_sispro_ex-zpercdpr NO-GAPS.
TRANSLATE wa_sispro_ex-zpercdpr USING ',.'.
wa_sispro-zpercdpr = wa_sispro_ex-zpercdpr.

APPEND wa_sispro TO t_sispro.

ENDLOOP.

ENDIF.

"Limpa as tabelas utilizadas


REFRESH: t_sispro_ex[], t_data[].

ENDFORM. " MONTA_TABELAS_EXCEL


*&---------------------------------------------------------------------*
*& Form FECHA_PLANILHA_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fecha_planilha_excel .

** FECHA A PRIMEIRA PLANILHA**


"Fecha o documento no aplicativo do Office
CALL METHOD ref_document->close_document
* EXPORTING
* do_save = ' '
* no_flush = ' '
IMPORTING
error = ref_error
* has_changed =
* retcode =
.
"Verifica se ocorreu algum erro no fechamento
IF ref_error->has_failed = 'X'.

CALL METHOD ref_error->raise_message


EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.

ENDIF.

"Limpa a memria reservada para o documento


CALL METHOD ref_document->release_document
* EXPORTING
* no_flush = ' '
IMPORTING
error = ref_error
* retcode =
.
"Verifica se ocorreu algum erro na limpeza de memria
IF ref_error->has_failed = 'X'.

CALL METHOD ref_error->raise_message


EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.

ENDIF.

DATA: t_teste TYPE TABLE OF alsmex_tabline.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'


EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 1
i_end_col = 256
i_end_row = 100000
TABLES
intern = t_teste
* EXCEPTIONS
* INCONSISTENT_PARAMETERS = 1
* UPLOAD_OLE = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " FECHA_PLANILHA_EXCEL
*&---------------------------------------------------------------------*
*& Form LEITURA_PLANILHA_EXCEL2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM leitura_planilha_excel2 .

"Monta o caminho da planilha


CONCATENATE 'FILE://' p_file2 INTO vg_document_url2.

"Abre a planilha
CALL METHOD ref_document2->open_document
EXPORTING
document_title = 'Excel'
document_url = vg_document_url2
* no_flush = ' '
open_inplace = 'X'
* open_readonly = ' '
* protect_document = ' '
* onsave_macro = 'X'
* startup_macro = 'X'
* user_info =
IMPORTING
error = ref_error2.
* retcode =

"Verifica se ocorreu algum erro na abertura da planilha


IF ref_error2->has_failed = 'X'.
CALL METHOD ref_error2->raise_message
EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.
ENDIF.

"Fornece uma referncia de interface


CALL METHOD ref_document2->get_spreadsheet_interface
EXPORTING
no_flush = ' '
IMPORTING
error = ref_error2
sheet_interface = ref_spreadsheet2
* retcode =
.
"Verifica se ocorreu algum erro na referncia de interface
IF ref_error2->has_failed = 'X'.
CALL METHOD ref_error2->raise_message
EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.
ENDIF.

"Obtm o nome das planilhas


CALL METHOD ref_spreadsheet2->get_sheets
EXPORTING
no_flush = ' '
* updating = -1
IMPORTING
sheets = t_sheets2
error = ref_error2
* retcode =
.
"Verifica se ocorreu algum erro na obteo do nome das planilhas
IF ref_error2->has_failed = 'X'.
CALL METHOD ref_error2->raise_message
EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.
ENDIF.

ENDFORM. " LEITURA_PLANILHA_EXCEL2


*&---------------------------------------------------------------------*
*& Form MONTA_TABELAS_EXCEL2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_tabelas_excel2 .

TYPES:
"Estrutura CAPEX para excel
BEGIN OF y_capex_ex,
zsq TYPE char256,
zclas TYPE char256,
zgrupo TYPE char256,
zhist TYPE char256,
bldat TYPE char256,
zdocfis TYPE char256,
wrbtr2 TYPE char256,
blart TYPE char256,
belnr TYPE char256,
hkont2 TYPE char256,
sgtxt2 TYPE char256,
END OF y_capex_ex.

"Tabelas locais
DATA: t_capex_ex TYPE TABLE OF y_capex_ex.

"Work areas locais


DATA: wa_capex_ex TYPE y_capex_ex,
wa_capex TYPE y_capex,
wa_sheets TYPE soi_sheets,
wa_data TYPE soi_generic_item,
wa_ranges TYPE soi_range_item.

"Variveis locais
DATA: vl_cont TYPE numc4,
vl_tabix TYPE sy-tabix,
vl_num TYPE numc07,
vg_rows TYPE i VALUE 1000000,
vg_cols TYPE i,
vl_wrbtr TYPE wrbtr,
vl_rows(4) TYPE c.
* * MONTA A PLANILHA 2 - CAPEX * *

"L a tabela com as informaes e monta a tabela interna


LOOP AT t_sheets2 INTO wa_sheets.

"Seleciona a planilha
CALL METHOD ref_spreadsheet2->select_sheet
EXPORTING
name = wa_sheets-sheet_name
* no_flush = ' '
IMPORTING
error = ref_error2
* retcode =
.
"Verifica se ocorreu algum erro
IF ref_error2->has_failed = 'X'.
EXIT.
ENDIF.

"Limpa a varivel
CLEAR vg_cols.

"Adiciona o nmewro de colunas


vg_cols = 3000.

"Busca a quantidade de linhas e colunas da planilha


CALL METHOD ref_spreadsheet2->set_selection
EXPORTING
top = 1
left = 1
rows = vg_rows
columns = vg_cols.

"Limpa a tabela
REFRESH t_data[].

"Obtm o nome e os dados da rea


CALL METHOD ref_spreadsheet2->get_ranges_data
EXPORTING
* no_flush = ' '
all = 'X'
* updating = -1
* rangesdef =
IMPORTING
contents = t_data
error = ref_error
* retcode =
CHANGING
ranges = t_ranges.

* "Exclui os dados que no tem valores (em branco)


* DELETE t_data WHERE value IS INITIAL OR value = space.

LOOP AT t_data INTO wa_data.

vl_tabix = sy-tabix.

"Insere zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-row
IMPORTING
output = wa_data-row.

"Insere zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-column
IMPORTING
output = wa_data-column.

MODIFY t_data FROM wa_data INDEX vl_tabix.

ENDLOOP.

READ TABLE t_ranges INTO wa_ranges INDEX 1.

CLEAR vl_rows.

vl_rows = wa_ranges-rows + 1.

"Insere zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = vl_rows
IMPORTING
output = vl_rows.

DELETE t_data WHERE row GT vl_rows.

CLEAR wa_ranges.

"Monta a tabela com os valores da planilha excel


LOOP AT t_data INTO wa_data.

"Verifica o nmero da coluna


CASE wa_data-column.

WHEN 0001.
wa_capex_ex-zsq = wa_data-value.
WHEN 0002.
wa_capex_ex-zclas = wa_data-value.
WHEN 0003.
wa_capex_ex-zgrupo = wa_data-value.
WHEN 0004.
wa_capex_ex-zhist = wa_data-value.
WHEN 0005.
wa_capex_ex-bldat = wa_data-value.
WHEN 0006.
wa_capex_ex-zdocfis = wa_data-value.
WHEN 0007.
wa_capex_ex-wrbtr2 = wa_data-value.
WHEN 0008.
wa_capex_ex-blart = wa_data-value.
WHEN 0009.
wa_capex_ex-belnr = wa_data-value.
WHEN 0010.
wa_capex_ex-hkont2 = wa_data-value.
WHEN 0011.
wa_capex_ex-sgtxt2 = wa_data-value.
ENDCASE.

"Controla a mudana de linha


AT END OF row.
APPEND wa_capex_ex TO t_capex_ex.
CLEAR wa_capex_ex.
ENDAT.

ENDLOOP.

ENDLOOP.

"Se a tabela vier preenchida


IF t_capex_ex[] IS NOT INITIAL.

LOOP AT t_capex_ex INTO wa_capex_ex.

"Pula o cabealho
IF sy-tabix = 1.
CONTINUE.
ENDIF.

"Se o SEQ estiver em branco finaliza o LOOP


IF wa_capex_ex-zsq IS INITIAL.
EXIT.
ENDIF.

wa_capex-zsq = wa_capex_ex-zsq.
wa_capex-zclas = wa_capex_ex-zclas.
wa_capex-zgrupo = wa_capex_ex-zgrupo.
wa_capex-zhist = wa_capex_ex-zhist.
CONCATENATE wa_capex_ex-bldat+6(4) wa_capex_ex-bldat+3(2)
wa_capex_ex-bldat(2) INTO wa_capex-bldat.
wa_capex-gjahr = wa_capex-bldat(4).
TRANSLATE wa_capex_ex-zdocfis USING '- '.
CONDENSE wa_capex_ex-zdocfis NO-GAPS.
wa_capex-zdocfis = wa_capex_ex-zdocfis.
TRANSLATE wa_capex_ex-wrbtr2 USING '. '.
CONDENSE wa_capex_ex-wrbtr2 NO-GAPS.
TRANSLATE wa_capex_ex-wrbtr2 USING ',.'.
wa_capex-wrbtr2 = wa_capex_ex-wrbtr2.
wa_capex-blart = wa_capex_ex-blart.
"Insere zeros esquerda
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_capex_ex-belnr
IMPORTING
output = wa_capex-belnr.
wa_capex-hkont2 = wa_capex_ex-hkont2.
wa_capex-sgtxt2 = wa_capex_ex-sgtxt2.

APPEND wa_capex TO t_capex.

ENDLOOP.

ENDIF.
"Limpa as tabelas utilizadas
REFRESH: t_capex_ex[], t_data[].

ENDFORM. " MONTA_TABELAS_EXCEL


*&---------------------------------------------------------------------*
*& Form FECHA_PLANILHA_EXCEL2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fecha_planilha_excel2 .

** FECHA A SEGUNDA PLANILHA**

"Fecha o documento no aplicativo do Office


CALL METHOD ref_document2->close_document
* EXPORTING
* do_save = ' '
* no_flush = ' '
IMPORTING
error = ref_error2
* has_changed =
* retcode =
.
"Verifica se ocorreu algum erro no fechamento
IF ref_error2->has_failed = 'X'.

CALL METHOD ref_error2->raise_message


EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.

ENDIF.

"Limpa a memria reservada para o documento


CALL METHOD ref_document2->release_document
* EXPORTING
* no_flush = ' '
IMPORTING
error = ref_error2
* retcode =
.
"Verifica se ocorreu algum erro na limpeza de memria
IF ref_error2->has_failed = 'X'.

CALL METHOD ref_error2->raise_message


EXPORTING
type = 'I'.
LEAVE LIST-PROCESSING.

ENDIF.
ENDFORM. " FECHA_PLANILHA_EXCEL2
*&---------------------------------------------------------------------*
*& Form MONTA_DADOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_dados .

"Monta o FORNECEDOR_NOTA_FISCAL
PERFORM monta_cod_fornecedor_nf.

"Compara dados do CAPEX com o SISPRO


PERFORM compara_dados_capex_sispro.

ENDFORM. " MONTA_DADOS


*&---------------------------------------------------------------------*
*& Form VERIFICA_SALVAMENTO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM verifica_salvamento .

"Se a opo de salvar no servidor estiver marcada


IF p_rede IS NOT INITIAL.
PERFORM gravar_arquivo_servidor.
"Se a opo de salvar no local estiver marcada
ELSEIF p_local IS NOT INITIAL.
PERFORM gravar_arquivo_local.
ELSE.
"Seno para mostrar a opo grfica (ALV Grid)
PERFORM exibe_opcao_grafica.
ENDIF.

ENDFORM. " VERIFICA_SALVAMENTO


*&---------------------------------------------------------------------*
*& Form GRAVAR_ARQUIVO_SERVIDOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM gravar_arquivo_servidor .

TYPES:
"Estrutura do Excel
BEGIN OF y_excel,
status(18) TYPE c,
zsq(25) TYPE c,
zclas(25) TYPE c,
zgrupo(25) TYPE c,
zhist(50) TYPE c,
bldat(25) TYPE c,
zdocfis(25) TYPE c,
wrbtr2(25) TYPE c,
blart(25) TYPE c,
belnr(25) TYPE c,
hkont2(25) TYPE c,
sgtxt2(50) TYPE c,
zlifnrnf(30) TYPE c,
hkont(30) TYPE c,
sgtxt(50) TYPE c,
branch(25) TYPE c,
kostl(25) TYPE c,
zbem_inc(25) TYPE c,
zbem(25) TYPE c,
zinc(25) TYPE c,
zdesc_bem(200) TYPE c,
zbranch(25) TYPE c,
znf(25) TYPE c,
zloc(25) TYPE c,
zesp(25) TYPE c,
zsli(25) TYPE c,
zgitem(25) TYPE c,
zprojeto(25) TYPE c,
zqtd(25) TYPE c,
zpedforn(25) TYPE c,
zrespinv(25) TYPE c,
zdtaquis(25) TYPE c,
lifnr(25) TYPE c,
name1(35) TYPE c,
wrbtr(25) TYPE c,
zvldep(35) TYPE c,
zvlres(35) TYPE c,
zvlicms(35) TYPE c,
budat(25) TYPE c,
zdtinidpr(25) TYPE c,
zdtultdpr(25) TYPE c,
zpercdpr(25) TYPE c,
augdt(25) TYPE c,
augbl(25) TYPE c,
wrbtr3(25) TYPE c,
stcd1(20) TYPE c,
zlspr(25) TYPE c,
budat2(25) TYPE c,
nebtr(25) TYPE c,
END OF y_excel.

"Variveis locais
DATA: lv_arq(100) TYPE c,
lv_msg TYPE string.

"Variveis locais
DATA: lv_arq_pgt TYPE string.

"Tabelas Auxiliares
DATA: t_saida_aux TYPE TABLE OF y_excel,
t_excel TYPE truxs_t_text_data.

"Work Areas
DATA: wa_saida_aux TYPE y_excel,
wa_excel TYPE LINE OF truxs_t_text_data.

"Verifica se a tabela de exportao est preenchida


IF t_saida[] IS NOT INITIAL.

"Mostra a barra de progresso


CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Gravando o arquivo no Servidor...'.

"Monta o nome do arquivo que ser exportado


CONCATENATE p_dir2 p_arq
'.' p_typ1 INTO lv_arq.

"Monta o cabealho do arquivo


wa_saida_aux-status = 'Status'.
wa_saida_aux-zsq = 'SEQ'.
wa_saida_aux-zclas = 'CLASSIFICACAO'.
wa_saida_aux-zgrupo = 'Grupo'.
wa_saida_aux-zhist = 'Historico'.
wa_saida_aux-bldat = 'Data'.
wa_saida_aux-zdocfis = 'Documento Fiscal'.
wa_saida_aux-wrbtr2 = 'Valor'.
wa_saida_aux-blart = 'Tipo de lancamento'.
wa_saida_aux-belnr = 'DOC SAP'.
wa_saida_aux-hkont2 = 'Conta contabil'.
wa_saida_aux-sgtxt2 = 'Descricao da Conta'.
wa_saida_aux-zlifnrnf = 'FORNECEDOR_NOTA FISCAL'.
wa_saida_aux-hkont = 'Conta'.
wa_saida_aux-sgtxt = 'Descricao da conta'.
wa_saida_aux-branch = 'Esta'.
wa_saida_aux-kostl = 'Centro de'.
wa_saida_aux-zbem_inc = 'BEM + INC'.
wa_saida_aux-zbem = 'Bem'.
wa_saida_aux-zinc = 'Inc.'.
wa_saida_aux-zdesc_bem = 'Descricao do Bem'.
wa_saida_aux-zbranch = 'Loja Fisica'.
wa_saida_aux-znf = 'Documento de Aquisicao'.
wa_saida_aux-zloc = 'Localizacao'.
wa_saida_aux-zesp = 'Especie'.
wa_saida_aux-zsli = 'SLI'.
wa_saida_aux-zgitem = 'Grupo de Item'.
wa_saida_aux-zprojeto = 'PROJETO'.
wa_saida_aux-zqtd = 'Qt.It.'.
wa_saida_aux-zpedforn = 'Pedido de Fornecimento'.
wa_saida_aux-zrespinv = 'RESPONSAVEL INV'.
wa_saida_aux-zdtaquis = 'Dt.Aquis'.
wa_saida_aux-lifnr = 'Fornecedor'.
wa_saida_aux-name1 = 'Descricao do Fornecedor'.
wa_saida_aux-wrbtr = 'Valor Original Corrigido'.
wa_saida_aux-zvldep = 'Depreciacao Acumulada Corrigida'.
wa_saida_aux-zvlres = 'Residual Contabil Corrigido'.
wa_saida_aux-zvlicms = 'Valor ICMS'.
wa_saida_aux-budat = 'Dt.Ctb.'.
wa_saida_aux-zdtinidpr = 'DtIniDpr'.
wa_saida_aux-zdtultdpr = 'DtUltDpr'.
wa_saida_aux-zpercdpr = '% Dpr'.
wa_saida_aux-augdt = 'Data de Pagto'.
wa_saida_aux-augbl = 'Docto de Pagto'.
wa_saida_aux-wrbtr3 = 'Valor do Item'.
wa_saida_aux-stcd1 = 'CNPJ'.
wa_saida_aux-zlspr = 'Bloqueio'.
wa_saida_aux-budat2 = 'Data de Emissao da NF'.
wa_saida_aux-nebtr = 'Valor Efetivamente Pago'.
APPEND wa_saida_aux TO t_saida_aux.

"Monta o arquivo que ser exportado


LOOP AT t_saida INTO wa_saida.

wa_saida_aux-status = wa_saida-status.
wa_saida_aux-zsq = wa_saida-zsq.
wa_saida_aux-zclas = wa_saida-zclas.
wa_saida_aux-zgrupo = wa_saida-zgrupo.
wa_saida_aux-zhist = wa_saida-zhist.
CONCATENATE wa_saida-bldat+6(2) '/' wa_saida-bldat+4(2)
'/' wa_saida-bldat(4) INTO wa_saida_aux-bldat.
IF wa_saida_aux-bldat = '//'.
wa_saida_aux-bldat = '00/00/0000'.
ENDIF.
wa_saida_aux-zdocfis = wa_saida-zdocfis.
WRITE wa_saida-wrbtr2 TO wa_saida_aux-wrbtr2.
wa_saida_aux-blart = wa_saida-blart.
wa_saida_aux-belnr = wa_saida-belnr.
wa_saida_aux-hkont2 = wa_saida-hkont2.
wa_saida_aux-sgtxt2 = wa_saida-sgtxt2.
wa_saida_aux-zlifnrnf = wa_saida-zlifnrnf.
wa_saida_aux-hkont = wa_saida-hkont.
wa_saida_aux-sgtxt = wa_saida-sgtxt.
wa_saida_aux-branch = wa_saida-branch.
wa_saida_aux-kostl = wa_saida-kostl.
wa_saida_aux-zbem_inc = wa_saida-zbem_inc.
wa_saida_aux-zbem = wa_saida-zbem.
wa_saida_aux-zinc = wa_saida-zinc.
wa_saida_aux-zdesc_bem = wa_saida-zdesc_bem.
wa_saida_aux-zbranch = wa_saida-zbranch.
wa_saida_aux-znf = wa_saida-znf.
wa_saida_aux-zesp = wa_saida-zesp.
wa_saida_aux-zsli = wa_saida-zsli.
wa_saida_aux-zgitem = wa_saida-zgitem.
wa_saida_aux-zprojeto = wa_saida-zprojeto.
wa_saida_aux-zqtd = wa_saida-zqtd.
wa_saida_aux-zpedforn = wa_saida-zpedforn.
wa_saida_aux-zrespinv = wa_saida-zrespinv.
CONCATENATE wa_saida-zdtaquis+6(2) '/' wa_saida-zdtaquis+4(2)
'/' wa_saida-zdtaquis(4) INTO wa_saida_aux-zdtaquis.
IF wa_saida_aux-zdtaquis = '//'.
wa_saida_aux-zdtaquis = '00/00/0000'.
ENDIF.

wa_saida_aux-lifnr = wa_saida-lifnr.
wa_saida_aux-name1 = wa_saida-name1.
WRITE wa_saida-wrbtr TO wa_saida_aux-wrbtr.
WRITE wa_saida-zvldep TO wa_saida_aux-zvldep.
WRITE wa_saida-zvlres TO wa_saida_aux-zvlres.
WRITE wa_saida-zvlicms TO wa_saida_aux-zvlicms.
CONCATENATE wa_saida-budat+6(2) '/' wa_saida-budat+4(2)
'/' wa_saida-budat(4) INTO wa_saida_aux-budat.
IF wa_saida_aux-budat = '//'.
wa_saida_aux-budat = '00/00/0000'.
ENDIF.
CONCATENATE wa_saida-zdtinidpr+6(2) '/' wa_saida-zdtinidpr+4(2)
'/' wa_saida-zdtinidpr(4) INTO wa_saida_aux-zdtinidpr.
IF wa_saida_aux-zdtinidpr = '//'.
wa_saida_aux-zdtinidpr = '00/00/0000'.
ENDIF.
CONCATENATE wa_saida-zdtultdpr+6(2) '/' wa_saida-zdtultdpr+4(2)
'/' wa_saida-zdtultdpr(4) INTO wa_saida_aux-zdtultdpr.
IF wa_saida_aux-zdtultdpr = '//'.
wa_saida_aux-zdtultdpr = '00/00/0000'.
ENDIF.
WRITE wa_saida-zpercdpr TO wa_saida_aux-zpercdpr.

CONCATENATE wa_saida-augdt+6(2) '/' wa_saida-augdt+4(2)


'/' wa_saida-augdt(4) INTO wa_saida_aux-augdt.
IF wa_saida_aux-augdt = '//'.
wa_saida_aux-augdt = '00/00/0000'.
ENDIF.
wa_saida_aux-augbl = wa_saida-augbl.
WRITE wa_saida-wrbtr3 TO wa_saida_aux-wrbtr3.
wa_saida_aux-stcd1 = wa_saida-stcd1.
wa_saida_aux-zlspr = wa_saida-zlspr.
CONCATENATE wa_saida-budat2+6(2) '/' wa_saida-budat2+4(2)
'/' wa_saida-budat2(4) INTO wa_saida_aux-budat2.
IF wa_saida_aux-budat2 = '//'.
wa_saida_aux-budat2 = '00/00/0000'.
ENDIF.
WRITE wa_saida-nebtr TO wa_saida_aux-nebtr.

APPEND wa_saida_aux TO t_saida_aux.

ENDLOOP.

"Converte para o formato CSV


CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
EXPORTING
i_field_seperator = ','
TABLES
i_tab_sap_data = t_saida_aux
CHANGING
i_tab_converted_data = t_excel
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

"Abre o servidor
OPEN DATASET lv_arq FOR OUTPUT IN TEXT MODE ENCODING DEFAULT
MESSAGE lv_msg.

"Se encontrou algum erro na abertura do servidor


IF sy-subrc <> 0.
MESSAGE s107 WITH lv_msg.
EXIT.
ENDIF.

"Monta o arfquivo que ser exportado para o servidor


LOOP AT t_excel INTO wa_excel.
TRANSFER wa_excel TO lv_arq.
ENDLOOP.

"Fecha o BD
CLOSE DATASET lv_arq.

sy-msgv1 = lv_arq(50).
sy-msgv2 = lv_arq+50.

MESSAGE s862 WITH sy-msgv1 sy-msgv2.

"Libera arquivo para leitura


PERFORM liberar_arquivo USING lv_arq.

ELSE.

"Mensagem: No existem dados para o perodo informado.


MESSAGE s900 WITH 'No existem informaes '
'para os parmetros informados!' DISPLAY LIKE 'S'.

ENDIF.

ENDFORM. " GRAVAR_ARQUIVO_SERVIDOR


*&---------------------------------------------------------------------*
*& Form GRAVAR_ARQUIVO_LOCAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM gravar_arquivo_local .

TYPES:
"Estrutura do Excel
BEGIN OF y_excel,
status(18) TYPE c,
zsq(25) TYPE c,
zclas(25) TYPE c,
zgrupo(25) TYPE c,
zhist(50) TYPE c,
bldat(25) TYPE c,
zdocfis(25) TYPE c,
wrbtr2(25) TYPE c,
blart(25) TYPE c,
belnr(25) TYPE c,
hkont2(25) TYPE c,
sgtxt2(50) TYPE c,
zlifnrnf(30) TYPE c,
hkont(30) TYPE c,
sgtxt(50) TYPE c,
branch(25) TYPE c,
kostl(25) TYPE c,
zbem_inc(25) TYPE c,
zbem(25) TYPE c,
zinc(25) TYPE c,
zdesc_bem(200) TYPE c,
zbranch(25) TYPE c,
znf(25) TYPE c,
zloc(25) TYPE c,
zesp(25) TYPE c,
zsli(25) TYPE c,
zgitem(25) TYPE c,
zprojeto(25) TYPE c,
zqtd(25) TYPE c,
zpedforn(25) TYPE c,
zrespinv(25) TYPE c,
zdtaquis(25) TYPE c,
lifnr(25) TYPE c,
name1(35) TYPE c,
wrbtr(25) TYPE c,
zvldep(35) TYPE c,
zvlres(35) TYPE c,
zvlicms(35) TYPE c,
budat(25) TYPE c,
zdtinidpr(25) TYPE c,
zdtultdpr(25) TYPE c,
zpercdpr(25) TYPE c,
augdt(25) TYPE c,
augbl(25) TYPE c,
wrbtr3(25) TYPE c,
stcd1(20) TYPE c,
zlspr(25) TYPE c,
budat2(25) TYPE c,
nebtr(25) TYPE c,
END OF y_excel.

"Variveis locais
DATA: lv_arq_pgt TYPE string,
lv_dir TYPE rlgrap-filename.

"Tabelas Auxiliares
DATA: t_saida_aux TYPE TABLE OF y_excel,
t_excel TYPE truxs_t_text_data.

"Work Areas
DATA: wa_saida_aux TYPE y_excel.

"Verifica se a tabela de exportao est preenchida


IF t_saida[] IS NOT INITIAL.

CLEAR lv_dir.

lv_dir = p_dir.

"Mostra a barra de progresso


CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Gravando o arquivo...'.

"Monta o caminho onde ser salvo o arquivo


CONCATENATE lv_dir p_arq2 '.' p_typ2 INTO lv_arq_pgt.

CALL FUNCTION 'RSAP_GET_MILISECS'.

"Monta o cabealho do arquivo


wa_saida_aux-status = 'Status'.
wa_saida_aux-zsq = 'SEQ'.
wa_saida_aux-zclas = 'CLASSIFICACAO'.
wa_saida_aux-zgrupo = 'Grupo'.
wa_saida_aux-zhist = 'Historico'.
wa_saida_aux-bldat = 'Data'.
wa_saida_aux-zdocfis = 'Documento Fiscal'.
wa_saida_aux-wrbtr2 = 'Valor'.
wa_saida_aux-blart = 'Tipo de lancamento'.
wa_saida_aux-belnr = 'DOC SAP'.
wa_saida_aux-hkont2 = 'Conta contabil'.
wa_saida_aux-sgtxt2 = 'Descricao da Conta'.
wa_saida_aux-zlifnrnf = 'FORNECEDOR_NOTA FISCAL'.
wa_saida_aux-hkont = 'Conta'.
wa_saida_aux-sgtxt = 'Descricao da conta'.
wa_saida_aux-branch = 'Esta'.
wa_saida_aux-kostl = 'Centro de'.
wa_saida_aux-zbem_inc = 'BEM + INC'.
wa_saida_aux-zbem = 'Bem'.
wa_saida_aux-zinc = 'Inc.'.
wa_saida_aux-zdesc_bem = 'Descricao do Bem'.
wa_saida_aux-zbranch = 'Loja Fisica'.
wa_saida_aux-znf = 'Documento de Aquisicao'.
wa_saida_aux-zloc = 'Localizacao'.
wa_saida_aux-zesp = 'Especie'.
wa_saida_aux-zsli = 'SLI'.
wa_saida_aux-zgitem = 'Grupo de Item'.
wa_saida_aux-zprojeto = 'PROJETO'.
wa_saida_aux-zqtd = 'Qt.It.'.
wa_saida_aux-zpedforn = 'Pedido de Fornecimento'.
wa_saida_aux-zrespinv = 'RESPONSAVEL INV'.
wa_saida_aux-zdtaquis = 'Dt.Aquis'.
wa_saida_aux-lifnr = 'Fornecedor'.
wa_saida_aux-name1 = 'Descricao do Fornecedor'.
wa_saida_aux-wrbtr = 'Valor Original Corrigido'.
wa_saida_aux-zvldep = 'Depreciacao Acumulada Corrigida'.
wa_saida_aux-zvlres = 'Residual Contabil Corrigido'.
wa_saida_aux-zvlicms = 'Valor ICMS'.
wa_saida_aux-budat = 'Dt.Ctb.'.
wa_saida_aux-zdtinidpr = 'DtIniDpr'.
wa_saida_aux-zdtultdpr = 'DtUltDpr'.
wa_saida_aux-zpercdpr = '% Dpr'.
wa_saida_aux-augdt = 'Data de Pagto'.
wa_saida_aux-augbl = 'Docto de Pagto'.
wa_saida_aux-wrbtr3 = 'Valor do Item'.
wa_saida_aux-stcd1 = 'CNPJ'.
wa_saida_aux-zlspr = 'Bloqueio'.
wa_saida_aux-budat2 = 'Data de Emissao da NF'.
wa_saida_aux-nebtr = 'Valor Efetivamente Pago'.

APPEND wa_saida_aux TO t_saida_aux.

"Monta o arquivo que ser exportado


LOOP AT t_saida INTO wa_saida.

wa_saida_aux-status = wa_saida-status.
wa_saida_aux-zsq = wa_saida-zsq.
wa_saida_aux-zclas = wa_saida-zclas.
wa_saida_aux-zgrupo = wa_saida-zgrupo.
wa_saida_aux-zhist = wa_saida-zhist.
CONCATENATE wa_saida-bldat+6(2) '/' wa_saida-bldat+4(2)
'/' wa_saida-bldat(4) INTO wa_saida_aux-bldat.
IF wa_saida_aux-bldat = '//'.
wa_saida_aux-bldat = '00/00/0000'.
ENDIF.
wa_saida_aux-zdocfis = wa_saida-zdocfis.
WRITE wa_saida-wrbtr2 TO wa_saida_aux-wrbtr2.
wa_saida_aux-blart = wa_saida-blart.
wa_saida_aux-belnr = wa_saida-belnr.
wa_saida_aux-hkont2 = wa_saida-hkont2.
wa_saida_aux-sgtxt2 = wa_saida-sgtxt2.
wa_saida_aux-zlifnrnf = wa_saida-zlifnrnf.
wa_saida_aux-hkont = wa_saida-hkont.
wa_saida_aux-sgtxt = wa_saida-sgtxt.
wa_saida_aux-branch = wa_saida-branch.
wa_saida_aux-kostl = wa_saida-kostl.
wa_saida_aux-zbem_inc = wa_saida-zbem_inc.
wa_saida_aux-zbem = wa_saida-zbem.
wa_saida_aux-zinc = wa_saida-zinc.
wa_saida_aux-zdesc_bem = wa_saida-zdesc_bem.
wa_saida_aux-zbranch = wa_saida-zbranch.
wa_saida_aux-znf = wa_saida-znf.
wa_saida_aux-zesp = wa_saida-zesp.
wa_saida_aux-zsli = wa_saida-zsli.
wa_saida_aux-zgitem = wa_saida-zgitem.
wa_saida_aux-zprojeto = wa_saida-zprojeto.
wa_saida_aux-zqtd = wa_saida-zqtd.
wa_saida_aux-zpedforn = wa_saida-zpedforn.
wa_saida_aux-zrespinv = wa_saida-zrespinv.
CONCATENATE wa_saida-zdtaquis+6(2) '/' wa_saida-zdtaquis+4(2)
'/' wa_saida-zdtaquis(4) INTO wa_saida_aux-zdtaquis.
IF wa_saida_aux-zdtaquis = '//'.
wa_saida_aux-zdtaquis = '00/00/0000'.
ENDIF.

wa_saida_aux-lifnr = wa_saida-lifnr.
wa_saida_aux-name1 = wa_saida-name1.
WRITE wa_saida-wrbtr TO wa_saida_aux-wrbtr.
WRITE wa_saida-zvldep TO wa_saida_aux-zvldep.
WRITE wa_saida-zvlres TO wa_saida_aux-zvlres.
WRITE wa_saida-zvlicms TO wa_saida_aux-zvlicms.
CONCATENATE wa_saida-budat+6(2) '/' wa_saida-budat+4(2)
'/' wa_saida-budat(4) INTO wa_saida_aux-budat.
IF wa_saida_aux-budat = '//'.
wa_saida_aux-budat = '00/00/0000'.
ENDIF.
CONCATENATE wa_saida-zdtinidpr+6(2) '/' wa_saida-zdtinidpr+4(2)
'/' wa_saida-zdtinidpr(4) INTO wa_saida_aux-zdtinidpr.
IF wa_saida_aux-zdtinidpr = '//'.
wa_saida_aux-zdtinidpr = '00/00/0000'.
ENDIF.
CONCATENATE wa_saida-zdtultdpr+6(2) '/' wa_saida-zdtultdpr+4(2)
'/' wa_saida-zdtultdpr(4) INTO wa_saida_aux-zdtultdpr.
IF wa_saida_aux-zdtultdpr = '//'.
wa_saida_aux-zdtultdpr = '00/00/0000'.
ENDIF.
WRITE wa_saida-zpercdpr TO wa_saida_aux-zpercdpr.

CONCATENATE wa_saida-augdt+6(2) '/' wa_saida-augdt+4(2)


'/' wa_saida-augdt(4) INTO wa_saida_aux-augdt.
IF wa_saida_aux-augdt = '//'.
wa_saida_aux-augdt = '00/00/0000'.
ENDIF.
wa_saida_aux-augbl = wa_saida-augbl.
WRITE wa_saida-wrbtr3 TO wa_saida_aux-wrbtr3.
wa_saida_aux-stcd1 = wa_saida-stcd1.
wa_saida_aux-zlspr = wa_saida-zlspr.
CONCATENATE wa_saida-budat2+6(2) '/' wa_saida-budat2+4(2)
'/' wa_saida-budat2(4) INTO wa_saida_aux-budat2.
IF wa_saida_aux-budat2 = '//'.
wa_saida_aux-budat2 = '00/00/0000'.
ENDIF.
WRITE wa_saida-nebtr TO wa_saida_aux-nebtr.

APPEND wa_saida_aux TO t_saida_aux.

ENDLOOP.

"Converte para o formato CSV


CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
EXPORTING
i_field_seperator = ','
TABLES
i_tab_sap_data = t_saida_aux
CHANGING
i_tab_converted_data = t_excel
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

"Exporta para CSV


CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_arq_pgt
* filetype = 'ASC'
* write_field_separator = 'X'
* trunc_trailing_blanks = 'X'
TABLES
data_tab = t_excel
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.

* TESTA SE DOWNLOAD FOI EXECUTADO COM SUCESSO


IF sy-subrc NE 0.

IF sy-subrc NE 15 AND
sy-subrc NE 21.
"Erro ao tentar criar o arquivo
MESSAGE s041(z1) WITH p_arq2 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
STOP.

ENDIF.

ENDIF.

MESSAGE s862 WITH lv_arq_pgt.

"Limpa a tabela auxiliar


REFRESH t_saida_aux[].

ELSE.

"Mensagem: No existem dados para o perodo informado.


MESSAGE s900 WITH 'No existem informaes '
'para os parmetros informados!' DISPLAY LIKE 'S'.

ENDIF.

ENDFORM. " GRAVAR_ARQUIVO_LOCAL


*&---------------------------------------------------------------------*
*& Form LIBERAR_ARQUIVO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM liberar_arquivo USING pv_arq.

DATA:
BEGIN OF lt_unix OCCURS 0,
line(2000),
END OF lt_unix.

DATA:
lw_comando(200) TYPE c.

*--# Liberao de Arquivo no Unix (Permite acesso)


CONCATENATE 'chmod 777' pv_arq INTO lw_comando SEPARATED BY space.

REFRESH lt_unix.
CALL 'SYSTEM' ID 'COMMAND'
FIELD lw_comando ID 'TAB'
FIELD lt_unix-*sys*.

ENDFORM. " LIBERAR_ARQUIVO


*&---------------------------------------------------------------------*
*& Form EXIBE_OPCAO_GRAFICA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM exibe_opcao_grafica .

"Verifica se a tabela de exportao para o ALV grid est preenchida


IF t_saida[] IS NOT INITIAL.

"Monta a estrutura da fieldcat (ALV)


PERFORM monta_fieldcat_alv.

"Exibe o ALV Grid


PERFORM exibe_alv_grid.

ELSE.

MESSAGE s900 WITH 'No existem informaes '


'para os parmetros informados!' DISPLAY LIKE 'S'.

ENDIF.

ENDFORM. " EXIBE_OPCAO_GRAFICA


*&---------------------------------------------------------------------*
*& Form MONTA_FIELDCAT_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_fieldcat_alv .

"Monta a fieldcat
PERFORM preencher_fieldcat
USING:

*** CAPEX * * *
"SEQ
'STATUS' 'T_SAIDA' text-039 space space space space '20',
"SEQ
'ZSQ' 'T_SAIDA' text-040 space space space space '20',
"CLASSIFICAO
'ZCLAS' 'T_SAIDA' text-041 space space space space '20',
"Grupo
'ZGRUPO' 'T_SAIDA' text-042 space space space space '20',
"Histrico
'ZHIST' 'T_SAIDA' text-043 space space space space '50',
"Data
'BLDAT' 'T_SAIDA' text-044 space space space space '20',
"Documento Fiscal
'ZDOCFIS' 'T_SAIDA' text-045 space space space space '20',
"Valor
'WRBTR2' 'T_SAIDA' text-046 space space space space '20',
"Tipo de lanamento
'BLART' 'T_SAIDA' text-047 space space space space '20',
"DOC SAP
'BELNR' 'T_SAIDA' text-048 space space space space '20',
"Conta contbil
'HKONT2' 'T_SAIDA' text-049 space space space space '20',
"Descrio da Conta
'SGTXT2' 'T_SAIDA' text-050 space space space space '50',

*** SISPRO * * *
"FORNECEDOR_NOTA FISCAL
'ZLIFNRNF' 'T_SAIDA' text-051 space space space space '23',
"Conta
'HKONT' 'T_SAIDA' text-052 space space space space '20',
"Descrio da conta
'SGTXT' 'T_SAIDA' text-053 space space space space '50',
"Esta
'BRANCH' 'T_SAIDA' text-054 space space space space '20',
"Centro de custo
'KOSTL' 'T_SAIDA' text-055 space space space space '20',
"BEM + INC
'ZBEM_INC' 'T_SAIDA' text-056 space space space space '20',
"Bem
'ZBEM' 'T_SAIDA' text-057 space space space space '20',
"Inc.
'ZINC' 'T_SAIDA' text-058 space space space space '20',
"Descrio do Bem
'ZDESC_BEM' 'T_SAIDA' text-059 space space space space '200',
"Loja Fisica
'ZBRANCH' 'T_SAIDA' text-060 space space space space '20',
"Documento de Aquisio
'ZNF' 'T_SAIDA' text-061 space space space space '23',
"Localizacao
'ZLOC' 'T_SAIDA' text-062 space space space space '20',
"Espcie
'ZESP' 'T_SAIDA' text-063 space space space space '20',
"SLI
'ZSLI' 'T_SAIDA' text-064 space space space space '20',
"Grupo de Item
'ZGITEM' 'T_SAIDA' text-065 space space space space '20',
"PROJETO
'ZPROJETO' 'T_SAIDA' text-066 space space space space '20',
"Qt.It.
'ZQTD' 'T_SAIDA' text-067 space space space space '10',
"Pedido de Fornecimento
'ZPEDFORN' 'T_SAIDA' text-068 space space space space '23',
"RESPONSAVEL INV
'ZRESPINV' 'T_SAIDA' text-069 space space space space '20',
"Dt.Aquis
'ZDTAQUIS' 'T_SAIDA' text-070 space space space space '10',
"Fornecedor
'LIFNR' 'T_SAIDA' text-071 space space space space '20',
"Descrio do Fornecedor
'NAME1' 'T_SAIDA' text-072 space space space space '35',
"Valor Original Corrigido
'WRBTR' 'T_SAIDA' text-073 space space space space '25',
"Depreciao Acumulada Corrigida
'ZVLDEP' 'T_SAIDA' text-074 space space space space '32',
"Residual Contabil Corrigido
'ZVLRES' 'T_SAIDA' text-075 space space space space '28',
"Valor ICMS
'ZVLICMS' 'T_SAIDA' text-076 space space space space '15',
"Dt.Ctb
'BUDAT' 'T_SAIDA' text-077 space space space space '10',
"DtIniDpr
'ZDTINIDPR' 'T_SAIDA' text-078 space space space space '10',
"DtUltDpr
'ZDTULTDPR' 'T_SAIDA' text-079 space space space space '10',
"% Dpr
'ZPERCDPR' 'T_SAIDA' text-080 space space space space '7',

*** OUTROS ***


"Data de compensao
'AUGDT' 'T_SAIDA' text-081 space space space space '21',
"Docto de compensao
'AUGBL' 'T_SAIDA' text-082 space space space space '21',
"Valor do Docto
'WRBTR3' 'T_SAIDA' text-083 space space space space '15',
"CNPJ
'STCD1' 'T_SAIDA' text-084 space space space space '18',
"Bloqueio
'ZLSPR' 'T_SAIDA' text-085 space space space space '23',
"Data de Emisso da NF
'BUDAT2' 'T_SAIDA' text-086 space space space space '10',
"Valor Efetivamente Pago
'NEBTR' 'T_SAIDA' text-087 space space space space '15'.

ENDFORM. " MONTA_FIELDCAT_ALV


*&---------------------------------------------------------------------*
*& Form PREENCHER_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM preencher_fieldcat USING value(p_fieldname)
value(p_tabname)
value(p_text)
value(p_hot)
value(p_sum)
value(p_edit)
value(p_check)
value(p_outputlen).

DATA: wa_fieldcat TYPE lvc_s_fcat.

CLEAR wa_fieldcat.

STATICS vl_pos TYPE i.

vl_pos = vl_pos + 1.

wa_fieldcat-fieldname = p_fieldname .
wa_fieldcat-tabname = p_tabname .
wa_fieldcat-scrtext_l = p_text .
wa_fieldcat-hotspot = p_hot .
wa_fieldcat-col_pos = vl_pos .
wa_fieldcat-do_sum = p_sum .
wa_fieldcat-edit = p_edit .
wa_fieldcat-checkbox = p_check .
wa_fieldcat-outputlen = p_outputlen .

APPEND wa_fieldcat TO t_fieldcat.


CLEAR wa_fieldcat.

ENDFORM. " PREENCHER_FIELDCAT


*&---------------------------------------------------------------------*
*& Form EXIBE_ALV_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM exibe_alv_grid .

CALL SCREEN 2000.

ENDFORM. " EXIBE_ALV_GRID


*&---------------------------------------------------------------------*
*& Form GERA_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM gera_alv .

"Estruturas locais
DATA : t_exclude TYPE ui_functions.

"Work areas locais


DATA: wa_layout TYPE lvc_s_layo,
wa_sort TYPE lvc_s_sort.

"Variveis locais
DATA: vl_data_exerc(255) TYPE c,
vl_usuario(255) TYPE c,
vl_data(255) TYPE c,
vl_hora(255) TYPE c,
vl_empresa(255) TYPE c.

"Excluir barra de ferramentos do ALV Grid (Standard)


PERFORM exclui_barra_ferramentas CHANGING t_exclude.

"A - todas as linhas, C - sem linha, B - uma linha


wa_layout-sel_mode = 'A'.
wa_layout-zebra = 'X'.

vg_variant-report = sy-repid.

"Verifica se o GRID foi criado


IF NOT og_splitter IS BOUND.
"Cria o Grid
CREATE OBJECT og_splitter
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
side = og_splitter->dock_at_top
extension = 90.
ENDIF.

"Monta os textos de cabealho


CREATE OBJECT og_document.

og_document->add_gap( EXPORTING width = 150 ).

og_document->add_text( EXPORTING text = text-035


sap_style = 'HEADING' ).

"Cria uma linha de separao


og_document->underline( ).

"Cria uma tabela para organizar o cabealho


og_document->add_table(
EXPORTING no_of_columns = 10
cell_background_transparent = 'X'
border = '0'
IMPORTING table = og_doctable ).

og_doctable->add_column( IMPORTING column = og_column ).

"Exibe o LOGO selecionado


og_column->add_picture( EXPORTING picture_id = 'LOGO' ).

og_column->add_gap( EXPORTING width = 2 ).

og_doctable->add_column( IMPORTING column = og_column ).

og_column->add_gap( EXPORTING width = 2 ).

"Passa para uma nova linha


og_column->new_line( ).

og_column->add_gap( EXPORTING width = 240 ).

og_column->add_text( EXPORTING text = text-033


sap_emphasis = 'Strong' ).

og_column->add_gap( EXPORTING width = 18 ).

"Exibe o NOME DO USURIO no cabealho


vl_usuario = sy-uname.

og_column->add_text( EXPORTING text = vl_usuario


sap_style = 'Medium' )."'Key'.

"Passa para uma nova linha


og_column->new_line( ).

og_column->add_gap( EXPORTING width = 240 ).


og_column->add_text( EXPORTING text = text-036
sap_emphasis = 'Strong' ).

og_column->add_gap( EXPORTING width = 3 ).

"Monta a DATA ATUAL para exibio no cabealho


CONCATENATE sy-datum+6(2) '/' sy-datum+4(2) '/' sy-datum(4)
INTO vl_data.

og_column->add_text( EXPORTING text = vl_data


sap_style = 'Medium' )."'Key'.

"Passa para uma nova linha


og_column->new_line( ).

og_column->add_gap( EXPORTING width = 240 ).

og_column->add_text( EXPORTING text = text-037


sap_emphasis = 'Strong' ).

og_column->add_gap( EXPORTING width = 3 ).

"Monta a HORA ATUAL para exibio no cabealho


CONCATENATE sy-uzeit(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2)
INTO vl_hora.

og_column->add_text( EXPORTING text = vl_hora


sap_style = 'Medium' )."'Key'.

"Exibe o display do cabealho


og_document->merge_document( ).
og_document->display_document( EXPORTING parent = og_splitter ).

"Verifica se o GRID foi criado


IF NOT dockingtop IS BOUND.

"Cria o Grid
CREATE OBJECT dockingtop
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
side = dockingtop->dock_at_top
extension = 300.

"Cria o objeto ALV GRID


CREATE OBJECT alv_top
EXPORTING
i_parent = dockingtop.

ENDIF.

"Gera alv grid


alv_top->set_table_for_first_display(
EXPORTING is_layout = wa_layout
is_variant = vg_variant
i_save = 'A'
it_toolbar_excluding = t_exclude
i_default = 'X'
CHANGING
it_outtab = t_saida
it_fieldcatalog = t_fieldcat
it_sort = t_sort ).

ENDFORM. " GERA_ALV


*&---------------------------------------------------------------------*
*& Form EXCLUI_BARRA_FERRAMENTAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM exclui_barra_ferramentas CHANGING t_exclude TYPE ui_functions.

"Excluir barra de ferramentas do ALV Grid


APPEND cl_gui_alv_grid=>mc_fc_info TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_check TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_append_row TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_cut TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_move_row TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_undo TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_print_prev TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_view_lotus TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_view_crystal TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_print TO t_exclude.
APPEND cl_gui_alv_grid=>mc_fc_detail TO t_exclude.

ENDFORM. " EXCLUI_BARRA_FERRAMENTAS

*======================================================================*
* MODULES
*======================================================================*
*
*&---------------------------------------------------------------------*
*& Module STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_2000 OUTPUT.

SET PF-STATUS 'STATUS_GUI'.


SET TITLEBAR 'TITLE_GUI'.

ENDMODULE. " STATUS_2000 OUTPUT


*&---------------------------------------------------------------------*
*& Module SHOW_ALV_2000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE show_alv_2000 OUTPUT.
"Gerao do ALV
PERFORM gera_alv.

ENDMODULE. " SHOW_ALV_2000 OUTPUT


*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit_command_2000 INPUT.

"Ao do clicar nos botes da barra


CASE sy-ucomm.
WHEN 'VOLTAR'.
"Volta para a tela anterior
LEAVE TO SCREEN 0.
WHEN 'ENCERRAR'.
"Sai do programa
LEAVE PROGRAM.
WHEN 'SAIR'.
"Sai do programa
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.

ENDMODULE. " EXIT_COMMAND_2000 INPUT


*&---------------------------------------------------------------------*
*& Form TRATA_TELA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM trata_tela .

"Se for clicado na opo SERVIDOR


IF p_ser = 'X'.

"Bloqueia os campos LOCAL


LOOP AT SCREEN.
IF screen-group1 = 'GR3'.
screen-invisible = 1.
screen-input = 0.
screen-active = 0.
MODIFY SCREEN.
ENDIF.

IF screen-group1 = 'GR4'.
screen-invisible = 0.
screen-input = 1.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

"Caminho do arquivo na rede


CASE sy-sysid.
WHEN 'DEV' OR 'DV6'.
p_fil2 = p_fil = '/lasa/usr/DESENV/COMNC/STATX/BI/'.
WHEN 'PAR'.
p_fil2 = p_fil = '/lasa/usr/PARALELO/COMNC/STATX/BI/'.
WHEN 'BOL'.
p_fil2 = p_fil = '/lasa/usr/BOLHA/COMNC/STATX/BI/'.
WHEN 'PRD' OR 'QA6' OR 'LAS'.
p_fil2 = p_fil = '/lasa/usr/PRODUCAO/COMNC/STATX/BI/'.
ENDCASE.

CLEAR: p_file, p_file2.

"Se for clicado na opo LOCAL


ELSEIF p_loc = 'X'.

"Bloqueia os campos LOCAL


LOOP AT SCREEN.
IF screen-group1 = 'GR3'.
screen-invisible = 0.
screen-input = 1.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
IF screen-group1 = 'GR4'.
screen-invisible = 1.
screen-input = 0.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

CLEAR: p_fil2, p_fil.

ENDIF.

ENDFORM. " TRATA_TELA


*&---------------------------------------------------------------------*
*& Form VALIDA_LOCAL_SALVAMENTO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM valida_local_salvamento .

"Se for clicado na opo SERVIDOR


IF p_rede = 'X'.

"Bloqueia os campos LOCAL


LOOP AT SCREEN.
IF screen-group1 = 'DIR' OR
screen-group1 = 'AR2' OR
screen-group1 = 'TP2'.
screen-input = 0.
MODIFY SCREEN.
CLEAR p_dir.
ENDIF.
ENDLOOP.
"Se o caminho do servidor estiver em branco
IF p_dir2 IS INITIAL.

"Caminho do arquivo na rede


CASE sy-sysid.
WHEN 'DEV' OR 'DV6'.
p_dir2 = '/lasa/usr/DESENV/COMNC/STATX/BI/'.
WHEN 'PAR'.
p_dir2 = '/lasa/usr/PARALELO/COMNC/STATX/BI/'.
WHEN 'BOL'.
p_dir2 = '/lasa/usr/BOLHA/COMNC/STATX/BI/'.
WHEN 'PRD' OR 'QA6' OR 'LAS'.
p_dir2 = '/lasa/usr/PRODUCAO/COMNC/STATX/BI/'.
ENDCASE.

ENDIF.

"Se o nome do arquivo estiver em branco


IF p_arq IS INITIAL.

"Sugerir um nome
p_arq = 'SISPRO_CAPEX_&1_&2'.

"Substitui algumas informaes do arquivo que sert exportado


REPLACE '&1' IN p_arq WITH sy-datum.
REPLACE '&2' IN p_arq WITH sy-uzeit.

ENDIF.

CLEAR: p_dir, p_arq2.

"Se for clicado na opo LOCAL


ELSEIF p_local = 'X'.

"Bloqueia os campos SERVIDOR


LOOP AT SCREEN.
IF screen-group1 = 'TP1' OR
screen-group1 = 'DI2' OR
screen-group1 = 'AR1'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

"Se o local de destino no estiver preenchido


IF p_dir IS INITIAL.

"Sugerir o C:\
p_dir = 'C:\'.

ENDIF.

"Se o nome do arquivo estiver em branco


IF p_arq2 IS INITIAL.

"Sugerir um nome
p_arq2 = 'SISPRO_CAPEX_&1_&2'.

"Substitui algumas informaes do arquivo que sert exportado


REPLACE '&1' IN p_arq2 WITH sy-datum.
REPLACE '&2' IN p_arq2 WITH sy-uzeit.

ENDIF.

"Limpa as variveis
CLEAR: p_arq, p_dir2.

"Seno bloqueia os campos de SERVIDOR e LOCAL


ELSE.

LOOP AT SCREEN.
IF screen-group1 = 'DIR' OR
screen-group1 = 'AR1' OR
screen-group1 = 'AR2' OR
screen-group1 = 'TP2' OR
screen-group1 = 'TP1' OR
screen-group1 = 'DI2'.
screen-input = 0.
MODIFY SCREEN.
CLEAR p_dir.
ENDIF.
ENDLOOP.

CLEAR: p_dir, p_arq2, p_arq, p_dir2.

ENDIF.

ENDFORM. " VALIDA_LOCAL_SALVAMENTO


*&---------------------------------------------------------------------*
*& Form MONTA_COD_FORNECEDOR_NF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_cod_fornecedor_nf .

"Estruturas locais
TYPES:
"Estrutura da BSEG
BEGIN OF y_bseg,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
augdt TYPE bseg-augdt,
augbl TYPE bseg-augbl,
wrbtr3 TYPE bseg-wrbtr,
lifnr TYPE bseg-lifnr,
zlspr TYPE bseg-zlspr,
nebtr TYPE bseg-nebtr,
END OF y_bseg,

"Estrutura da BKPF
BEGIN OF y_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
bldat TYPE bkpf-bldat,
END OF y_bkpf,

"Estrutura da LFA1
BEGIN OF y_lfa1,
lifnr TYPE lfa1-lifnr,
stcd1 TYPE lfa1-stcd1,
END OF y_lfa1.

"Tabelas internas locais


DATA: t_bkpf TYPE TABLE OF y_bkpf,
t_bseg2 TYPE TABLE OF y_bseg,
t_bseg TYPE TABLE OF y_bseg,
t_lfa1 TYPE TABLE OF y_lfa1,
t_hist TYPE TABLE OF string,
t_capex_aux TYPE TABLE OF y_capex.

"Field-Symbols
FIELD-SYMBOLS: <wa_capex> TYPE y_capex,
<wa_bseg> TYPE y_bseg,
<wa_bkpf> TYPE y_bkpf,
<wa_bseg2> TYPE y_bseg,
<wa_lfa1> TYPE y_lfa1,
<wa_hist> TYPE string.

"Variveis locais
DATA: vl_pos TYPE sy-fdpos,
vl_len TYPE i,
vl_fnf(20) TYPE c,
vl_hist TYPE string,
vl_lifnr TYPE lifnr.

"Constantes locais
CONSTANTS cc_empresa TYPE bukrs VALUE 'LAME'.

"Verifica se a tabela est preenchida


IF t_capex[] IS NOT INITIAL.

"Move para uma tabela auxiliar


t_capex_aux[] = t_capex[].

"Limpa a tabela interna


REFRESH t_capex[].

"Busca a data de emisso da NF


SELECT bukrs belnr gjahr bldat
FROM bkpf
INTO TABLE t_bkpf
FOR ALL ENTRIES IN t_capex_aux
WHERE bukrs = cc_empresa
AND belnr = t_capex_aux-belnr
AND gjahr = t_capex_aux-gjahr.

"Ordena a tabela interna


SORT t_bkpf BY bukrs belnr gjahr.

"Verifica se a tabela est preenchida


IF t_bkpf[] IS NOT INITIAL.
"Busca as informaes complementares do DOC_SAP
SELECT bukrs belnr gjahr buzei augdt
augbl wrbtr lifnr zlspr nebtr
FROM bseg
INTO TABLE t_bseg
FOR ALL ENTRIES IN t_bkpf
WHERE bukrs = t_bkpf-bukrs
AND belnr = t_bkpf-belnr
AND gjahr = t_bkpf-gjahr.

"Exclui os registros com o fornecedor em branco


DELETE t_bseg WHERE lifnr = space.

"Verfica se a tabela est preenchida


IF t_bseg[] IS NOT INITIAL.

"Busca as informaes complementares do DOC_SAP


SELECT bukrs belnr gjahr buzei augdt
augbl wrbtr lifnr zlspr nebtr
FROM bseg
INTO TABLE t_bseg2
FOR ALL ENTRIES IN t_bseg
WHERE bukrs = t_bseg-bukrs
AND belnr = t_bseg-augbl
AND gjahr = t_bseg-augdt(4).

ENDIF.

"Ordena a tabela interna


SORT: t_bseg BY bukrs belnr gjahr,
t_bseg2 BY bukrs belnr.

"Verifica se a tabela est preenchida


IF t_bseg[] IS NOT INITIAL.

"Busca o CNPJ
SELECT lifnr stcd1
FROM lfa1
INTO TABLE t_lfa1
FOR ALL ENTRIES IN t_bseg
WHERE lifnr = t_bseg-lifnr.

"Ordena a tabela interna


SORT t_lfa1 BY lifnr.

ENDIF.

ENDIF.

"Monta o cdigo do FORNECEDOR_NOTA FISCAL


LOOP AT t_capex_aux ASSIGNING <wa_capex>.

"Pega o nmero do fornecedor


LOOP AT t_bseg ASSIGNING <wa_bseg> WHERE bukrs = cc_empresa
AND belnr = <wa_capex>-belnr
AND gjahr = <wa_capex>-gjahr.
"Busca a data de emisso da NF
READ TABLE t_bkpf ASSIGNING <wa_bkpf> WITH KEY bukrs = <wa_bseg>-bukrs
belnr = <wa_bseg>-belnr
gjahr = <wa_bseg>-gjahr
BINARY SEARCH.
IF sy-subrc = 0.

<wa_capex>-budat2 = <wa_bkpf>-bldat.

ENDIF.

"Busca o CNPJ
READ TABLE t_lfa1 ASSIGNING <wa_lfa1> WITH KEY lifnr = <wa_bseg>-lifnr
BINARY SEARCH.
IF sy-subrc = 0.

<wa_capex>-stcd1 = <wa_lfa1>-stcd1.

ENDIF.

"Preenche o bloqueio
IF <wa_bseg>-zlspr = 'A'.

<wa_capex>-zlspr = 'Pagamento Bloqueado'.

ELSEIF <wa_bseg>-zlspr = 'M'.

<wa_capex>-zlspr = 'Reteno Contratual'.

ELSE.

<wa_capex>-zlspr = <wa_bseg>-zlspr.

ENDIF.

"Busca o valor do documento de compensao


READ TABLE t_bseg2 ASSIGNING <wa_bseg2> WITH KEY bukrs = <wa_bseg>-bukrs
belnr = <wa_bseg>-augbl
BINARY SEARCH.
IF sy-subrc = 0.
<wa_capex>-nebtr = <wa_bseg2>-nebtr.

ENDIF.

<wa_capex>-augdt = <wa_bseg>-augdt.
<wa_capex>-augbl = <wa_bseg>-augbl.
<wa_capex>-wrbtr3 = <wa_bseg>-wrbtr3.

"Limpa a varivel
CLEAR: vl_lifnr.

vl_lifnr = <wa_bseg>-lifnr.

"Remove zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = vl_lifnr
IMPORTING
output = vl_lifnr.
"Verifica se existem letras no campo
IF <wa_capex>-zdocfis CA sy-abcde.

"Se comear com 'EX'


IF <wa_capex>-zdocfis(2) = 'EX'.

"Divide o campo por espaos


SPLIT <wa_capex>-zhist AT space INTO: TABLE t_hist.

"Monta a tabela de espaos


LOOP AT t_hist ASSIGNING <wa_hist>.

"Limpa as variveis
CLEAR: vl_len, vl_fnf.

"Informa o tamanho do campo


vl_len = strlen( <wa_hist> ).

"Verifica se inicia com 'NF'


IF <wa_hist>(2) = 'NF'.

"Verificar se maior que '3'


IF vl_len > 3.

"Limpa a varivel antes da utilizao


CLEAR vl_hist.

vl_hist = <wa_hist>.

vl_len = vl_len - 2.

vl_fnf = vl_hist+2(vl_len).

"Remove zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = vl_fnf
IMPORTING
output = vl_fnf.

"Verifica se existe '-' na NF


SEARCH vl_fnf FOR '-'.

IF sy-subrc = 0 AND sy-fdpos <> 0.

"Limpa as variveis
CLEAR: vl_pos.

"Adiciona 1 a posio encontrada para pegar as posies aps o


'-'
vl_pos = sy-fdpos + 1.

vl_fnf = vl_fnf+0(sy-fdpos).

"Monta o cdigo do fornecedor_nota_fiscal


CONCATENATE vl_lifnr '_' vl_fnf
INTO <wa_capex>-zlifnrnf.
EXIT.

ELSE.

"Monta o cdigo do fornecedor_nota_fiscal


CONCATENATE vl_lifnr '_' vl_fnf
INTO <wa_capex>-zlifnrnf.
EXIT.

ENDIF.

ELSE.

CONTINUE.

ENDIF.

ELSE.

"Limpa a varivel antes da utilizao


CLEAR vl_hist.

vl_hist = <wa_hist>.

vl_fnf = vl_hist+0(vl_len).

"Remove zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = vl_fnf
IMPORTING
output = vl_fnf.

"Verifica se existe '-' na NF


SEARCH vl_fnf FOR '-'.

IF sy-subrc = 0 AND sy-fdpos <> 0.

"Limpa as variveis
CLEAR: vl_pos.

"Adiciona 1 a posio encontrada para pegar as posies aps o


'-'
vl_pos = sy-fdpos + 1.

vl_fnf = vl_fnf+0(sy-fdpos).

"Monta o cdigo do fornecedor


CONCATENATE vl_lifnr '_' vl_fnf
INTO <wa_capex>-zlifnrnf.
EXIT.

ELSE.

"Monta o cdigo do fornecedor


CONCATENATE vl_lifnr '_' vl_fnf
INTO <wa_capex>-zlifnrnf.
EXIT.
ENDIF.

ENDIF.

ENDLOOP.

ELSE.

<wa_capex>-zlifnrnf = <wa_capex>-zdocfis.

ENDIF.

ELSE.

"Limpa as variveis
CLEAR: vl_fnf.

"Verifica se existe '-' na NF


SEARCH <wa_capex>-zdocfis FOR '-'.

IF sy-subrc = 0 AND sy-fdpos <> 0.

"Limpa as variveis
CLEAR: vl_pos.

"Adiciona 1 a posio encontrada para pegar as posies aps o '-'


vl_pos = sy-fdpos + 1.

vl_fnf = <wa_capex>-zdocfis+0(sy-fdpos).

"Remove zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = vl_fnf
IMPORTING
output = vl_fnf.

"Monta o cdigo do fornecedor


CONCATENATE vl_lifnr '_' vl_fnf
INTO <wa_capex>-zlifnrnf.

ELSE.

"Remove zeros esquerda


CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <wa_capex>-zdocfis
IMPORTING
output = vl_fnf.

"Monta o cdigo do fornecedor


CONCATENATE vl_lifnr '_' vl_fnf
INTO <wa_capex>-zlifnrnf.

ENDIF.

ENDIF.

APPEND <wa_capex> TO t_capex.


ENDLOOP.

ENDLOOP.

ENDIF.

"Limpa as tabelas internas


REFRESH: t_bseg[], t_bseg2[],
t_lfa1[], t_capex_aux[].

"Desassocia os FS
UNASSIGN: <wa_bseg>,
<wa_bseg2>,
<wa_bkpf>,
<wa_capex>,
<wa_hist>,
<wa_lfa1>.

ENDFORM. " MONTA_COD_FORNECEDOR_NF


*&---------------------------------------------------------------------*
*& Form COMPARA_DADOS_CAPEX_SISPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM compara_dados_capex_sispro .

"Field-Symbols
FIELD-SYMBOLS: <wa_capex> TYPE y_capex,
<wa_sispro> TYPE y_sispro.

"Tabelas internas locais


DATA: t_saida_aux TYPE TABLE OF y_saida.

"Verifica se a tabela retornou preenchida


IF t_capex[] IS NOT INITIAL AND
t_sispro[] IS NOT INITIAL.

"Ordena a tabela interna


SORT t_sispro BY zlifnrnf.

"Compara o CAPEX com o SISPRO


LOOP AT t_capex ASSIGNING <wa_capex>.

LOOP AT t_sispro ASSIGNING <wa_sispro> WHERE zlifnrnf = <wa_capex>-zlifnrnf.

"Limpa a work area


CLEAR: wa_saida.

"Move o contedo do CAPEX para a tabela de sada


MOVE-CORRESPONDING <wa_capex> TO wa_saida.

"Limpa o campo montado com o FORNECEDOR + NF, pois ser usado o da SISPRO
CLEAR wa_saida-zlifnrnf.

"Move o contedo do SISPRO para a tabela de sada


MOVE-CORRESPONDING <wa_sispro> TO wa_saida.

"Marca como achado para que o mesmo no seja repetido


<wa_sispro>-achou = 'X'.

wa_saida-status = '#CAPEX# / #SISPRO#'.

APPEND wa_saida TO t_saida.

ENDLOOP.

IF sy-subrc <> 0.

"Limpa a work area


CLEAR: wa_saida.

"Move o contedo do CAPEX para a tabela de sada


MOVE-CORRESPONDING <wa_capex> TO wa_saida.

wa_saida-status = '#CAPEX#'.

APPEND wa_saida TO t_saida.

ENDIF.

ENDLOOP.

"Compara o SISPRO com o CAPEX


LOOP AT t_sispro ASSIGNING <wa_sispro> WHERE achou IS INITIAL.

"Limpa a work area


CLEAR: wa_saida.

"Move o contedo do SISPRO para a tabela de sada


MOVE-CORRESPONDING <wa_sispro> TO wa_saida.

wa_saida-status = '#SISPRO#'.

APPEND wa_saida TO t_saida.

ENDLOOP.

"Limpa as tabelas internas


REFRESH: t_sispro[],
t_capex[],
t_saida_aux[].

"Desassocia os FS
UNASSIGN: <wa_sispro>,
<wa_capex>.

ENDIF.

ENDFORM. " COMPARA_DADOS_CAPEX_SISPRO


*&---------------------------------------------------------------------*
*& Form BUSCA_ARQUIVOS_SERVIDOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM busca_arquivos_servidor .

"Valida se os campos obrigatrios foram preenchidos


PERFORM valida_preenchimento_entrada.

"Obter file lgico do UNIX - CAPEX


PERFORM obter_file_logico_capex.

"Obter file lgico do UNIX - SISPRO


PERFORM obter_file_logico_sispro.

ENDFORM. " BUSCA_ARQUIVOS_SERVIDOR


*&---------------------------------------------------------------------*
*& Form VALIDA_PREENCHIMENTO_ENTRADA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM valida_preenchimento_entrada .

"Verifica se o caminho do arquivo foi preenchido


IF p_fil IS INITIAL OR
p_fil2 IS INITIAL.

MESSAGE s900 WITH 'O Caminho da Planilha de '


'Preenchimento Obrigatrio!' DISPLAY LIKE 'E'.
STOP.

ENDIF.

"Verifica se o nome do arquivo foi preenchido


IF p_acap IS INITIAL OR
p_asis IS INITIAL.

MESSAGE s900 WITH 'O Nome do Arquivo de '


'Preenchimento Obrigatrio!' DISPLAY LIKE 'E'.
STOP.

ENDIF.

ENDFORM. " VALIDA_PREENCHIMENTO_ENTRADA


*&---------------------------------------------------------------------*
*& Form OBTER_FILE_LOGICO_CAPEX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM obter_file_logico_capex .

"Estruturas locais
TYPES:
"Estrutura CAPEX para excel
BEGIN OF y_capex_ex,
zsq TYPE char20,
zclas TYPE char20,
zgrupo TYPE char20,
zhist TYPE char50,
bldat TYPE char20,
zdocfis TYPE char30,
wrbtr2 TYPE char20,
blart TYPE char20,
belnr TYPE char20,
hkont2 TYPE char20,
sgtxt2 TYPE char50,
END OF y_capex_ex.

"Estruturas locais
DATA: BEGIN OF itab OCCURS 0,
line(500),
END OF itab.

"Tabelas internas locais


DATA: t_arquivos_read TYPE TABLE OF /sdf/file,
t_file_table TYPE rsanm_file_table,
t_capex_aux TYPE TABLE OF y_capex_ex.

"Work areas locais


DATA: wa_arquivos_read TYPE /sdf/file,
wa_file LIKE /sdf/file-name,
wa_dirunix LIKE /sdf/file-name,
wa_file_f TYPE /sdf/file-name,
wa_file_table TYPE rsanm_file_line,
wa_filefinal TYPE /sdf/file-name,
wa_capex_ex TYPE y_capex_ex,
wa_capex TYPE y_capex.

"Variveis locais
DATA: vl_tabix TYPE sy-tabix,
vl_file_name TYPE string,
vl_lines_written TYPE i,
unixcmd(250) TYPE c,
vl_branco TYPE string.

"Passa o caminho do servidor


wa_dirunix = p_fil.

"Passa o nome do arquivo


wa_file = p_acap.

"Busca todos os endereos logicos no servidor


CALL FUNCTION '/SDF/GET_FILE_INFO'
EXPORTING
dir_name = wa_dirunix
file_name = wa_file
TABLES
dir_list = t_arquivos_read
EXCEPTIONS
no_authority = 1
activity_unknown = 2
not_a_directory = 3
no_media_in_drive = 4
too_many_errors = 5
too_many_files = 6
bracket_error_in_filename = 7
no_such_parameter = 8
OTHERS = 9.

"Inicio Troca Listagem


CONCATENATE 'ls -l' wa_dirunix INTO unixcmd SEPARATED BY space.
CALL 'SYSTEM' ID 'COMMAND' FIELD unixcmd
ID 'TAB' FIELD itab-*sys*.

"Elimina os Arquivos Vazios & Desnecessrios


DELETE t_arquivos_read WHERE name = '.' .
DELETE t_arquivos_read WHERE name = '..' .
DELETE t_arquivos_read WHERE len = 0 .

LOOP AT t_arquivos_read INTO wa_arquivos_read.

" Recebe o endereo logico


wa_file_f = wa_arquivos_read-name.

IF NOT wa_file_f IS INITIAL.

"Agrupo o Endereo + o nome do Arquivo.


CONCATENATE wa_dirunix wa_file_f INTO vl_file_name.

CLEAR: wa_file_table.

"Busco os Arquivos
CALL METHOD cl_rsan_ut_appserv_file_reader=>appserver_file_read
EXPORTING
i_filename = vl_file_name
CHANGING
c_data_tab = t_file_table
EXCEPTIONS
open_failed = 1
read_failed = 2
close_failed = 3
OTHERS = 4.

"Monta o arquivo que veio do servidor


LOOP AT t_file_table INTO wa_file_table.

IF sy-tabix > 1.

"Separo os Registros
SPLIT wa_file_table AT ';'
INTO vl_branco
wa_capex_ex-zsq
wa_capex_ex-zclas
wa_capex_ex-zgrupo
wa_capex_ex-zhist
wa_capex_ex-bldat
wa_capex_ex-zdocfis
wa_capex_ex-wrbtr2
wa_capex_ex-blart
wa_capex_ex-belnr
wa_capex_ex-hkont2
wa_capex_ex-sgtxt2.

APPEND wa_capex_ex TO t_capex_aux.

ENDIF.

ENDLOOP.

ENDIF.

ENDLOOP.

"Exclui as linhas com SEQ em branco


DELETE t_capex_aux WHERE zsq = space.

LOOP AT t_capex_aux INTO wa_capex_ex.

wa_capex-zsq = wa_capex_ex-zsq.
wa_capex-zclas = wa_capex_ex-zclas.
wa_capex-zgrupo = wa_capex_ex-zgrupo.
wa_capex-zhist = wa_capex_ex-zhist.
CONCATENATE wa_capex_ex-bldat+6(4) wa_capex_ex-bldat+3(2)
wa_capex_ex-bldat(2) INTO wa_capex-bldat.
wa_capex-gjahr = wa_capex-bldat(4).
wa_capex-zdocfis = wa_capex_ex-zdocfis.
TRANSLATE wa_capex_ex-wrbtr2 USING '. '.
CONDENSE wa_capex_ex-wrbtr2 NO-GAPS.
TRANSLATE wa_capex_ex-wrbtr2 USING ',.'.
wa_capex-wrbtr2 = wa_capex_ex-wrbtr2.
wa_capex-blart = wa_capex_ex-blart.
"Insere zeros esquerda
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_capex_ex-belnr
IMPORTING
output = wa_capex-belnr.
wa_capex-hkont2 = wa_capex_ex-hkont2.
wa_capex-sgtxt2 = wa_capex_ex-sgtxt2.

APPEND wa_capex TO t_capex.

ENDLOOP.

ENDFORM. " OBTER_FILE_LOGICO_CAPEX


*&---------------------------------------------------------------------*
*& Form OBTER_FILE_LOGICO_SISPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM obter_file_logico_sispro.

"Estruturas locais
TYPES:
"Estrutura SISPRO para excel
BEGIN OF y_sispro_ex,
zlifnrnf TYPE char20,
hkont TYPE char20,
sgtxt TYPE char50,
branch TYPE char20,
kostl TYPE char20,
zbem_inc TYPE char20,
zbem TYPE char20,
zinc TYPE char20,
zdesc_bem TYPE char200,
zbranch TYPE char20,
znf TYPE char20,
zloc TYPE char20,
zesp TYPE char20,
zsli TYPE char20,
zgitem TYPE char20,
zprojeto TYPE char20,
zqtd TYPE char20,
zpedforn TYPE char20,
zrespinv TYPE char20,
zdtaquis TYPE char20,
lifnr TYPE char20,
name1 TYPE char20,
wrbtr TYPE char20,
zvldep TYPE char20,
zvlres TYPE char20,
zvlicms TYPE char20,
budat TYPE char20,
zdtinidpr TYPE char20,
zdtultdpr TYPE char20,
zpercdpr TYPE char20,
END OF y_sispro_ex.

"Estruturas locais
DATA: BEGIN OF itab OCCURS 0,
line(1000),
END OF itab.

"Tabelas internas locais


DATA: t_arquivos_read TYPE TABLE OF /sdf/file,
t_file_table TYPE rsanm_file_table,
t_sispro_aux TYPE TABLE OF y_sispro_ex.

"Work areas locais


DATA: wa_arquivos_read TYPE /sdf/file,
wa_file TYPE /sdf/file-name,
wa_dirunix TYPE /sdf/file-name,
wa_file_f TYPE /sdf/file-name,
wa_file_table TYPE rsanm_file_line,
wa_filefinal TYPE /sdf/file-name,
wa_sispro_ex TYPE y_sispro_ex,
wa_sispro TYPE y_sispro.

"Variveis locais
DATA: vl_tabix TYPE sy-tabix,
vl_file_name TYPE string,
vl_lines_written TYPE i,
unixcmd(250) TYPE c.

"Passa o caminho do servidor


wa_dirunix = p_fil2.
"Passa o nome do arquivo
wa_file = p_asis.

"Busca todos os endereos logicos no servidor


CALL FUNCTION '/SDF/GET_FILE_INFO'
EXPORTING
dir_name = wa_dirunix
file_name = wa_file
TABLES
dir_list = t_arquivos_read
EXCEPTIONS
no_authority = 1
activity_unknown = 2
not_a_directory = 3
no_media_in_drive = 4
too_many_errors = 5
too_many_files = 6
bracket_error_in_filename = 7
no_such_parameter = 8
OTHERS = 9.

"Inicio Troca Listagem


CONCATENATE 'ls -l' wa_dirunix INTO unixcmd SEPARATED BY space.
CALL 'SYSTEM' ID 'COMMAND' FIELD unixcmd
ID 'TAB' FIELD itab-*sys*.

"Elimina os Arquivos Vazios & Desnecessrios


DELETE t_arquivos_read WHERE name = '.' .
DELETE t_arquivos_read WHERE name = '..' .
DELETE t_arquivos_read WHERE len = 0 .

LOOP AT t_arquivos_read INTO wa_arquivos_read.

"Recebe o endereo logico


wa_file_f = wa_arquivos_read-name.

IF NOT wa_file_f IS INITIAL.

"Agrupo o Endereo + o nome do Arquivo.


CONCATENATE wa_dirunix wa_file_f INTO vl_file_name.

CLEAR: wa_file_table.

"Busco os Arquivos
CALL METHOD cl_rsan_ut_appserv_file_reader=>appserver_file_read
EXPORTING
i_filename = vl_file_name
CHANGING
c_data_tab = t_file_table
EXCEPTIONS
open_failed = 1
read_failed = 2
close_failed = 3
OTHERS = 4.

"Monta o arquivo que veio do servidor


LOOP AT t_file_table INTO wa_file_table.
IF sy-tabix > 2.

"Separo os Registros
SPLIT wa_file_table AT ';'
INTO wa_sispro_ex-zlifnrnf
wa_sispro_ex-hkont
wa_sispro_ex-sgtxt
wa_sispro_ex-branch
wa_sispro_ex-kostl
wa_sispro_ex-zbem_inc
wa_sispro_ex-zbem
wa_sispro_ex-zinc
wa_sispro_ex-zdesc_bem
wa_sispro_ex-zbranch
wa_sispro_ex-znf
wa_sispro_ex-zloc
wa_sispro_ex-zesp
wa_sispro_ex-zsli
wa_sispro_ex-zgitem
wa_sispro_ex-zprojeto
wa_sispro_ex-zqtd
wa_sispro_ex-zpedforn
wa_sispro_ex-zrespinv
wa_sispro_ex-zdtaquis
wa_sispro_ex-lifnr
wa_sispro_ex-name1
wa_sispro_ex-wrbtr
wa_sispro_ex-zvldep
wa_sispro_ex-zvlres
wa_sispro_ex-zvlicms
wa_sispro_ex-budat
wa_sispro_ex-zdtinidpr
wa_sispro_ex-zdtultdpr
wa_sispro_ex-zpercdpr.

APPEND wa_sispro_ex TO t_sispro_aux.

ENDIF.

ENDLOOP.

ENDIF.

ENDLOOP.

"Exclui as linhas com FORNECEDOR_NOTA FISCAL em branco


DELETE t_sispro_aux WHERE zlifnrnf = space.

LOOP AT t_sispro_aux INTO wa_sispro_ex.

wa_sispro-zlifnrnf = wa_sispro_ex-zlifnrnf.
wa_sispro-hkont = wa_sispro_ex-hkont.
wa_sispro-sgtxt = wa_sispro_ex-sgtxt.
wa_sispro-branch = wa_sispro_ex-branch.
wa_sispro-kostl = wa_sispro_ex-kostl.
wa_sispro-zbem_inc = wa_sispro_ex-zbem_inc.
wa_sispro-zbem = wa_sispro_ex-zbem.
wa_sispro-zinc = wa_sispro_ex-zinc.
TRANSLATE wa_sispro_ex-zdesc_bem USING ';,'.
wa_sispro-zdesc_bem = wa_sispro_ex-zdesc_bem.
wa_sispro-zbranch = wa_sispro_ex-zbranch.
wa_sispro-znf = wa_sispro_ex-znf.
wa_sispro-zloc = wa_sispro_ex-zloc.
wa_sispro-zesp = wa_sispro_ex-zesp.
wa_sispro-zsli = wa_sispro_ex-zsli.
wa_sispro-zgitem = wa_sispro_ex-zgitem.
wa_sispro-zprojeto = wa_sispro_ex-zprojeto.
wa_sispro-zqtd = wa_sispro_ex-zqtd.
wa_sispro-zpedforn = wa_sispro_ex-zpedforn.
wa_sispro-zrespinv = wa_sispro_ex-zrespinv.
CONCATENATE wa_sispro_ex-zdtaquis+6(4) wa_sispro_ex-zdtaquis+3(2)
wa_sispro_ex-zdtaquis(2) INTO wa_sispro-zdtaquis.
wa_sispro-lifnr = wa_sispro_ex-lifnr.
wa_sispro-name1 = wa_sispro_ex-name1.
TRANSLATE wa_sispro_ex-wrbtr USING '. '.
CONDENSE wa_sispro_ex-wrbtr NO-GAPS.
TRANSLATE wa_sispro_ex-wrbtr USING ',.'.
wa_sispro-wrbtr = wa_sispro_ex-wrbtr.
TRANSLATE wa_sispro_ex-zvldep USING '. '.
CONDENSE wa_sispro_ex-zvldep NO-GAPS.
TRANSLATE wa_sispro_ex-zvldep USING ',.'.
wa_sispro-zvldep = wa_sispro_ex-zvldep.
TRANSLATE wa_sispro_ex-zvlres USING '. '.
CONDENSE wa_sispro_ex-zvlres NO-GAPS.
TRANSLATE wa_sispro_ex-zvlres USING ',.'.
wa_sispro-zvlres = wa_sispro_ex-zvlres.
TRANSLATE wa_sispro_ex-zvlicms USING '. '.
CONDENSE wa_sispro_ex-zvlicms NO-GAPS.
TRANSLATE wa_sispro_ex-zvlicms USING ',.'.
wa_sispro-zvlicms = wa_sispro_ex-zvlicms.
CONCATENATE wa_sispro_ex-budat+6(4) wa_sispro_ex-budat+3(2)
wa_sispro_ex-budat(2) INTO wa_sispro-budat.
CONCATENATE wa_sispro_ex-zdtinidpr+6(4) wa_sispro_ex-zdtinidpr+3(2)
wa_sispro_ex-zdtinidpr(2) INTO wa_sispro-zdtinidpr.
CONCATENATE wa_sispro_ex-zdtultdpr+6(4) wa_sispro_ex-zdtultdpr+3(2)
wa_sispro_ex-zdtultdpr(2) INTO wa_sispro-zdtultdpr.
TRANSLATE wa_sispro_ex-zpercdpr USING '. '.
CONDENSE wa_sispro_ex-zpercdpr NO-GAPS.
TRANSLATE wa_sispro_ex-zpercdpr USING ',.'.
wa_sispro-zpercdpr = wa_sispro_ex-zpercdpr.

APPEND wa_sispro TO t_sispro.

ENDLOOP.

ENDFORM. " OBTER_FILE_LOGICO_SISPRO


*&---------------------------------------------------------------------*
*& Form MONTA_ARQUIVOS_LOCAIS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_arquivos_locais .

"Realiza a leitura da primeira planilha excel


PERFORM leitura_planilha_excel.
"Monta as tabelas internas da primeira planilha com as informaes do excel
PERFORM monta_tabelas_excel.

"Finaliza a leitura da primeira planilha e fecha a mesma


PERFORM fecha_planilha_excel.

"Realiza a leitura da segunda planilha excel


PERFORM leitura_planilha_excel2.

"Monta as tabelas internas da segunda planilha com as informaes do excel


PERFORM monta_tabelas_excel2.

"Finaliza a leitura da segunda planilha e fecha a mesma


PERFORM fecha_planilha_excel2.

ENDFORM. " MONTA_ARQUIVOS_LOCAIS

You might also like