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.
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