You are on page 1of 12

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

*& Include ZFI_R_MOV_BP_SPB_F01


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_SELECIONA_DADOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_seleciona_dados .

"Se o flag do AP estiver marcado


IF ch_ap IS NOT INITIAL.
"Seleciona os dados do AP
PERFORM f_seleciona_ap.
ENDIF.

"Se o flag do AR estiver marcado


IF ch_ar IS NOT INITIAL.
"Seleciona os dados do AR
PERFORM f_seleciona_ar.
ENDIF.

"Se o flag do TRM estiver marcado


IF ch_trm IS NOT INITIAL.
"Seleciona os dados do TRM
PERFORM f_seleciona_trm.
ENDIF.

"Verifica se o flag de AP ou de AR
IF ch_ap IS NOT INITIAL OR
ch_ar IS NOT INITIAL.
"Seleciona dados em comum a AP e AR
PERFORM f_seleciona_dados_comum.
ENDIF.

"Se no for marcada nehuma opo


IF ch_ap IS INITIAL AND
ch_ar IS INITIAL AND
ch_trm IS INITIAL.

MESSAGE i009 WITH text-071.

ELSE.

"Descrio dos campos


PERFORM f_descricao_geral.
ENDIF.

ENDFORM. " F_SELECIONA_DADOS


*&---------------------------------------------------------------------*
*& Form F_SELECIONA_AP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_seleciona_ap .

"Tabelas internas
DATA t_bsak_aux LIKE t_bsak.

"Contabilidade: ndice secundrio p/fornecedores (part.comp.)


SELECT bukrs lifnr augdt augbl gjahr belnr buzei
blart shkzg dmbtr wrbtr zfbdt zterm zbd1t
zzpagto zzcamara zzmod
FROM bsak
INTO TABLE t_bsak
WHERE bukrs IN s_bukrs
AND lifnr IN s_rpzahl
AND augdt IN s_valut
AND belnr IN s_belnr
AND zlsch IN s_zbkon
AND zzpagto IN s_pagto.

IF t_bsak[] IS NOT INITIAL.

"Diferencia o mdulo
LOOP AT t_bsak INTO wa_bsak.

MOVE-CORRESPONDING wa_bsak TO wa_bsad_k.

wa_bsad_k-modulo = 'AP'.

APPEND wa_bsad_k TO t_bsad_k.

ENDLOOP.

t_bsak_aux[] = t_bsak[].
SORT t_bsak_aux BY lifnr.
DELETE ADJACENT DUPLICATES FROM t_bsak_aux
COMPARING lifnr.

* Dados do parceiro de negcio


SELECT partner name_org1 name_org2
name_org3 name_org4
FROM but000
APPENDING TABLE t_but000
FOR ALL ENTRIES IN t_bsak_aux
WHERE partner EQ t_bsak_aux-lifnr.

"Dados do CNPJ
SELECT partner taxnum
FROM dfkkbptaxnum
APPENDING TABLE t_cnpj
FOR ALL ENTRIES IN t_bsak_aux
WHERE partner EQ t_bsak_aux-lifnr.

ELSE.
IF ch_ar IS INITIAL AND ch_trm IS INITIAL.
MESSAGE i009 WITH text-070. "No foi encontrada nenhuma movimentao
financeira para os parmetros selecionados.
ENDIF.
ENDIF.
ENDFORM. " F_SELECIONA_AP
*&---------------------------------------------------------------------*
*& Form F_SELECIONA_AR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_seleciona_ar .

"Tabelas internas
DATA t_bsad_aux LIKE t_bsad.

"Contab.financ.: ndice secundrio p/clientes (partida liq.)


SELECT bukrs kunnr augdt augbl gjahr belnr buzei
blart shkzg dmbtr wrbtr zfbdt zterm zbd1t
zzpagto zzcamara zzmod
FROM bsad
INTO TABLE t_bsad
WHERE bukrs IN s_bukrs
AND kunnr IN s_rpzahl
AND augdt IN s_valut
AND belnr IN s_belnr
AND zlsch IN s_zbkon
AND zzpagto IN s_pagto.

"Diferencia o mdulo
LOOP AT t_bsad INTO wa_bsad.

MOVE-CORRESPONDING wa_bsad TO wa_bsad_k.

wa_bsad_k-modulo = 'AR'.

APPEND wa_bsad_k TO t_bsad_k.

ENDLOOP.

IF t_bsad[] IS NOT INITIAL.

t_bsad_aux[] = t_bsad[].
SORT t_bsad_aux BY kunnr.
DELETE ADJACENT DUPLICATES FROM t_bsad_aux
COMPARING kunnr.

"Dados do parceiro de negcio


SELECT partner name_org1 name_org2
name_org3 name_org4
FROM but000
APPENDING TABLE t_but000
FOR ALL ENTRIES IN t_bsad_aux
WHERE partner EQ t_bsad_aux-kunnr.

"Dados do CNPJ
SELECT partner taxnum
FROM dfkkbptaxnum
APPENDING TABLE t_cnpj
FOR ALL ENTRIES IN t_bsad_aux
WHERE partner EQ t_bsad_aux-kunnr.
ELSE.
IF ch_ap IS INITIAL AND ch_ar IS INITIAL.
MESSAGE i009 WITH text-070. "No foi encontrada nenhuma movimentao
financeira para os parmetros selecionados.
ENDIF.
ENDIF.

ENDFORM. " F_SELECIONA_AR


*&---------------------------------------------------------------------*
*& Form F_SELECIONA_TRM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_seleciona_trm .

"Variveis locais
DATA vl_tabix TYPE sy-tabix.

"Tabelas internas
DATA: t_payrq_aux TYPE TABLE OF y_payrq,
t_bkpf_trm TYPE TABLE OF y_bkpf.

"Ordens de pagamento
SELECT keyno zbukr bukrs belnr buzei gjahr dmbtr
wrbtr parno hkont sgtxt augdt augbl vertn
FROM payrq
INTO CORRESPONDING FIELDS OF TABLE t_payrq
WHERE bukrs IN s_bukrs
AND belnr IN s_belnr
AND zbkon IN s_zbkon
AND zbkon IN s_zbkon
AND augbl NE space
AND xreve EQ space.

"Se a tabela de ordem de pagamento retornar preenchida


IF t_payrq[] IS NOT INITIAL.

* t_payrq_aux[] = t_payrq[].
* SORT t_payrq_aux BY vertn.
* DELETE ADJACENT DUPLICATES FROM t_payrq_aux
* COMPARING vertn.

"Busca o documento de compensao intercompany


SELECT bukrs belnr gjahr bvorg
FROM bkpf
INTO CORRESPONDING FIELDS OF TABLE t_bkpf_trm
FOR ALL ENTRIES IN t_payrq
WHERE bukrs EQ t_payrq-bukrs
AND belnr EQ t_payrq-augbl
AND gjahr EQ t_payrq-gjahr.

"Varre a tabela para verificar se intercompany


LOOP AT t_payrq INTO wa_payrq.

MOVE-CORRESPONDING wa_payrq TO wa_bsas_comp.


"Se a empresa Empresa pagadora for diferente da empresa (Intercompany)
IF wa_payrq-bukrs NE wa_payrq-zbukr.

* wa_payrq-bukrs = wa_bkpf-bvorg+10(4).
* wa_bsas_comp-belnr = wa_bkpf-bvorg(10).
* CONCATENATE '20' wa_bkpf-bvorg+14(2) INTO wa_bsas_comp-gjahr.

ELSE.

ENDIF.

*CALL FUNCTION 'ZFI_F_BUSCA_VTBFHAPO'


* EXPORTING
* i_bukrs = wa_payrq-bukrs
* i_belnr = wa_payrq-belnr
* i_gjahr = wa_payrq-gjahr
* i_buzei = wa_payrq-buzei
** IMPORTING
** E_KEYNO =
** TABLES
** T_FHAPO =

ENDLOOP.

"Dados persistentes de ordens de pagamento


SELECT company_code prq_keyno belnr posting_year sign rpzahl
FROM trprt_payments
INTO TABLE t_trprt
FOR ALL ENTRIES IN t_payrq
WHERE prq_keyno EQ t_payrq-keyno
AND rpzahl IN s_rpzahl.

"Busca documentos conciliados no intercompany


SELECT bukrs augbl gjahr belnr buzei
blart zzpagto zzcamara zzmod
FROM bsas
INTO CORRESPONDING FIELDS OF TABLE t_bsas_comp_tr
FOR ALL ENTRIES IN t_payrq
WHERE bukrs EQ t_payrq-bukrs
AND hkont EQ t_payrq-hkont
AND gjahr EQ t_payrq-gjahr
AND belnr EQ t_payrq-augbl
AND buzei EQ t_payrq-buzei.

"Monta a tabela de Forma de Pagto


SELECT bukrs rfha cd_cam
cd_mod zwels
FROM zfi_t_spbftrmsg
INTO TABLE t_fpagto
FOR ALL ENTRIES IN t_payrq
WHERE bukrs EQ t_payrq-bukrs
AND rfha EQ t_payrq-vertn.

ELSE.
IF ch_ar IS INITIAL AND ch_ap IS INITIAL.
MESSAGE i009 WITH text-070. "No foi encontrada nenhuma movimentao
financeira para os parmetros selecionados.
ENDIF.
ENDIF.

ENDFORM. " F_SELECIONA_TRM


*&---------------------------------------------------------------------*
*& Form F_DESCRICAO_GERAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_descricao_geral .

"Declarao de ranges
RANGES: r_modal FOR zfi_t_spbmodal-cod_mod ,
r_camara FOR zfi_t_spbcamara-cod_camara ,
r_tpagto FOR zfi_t_spbpagto-cod_tp_pagto ,
r_blart FOR t003t-blart .

"Monta os ranges das formas de pagto


r_modal-sign = r_camara-sign = r_tpagto-sign = r_blart-sign = 'I' .
r_modal-option = r_camara-option = r_tpagto-option = r_blart-option = 'EQ' .

"Monta o range de AP e AR
LOOP AT t_bsad_k INTO wa_bsad_k.
r_modal-low = wa_bsad_k-zzmod .
r_camara-low = wa_bsad_k-zzcamara .
r_tpagto-low = wa_bsad_k-zzpagto .
r_blart-low = wa_bsad_k-blart .
COLLECT: r_modal ,
r_camara ,
r_tpagto ,
r_blart .
ENDLOOP.

"Monta o range de TRM


LOOP AT t_fpagto INTO wa_fpagto.
r_modal-low = wa_fpagto-cd_mod .
r_camara-low = wa_fpagto-cd_cam .
r_tpagto-low = wa_fpagto-zwels .
COLLECT: r_modal ,
r_camara ,
r_tpagto .
ENDLOOP.

"Descrio Cmara
SELECT cod_camara nome_camara
FROM zfi_t_spbcamara
INTO TABLE t_cam
WHERE cod_camara IN r_camara.

"Descrio Modalidade de liquidao


SELECT cod_mod desc_mod
FROM zfi_t_spbmodal
INTO TABLE t_mod
WHERE cod_mod IN r_modal.
"Descrio Tipo de Pagamento
SELECT cod_tp_pagto desc_tp_pagto
FROM zfi_t_spbpagto
INTO TABLE t_tpagto
WHERE cod_tp_pagto IN r_tpagto.

"Descrio Tipo de documento


SELECT blart ltext
FROM t003t
INTO TABLE t_t003t
WHERE blart IN r_blart
AND spras EQ sy-langu.

"Seleciona as Condies de pagamento


SELECT * FROM t052
INTO TABLE t_t052.

IF t_bsas_conc[] IS NOT INITIAL.

"Busca os dados da BSAS com blart = 'EB' para encontrar a autenticao


SELECT bukrs augbl gjahr belnr
FROM bsas
INTO CORRESPONDING FIELDS OF TABLE t_bsas
FOR ALL ENTRIES IN t_bsas_conc
WHERE bukrs EQ t_bsas_conc-bukrs
AND gjahr EQ t_bsas_conc-gjahr
AND belnr EQ t_bsas_conc-augbl
AND blart EQ 'EB'.

IF t_bsas[] IS NOT INITIAL.

"Busca o sequencial e o exerccio


SELECT seqmsgspb documento bukrs gjahr
FROM zfi_t_msgspbdocs
INTO TABLE t_msgspbdocs
FOR ALL ENTRIES IN t_bsas
WHERE documento EQ t_bsas-belnr
AND bukrs EQ t_bsas-bukrs
AND gjahr EQ t_bsas-gjahr.

IF t_msgspbdocs[] IS NOT INITIAL.

"Busca o nmero da autenticao


SELECT seqmsgspb zgjahr valortag
FROM zfi_t_msgspb_itm
INTO TABLE t_msgspb_itm
FOR ALL ENTRIES IN t_msgspbdocs
WHERE seqmsgspb EQ t_msgspbdocs-seqmsgspb
AND zgjahr EQ t_msgspbdocs-gjahr.

ENDIF.

ENDIF.

ENDIF.

ENDFORM. " F_DESCRICAO_GERAL


*&---------------------------------------------------------------------*
*& Form F_SELECIONA_DADOS_COMUM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_seleciona_dados_comum .

"Variveis locais
DATA: vl_tabix TYPE sy-tabix,
vl_bvorg TYPE bvorg.

"Tabelas internas
DATA: t_bkpf_comp_int TYPE TABLE OF y_bkpf.

"Work Areas
DATA: wa_t042 TYPE y_t042,
wa_bkpf TYPE y_bkpf,
wa_bkpf_conc TYPE y_bkpf.

"Declarao de ranges
RANGES rg_shkzg FOR bsas-shkzg.

"Verifica se a tabela de retorno de AP e AR est preenchida


IF t_bsad_k IS NOT INITIAL.

"Se o flag de AP estiver marcado monta o range


IF ch_ap IS NOT INITIAL.
rg_shkzg-sign = 'I' .
rg_shkzg-option = 'EQ' .
rg_shkzg-low = 'H' .
APPEND rg_shkzg.
ENDIF.

"Se o flag de AR estiver marcado monta o range


IF ch_ar IS NOT INITIAL.
rg_shkzg-sign = 'I' .
rg_shkzg-option = 'EQ' .
rg_shkzg-low = 'S' .
APPEND rg_shkzg.
ENDIF.

"Busca a Empresa pagadora


SELECT bukrs zbukr
FROM t042
INTO TABLE t_t042
FOR ALL ENTRIES IN t_bsad_k
WHERE bukrs EQ t_bsad_k-bukrs.

"Ordena as tabelas
SORT t_bsad_k BY bukrs.
SORT t_t042 BY bukrs.

"Busca o documento de compensao intercompany


SELECT bukrs belnr gjahr bvorg
FROM bkpf
INTO CORRESPONDING FIELDS OF TABLE t_bkpf
FOR ALL ENTRIES IN t_bsad_k
WHERE bukrs EQ t_bsad_k-bukrs
AND belnr EQ t_bsad_k-augbl
AND gjahr EQ t_bsad_k-gjahr
AND blart EQ 'ZP'.

SORT t_bkpf BY bukrs belnr gjahr.

"Varre a tabela para verificar se intercompany


LOOP AT t_bsad_k INTO wa_bsad_k.

"L a tabela que contm a empresa pagadora


READ TABLE t_t042 INTO wa_t042 WITH KEY bukrs = wa_bsad_k-bukrs
BINARY SEARCH.

IF sy-subrc = 0.

MOVE-CORRESPONDING wa_bsad_k TO wa_bsas_comp.

"Se a empresa Empresa pagadora for diferente da empresa intercompany


IF wa_bsad_k-bukrs NE wa_t042-zbukr.

"Busca o bvorg da BKPF


READ TABLE t_bkpf INTO wa_bkpf WITH KEY bukrs = wa_bsad_k-bukrs
belnr = wa_bsad_k-augbl
gjahr = wa_bsad_k-gjahr
BINARY SEARCH.
IF sy-subrc = 0.

wa_bsas_comp-bukrs = wa_bkpf-bvorg+10(4).
wa_bsas_comp-belnr = wa_bkpf-bvorg(10).
CONCATENATE '20' wa_bkpf-bvorg+14(2) INTO wa_bsas_comp-gjahr.

APPEND wa_bsas_comp TO t_bsas_comp.

ENDIF.

ELSE.
APPEND wa_bsas_comp TO t_bsas_comp.
ENDIF.

ENDIF.

ENDLOOP.

"Busca documentos conciliados


SELECT bukrs augbl gjahr belnr buzei
blart budat shkzg zzpagto zzcamara zzmod
FROM bsas
INTO CORRESPONDING FIELDS OF TABLE t_bsas_conc
FOR ALL ENTRIES IN t_bsas_comp
WHERE bukrs EQ t_bsas_comp-bukrs
AND hkont LIKE '101%'
AND gjahr EQ t_bsas_comp-gjahr
AND belnr EQ t_bsas_comp-augbl
AND budat IN s_valut
AND shkzg IN rg_shkzg.

"Se a BSAS de conciliao estiver preenchida


IF t_bsas_conc[] IS NOT INITIAL.
"Verificar se o documento de conciliao
SELECT bukrs belnr gjahr budat bvorg
FROM bkpf
INTO TABLE t_bkpf_conc
FOR ALL ENTRIES IN t_bsas_conc
WHERE bukrs EQ t_bsas_conc-bukrs
AND belnr EQ t_bsas_conc-belnr
AND gjahr EQ t_bsas_conc-gjahr
AND blart EQ 'AB'.

SORT t_bkpf_conc BY bukrs belnr gjahr.

"Varre a tabela com


LOOP AT t_bsas_conc INTO wa_bsas_conc.

vl_tabix = sy-tabix.

READ TABLE t_bkpf_conc INTO wa_bkpf WITH KEY bukrs = wa_bsas_conc-bukrs


belnr = wa_bsas_conc-belnr
gjahr = wa_bsas_conc-gjahr
BINARY SEARCH.

IF sy-subrc NE 0.

DELETE t_bsas_conc INDEX vl_tabix.

ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

ENDFORM. " F_SELECIONA_DADOS_COMUM


*&---------------------------------------------------------------------*
*& Form F_PROCESSAR_DADOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_processar_dados .

IF ch_trm IS NOT INITIAL.


"Monta a exibio dos dados TRM
PERFORM f_monta_dados_trm.
ENDIF.

IF ch_ap IS NOT INITIAL OR ch_ar IS NOT INITIAL.


"Monta a exibio dos dados AP e AR
PERFORM f_monta_dados_ap_ar.
ENDIF.

ENDFORM. " F_PROCESSAR_DADOS


*&---------------------------------------------------------------------*
*& Form F_MONTA_DADOS_TRM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_monta_dados_trm .

ENDFORM. " F_MONTA_DADOS_TRM


*&---------------------------------------------------------------------*
*& Form F_MONTA_DADOS_AP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_monta_dados_ap_ar .

ENDFORM. " F_MONTA_DADOS_AP

*&---------------------------------------------------------------------*
*& Form F_VALOR_LIQUIDO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_PAYRQ_BUKRS text
* -->P_WA_PAYRQ_BELNR text
* -->P_WA_PAYRQ_GJAHR text
* -->P_WA_PAYRQ_BUZEI text
* <--P_WA_ALV_VL_LIQUIDO text
*----------------------------------------------------------------------*
FORM f_valor_liquido USING p_bukrs TYPE bseg-bukrs
p_belnr TYPE bseg-belnr
p_gjahr TYPE bseg-gjahr
p_buzei TYPE bseg-buzei
CHANGING p_val_liq TYPE regup-dmbtr.

DATA: t_key TYPE bseg_key_tab ,


wa_key LIKE LINE OF t_key ,
t_fatura TYPE zfi_tt_total_liq ,
wa_fatura LIKE LINE OF t_fatura .

CLEAR p_val_liq.

wa_key-bukrs = p_bukrs .
wa_key-belnr = p_belnr .
wa_key-gjahr = p_gjahr .
wa_key-buzei = p_buzei .

APPEND wa_key TO t_key.


CLEAR wa_key.

CALL FUNCTION 'ZFI_CALCULA_MONTANTE_PAGTO'


EXPORTING
i_bseg_key = t_key
IMPORTING
e_faturas = t_fatura
EXCEPTIONS
no_data_found = 1
OTHERS = 2.

READ TABLE t_fatura INTO wa_fatura INDEX 1.

IF sy-subrc EQ 0.
p_val_liq = wa_fatura-total_liq.
ENDIF.

ENDFORM. " F_VALOR_LIQUIDO


*&---------------------------------------------------------------------*
*& Form F_MONTA_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_monta_alv .

PERFORM f_definir_fieldcat.

ENDFORM. " F_MONTA_ALV


*&---------------------------------------------------------------------*
*& Form F_EXIBE_ALV_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_exibe_alv_grid .

CALL SCREEN 2000.

ENDFORM. " F_EXIBE_ALV_GRID

You might also like