Módulo: CÂMBIO IMPORTAÇÃO
Funcionalidade: Associação
Data/Hora da Publicação: 28/08/2007 00:00:00
Data/Hora Última Alteração: 18/02/2011 09:51:02
Descrição da Nota: ASSOCIAÇÃO DE FATURAS - MOEDAS DIFERENTES - DIFERENÇA EM REAIS
Sintoma
Ao efetuar uma associação de faturas com moedas diferentes, esta gerando diferença de centavos no
lançamento em BRL.
Solução
Alterar a utilização da montante_converte pela função que o SAP utiliza na F-51/F-30, para que
calcule corretamente a diferença em reais.
7.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 04552 Data: 28/08/2007 Hora: 17:16:39
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 04552
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 7.0
Pacote : 00002
Agrupamento : 00010
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
01988 - 00001 - 6.0 - 00024 - ASSOCIAÇÃO DE FATURAS - DA RATEIO POR ITEM DOC. COMPRA
----------------------------------------------------------------------------------------------------
ASSOCIAÇÃO DE FATURAS - MOEDAS DIFERENTES - DIFERENÇA EM REAIS
----------------------------------------------------------------------------------------------------
Palavras Chave:
ASSOCIAÇÃO DE FATURAS MOEDAS DIFERENTES DIFERENÇA EM REAIS
MONTANTE_CONVERTE ARBITRAGEM
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/LZYCMGF2F01
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/LZYCMGF2F01
...
ELSE.
LOOP AT itab_zycbt034.
MESSAGE i016(/pws/zycmm) WITH itab_zycbt034-descricao.
ENDLOOP.
v_ok = ' '.
ENDIF.
ENDIF.
CLEAR: v_sempartida, v_saldototal.
ENDFORM.
FORM calcula_diferenca_reais.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
DATA : v_codeven LIKE /pws/zycbt011-codeven,
v_defator LIKE tcurr-ffact,
v_parafator LIKE tcurr-tfact,
v_txcbrl LIKE bkpf-kursf,
v_reais_fi LIKE /pws/zycbt112-vlme,
v_reais_fa LIKE /pws/zycbt112-vlme.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
DATA :
v_wrbtr(16) TYPE p,
v_wrbtr_c(16) TYPE c,
v_budat type bkpf-budat,
v_reais_fi LIKE /pws/zycbt112-vlme,
v_reais_fa LIKE /pws/zycbt112-vlme.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CONCATENATE '001' /pws/zycbe112-codint INTO v_codeven.
CLEAR /pws/zycbt011-agums.
SELECT SINGLE agums FROM /pws/zycbt011
INTO /pws/zycbt011-agums
WHERE codeven EQ v_codeven
AND codmod EQ 'I'.
IF /pws/zycbe112-bco_forn IS INITIAL.
CLEAR lfb1.
SELECT SINGLE akont FROM lfb1
INTO lfb1-akont
WHERE lifnr EQ /pws/zycbe112-lifnr
AND bukrs EQ /pws/zycbe112-bukrs.
ELSE.
CLEAR lfb1.
SELECT SINGLE akont FROM lfb1
INTO lfb1-akont
WHERE lifnr EQ /pws/zycbe112-bcofinan
AND bukrs EQ /pws/zycbe112-bukrs.
ENDIF.
CLEAR t074.
SELECT SINGLE skont FROM t074
INTO t074-skont
WHERE ktopl EQ wa_zycbt007-plcontas
AND koart EQ 'K'
AND umskz EQ /pws/zycbt011-agums
AND hkont EQ lfb1-akont.
CLEAR skb1.
SELECT SINGLE xsalh FROM skb1
INTO skb1-xsalh
WHERE bukrs EQ /pws/zycbe112-bukrs
AND saknr EQ t074-skont.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR: t001a, v_reais_fi_rateio, v_reais_fi, v_wrbtr, v_wrbtr_c.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR t001a.
* << Fim da exclusão
SELECT SINGLE kurst FROM t001a
INTO t001a-kurst
WHERE bukrs EQ /pws/zycbe112-bukrs.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR t001.
SELECT SINGLE xslta FROM t001
INTO t001-xslta
WHERE bukrs = /pws/zycbe112-bukrs.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
IF NOT itab_zycmt020[] IS INITIAL.
LOOP AT itab_zycmt020.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CALL FUNCTION '/PWS/ZYCB_MONTANTE_CONVERTE'
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
* << Fim da inclusão
EXPORTING
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
i_montante = '1'
i_demoeda = /pws/zycbe112-waers
i_paramoeda = wa_zycbt007-waersb
i_ctmoeda = t001a-kurst
i_dtbase = itab_zycbe033-budat
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
date = itab_zycbe033-budat
foreign_amount = itab_zycmt020-vlassoc
foreign_currency = /pws/zycbe112-waers
local_currency = wa_zycbt007-waersb
type_of_rate = t001a-kurst
* << Fim da inclusão
IMPORTING
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
e_txc = v_txcbrl
e_defator = v_defator
e_parafator = v_parafator
EXCEPTIONS
i_demoeda_nao_encontrado = 1
i_paramoeda_nao_encontrado = 2
i_ctmoeda_nao_encontrado = 3
i_dtbase_nao_encontrada = 4
taxa_nao_encontrada = 5
fator_nao_encontrado = 6
i_montante_nao_encontrado = 7
OTHERS = 8.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
local_amount = v_wrbtr.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
SELECT SINGLE * FROM tcurx
WHERE currkey = /pws/zycbe112-waers.
IF sy-subrc <> 0.
tcurx-currdec = 2.
ENDIF.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
WRITE v_wrbtr TO v_wrbtr_c CURRENCY wa_zycbt007-waersb.
TRANSLATE v_wrbtr_c USING '. '.
CONDENSE v_wrbtr_c NO-GAPS.
TRANSLATE v_wrbtr_c USING ',.'.
v_reais_fi_rateio = v_wrbtr_c.
v_reais_fi = v_reais_fi + v_reais_fi_rateio.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
IF NOT skb1-xsalh IS INITIAL OR
NOT t001-xslta IS INITIAL.
CLEAR bkpf.
SELECT SINGLE kursf FROM bkpf
INTO bkpf-kursf
WHERE belnr EQ itab_zycbt131-belnr_rfin
AND bukrs EQ /pws/zycbe112-bukrs
AND gjahr EQ itab_zycbe033-budat(4).
IF NOT bkpf-kursf IS INITIAL AND
NOT bkpf-kursf EQ '0.00000'.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR: v_wrbtr, v_wrbtr_c.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
IF NOT itab_zycmt020[] IS INITIAL.
CLEAR v_reais_fi_rateio.
LOOP AT itab_zycmt020.
v_reais_fi_rateio = itab_zycmt020-vlassoc
/ ( 10 ** ( tcurx-currdec - 2 ) ).
v_reais_fi_rateio = ( ( bkpf-kursf / v_defator )
* v_parafator ) * v_reais_fi_rateio.
v_reais_fi = v_reais_fi + v_reais_fi_rateio.
* << Fim da exclusão
ENDLOOP.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
ELSE.
v_reais_fi = itab_zycbt131-vlmefin
/ ( 10 ** ( tcurx-currdec - 2 ) ).
v_reais_fi = ( ( bkpf-kursf / v_defator )
* v_parafator ) * v_reais_fi.
ENDIF.
ENDIF.
ELSE.
IF NOT itab_zycmt020[] IS INITIAL.
CLEAR v_reais_fi_rateio.
LOOP AT itab_zycmt020.
v_reais_fi_rateio = itab_zycmt020-vlassoc
/ ( 10 ** ( tcurx-currdec - 2 ) ).
v_reais_fi_rateio = ( ( v_txcbrl / v_defator )
* v_parafator ) * v_reais_fi_rateio.
v_reais_fi = v_reais_fi + v_reais_fi_rateio.
ENDLOOP.
* << Fim da exclusão
ELSE.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_fi = itab_zycbt131-vlmefin
/ ( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = itab_zycbe033-budat
foreign_amount = itab_zycbt131-vlmefin
foreign_currency = /pws/zycbe112-waers
local_currency = wa_zycbt007-waersb
type_of_rate = t001a-kurst
IMPORTING
local_amount = v_wrbtr.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_fi = ( ( v_txcbrl / v_defator )
* v_parafator ) * v_reais_fi.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
WRITE v_wrbtr TO v_wrbtr_c CURRENCY wa_zycbt007-waersb.
TRANSLATE v_wrbtr_c USING '. '.
CONDENSE v_wrbtr_c NO-GAPS.
TRANSLATE v_wrbtr_c USING ',.'.
v_reais_fi = v_wrbtr_c.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
ENDIF.
* << Fim da exclusão
ENDIF.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR lfb1.
SELECT SINGLE akont FROM lfb1
INTO lfb1-akont
WHERE lifnr EQ itab_zycbt108-lifnr
AND bukrs EQ /pws/zycbe112-bukrs.
CLEAR skb1.
SELECT SINGLE xsalh FROM skb1
INTO skb1-xsalh
WHERE bukrs EQ itab_zycbt108-bukrs
AND saknr EQ lfb1-akont.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR: t001a, v_reais_fa, v_wrbtr, v_wrbtr_c, v_budat.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR t001a.
* << Fim da exclusão
SELECT SINGLE kurst FROM t001a
INTO t001a-kurst
WHERE bukrs EQ itab_zycbt108-bukrs.
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CLEAR t001.
SELECT SINGLE xslta FROM t001
INTO t001-xslta
WHERE bukrs = itab_zycbt108-bukrs.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
IF NOT itab_zycbt108-dtassoc IS INITIAL.
v_budat = itab_zycbt108-dtassoc.
ELSEIF NOT itab_zycbt108-bldat IS INITIAL.
v_budat = itab_zycbt108-bldat.
ENDIF.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
CALL FUNCTION '/PWS/ZYCB_MONTANTE_CONVERTE'
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
* << Fim da inclusão
EXPORTING
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
i_montante = '1'
i_demoeda = itab_zycbt108-waers
i_paramoeda = wa_zycbt007-waersb
i_ctmoeda = t001a-kurst
i_dtbase = itab_zycbe033-budat
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
date = v_budat
foreign_amount = itab_zycbt131-vlme
foreign_currency = itab_zycbt108-waers
local_currency = wa_zycbt007-waersb
type_of_rate = t001a-kurst
* << Fim da inclusão
IMPORTING
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
e_txc = v_txcbrl
e_defator = v_defator
e_parafator = v_parafator
EXCEPTIONS
i_demoeda_nao_encontrado = 1
i_paramoeda_nao_encontrado = 2
i_ctmoeda_nao_encontrado = 3
i_dtbase_nao_encontrada = 4
taxa_nao_encontrada = 5
fator_nao_encontrado = 6
i_montante_nao_encontrado = 7
OTHERS = 8.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
local_amount = v_wrbtr.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
SELECT SINGLE * FROM tcurx
WHERE currkey = itab_zycbt108-waers.
IF sy-subrc <> 0.
tcurx-currdec = 2.
ENDIF.
IF NOT skb1-xsalh IS INITIAL OR
NOT t001-xslta IS INITIAL.
CLEAR bkpf.
IF NOT itab_zycbt108-dtassoc IS INITIAL.
SELECT SINGLE kursf FROM bkpf
INTO bkpf-kursf
WHERE belnr EQ itab_zycbt131-belnr_rfat
AND bukrs EQ itab_zycbt108-bukrs
AND gjahr EQ itab_zycbt108-dtassoc(4).
ELSE.
SELECT SINGLE kursf FROM bkpf
INTO bkpf-kursf
WHERE belnr EQ itab_zycbt131-belnr_rfat
AND bukrs EQ itab_zycbt108-bukrs
AND gjahr EQ itab_zycbt108-bldat(4).
ENDIF.
IF NOT bkpf-kursf IS INITIAL AND
NOT bkpf-kursf EQ '0.00000'.
v_reais_fa = itab_zycbt131-vlme /
( 10 ** ( tcurx-currdec - 2 ) ).
v_reais_fa = ( ( bkpf-kursf / v_defator )
* v_parafator ) * v_reais_fa.
ENDIF.
ELSE.
v_reais_fa = itab_zycbt131-vlme /
( 10 ** ( tcurx-currdec - 2 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
WRITE v_wrbtr TO v_wrbtr_c CURRENCY wa_zycbt007-waersb.
TRANSLATE v_wrbtr_c USING '. '.
CONDENSE v_wrbtr_c NO-GAPS.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
v_reais_fa = ( ( v_txcbrl / v_defator )
* v_parafator ) * v_reais_fa.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULA_DIFERENCA_REAIS
TRANSLATE v_wrbtr_c USING ',.'.
v_reais_fa = v_wrbtr_c.
* << Fim da inclusão
* >> Início da exclusão: FORM CALCULA_DIFERENCA_REAIS
ENDIF.
* << Fim da exclusão
v_variacao = v_reais_fi - v_reais_fa.
ENDFORM.
FORM reclassifica_fatura.
DATA : v_codeven LIKE /pws/zycbt011-codeven.
IF NOT itab_zycbt131-belnr_rfat IS INITIAL.
IF ok_code NE 'SAVE'.
CHECK v_estorno_ok = 'X'.
ENDIF.
READ TABLE itab_zycbt108 WITH KEY belnr = itab_zycbt131-belnr
nrseq_pgfat = itab_zycbt131-nrseq_pgfat.
...