CE PLUS - Nota 004552

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.

 

Versões Tratadas

7.0


Pré-Requisitos

Produto:

Nota

Descrição

ASSOCIAÇÃO DE FATURAS - DA RATEIO POR ITEM DOC. COMPRA

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.

...