Rate

Calcula a taxa de câmbio relativa entre um pai e um filho e retorna o valor como um multiplicador.

Valor de Retorno

Essa função retorna um valor a ser usado como parte de uma função HS.EXP, geralmente na seção de conversão.

Sintaxe

Rate (ExchangeRate, TriangulationCurrency)

Tabela 12-13 Sintaxe de Função Taxa

Parâmetro Valores Válidos

ExchangeRate

Uma conta principal do tipo "CurrencyRate" especificada como uma string de conta, sem referência para as dimensões Personalizada ou Intercompanhia, por exemplo, "A#EOP_RATE"

TriangulationCurrency

Ou um rótulo válido como uma string ou aspas duplas ( " "). Ao especificar uma moeda, não será necessário mencionar nenhuma dimensão personalizada.

Descrição Detalhada

  • Essa função calcula a taxa de câmbio relativa entre um pai e um filho e retorna o valor como um multiplicador. O valor é calculado com base no parâmetro TriangulationCurrency.

  • Se o parâmetro TriangulationCurrency for um rótulo de moeda válido, a taxa cruzada será baseada nesta moeda.

  • Se o parâmetro TriangulationCurrency estiver em branco ( " " ), a função primeiro procurará uma taxa direta válida e, se nenhuma for encontrada, usará a Triangulação na moeda do aplicativo.

  • Se nenhum valor de taxa for encontrado, a função retornará 1.

Essas tabelas mostram os métodos de pesquisa pelos dados e a ordem em que a pesquisa é feita. A ordem é representada por um número entre parênteses, por exemplo (1). Em cada caso, a pesquisa é feita primeiro na entidade filho e, caso nenhum dado seja encontrado, na entidade "[Nenhum]".

Na tabela a seguir, ou a moeda do filho ou do pai será a mesma que a da moeda de Triangulação, ou caso a Triangulação esteja em branco, a moeda do aplicativo.

Tabela 12-14 Exemplo de Taxa — Mesma Moeda da Triangulação

Taxas da dimensão Personalizada 2 Taxas da dimensão Personalizada 1
 

Child

Parent

Taxas da dimensão Personalizada 2

Child

 

(2)

Parent

(1)

   

Na tabela a seguir, a Triangulação foi especificada e não é a mesma que as moedas do filho e do pai.

Tabela 12-15 Exemplo de Taxa — Moeda da Triangulação Diferente

Taxas da dimensão Personalizada 2 Taxas da dimensão Personalizada 1
 

Child

Parent

Triangulation

Taxas da dimensão Personalizada 2

Child

   

(2)

Parent

       

Triangulation

 

(1)

 

Na tabela a seguir, a Triangulação não foi especificada e a moeda do aplicativo é diferente das moedas do filho e do pai.

Tabela 12-16 Exemplo de Taxa — Triangulação Não Especificada

Taxas da dimensão Personalizada 2 Taxas da dimensão Personalizada 1
 

Child

Parent

Application

Taxas da dimensão Personalizada 2

Child

 

(2)

(4)

Parent

(1)

     

Application

 

(3)

 

Exemplo

A moeda do aplicativo são Euros e é necessário converter uma entidade filha francesa em uma entidade pai dos EUA usando essas taxas inseridas na entidade [Nenhum] em C2#EURO:

Tabela 12-17 Exemplo de Função Taxa

Rate Opening Rate Closing Rate

C1#FFR

0.16000

0.16500

C1#USD

1.15862

1.15785

A seguinte função multiplica a conta de saldo inicial pela diferença entre as taxas final e inicial relativas. Isso é útil durante o cálculo das análises de movimento caso a conversão não seja consistente entre as moedas local e do aplicativo.

HS.EXP "A#FXO = A#OPEN * (" & RATE("A#EOP_RATE"," ") & "-" & RATE("A#OPE_RATE"," ") &")"

Para o exemplo anterior, se o valor na conta OPEN para o filho for FFR 10.000.000, o valor na conta FXO pai dos EUA será de USD 44.102 [10.000.000 * (0.165 /1.15785 - 0.16 /1.15862)].

Script de Amostra

' sample statement written in the calling routine
SUB TRANSLATE()
HS.TRANS "A#FXO","A#FXO","A#EOP_RATE",""
HS.EXP "A#FXO = A#OPEN * (" & RATE("A#EOP_RATE"," ") & "-" & RATE("A#OPE_RATE"," ") &")"
END SUB
' programming of the RATE function
FUNCTION RATE(sRATE,sTRI)
DIM sCCUR, sPCUR, sACUR, bRET, retValue, s3rdCUR
DIM i
sRATE = UCASE(sRATE)
sTRI = UCASE(sTRI)
sCCUR = UCASE(HS.ENTITY.DEFCURRENCY(""))
sPCUR = UCASE(HS.VALUE.CURRENCY)
sACUR = UCASE(HS.APPSETTINGS.CURRENCY)
retValue = 0
' check whether there is a triangulation specified, or if triangulation or application currencies are the same as either parent or child and set up the select case
IF sTRI = sCCUR OR sTRI = sPCUR OR (sTRI = " " AND (sACUR = sCCUR OR sACUR = sPCUR)) THEN
i = 1
ELSEIF sTRI <> " " THEN
i = 2
ELSE
i = 3
END IF
SELECT CASE i
CASE 1
' bRET is a boolean that returns true if data is found. First search the child...
' ...then search the [None] entity
bRET = GETVALUECP(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR)
IF NOT bRET THEN
bRET = GETVALUECP(".E#[None]",retValue,sRATE,sCCUR,sPCUR)
END IF
CASE 2
' use a dynamic parameter name for ease of writing the triangulation checks
s3rdCUR = sTRI
bRET = GETVALUE3(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR,s3rdCUR)
IF NOT bRET THEN
bRET = GETVALUE3(".E#[None]",retValue,sRATE,
sCCUR,sPCUR,s3rdCUR)
END IF
CASE 3
' this case is used when the 2nd parameter is blank and is the most complex. 
' first check direct rates in the child…
' … then check triangulation against application currency in the child
' then check direct rates in [None].
'… finally check triangulation in [None]
s3rdCUR = sACUR
bRET = GETVALUECP(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR)
IF NOT bRET THEN
bRET = GETVALUE3(".V#<Entity Currency>",retValue,sRATE,sCCUR,sPCUR,s3rdCUR)
IF NOT bRET THEN
bRET = GETVALUECP(".E#[None]",retValue,sRATE,sCCUR,sPCUR)
IF NOT bRET THEN
bRET = GETVALUE3(".E#[None]",retValue,
sRATE,sCCUR,sPCUR,s3rdCUR)
END IF
END IF
END IF
END SELECT
IF bRET THEN
RATE = retValue
ELSE
RATE = 1
END IF
END FUNCTION
FUNCTION GETVALUECP(sENTITY,sVALUE,sRATE,sCCUR,sPCUR)
' this sub-function is used when comparing direct rates between child and parent
GETVALUECP = FALSE
' check if data exists for direct rate child to parent. If it does return it.
' if no direct child to parent rate check for indirect parent to child rate...
' return the inverse of the indirect rate.
IF HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & sPCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & sPCUR & sENTITY))
GETVALUECP = TRUE
ELSEIF HS.GETCELL(sRATE & ".C1#" & sPCUR & ".C2#" & sCCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(1 / HS.GETCELL(sRATE & ".C1#" & sPCUR & ".C2#" & sCCUR & sENTITY))
GETVALUECP = TRUE
END IF
END FUNCTION
FUNCTION GETVALUE3(sENTITY,sVALUE,sRATE,sCCUR,sPCUR,s3rdCUR)
' this sub-function is used when triangulating
' check if data exists for direct rate child to triangulation…
' … if it does return the direct relative rate child to parent…
' if no direct child to triangulation rate check for indirect triangulation to child rate…
' … return the inverse of the indirect relative rates.
GETVALUE3 = FALSE
IF HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & s3rdCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(HS.GETCELL(sRATE & ".C1#" & sCCUR & ".C2#" & s3rdCUR & sENTITY) / HS.GETCELL(sRATE & ".C1#" & sPCUR & ".C2#" & s3rdCUR & sENTITY))
GETVALUE3 = TRUE
ELSEIF HS.GETCELL(sRATE & ".C1#" & s3rdCUR & ".C2#" & sCCUR & sENTITY) <> 0 THEN
sVALUE = CDBL(HS.GETCELL(sRATE & ".C1#" & s3rdCUR & ".C2#" & sPCUR & sENTITY) / HS.GETCELL(sRATE & ".C1#" & s3rdCUR & ".C2#" & sCCUR & sENTITY))
GETVALUE3 = TRUE
END IF
END FUNCTION