CE PLUS - Nota 001400

Módulo: DOC. EXPORTAÇÃO

Funcionalidade: Outros

Data/Hora da Publicação: 24/05/2006 00:00:00

Data/Hora Última Alteração: 21/02/2011 16:46:51

Descrição da Nota: FUNÇÃO DE CONVERSÃO DE VALORES EM DIFERENTES MOEDAS

Sintoma

Necessidade de criar uma função que efetue as conversões de valores em diferentes moedas, inclusive

tratando o EUROX

 

 

Solução

Criação da função /PWS/ZYGL_MONTANTE_CONVERTE.

 

Versões Tratadas

6.0

Informações Complementares

----------------------------------------------------------------------------------------------------

Nota Número 01400 Data: 24/05/2006 Hora: 14:42:27

----------------------------------------------------------------------------------------------------

 

----------------------------------------------------------------------------------------------------

Nota Número              : 01400

Categoria                : Melhoria

Prioridade               : Baixa

Versão PW.CE             : 6.0

Pacote                   : 00023

Agrupamento              : 00115

----------------------------------------------------------------------------------------------------

Referência às notas relacionadas:

Número - Ordem - Descrição Breve

 

----------------------------------------------------------------------------------------------------

FUNÇÃO DE CONVERSÃO DE VALORES EM DIFERENTES MOEDAS

----------------------------------------------------------------------------------------------------

Palavras Chave:

MONTANTE CONVERTE MOEDA VALORES

 

----------------------------------------------------------------------------------------------------

Objetos da nota:

FUNC /PWS/ZYGL_MONTANTE_CONVERTE

REPS /PWS/LZYCBGFF01

REPS /PWS/LZYCBGFUXX

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em FUNC /PWS/ZYGL_MONTANTE_CONVERTE

 

Características

Grupo de Funções: /PWS/ZYCBGF - GL - Grupo de Funções Gerais

Tipo de Execução: Módulo de Função Normal

                  Início Imediato

 

Dados Gerais

Responsável                PWSCB

Último modificador         PWSCE

Data de Modificação        19.05.2006

Classe de Desenvolvimento  /PWS/ZYGL

Nome do Programa           /PWS/SAPLZYCBGF

Nome do include            /PWS/LZYCBGFU16

Idioma Original            PT

Não liberado               ' '

Bloqueio do Processo       ' '

Global                     ' '

 

Importação

 

Nome do parâmetro   Atrib.tipo  Tipo Referência  Tranf. Valor

I_MONTANTE        LIKE  BSAK-WRBTR       'X'

I_DEMOEDA        LIKE  TCURR-FCURR      'X'

I_PARAMOEDA        LIKE  TCURR-TCURR      'X'

I_CTMOEDA        LIKE  TCURR-KURST      'X'

I_DTBASE        LIKE  SY-DATUM'        'X'

 

Exportação

 

Nome do parâmetro   Atrib.tipo  Tipo Referência  Tranf. Valor Texto breve

E_MONTANTE        LIKE  BSAK-WRBTR       'X'

E_TXC              LIKE  TCURR-UKURS      'X'    Tabela de taxa de câmbio BAPI

E_DEFATOR        LIKE  TCURR-FFACT      'X'

E_PARAFATOR        LIKE  TCURR-TFACT      'X'

 

Tabelas

Nome do parâmetro   Atrib.tipo  Tipo Referência  Opcional

T_CTGMOEDA        LIKE  /PWS/ZYCBT009    'X'

 

Exceções                      Texto Breve

Exceção

I_DEMOEDA_NAO_ENCONTRADO

I_PARAMOEDA_NAO_ENCONTRADO

I_CTMOEDA_NAO_ENCONTRADO

I_DTBASE_NAO_ENCONTRADA

TAXA_NAO_ENCONTRADA

FATOR_NAO_ENCONTRADO

I_MONTANTE_NAO_ENCONTRADO

TABELA_CATEG_NAO_CONFIGURADA

 

Texto fonte

function /pws/zygl_montante_converte.

*"----------------------------------------------------------------------

*"*"Interface local:

*"  IMPORTING

*"     VALUE(I_MONTANTE) LIKE  BSAK-WRBTR

*"     VALUE(I_DEMOEDA) LIKE  TCURR-FCURR

*"     VALUE(I_PARAMOEDA) LIKE  TCURR-TCURR

*"     VALUE(I_CTMOEDA) LIKE  TCURR-KURST

*"     VALUE(I_DTBASE) LIKE  SY-DATUM

*"  EXPORTING

*"     VALUE(E_MONTANTE) LIKE  BSAK-WRBTR

*"     VALUE(E_TXC) LIKE  TCURR-UKURS

*"     VALUE(E_DEFATOR) LIKE  TCURR-FFACT

*"     VALUE(E_PARAFATOR) LIKE  TCURR-TFACT

*"  TABLES

*"      T_CTGMOEDA STRUCTURE  /PWS/ZYCBT009 OPTIONAL

*"  EXCEPTIONS

*"      I_DEMOEDA_NAO_ENCONTRADO

*"      I_PARAMOEDA_NAO_ENCONTRADO

*"      I_CTMOEDA_NAO_ENCONTRADO

*"      I_DTBASE_NAO_ENCONTRADA

*"      TAXA_NAO_ENCONTRADA

*"      FATOR_NAO_ENCONTRADO

*"      I_MONTANTE_NAO_ENCONTRADO

*"      TABELA_CATEG_NAO_CONFIGURADA

*"----------------------------------------------------------------------

*-----------------------------------------------------------------------

* PROCWORK Software

* Produto  : Pw.CE

* Módulo   : Global

* Descrição: Conversão de valores

* Help Desk: (0XX11) 5504-0270

*-----------------------------------------------------------------------

* ESTE PROGRAMA NÃO DEVE SER ALTERADO SEM PRÉVIA CONSULTA

*-----------------------------------------------------------------------

* Chamado      Data         Descrição

*-----------------------------------------------------------------------

* 307733       15/05/06     Codificação Inicial

*-----------------------------------------------------------------------

 

  DATA: i_rate_type LIKE  tcurr-kurst,

        exch_rate   LIKE  bapi1093_0,

        return      LIKE  bapireturn1.

 

  CALL FUNCTION 'READ_EXCHANGE_RATE'

       EXPORTING

            date              = i_dtbase

            foreign_currency  = i_demoeda

            local_currency    = i_paramoeda

            type_of_rate      = i_ctmoeda

       IMPORTING

            derived_rate_type = i_rate_type

       EXCEPTIONS

            no_rate_found     = 1

            no_factors_found  = 2

            no_spread_found   = 3

            derived_2_times   = 4

            overflow          = 5

            OTHERS            = 6.

 

  IF sy-subrc NE 0.

    RAISE taxa_nao_encontrada.

    EXIT.

  ENDIF.

 

* Se EURX parametrizado, executa busca da taxa

* utilizando a categoria encontrada e invertendo as moedas

  IF NOT i_rate_type IS INITIAL.

    i_ctmoeda = i_rate_type.

 

* BAPI busca moedas inversa

    CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'

         EXPORTING

              rate_type  = i_ctmoeda

              from_curr  = i_paramoeda

              to_currncy = i_demoeda

              date       = i_dtbase

         IMPORTING

              exch_rate  = exch_rate

              return     = return.

 

 

* Se categoria EURX parametrizada, busca a taxa de cotação indireta,

* caso esteja em branco, realiza o cálculo utilizando 1/taxa.

      IF exch_rate-exch_rate_v IS INITIAL.

        e_defator   = exch_rate-from_factor.

        e_parafator = exch_rate-to_factor.

        e_txc       = 1 / exch_rate-exch_rate.

        e_montante  = ( ( e_txc * e_defator ) / e_parafator ) *

                                                  i_montante.

        e_defator   = exch_rate-to_factor.

        e_parafator = exch_rate-from_factor.

      ELSE.

        e_defator   = exch_rate-from_factor_v.

        e_parafator = exch_rate-to_factor_v.

        e_txc       = exch_rate-exch_rate_v.

        e_montante  = ( ( e_txc * e_defator ) / e_parafator ) *

                                                  i_montante.

        e_defator   = exch_rate-to_factor_v.

        e_parafator = exch_rate-from_factor_v.

      ENDIF.

  ELSE.

    CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL  '

         EXPORTING

              rate_type  = i_ctmoeda

              from_curr  = i_demoeda

              to_currncy = i_paramoeda

              date       = i_dtbase

         IMPORTING

              exch_rate  = exch_rate

              return     = return.

 

* Se não encontrou a taxa, realiza a busca invertendo as moedas

 

    IF exch_rate-exch_rate IS INITIAL.

 

      CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'

           EXPORTING

                rate_type  = i_ctmoeda

                from_curr  = i_paramoeda

                to_currncy = i_demoeda

                date       = i_dtbase

           IMPORTING

                exch_rate  = exch_rate

                return     = return.

 

      IF NOT exch_rate-exch_rate_v = 0.

        e_txc       = exch_rate-exch_rate_v.

        e_defator   = exch_rate-from_factor_v.

        e_parafator = exch_rate-to_factor_v.

        e_montante  = ( ( e_txc * e_defator ) / e_parafator ) *

                                                    i_montante.

        e_defator   = exch_rate-to_factor_v.

        e_parafator = exch_rate-from_factor_v.

 

      ELSE.

        e_txc       = 1 / exch_rate-exch_rate.

        e_defator   = exch_rate-to_factor.

        e_parafator = exch_rate-from_factor.

      e_montante  = ( ( e_txc / e_defator ) * e_parafator ) *

                                                    i_montante.

      ENDIF.

    ELSE.

      e_txc       = exch_rate-exch_rate.

      e_defator   = exch_rate-from_factor.

      e_parafator = exch_rate-to_factor.

      e_montante  = ( ( e_txc / e_defator ) * e_parafator ) * i_montante

.

    ENDIF.

 

  ENDIF.

 

endfunction.

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/LZYCBGFUXX

 

...

INCLUDE /PWS/LZYCBGFU11.

INCLUDE /PWS/LZYCBGFU12.

INCLUDE /PWS/LZYCBGFU13.

INCLUDE /PWS/LZYCBGFU14.

INCLUDE /PWS/LZYCBGFU15.

* >> Início da inclusão:

INCLUDE /PWS/LZYCBGFU16.

* << Fim da inclusão