Escolar Documentos
Profissional Documentos
Cultura Documentos
************************************************************************
* DECLARAÇÕES *
************************************************************************
*----------------------------------------------------------------------*
* Objetos DDIC *
*----------------------------------------------------------------------*
TABLES: bsid. "Contabilidade: clientes
*----------------------------------------------------------------------*
* Parâmetros de seleção *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_bukrs FOR bsid-bukrs, "Empresa
s_kunnr FOR bsid-kunnr, "Cliente
s_gjahr FOR bsid-gjahr OBLIGATORY, "Exercício
s_budat FOR bsid-budat OBLIGATORY. "Data lançamento
SELECTION-SCREEN END OF BLOCK b1.
*----------------------------------------------------------------------*
* Constantes *
*----------------------------------------------------------------------*
CONSTANTS: c_cnpj_msm(14) VALUE '25860305000102',
c_id_header(2) VALUE '00',
c_desc(20) VALUE 'RELATO COMP NEGOCIOS',
c_versao(1) VALUE 'V',
c_01(2) VALUE '01',
c_tp_dados(2) VALUE '05',
c_id_trailler(2) VALUE '99',
c_correcao(8) VALUE 'CORRECAO',
c_exclui(13) VALUE '9999999999999',
c_msg_1(18) VALUE 'Inserindo registro',
c_de(2) VALUE 'de',
c_msg_2(10) VALUE 'no arquivo',
c_a VALUE 'a'.
*----------------------------------------------------------------------*
* Ranges *
*----------------------------------------------------------------------*
RANGES: gr_blart FOR bsid-blart.
*----------------------------------------------------------------------*
* Tabelas internas *
*----------------------------------------------------------------------*
TYPES truxs_t_text_data(4096) TYPE c OCCURS 0.
DATA: it_txt TYPE truxs_t_text_data.
DATA: ls_txt LIKE LINE OF it_txt.
*** Recebem dados do banco de dados
* Dados de clientes
DATA: BEGIN OF gt_kna1 OCCURS 0,
kunnr TYPE kna1-kunnr, "Nº cliente 1
name1 TYPE kna1-name1, "Nome 1
name2 TYPE kna1-name2, "Nome 2
ort01 TYPE kna1-ort01, "Local
pstlz TYPE kna1-pstlz, "Código postal
regio TYPE kna1-regio, "Região (país, estado, província,
condado)
stras TYPE kna1-stras, "Rua e nº
telf1 TYPE kna1-telf1, "1º Nº telefone
telfx TYPE kna1-telfx, "Nº telefax
erdat TYPE kna1-erdat, "Data de criação do registro
loevm TYPE kna1-loevm, "Marcado para eliminação
ort02 TYPE kna1-ort02, "Bairro
pstl2 TYPE kna1-pstl2, "Código postal da cx.postal
cityc TYPE kna1-cityc, "Código da cidade
sperr TYPE kna1-sperr, "Bloqueio central contabilização
stcd1 TYPE kna1-stcd1, "CNPJ
stcd2 TYPE kna1-stcd2, "CPF
stkzn TYPE kna1-stkzn,
END OF gt_kna1.
* Partidas em aberto
DATA: BEGIN OF gt_bsid OCCURS 0,
bukrs TYPE bsid-bukrs, "Empresa
kunnr TYPE bsid-kunnr, "Nº cliente 1
augdt TYPE bsid-augdt, "Data de compensação
augbl TYPE bsid-augbl, "Nº documento de compensação
gjahr TYPE bsid-gjahr, "Exercício
belnr TYPE bsid-belnr, "Nº documento de um documento
contábil
budat TYPE bsid-budat, "Data de lançamento no documento
bldat TYPE bsid-budat, "Data documento
xblnr TYPE bsid-xblnr, "Nº documento de referência
wrbtr TYPE bsid-wrbtr, "Montante em moeda do documento
zfbdt TYPE bsid-zfbdt, "Data base para cálculo do
vencimento
zbd1t TYPE bsid-zbd1t, "Dias de desconto 1
xstov TYPE bsid-xstov, "Código: documento marcado para
estorno
vbeln TYPE bsid-vbeln, "Doc faturamento
END OF gt_bsid.
* Partidas compensadas
DATA: BEGIN OF gt_bsad OCCURS 0,
bukrs TYPE bsad-bukrs, "Empresa
kunnr TYPE bsad-kunnr, "Nº cliente 1
augdt TYPE bsad-augdt, "Data de compensação
augbl TYPE bsad-augbl, "Nº documento de compensação
gjahr TYPE bsad-gjahr, "Exercício
belnr TYPE bsad-belnr, "Nº documento de um documento
contábil
budat TYPE bsid-budat, "Data de lançamento no documento
bldat TYPE bsid-budat, "Data documento
xblnr TYPE bsad-xblnr, "Nº documento de referência
wrbtr TYPE bsad-wrbtr, "Montante em moeda do documento
zfbdt TYPE bsad-zfbdt, "Data base para cálculo do
vencimento
zbd1t TYPE bsid-zbd1t, "Dias de desconto 1
xstov TYPE bsid-xstov, "Código: documento marcado para
estorno
vbeln TYPE bsid-vbeln, "Doc faturamento
END OF gt_bsad.
BEGIN OF ty_rodape,
cod_registro(1) TYPE c,
lv_braco(592) TYPE c,
sequencia TYPE n LENGTH 7,
END OF ty_rodape.
*----------------------------------------------------------------------*
* Variáveis *
*----------------------------------------------------------------------*
DATA: gn_qtde_reg_relation TYPE i,
gn_qtde_reg_titulos TYPE i,
p_saida_old LIKE rlgrap-filename,
lc_first.
*-------------------------------------------------------------------------
* Definição de Estruturas
*-------------------------------------------------------------------------
DATA: gs_ztfi004 TYPE ztfi004.
*
* gs_bsid TYPE ty_bsid.
*-------------------------------------------------------------------------
" Estruturas e tabelas intenas ( ALV )
*-------------------------------------------------------------------------
DATA: gw_alv TYPE TABLE OF ztfi004,
gw_fcat TYPE TABLE OF slis_fieldcat_alv.
*----------------------------------------------------------------------*
* Estruturas *
*----------------------------------------------------------------------*
DATA: gs_titulos LIKE gt_titulos.
*----------------------------------------------------------------------*
* Contantes *
*----------------------------------------------------------------------*
CONSTANTS: c_registro(1) VALUE '0',
c_ramal(4) VALUE '0001',
c_serasa(15) VALUE 'SERASA-CONVEM04',
c_envio(1) VALUE 'E',
c_sequencia(7) VALUE '0000001',
c_num_rem(6) VALUE '000001',
c_cnpj(9) VALUE '058997354',
c_telefone(12) VALUE '001120788075',
c_nome(70) VALUE 'SHOPPING CENTER IGUATEMI CAMPINAS'.
************************************************************************
* EVENTOS *
************************************************************************
*----------------------------------------------------------------------*
* Initialization *
*----------------------------------------------------------------------*
INITIALIZATION.
lc_first = 'X'.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_saida.
PERFORM f_busca_diretorio USING p_saida.
*----------------------------------------------------------------------*
* START-OF-SELECTION. *
*----------------------------------------------------------------------*
START-OF-SELECTION.
* Seleciona dados do BD
PERFORM f_seleciona_dados.
IF r_normal = 'X'.
PERFORM exibe_alv.
*Alv Here
ELSE.
PERFORM gera_arquivo.
ENDIF.
* PERFORM f_gera_arq_saida.
ELSE.
* Monta tabela de saída
* PERFORM f_monta_arq_correcao.
*
* PERFORM f_gera_arq_saida.
ENDIF.
*----------------------------------------------------------------------*
* END-OF-SELECTION. *
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form f_seleciona_dados
*&---------------------------------------------------------------------*
* Seleciona dados das tabelas transparentes
*----------------------------------------------------------------------*
FORM f_seleciona_dados .
PERFORM f_seleciona_add.
PERFORM f_alimenta_range.
PERFORM f_seleciona_bseg.
*&---------------------------------------------------------------------*
*& Form f_seleciona_bsid
*&---------------------------------------------------------------------*
* Seleciona partidas em aberto - BSID
*----------------------------------------------------------------------*
FORM f_seleciona_bsid .
*&---------------------------------------------------------------------*
*& Form f_seleciona_kna1
*&---------------------------------------------------------------------*
* Seleciona dados dos clientes
*----------------------------------------------------------------------*
FORM f_seleciona_kna1 .
*&---------------------------------------------------------------------*
*& Form f_ordena_tabelas
*&---------------------------------------------------------------------*
* Ordena tabelas internas
*----------------------------------------------------------------------*
FORM f_ordena_tabelas .
*&---------------------------------------------------------------------*
*& Form f_monta_arquivo_saida
*&---------------------------------------------------------------------*
* Monta arquivo de saída
*----------------------------------------------------------------------*
FORM f_monta_arquivo_saida.
PERFORM f_ordena_tabelas.
PERFORM f_alimenta_header.
PERFORM alimenta_item.
* LOOP AT gt_titulos.
*
* CLEAR: gt_bkpf, gt_kna1.
*
* IF ln_anterior_xblnr NE gt_titulos-xblnr.
* CLEAR: gc_alfabeto, gi_conta_faturas.
* ENDIF.
*
* READ TABLE gt_bkpf WITH KEY belnr = gt_titulos-belnr BINARY SEARCH.
* CHECK sy-subrc EQ 0.
* READ TABLE gt_kna1 WITH KEY kunnr = gt_titulos-kunnr BINARY SEARCH.
* CHECK sy-subrc EQ 0.
*
* MOVE-CORRESPONDING gt_titulos TO gs_titulos.
*
** Data vencimento
* gt_detalhe_titulos-dat_vencto = gs_titulos-zfbdt + gs_titulos-zbd1t.
*
** Alimenta tabela Header - Busca Datas
* PERFORM f_busca_periodo.
*
* AT NEW kunnr.
* PERFORM f_alimenta_detalhes_relation.
* ENDAT.
*
* PERFORM f_alimenta_detalhes_titulos.
*
* ln_anterior_xblnr = gt_titulos-xblnr.
*
* ENDLOOP.
APPEND gt_header.
UNASSIGN <fi003_aux>.
IF <fi003_aux> IS ASSIGNED.
gt_header-cnpj = lv_cnpj.
gt_header-telefone = <fi003_aux>-telefone.
ENDIF.
gt_header-id = c_registro.
gt_header-dat_ini = sy-datum.
gt_header-ramal = c_ramal.
gt_header-id_arq = c_serasa.
gt_header-num_rem = c_num_rem.
gt_header-cod_env = c_envio.
gt_header-branco = lv_string.
gt_header-sequencial = c_sequencia.
*&---------------------------------------------------------------------*
*& Form f_alimenta_trailler
*&---------------------------------------------------------------------*
* Alimenta registros de detalhes
*----------------------------------------------------------------------*
FORM f_alimenta_detalhes_relation.
gt_detalhe_relation-id = c_01.
gt_detalhe_relation-tipo_dados = c_01.
gt_detalhe_relation-dat_ini = gt_kna1-erdat.
APPEND gt_detalhe_relation.
CLEAR gt_detalhe_relation.
*&---------------------------------------------------------------------*
*& Form f_alimenta_trailler
*&---------------------------------------------------------------------*
* Alimenta registro Trailler
*----------------------------------------------------------------------*
FORM f_alimenta_trailler.
gt_trailler-id = c_id_trailler.
gt_trailler-qtde_relac = gn_qtde_reg_relation.
gt_trailler-qtde_reg = gn_qtde_reg_titulos.
APPEND gt_trailler.
*&---------------------------------------------------------------------*
*& Form f_busca_periodo
*&---------------------------------------------------------------------*
* Busca período informado
*----------------------------------------------------------------------*
FORM f_busca_periodo .
DATA: lc_flag_first.
IF gt_header-dat_ini IS INITIAL.
gt_header-dat_ini = gs_titulos-budat.
lc_flag_first = 'X'.
ENDIF.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form f_alimenta_detalhes_titulos
*&---------------------------------------------------------------------*
* Alimenta detalhes Titulos
*----------------------------------------------------------------------*
FORM f_alimenta_detalhes_titulos .
gt_detalhe_titulos-dat_emissao = gt_titulos-bldat.
gt_detalhe_titulos-id = c_01.
gt_detalhe_titulos-tp_dados = c_tp_dados.
gt_detalhe_titulos-dat_pgto = gs_titulos-augdt.
IF r_normal = 'X'.
gt_detalhe_titulos-valor = gs_titulos-wrbtr.
ELSE.
gt_detalhe_titulos-valor = c_exclui.
ENDIF.
APPEND gt_detalhe_titulos.
CLEAR gt_detalhe_titulos.
PERFORM f_grava_header.
PERFORM f_grava_item.
PERFORM f_grava_rodape.
PERFORM f_grava_trailler.
ls_diretorio = p_saida.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = ls_diretorio
filetype = 'ASC'
append = 'X'
trunc_trailing_blanks_eol = ' '
TABLES
data_tab = pt_table
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc = 0.
p_sucesso = p_sucesso + 1.
ENDIF.
* CNPJ
IF NOT gt_kna1-stcd1 IS INITIAL.
p_cnpj = gt_kna1-stcd1.
ENDIF.
* CPF
IF NOT gt_kna1-stcd2 IS INITIAL.
p_cnpj = gt_kna1-stcd2.
ENDIF.
*&---------------------------------------------------------------------*
*& Form f_busca_diretorio
*&---------------------------------------------------------------------*
* Busca diretório de gravação para arquivo de saída
*----------------------------------------------------------------------*
FORM f_busca_diretorio USING p_saida.
ls_title = text-003.
p_saida = ls_caminho.
*&---------------------------------------------------------------------*
*& Form f_verifica_tempo_cliente
*&---------------------------------------------------------------------*
* Calcula tempo em que é cliente
*----------------------------------------------------------------------*
FORM f_verifica_tempo_cliente CHANGING p_anos.
ld_from = gt_kna1-erdat.
ld_ate = sy-datum.
* Cliente antigo
ELSE.
gt_detalhe_relation-tipo = 01.
ENDIF.
* Cliente inativo
IF gt_kna1-sperr = 'X'.
gt_detalhe_relation-tipo = 03.
ENDIF.
*&---------------------------------------------------------------------*
*& Form f_monta_arq_correcao
*&---------------------------------------------------------------------*
* Monta arquivo de correção - Registros a serem excluídos
*----------------------------------------------------------------------*
FORM f_monta_arq_correcao .
PERFORM f_ordena_tabelas.
PERFORM f_alimenta_header.
* Data vencimento
gt_detalhe_titulos-dat_vencto = gs_titulos-zfbdt + gs_titulos-zbd1t.
AT NEW kunnr.
PERFORM f_alimenta_detalhes_relation.
ENDAT.
PERFORM f_alimenta_detalhes_titulos.
ENDLOOP.
IF r_correc = 'X'.
gt_header-dat_ini = c_correcao.
ENDIF.
APPEND gt_header.
*&---------------------------------------------------------------------*
*& Form f_alimenta_range
*&---------------------------------------------------------------------*
* Alimenta Range para TIPO de documento FI
*----------------------------------------------------------------------*
FORM f_alimenta_range .
* Fatura
gr_blart-sign = 'I'.
gr_blart-option = 'EQ'.
gr_blart-low = 'RV'.
APPEND gr_blart.
* Fatura em FI
gr_blart-sign = 'I'.
gr_blart-option = 'EQ'.
gr_blart-low = 'DR'.
APPEND gr_blart.
* Devolução
gr_blart-sign = 'I'.
gr_blart-option = 'EQ'.
gr_blart-low = 'AB'.
APPEND gr_blart.
*&---------------------------------------------------------------------*
*& Form f_seleciona_bkpf
*&---------------------------------------------------------------------*
* Seleciona Cabeçalho DOC contábil
*----------------------------------------------------------------------*
FORM f_seleciona_bkpf .
SELECT bukrs
belnr
gjahr
blart
bldat
bstat
INTO TABLE gt_bkpf
FROM bkpf
FOR ALL ENTRIES IN lt_titulos
WHERE bukrs = lt_titulos-bukrs AND
belnr = lt_titulos-belnr AND
gjahr = lt_titulos-gjahr.
* Desconsidera partidas-memo
DELETE gt_bkpf WHERE bstat EQ 'S'.
*&---------------------------------------------------------------------*
*& Form f_monta_msg_status_atualizacao
*&---------------------------------------------------------------------*
* Monta mensagem atualização - Status processamento
*----------------------------------------------------------------------*
FORM f_monta_msg_status_atualizacao USING p_qtde_total
CHANGING p_cont_registros
p_texto_status.
DATA: lc_cont_registros(6) TYPE c,
lc_qtde_total(6) TYPE c.
* p_cont_registros = p_cont_registros + 1.
*
* lc_cont_registros = p_cont_registros.
* lc_qtde_total = p_qtde_total.
CONCATENATE text-011
lc_qtde_total
text-012
* lc_qtde_total
* c_msg_2
INTO p_texto_status
SEPARATED BY space.
*&---------------------------------------------------------------------*
*& Form f_grava_header_clientes
*&---------------------------------------------------------------------*
* Grava detalhes dos clientes
*----------------------------------------------------------------------*
FORM f_grava_header_clientes .
li_cont_registros = li_cont_registros + 1.
* CONCATENATE
CLEAR: lt_detalhe_titulos[],
lt_detalhe_titulos.
PERFORM f_alimenta_trailler.
lc_alfabeto = sy-abcde+li_conta_faturas(1).
li_conta_faturas = li_conta_faturas + 1.
* lc_conta_faturas = li_conta_faturas.
CONCATENATE '#D'
lc_alfabeto
gt_titulos-xblnr
INTO gt_detalhe_titulos-flag_titulo.
IF gt_titulos[] IS INITIAL.
MESSAGE s010 DISPLAY LIKE 'E'.
STOP.
ENDIF.
*Text elements
*-------------
* 001 Fltro
* 002 Arquivo de saída
* 003 Selecionando partidas em aberto (tabela BSID) ...
* 004 Selecionando partidas compensadas (tabela BSAD) ...
* 005 Selecionando dados clientes (tabela KNA1) ...
* 006 Montando arquivo de saída ...
* 007 Gravando registros no arquivo de saída ...
* 008 Arquivo gerado com sucesso.
* 009 Erro ao gerar registros no arquivo
* 010 Erro ao gerar arquivo.
* 011 Gravando
* 012 registros no arquivo.
*Selection texts
*---------------
* P_SAIDA Arquivo de saída
* R_CORREC Remessa de correção
* R_NORMAL Remessa normal
* S_BUDAT Data lançamento
* S_BUKRS Empresa
* S_GJAHR Exercício
* S_KUNNR Cliente
*Messages
*-------------
* Message class: ZFI001 LINE-SIZE 141
* 010
*&---------------------------------------------------------------------*
*& Form ALIMENTA_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alimenta_item.
LOOP AT gt_titulos.
READ TABLE gt_kna1 WITH KEY
kunnr = gt_titulos-kunnr
BINARY SEARCH.
IF sy-subrc EQ 0.
lv_contador = lv_contador + 1.
w_detalhe-sequencia = lv_contador.
UNPACK w_detalhe-sequencia TO w_detalhe-sequencia.
w_detalhe-tp_pessoa = gt_kna1-stkzn.
w_detalhe-tp2 = gt_kna1-stkzn.
w_detalhe-nome = gt_kna1-name1.
CONCATENATE w_detalhe-nome ' ' INTO lv_nome RESPECTING BLANKS.
w_detalhe-nome = lv_nome.
w_detalhe-endereco = gt_kna1-stras.
CONCATENATE w_detalhe-endereco ' ' INTO lv_endereco RESPECTING BLANKS.
w_detalhe-endereco = lv_endereco.
w_detalhe-bairro = gt_kna1-ort01.
CONCATENATE w_detalhe-bairro ' ' INTO lv_bairro RESPECTING BLANKS.
w_detalhe-bairro = lv_bairro.
w_detalhe-municipio = gt_kna1-ort01.
CONCATENATE w_detalhe-municipio ' ' INTO lv_municipio RESPECTING BLANKS.
w_detalhe-municipio = lv_municipio.
w_detalhe-tp2 = 1.
w_detalhe-tp_pessoa = 'J'.
w_detalhe-documento = gt_kna1-stcd1.
ENDIF.
w_detalhe-final_cnpj = w_fi004-cnpj2+lv_tamanho(6)."gt_kna1-
stcd1+lv_tamanho(6).
IF sy-subrc EQ 0.
w_detalhe-dt_venc = w_bseg-fdtag.
w_detalhe-dt_vendiv = w_bseg-fdtag.
w_detalhe-vl_divida = w_bseg-dmbtr.
CONCATENATE w_detalhe-vl_divida ' ' INTO lv_divida RESPECTING BLANKS.
w_detalhe-vl_divida = lv_divida.
w_detalhe-num_contrato = w_bseg-vertn.
CONCATENATE w_detalhe-num_contrato ' ' INTO lv_num_contrato RESPECTING
BLANKS.
w_detalhe-num_contrato = lv_num_contrato.
ENDIF.
w_detalhe-uf = gt_kna1-regio.
REPLACE ALL OCCURRENCES OF '.' IN gt_kna1-pstlz WITH space.
REPLACE ALL OCCURRENCES OF '/' IN gt_kna1-pstlz WITH space.
REPLACE ALL OCCURRENCES OF '-' IN gt_kna1-pstlz WITH space.
REPLACE ALL OCCURRENCES OF ')' IN gt_kna1-pstlz WITH space.
REPLACE ALL OCCURRENCES OF '(' IN gt_kna1-pstlz WITH space.
w_detalhe-cep = gt_kna1-pstlz.
* w_detalhe-natureza = c_natureza.
ENDIF.
ENDLOOP.
w_rodape-cod_registro = '9'.
CONCATENATE lv_espacorodape '' INTO lv_branco RESPECTING BLANKS.
w_rodape-lv_braco = lv_branco.
w_rodape-sequencia = lv_contador.
UNPACK w_rodape-sequencia TO w_rodape-sequencia.
CONDENSE <fi003>-cnpj.
IF <fi003_aux> IS ASSIGNED.
w_fi004-cnpj2 = <fi003_aux>-cnpj.
<fi003_aux>-cnpj = <fi003_aux>-cnpj(8).
w_fi004-sigla = <fi003_aux>-sigla .
w_fi004-cnpj = <fi003_aux>-cnpj .
w_fi004-telefone = <fi003_aux>-telefone .
w_fi004-nome = <fi003_aux>-nome .
ENDIF.
ENDLOOP.
CLEAR lv_cnpj.
lv_cnpj = w_00z1-paval.
IF sy-subrc EQ 0.
ENDIF.
ENDLOOP.
gt_bsid_aux[] = gt_titulos[].
SELECT *
INTO TABLE t_bseg
FROM bseg
FOR ALL ENTRIES IN gt_bsid_aux
WHERE belnr = gt_bsid_aux-belnr.
"belnr = gt_titulos-belnr.
"budat IN s_budat AND
" blart IN gr_blart.
ENDIF.
ls_diretorio = p_saida.
CLEAR: w_rodape,w_detalhe.
LOOP AT gt_header.
ENDLOOP.
CLEAR ls_txt.
ENDLOOP.
CLEAR ls_txt.
ENDLOOP.
ENDIF.
FORM exibe_alv .
* Criação do ALV
PERFORM cria_alv.
ENDFORM. " EXIBE_ALV
*&---------------------------------------------------------------------*
*& Form SEL_DADOS
*&---------------------------------------------------------------------*
FORM sel_dados .
SELECT empresa
n_cliente
n_document
exercicio
chave
envio_inclusao
envio_exclusao
FROM ztfi004
INTO TABLE lt_ztfi004
WHERE empresa IN s_bukrs.
*&---------------------------------------------------------------------*
*& Form PREENCHE_COLUNA_ALV
*&---------------------------------------------------------------------*
FORM preenche_coluna_alv .
CLEAR: gs_alv.
gs_alv-empresa = li_ztfi004-empresa.
gs_alv-n_cliente = li_ztfi004-n_cliente.
gs_alv-n_document = li_ztfi004-n_document.
gs_alv-exercicio = li_ztfi004-exercicio.
gs_alv-chave = li_ztfi004-chave.
gs_alv-envio_inclusao = li_ztfi004-envio_inclusao.
gs_alv-envio_exclusao = li_ztfi004-envio_exclusao.
*&---------------------------------------------------------------------*
*& Form F_ALV
*&---------------------------------------------------------------------*
FORM cria_alv. "f_alv .
" Criação da tabela contendo as informações dos campos que serão mostrados no ALV
PERFORM : monta_fieldcat,
* f_mostra_alv,
f_layout.
*&---------------------------------------------------------------------*
*& Form F_FIELDCAT
*&---------------------------------------------------------------------*
FORM monta_fieldcat .
DATA: lv_pos TYPE slis_fieldcat_main0-col_pos.
PERFORM f_fieldcat USING:
'01' 'BUKRS' 'GW_ALV' text-t01 ' ', " EMPRESA
'02' 'KUNNR' 'GW_ALV' text-t02 ' ', " Nº CLIENTE
'03' 'BELNR' 'GW_ALV' text-t03 ' ', " Nº DOCUMENTO
'04' 'GJAHR' 'GW_ALV' text-t04 ' ', " EXERCÍCIO
'05' 'ZLSPR' 'GW_ALV' text-t05 ' ', " CHAVE PARA
BLOQUEIO
'06' 'INCLUSAO' 'GW_ALV' text-t06 ' ', " ENVIO INCLUSÃO
'07' 'EXCLUSAO' 'GW_ALV' text-t07 ' '. " ENVIO EXCLUSÃO
ENDFORM. "monta_fieldcat
*&---------------------------------------------------------------------*
*& Form f_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->T_COL_POS text
* -->T_FIELDNAME text
* -->T_TABNAME text
* -->T_REPTEXT_DDIC text
* -->T_HOTSPOT text
*----------------------------------------------------------------------*
FORM f_fieldcat USING t_col_pos
t_fieldname
t_tabname
t_reptext_ddic
t_hotspot.
gs_fcat-col_pos = t_col_pos.
gs_fcat-fieldname = t_fieldname.
gs_fcat-tabname = t_tabname.
gs_fcat-seltext_l = t_reptext_ddic.
gs_fcat-hotspot = t_hotspot.
gs_fcat-outputlen = '20'.
gs_fcat-just = 'C'.
*-------------------------------------------------------------------------
*& Form F_MOSTRA_ALV
*-------------------------------------------------------------------------
FORM f_mostra_alv TABLES fieldcat
outtab
USING repid
status
command
layout.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repid
i_callback_pf_status_set = status
i_callback_user_command = command
is_layout = layout
it_fieldcat = gw_fcat[]
i_save = 'X'
TABLES
t_outtab = outtab "gw_alv
EXCEPTIONS
program_error = 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.
*&---------------------------------------------------------------------*
*& Form F_LAYOUT
*&---------------------------------------------------------------------*
FORM f_layout .
st_layout-zebra = 'X'.
st_layout-colwidth_optimize = 'X'.
*&---------------------------------------------------------------------*
*& Form SET_PF_STATUS
*&---------------------------------------------------------------------*
* Setting custom PF-Status
*----------------------------------------------------------------------*
* -->RT_EXTAB Excluding table
*----------------------------------------------------------------------*
FORM f_set_pf_status USING rt_extab TYPE slis_t_extab.
ENDFORM. "SET_PF_STATUS
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* Handling custom function codes
*----------------------------------------------------------------------*
* -->R_UCOMM Function code value
* -->RS_SELFIELD Info. of cursor position in ALV
*----------------------------------------------------------------------*
FORM f_user_command USING vl_ucomm LIKE sy-ucomm
st_selfield TYPE slis_selfield.
" Declarações das variáveis locais
DATA: it_dados_temp TYPE TABLE OF ty_dados,
st_out_temp TYPE ty_dados,
it_fieldcat_temp TYPE TABLE OF slis_fieldcat_alv,
st_fieldcat_temp TYPE slis_fieldcat_alv.
BREAK-POINT.
" Verifica a ação do Usuário.
CASE vl_ucomm.
" Caso o usuário tenha selecionado um registro no ALV.
WHEN '&IC1'.
* Trata fieldcat para abrir para edição todos os campos exceto os campos chaves
it_fieldcat_temp = gw_fcat.
st_fieldcat_temp-edit = 'X'.
MODIFY it_fieldcat_temp FROM st_fieldcat_temp
TRANSPORTING edit
WHERE key IS INITIAL.
* Cria um novo ALV usando o mesmo perform só que sem User_command e com tabelas <>.
PERFORM : f_mostra_alv TABLES it_fieldcat_temp
it_dados_temp
USING sy-repid
' '
' '
st_layout.
BREAK-POINT.
" Se o botão 'Salvar' não for pressionado então a modificação não irá ser
" atualizado na tabela 'IT_OUT_TEMP'.
" Verifica o primeiro (e Unico) registro da tabela
READ TABLE it_dados_temp INTO st_out_temp
INDEX 1.
ENDCASE.
ENDFORM. "user_command