Módulo: CÂMBIO EXPORTAÇÃO
Funcionalidade: Liquidação de Fatura
Data/Hora da Publicação: 29/03/2010 00:00:00
Data/Hora Última Alteração: 22/02/2011 11:56:11
Descrição da Nota: LIQUIDAÇÃO - ARBITRAGEM - CONTA ARB INCORRETA PT-NÃO FAZ ARREDONDAMENTO
Sintoma
Ao efetuar uma liquidação de arbitragem de contrato de PT, na última F-30, lançamento em BRL, o
sistema lançando na mesma conta do contrato a partida de arbitragem(ARB), ou seja, a conta esta
incorreta. Erro também ao lançar o valor convertido, não arredondando. Ex.: 1.333,33 x 1,50000 =
2.000,00, mas o sistema esta lançando 1.999,99, neste exemplo.
Solução
Ao buscar a conta ARB, considerar todo o tipo do contrato, não só a primeira letra. Ao efetuar a
conversão de valor, fazer o cálculo de exponencial depois, para que primeiro arredonde corretamente
e depois trate as casas decimais.
8.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 10020 Data: 29/03/2010 Hora: 15:50:21
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 10020
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 8.0
Pacote : 00003
Agrupamento : 00015
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
01596 - 00001 - 6.0 - 00023 - LIQUIDAÇÃO - PROBLEMAS COM FATOR DE CONVERSÃO DE MOEDAS
03478 - 00002 - 7.0 - 00001 - VINCULAÇÃO LIQ. AUT. / LIQUIDAÇÃO - CÂMBIO PRONTO - ARBITRAGEM
03776 - 00003 - 7.0 - 00001 - LIQUIDAÇÃO - DATA PAGAMENTO NO EXTERIOR
06766 - 00004 - 7.0 - 00005 - LIQUIDAÇÃO DE FATURA
07760 - 00005 - 7.0 - 00007 - DA-LIQUIDAÇÃO E VINCULAÇÃO LIQ. AUTOMÁT - NORMAL/ARBITRAGEM/PERFO
08981 - 00006 - 7.0 - 00010 - LIQUIDAÇÃO - VALORES INCORRETOS QUANDO FOR MOEDA JPY
09062 - 00007 - 8.0 - 00001 - DESVINCULAÇÃO LIQUIDAÇÃO ATUALIZAÇÃO INCORRETA 001-DTVINCUL E 005
09652 - 00008 - 8.0 - 00002 - LIQUIDAÇÃO - ERRO RE-LANÇAMENTO ARBITRAGEM DEVIDO CAMPO 005-BELNR
----------------------------------------------------------------------------------------------------
LIQUIDAÇÃO - ARBITRAGEM - CONTA ARB INCORRETA PT-NÃO FAZ ARREDONDAMENTO
----------------------------------------------------------------------------------------------------
Palavras Chave:
LIQUIDAÇÃO - ARBITRAGEM CONTA ARB INCORRETA PT NÃO FAZ ARREDONDAMENTO
F-30
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/MZYCB004F01
REPS /PWS/MZYCB004F02
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCB004F01
...
v_defator.
select *
up to 1 rows
from tcurx
where currkey = itab_zycbt005-waers.
endselect.
if sy-subrc <> 0.
tcurx-currdec = 2.
endif.
itab_zycbe033-wrbtr = itab_zycbt006-vlme *
* >> Início da exclusão: FORM FILL_DATE6_F30_ACE
( ( itab_zycbt005-parid / v_defator ) * v_parafator ) /
* << Fim da exclusão
* >> Início da inclusão: FORM FILL_DATE6_F30_ACE
( ( itab_zycbt005-parid / v_defator ) * v_parafator ).
itab_zycbe033-wrbtr = itab_zycbe033-wrbtr /
* << Fim da inclusão
( 10 ** ( tcurx-currdec - 2 ) ).
perform verifica_casas_decimais
using
itab_zycbe033-wrbtr
itab_zycbt005-waers_c
itab_zycbt005-waers
changing itab_zycbe033-wrbtr.
itab_zycbe033-c_gsber = itab_zycbt006-gsberf.
itab_zycbe033-d_gsber = itab_zycbt006-gsberf.
if /pws/zycbe001-tpcontr(1) = 'D' and
...
...
v_defator.
select *
up to 1 rows
from tcurx
where currkey = itab_zycbt005-waers.
endselect.
if sy-subrc <> 0.
tcurx-currdec = 2.
endif.
itab_zycbt036-residuo = itab_zycbt006-vlme *
* >> Início da exclusão: FORM FILL_DATE6_F30_ACE
( ( itab_zycbt005-parid / v_defator ) * v_parafator ) /
* << Fim da exclusão
* >> Início da inclusão: FORM FILL_DATE6_F30_ACE
( ( itab_zycbt005-parid / v_defator ) * v_parafator ).
itab_zycbt036-residuo = itab_zycbt036-residuo /
* << Fim da inclusão
( 10 ** ( tcurx-currdec - 2 ) ).
perform verifica_casas_decimais
using
itab_zycbt036-residuo
itab_zycbt005-waers_c
itab_zycbt005-waers
changing itab_zycbt036-residuo.
clear v_year.
call function '/PWS/ZYGL_OBTEM_ANO_CONTABIL'
exporting
...
...
read table itab_zyglt316 index 1.
endif.
else.
concatenate 'E' v_prazo_arb
into v_codaux_arb separated by space .
call function '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
exporting
bukrs = /pws/zycbt001-bukrs
ktosl = 'ARB'
codaux1 = v_codaux_arb
* >> Início da exclusão: FORM GET_PARAMETERS_002_ARB2
codaux2 = /pws/zycbt001-tpcontr(01)
* << Fim da exclusão
* >> Início da inclusão: FORM GET_PARAMETERS_002_ARB2
codaux2 = /pws/zycbt001-tpcontr
* << Fim da inclusão
tables
account = itab_zyglt316
exceptions
key_not_found = 1
rules_not_found = 2
others = 3.
if sy-subrc eq 0.
read table itab_zyglt316 index 1.
endif.
endif.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCB004F02
...
and nrparc = itab_zycbt006-nrparc
and dtincl = itab_zycbt006-dtincl
and nrinvoic = itab_zycbt006-nrinvoic
and gsberf = itab_zycbt006-gsberf
and dtvincul = itab_zycbt006-dtvincul
and dtvencto = itab_zycbt006-dtvencto
and dtpagto = itab_zycbt006-dtpagto
and dtpagext = itab_zycbt006-dtpagext
and nrparcf = itab_zycbt006-nrparcf.
v_vlme_sl = itab_zycbt006-vlme * itab_zycbt005_ant-parid.
* >> Início da exclusão: FORM ATUALIZA_TABELAS_TRANSP2
if itab_zycbt005_ant-waers_c = 'JPY' or
itab_zycbt005_ant-waers = 'JPY'.
v_vlme_sl = ( itab_zycbt006-vlme * itab_zycbt005_ant-parid )
* ( 10 ** ( 0 - 2 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM ATUALIZA_TABELAS_TRANSP2
clear tcurx-currdec.
select single * from tcurx
where ( currkey = itab_zycbt005_ant-waers_c
or currkey = itab_zycbt005_ant-waers )
and currdec = 0.
if sy-subrc <> 0.
tcurx-currdec = 2.
* << Fim da inclusão
endif.
* >> Início da inclusão: FORM ATUALIZA_TABELAS_TRANSP2
v_vlme_sl = v_vlme_sl * ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da inclusão
itab_zycbt006-v_vldif_arb = itab_zycbt006-v_vldif *
itab_zycbt005_ant-parid.
* >> Início da exclusão: FORM ATUALIZA_TABELAS_TRANSP2
if itab_zycbt005_ant-waers_c = 'JPY' or
itab_zycbt005_ant-waers = 'JPY'.
itab_zycbt006-v_vldif_arb = ( itab_zycbt006-v_vldif *
itab_zycbt005_ant-parid )
* ( 10 ** ( 0 - 2 ) ).
endif.
* << Fim da exclusão
* >> Início da inclusão: FORM ATUALIZA_TABELAS_TRANSP2
itab_zycbt006-v_vldif_arb =
itab_zycbt006-v_vldif_arb * ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da inclusão
v_slpagar001 = v_slpagar001 + itab_zycbt006-v_vldif_arb.
modify itab_zycbt006.
update /pws/zycbt005 set slpagar = slpagar + v_vlme_sl
belnr = itab_zycbt005_ant-belnr
dtbelnr = itab_zycbt005_ant-dtbelnr
where nrseqc = itab_zycbt006-nrseqc
and tpdesp = itab_zycbt006-tpdesp
and nrparc = itab_zycbt006-nrparc
and dtincl = itab_zycbt006-dtincl
and nrinvoic = itab_zycbt006-nrinvoic
...
...
into bkpf-kursf
where belnr eq itab_zycbt209-belnr_f28
and bukrs eq itab_zycbt006-bukrs
and gjahr eq v_year.
endif.
v_reais_f = ( itab_zycbt006-vlme - itab_zycbt084-result_saldo )
/ ( 10 ** ( tcurx-currdec - 2 ) ).
v_reais_f = ( ( bkpf-kursf / v_defator )
* v_parafator ) * v_reais_f.
else.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS_ESTORN
v_reais_c = ( itab_paridade-v_vlme_c * itab_paridade-v_parid )
/ ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS_ESTORN
v_reais_c = ( itab_paridade-v_vlme_c * itab_paridade-v_parid ).
v_reais_c = v_reais_c / ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da inclusão
v_reais_c = ( ( v_txcbrl_cont / v_defator )
* v_parafator ) * v_reais_c.
clear itab_zycbt084.
read table itab_zycbt084 with key
nrseqc = itab_zycbt006-nrseqc
nrinvoic = itab_zycbt006-nrinvoic
nrparc = itab_zycbt006-nrparc
nrparcf = itab_zycbt006-nrparcf
tpdesp = itab_zycbt006-tpdesp
gsberf = itab_zycbt006-gsberf
...
...
empresa_nao_encontrada = 3
period_in_not_valid = 4
period_not_assigned = 5
version_undefined = 6
others = 7.
select single kursf from bkpf
into bkpf-kursf
where belnr eq itab_zycbt006-belnr_d
and bukrs eq itab_zycbt006-bukrs
and gjahr eq v_year.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
if /pws/zycbe001-waers = 'JPY'.
v_reais_c = ( itab_zycbt006-vlme * itab_zycbt005-parid )
* ( 10 ** ( 0 - 2 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_c = itab_zycbt006-vlme * itab_zycbt005-parid.
clear tcurx-currdec.
select single * from tcurx
where currkey = /pws/zycbe001-waers.
if sy-subrc <> 0.
tcurx-currdec = 2.
endif.
if tcurx-currdec = 0.
v_reais_c = v_reais_c * ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da inclusão
else.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_c = ( itab_zycbt006-vlme * itab_zycbt005-parid )
/ ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_c = v_reais_c / ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da inclusão
endif.
v_reais_c = ( ( bkpf-kursf / v_defator )
...
...
into bkpf-kursf
where belnr eq itab_zycbt006-belnr_f28
and bukrs eq itab_zycbt006-bukrs
and gjahr eq v_year.
v_reais_f = ( itab_zycbt006-vlme - itab_zycbt084-result_saldo )
/ ( 10 ** ( tcurx-currdec - 2 ) ).
v_reais_f = ( ( bkpf-kursf / v_defator )
* v_parafator ) * v_reais_f.
endif.
else.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_c = ( itab_zycbt006-vlme * itab_zycbt005-parid )
/ ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_c = ( itab_zycbt006-vlme * itab_zycbt005-parid ).
v_reais_c = v_reais_c / ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da inclusão
v_reais_c = ( ( v_txcbrl_cont / v_defator )
* v_parafator ) * v_reais_c.
clear itab_zycbt084.
read table itab_zycbt084 with key
nrseqc = itab_zycbt006-nrseqc
nrinvoic = itab_zycbt006-nrinvoic
nrparc = itab_zycbt006-nrparc
nrparcf = itab_zycbt006-nrparcf
tpdesp = itab_zycbt006-tpdesp
gsberf = itab_zycbt006-gsberf
...
...
if sy-subrc eq 0.
read table itab_zyglt316 index 1.
endif.
else.
concatenate 'E' v_prazo into v_cod_param separated by space .
call function '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
exporting
bukrs = itab_zycbt006-bukrs
ktosl = 'CPT'
codaux1 = v_cod_param
* >> Início da exclusão: FORM BUSCA_CONTA
codaux2 = itab_zycbt006-tpcontr(01)
* << Fim da exclusão
* >> Início da inclusão: FORM BUSCA_CONTA
codaux2 = itab_zycbt006-tpcontr
* << Fim da inclusão
tables
account = itab_zyglt316
exceptions
key_not_found = 1
rules_not_found = 2
others = 3.
if sy-subrc eq 0.
read table itab_zyglt316 index 1.
endif.
endif.
...
...
read table itab_zyglt316 index 1.
endif.
else.
concatenate 'E' v_prazo_arb
into v_codaux_arb separated by space .
call function '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
exporting
bukrs = /pws/zycbt001-bukrs
ktosl = 'ARB'
codaux1 = v_codaux_arb
* >> Início da exclusão: FORM GET_PARAMETERS_002_ARB
codaux2 = /pws/zycbt001-tpcontr(01)
* << Fim da exclusão
* >> Início da inclusão: FORM GET_PARAMETERS_002_ARB
codaux2 = /pws/zycbt001-tpcontr
* << Fim da inclusão
tables
account = itab_zyglt316
exceptions
key_not_found = 1
rules_not_found = 2
others = 3.
if sy-subrc eq 0.
read table itab_zyglt316 index 1.
endif.
endif.
...