Rate

Calcola il tasso di cambio relativo tra un padre e un figlio e restituisce il valore come moltiplicatore.

Valore restituito

Questa funzione restituisce un valore da utilizzare come parte di una funzione HS.EXP, in genere nella sezione traduzione.

Sintassi

Rate (ExchangeRate, TriangulationCurrency)

Tabella 12-13 Sintassi della funzione Rate

Parametro Valori validi

ExchangeRate

Conto principale di tipo "CurrencyRate" specificato come stringa conto, senza riferimento a dimensioni custom o interaziendali, ad esempio, "A#EOP_RATE"

TriangulationCurrency

Etichetta valuta valida come stringa o virgolette doppie ( " "). Quando si specifica una valuta, non è necessario fare riferimento a eventuali dimensioni custom.

Descrizione dettagliata

  • Questa funzione calcola il tasso di cambio relativo tra un padre e un figlio, restituendo un valore come moltiplicatore. Il valore viene calcolato in base al parametro TriangulationCurrency.

  • Se il parametro TriangulationCurrency è un'etichetta valuta valida, il tasso di cambio indiretto viene basato su tale valuta.

  • Se il parametro TriangulationCurrency è vuoto ( " " ), la funzione cerca innanzitutto un'aliquota diretta valida e, se non ne trova nessuna, utilizza la triangolazione rispetto alla valuta applicazione.

  • Se non viene trovato alcun valore di tasso, la funzione restituisce 1.

Queste tabelle mostrano i metodi di ricerca dei dati e l'ordine in cui la ricerca viene eseguita. L'ordine viene rappresentato da un numero tra parentesi, ad esempio (1). In ogni caso, la ricerca viene eseguita innanzitutto nell'entità figlio e, se non viene trovato alcun dato, nell'entità [None].

Nella tabella seguente la valuta del figlio o del padre è uguale alla divisa di triangolazione o, se Triangolazione è vuoto, sarà la valuta applicazione.

Tabella 12-14 Esempio di tasso - Stessa valuta triangolazione

Tasso dimensione custom 2 Tasso dimensione custom 1
 

Figlio

Parent

Tasso dimensione custom 2

Figlio

 

(2)

Parent

(1)

   

Nella tabella seguente, Triangolazione è stato specificato e non è uguale alla valuta figlio o padre.

Tabella 12-15 Esempio di tasso - Diverso da valuta triangolazione

Tasso dimensione custom 2 Tasso dimensione custom 1
 

Figlio

Parent

Triangolazione

Tasso dimensione custom 2

Figlio

   

(2)

Parent

       

Triangolazione

 

(1)

 

Nella tabella seguente, Triangolazione non è stato specificato e la valuta applicazione è diversa dalle valute figlio e padre.

Tabella 12-16 Esempio di tasso - Triangolazione non specificata

Tasso dimensione custom 2 Tasso dimensione custom 1
 

Figlio

Parent

Applicazione

Tasso dimensione custom 2

Figlio

 

(2)

(4)

Parent

(1)

     

Applicazione

 

(3)

 

Esempio

La valuta applicazione è Euro ed è necessario tradurre un'entità figlio francese in un'entità padre statunitense utilizzando i tassi immessi nell'entità [None] rispetto a C2#EURO:

Tabella 12-17 Esempio di funzione Rate

Rate Tasso di apertura Tasso di chiusura

C1#FFR

0.16000

0.16500

C1#USD

1.15862

1.15785

La funzione seguente moltiplica il conto saldo di apertura per la differenza tra i tassi relativi finali e di apertura. Ciò risulta utile durante il calcolo di analisi di movimenti se la traduzione non è coerente tra le valute locale e applicazione.

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

Per l'esempio precedente, se il valore nel conto OPEN per il figlio è FFR 10,000,000, il valore nel conto FXO padre statunitense sarà USD 44.102 [10.000.000 * (0,165 /1,15785 - 0,16 /1,15862)].

Script campione

' 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