Você está na página 1de 14

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

* Lojas Americanas S.A.


*
* Programa : ZFINCONTR040
*
* Funo : Carga de Informaes do Flash.
*
* Analista : Marcia Valentini
*
* Autor
: Bruno Santos
*
* Data
: 19.09.2014
*
*======================================================================*
* Log de Modificaes:
*
*======================================================================*
* Data
|Descrio
|Autor
*
*
|
|
*
*======================================================================*
REPORT zfincontr040 MESSAGE-ID z1
NO STANDARD PAGE HEADING
LINE-SIZE 120
LINE-COUNT 65.
*======================================================================*
* TABELAS TRANSPARENTES
*======================================================================*
TABLES: zfin_dados_flash,
sscrfields.
*======================================================================*
* INCLUDES
*======================================================================*
INCLUDE <icon>.
*======================================================================*
* TABELAS INTERNAS
*======================================================================*
DATA: t_saida
TYPE TABLE OF zfin_dados_flash,
t_sheets
TYPE soi_sheets_table,
t_data
TYPE soi_generic_table,
t_ranges
TYPE soi_range_list.
*======================================================================*
* WORK AREAS
*======================================================================*
DATA: wa_saida
TYPE zfin_dados_flash,
wa_sheets
TYPE soi_sheets,
wa_data
TYPE soi_generic_item.
*======================================================================*
* VARIVEIS GLOBAIS
*======================================================================*
DATA: "vg_rows
TYPE i VALUE 261,
vg_cols
TYPE i VALUE 25,
vg_document_url TYPE c LENGTH 256,
vg_flag.
*======================================================================*
* 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.

*======================================================================*
* TELA DE SELEO
*======================================================================*
* Excluir Tabelas
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.
*
PARAMETERS: p_cpla RADIOBUTTON GROUP g DEFAULT 'X' MODIF ID gr USER-COMMAND tra
ta_tela,
p_limp RADIOBUTTON GROUP g MODIF ID gr.
*
SELECTION-SCREEN END OF BLOCK b3.
*
* Carregar Planilha
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
*
PARAMETERS: p_file
TYPE localfile
MODIF ID gr1.
*
SELECTION-SCREEN SKIP.
*
PARAMETERS vg_rows
TYPE i DEFAULT 881 MODIF ID gr1. "Quantidade de linhas
*PARAMETERS vg_cols
TYPE i DEFAULT 25 MODIF ID gr1. "Quantidade de colun
as
*
SELECTION-SCREEN SKIP.
*
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
"Ajuda de pesquisa para exibio do caminho que ser salvo o arquivo
PERFORM pesquisa_dir.
AT SELECTION-SCREEN OUTPUT.
PERFORM trata_tela.
*======================================================================*
* INICIALIZAO
*======================================================================*
INITIALIZATION.
"Monta o container para a leitura da planilha
PERFORM inicializa_container_excel.
*======================================================================*
* INCIO DO PROCESSAMENTO
*======================================================================*
START-OF-SELECTION.
"Se foi selecionada a planilha
IF p_cpla IS NOT INITIAL.
"Realiza a leitura da planilha excel
PERFORM leitura_planilha_excel.
"Monta as tabelas internas com as informaes do excel
PERFORM monta_tabelas_excel.

"Finaliza a leitura da planilha e fecha a mesma


PERFORM fecha_planilha_excel.
ELSE.
"Exclui as informaes da tabela
PERFORM exclui_tabelas.
ENDIF.
*======================================================================*
* FORMS
*======================================================================*
*
*&---------------------------------------------------------------------*
*&
Form PESQUISA_DIR
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM pesquisa_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.
" PESQUISA_DIR
*&---------------------------------------------------------------------*
*&
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
style
lifetime
repid
dynnr
no_autodef_progid_dynnr
EXCEPTIONS
cntl_error
cntl_system_error
create_error
lifetime_error
lifetime_dynpro_dynpro_link
OTHERS

=
= 'CONT'
=
= lifetime_default
=
=
=
=
=
=
=
=
=

1
2
3
4
5
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
shell_style
parent
name
autoalign
IMPORTING
error
retcode
EXCEPTIONS
javabeannotsupported
OTHERS

=
=
=
=
=

SY-REPID
1384185856
ref_container
'x'

= ref_error
=
= 1
= 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 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.
MESSAGE s900 WITH 'O Caminho da Planilha de ' 'Preenchimento Obrigatrio!' DI
SPLAY 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 .
"Estruturas locais
TYPES: BEGIN OF y_flash,
loja
TYPE
nome
TYPE
categoria
TYPE
tipo
TYPE
dt_inauguracao TYPE
premium
TYPE
perfil_cliente TYPE
cd
TYPE
ddd
TYPE
voltagem
TYPE
cidade
TYPE
uf
TYPE
regiao
TYPE
distrito
TYPE
cap_ou_int
TYPE
litoral
TYPE
tamanho
TYPE
area_vda
TYPE
area_estoque
TYPE
area_est_vda
TYPE
temp_med_ano
TYPE
classe_temper TYPE
shc_rua
TYPE
lead_time
TYPE
freq_abast
TYPE
END OF y_flash.

char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,
char256,

"Tabelas locais
DATA: t_flash
wa_flash

TYPE TABLE OF y_flash,


TYPE y_flash.

"Variveis locais
DATA: vl_cont
vl_tabix
vl_num

TYPE numc4,
TYPE sy-tabix,
TYPE numc07.

RANGES: rg_colunas FOR wa_data-column.


"Verifica se existem abas na planilha
IF t_sheets[] IS NOT INITIAL.
"Exclui as abas diferentes das que sero utilizadas
DELETE t_sheets WHERE NOT sheet_name = 'INFO_LOJAS'.
ELSE.

MESSAGE 'No foram encontradas informaes na planilha.' TYPE 'I' DISPLAY LIKE 'E'
.
LEAVE LIST-PROCESSING.
EXIT.
ENDIF.
"Verifica se o nome da planilha existe
IF t_sheets[] IS NOT INITIAL.
"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.
"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.
"Insere uma nova rea
CALL METHOD ref_spreadsheet->insert_range
EXPORTING
name
= 'Carga'
rows
= vg_rows
columns = vg_cols
no_flush = ''
IMPORTING
error
= ref_error.
IF ref_error->has_failed = 'X'.
EXIT.
ENDIF.
"Limpa a tabela
REFRESH t_data.

*
*
*

"Obtm o nome e os dados da rea


CALL METHOD ref_spreadsheet->get_ranges_data
EXPORTING
no_flush = ' '
all
= 'X'
updating = -1
rangesdef =

*
*

IMPORTING
contents
error
retcode
CHANGING
ranges

= t_data
= ref_error
=
= 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.
DELETE t_data WHERE NOT column IN rg_colunas.
DELETE t_data WHERE row EQ '0001'.
"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_flash-loja
WHEN 0002.
wa_flash-nome
WHEN 0003.
wa_flash-categoria
WHEN 0004.
wa_flash-tipo
WHEN 0005.
wa_flash-dt_inauguracao
WHEN 0006.
wa_flash-premium
WHEN 0007.
wa_flash-perfil_cliente
WHEN 0008.
wa_flash-cd
WHEN 0009.
wa_flash-ddd

= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.

WHEN 0010.
wa_flash-voltagem
WHEN 0011.
wa_flash-cidade
WHEN 0012.
wa_flash-uf
WHEN 0013.
wa_flash-regiao
WHEN 0014.
wa_flash-distrito
WHEN 0015.
wa_flash-cap_ou_int
WHEN 0016.
wa_flash-litoral
WHEN 0017.
wa_flash-tamanho
WHEN 0018.
wa_flash-area_vda
WHEN 0019.
wa_flash-area_estoque
WHEN 0020.
wa_flash-area_est_vda
WHEN 0021.
wa_flash-temp_med_ano
WHEN 0022.
wa_flash-classe_temper
WHEN 0023.
wa_flash-shc_rua
WHEN 0024.
wa_flash-lead_time
WHEN 0025.
wa_flash-freq_abast

= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.
= wa_data-value.

ENDCASE.
"Controla a mudana de linha
AT END OF row.
APPEND wa_flash TO t_flash.
CLEAR wa_flash.
ENDAT.
ENDLOOP.
ENDLOOP.
"Verifica se existem dados na tabela interna
IF t_flash[] IS NOT INITIAL.
"Grava os dados na tabela
LOOP AT t_flash INTO wa_flash.
wa_saida-loja

= wa_flash-loja.

wa_saida-nome

= wa_flash-nome.

wa_saida-categoria

= wa_flash-categoria.

wa_saida-tipo

= wa_flash-tipo.

"Monta a data de inaugurao

CONCATENATE wa_flash-dt_inauguracao+6(4) wa_flash-dt_inauguracao+3(2)


wa_flash-dt_inauguracao(2) INTO wa_saida-dt_inauguracao.
wa_saida-premium

= wa_flash-premium.

wa_saida-perfil_cliente

= wa_flash-perfil_cliente.

wa_saida-cd

= wa_flash-cd.

wa_saida-ddd

= wa_flash-ddd.

wa_saida-voltagem

= wa_flash-voltagem.

wa_saida-cidade

= wa_flash-cidade.

wa_saida-uf

= wa_flash-uf.

wa_saida-regiao

= wa_flash-regiao.

wa_saida-distrito

= wa_flash-distrito.

wa_saida-cap_ou_int

= wa_flash-cap_ou_int.

wa_saida-litoral

= wa_flash-litoral.

wa_saida-tamanho

= wa_flash-tamanho.

wa_saida-area_vda

= wa_flash-area_vda.

wa_saida-area_estoque

= wa_flash-area_estoque.

wa_saida-area_est_vda

= wa_flash-area_est_vda.

wa_saida-temp_med_ano

= wa_flash-temp_med_ano.

wa_saida-classe_temper

= wa_flash-classe_temper.

wa_saida-shc_rua

= wa_flash-shc_rua.

wa_saida-lead_time

= wa_flash-lead_time.

wa_saida-freq_abast

= wa_flash-freq_abast.

APPEND wa_saida TO t_saida.


ENDLOOP.
"Se tiver dados na tabela interna
IF t_saida[] IS NOT INITIAL.
"Exclui os registros da tabela fsica
DELETE zfin_dados_flash.
COMMIT WORK AND WAIT.
"Grava na tabela fsica
MODIFY zfin_dados_flash FROM TABLE t_saida.
COMMIT WORK AND WAIT.

MESSAGE 'As informaes foram salvas na tabela ZFIN_DADOS_FLASH' TYPE 'I' DI


SPLAY LIKE 'I'.
ENDIF.
ENDIF.
"Limpa as tabelas utilizadas
REFRESH: t_flash[], t_data[].
ELSE.
MESSAGE 'Verificar se o nome da aba da planilha "INFO_LOJAS".' TYPE 'I' DISP
LAY LIKE 'I'.
LEAVE LIST-PROCESSING.
EXIT.
ENDIF.
ENDFORM.
" MONTA_TABELAS_EXCEL
*&---------------------------------------------------------------------*
*&
Form FECHA_PLANILHA_EXCEL
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM fecha_planilha_excel .

*
*
*
*
*

"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.
ENDFORM.
" FECHA_PLANILHA_EXCEL
*&---------------------------------------------------------------------*
*&
Form EXCLUI_TABELAS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM exclui_tabelas .
"Limpa as tabelas fsicas
IF p_limp IS NOT INITIAL.
DELETE FROM zfin_dados_flash.
COMMIT WORK AND WAIT.
ENDIF.
MESSAGE s857 WITH 'A tabela foi limpada com sucesso!'.
ENDFORM.
" EXCLUI_TABELAS
*&---------------------------------------------------------------------*
*&
Form TRATA_TELA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM trata_tela .
"Se for clicado na opo SERVIDOR
IF p_cpla = 'X'.
"Bloqueia os campos LOCAL
LOOP AT SCREEN.
IF screen-group1 = 'GR2'.
screen-invisible = 1.
screen-input
= 0.
screen-active
= 0.
MODIFY SCREEN.
ENDIF.
IF screen-group1 = 'GR1'.
screen-invisible = 0.
screen-input
= 1.
screen-active
= 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

"Se for clicado na opo LOCAL


ELSEIF p_limp = 'X'.
"Bloqueia os campos LOCAL
LOOP AT SCREEN.
IF screen-group1 = 'GR2'.
screen-invisible = 0.
screen-input
= 1.
screen-active
= 1.
MODIFY SCREEN.
ENDIF.
IF screen-group1 = 'GR1'.
screen-invisible = 1.
screen-input
= 0.
screen-active
= 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.

" TRATA_TELA

Você também pode gostar