Currency Translation FAQ
I. Persistence of the currency translation (Tables TCUR)
1. How are the entries of the TCURF and TCURR tables related?
The TCURR table contains only the exchange rates for the exchange rate type, the currency pair combination, and the validity date.
It is not really a customizing table at all, but an application table that is periodically maintained.
However, the exchange rates contained in table TCURR cannot be interpreted in isolation, since they always refer to a data record in factor table TCURF.
This is necessary because the exchange rates are stored in TCURR in a fixed numerical format (4 places before the decimal point, and five decimal places after the decimal point).
This storage format allows for exchange rates between 0.00001 and 9999.99999, although there are currency pairs that have exchange rates that are greater or less than this. By selecting the appropriate exchange rate factors, the system can also display these exchange rates. In this case the system does not compare a single unit of the first currency with a single unit of the second currency; instead the system displays any order of magnitude between 1 and 100,000,000 of the first currency and compares it with a single unit of the second currency, or vice-versa.
The exchange rates in TCURR always refer to the factors contained in TCURF.
The fields FFACT and TFACT for exchange rate factors are present in table TCURR, but they are of no importance.
The factors displayed in Transaction OB08 (Maintenance view of V_TCURR for exchange rate entry) are always taken from table TCURF, and not from table TCURR.
2. How does the system read TCURF? How is this related to the standard notation?
The TCURF and TCURR tables have the same key, comprising exchange rate type, "from currency", "to currency", and date.
The system requires the following data for each currency conversion - the exchange rate type function modules, the two currencies, and the conversion date.
If the system cannot find an entry for the entered datein TCURF or TCURR, it uses the entry for the next-most-recent date. This means that entries in the tables remain valid until you replace them with an entry that has a more reacent date.
If the application does not assign an exchange rate type, the system uses the standard exchange rate type (average rate), which is available in every SAP R/3 System.
The exchange rate type customizing greatly affects which specific TCURF and TCURR entries the system uses.
This is defined in the TCURV table (Transaction OB07).
The system first checks if a different exchange rate type exists in the TCURF table for the entered exchange rate type, currency pair, and conversion date. If this is the case, the system should proceed as if this different exchange rate type was the one that had originally been specified.
The different exchange type is one way that you can customize the system to use a different exchange rate type for a specific currency combination and date instead of the "standard" exchange rate type.
If the system determines the exchange rate type that is to be used in this way, the exchange rate type attributes determine how the system will access TCURF and TCURR in the future
There are three distinct cases that need to be considered:
a) The exchange rate type has no reference currency (TCURV_BWAER=SPACE), and does not permit inversion (TCURV-XINV=SPACE).
To convert from currency A to currency B, the system reads the TCURR entry that contains the corresponding exchange rate type, 'from currency' A, 'to currency' B, and the 'best' date.
If the system does not find an entry, it displays error message SG105.
This exchange rate determines how the system accesses table TCURF, unless you enter a 'one-time' exchange rate in a posting transaction. In this case, the 'one-time' exchange rate takes precedence.
This exchange rate may be quoted directly or indirectly; this is indicated by the exchange rate's '+/-' sign. A directly quoted exchange rate is displayed with a '+' sign, while an indirectly quoted exchange rate is displayed with a '-' sign. 'Directly quoted' specifies how many units of the 'to currency' are equal to a single (10, 100, ...) unit of the 'from currency'. 'Indirectly quoted' describes the inverse relationship.
Since an indirectly quoted exchange rate is the same as the directly quoted exchange rate for the same currency pair when converting in the opposite direction (that is: indirectly quoted rate for A->B is the same as directly quoted rate for B->A), the system accesses TCURF with the currencies inverted when it needs to process an indirectly quoted exchange rate.
For example: You want to convert USD to JPY, where the exchange rate is 1 USD ~ 125 JPY.
If the system finds a directly quoted entry of 125 in TCURR, it reads the TCURF entry for 'from currency' USD, 'to currency' JPY, where the factors should be 1:1.
lternatively, you might maintain the same exchange rate in TCURR, but with an indirectly quoted exchange entry of 8,00000. In this case, the exchange rate refers to the factors for conversion from JPY to USD, which should be set as 1,000:1.
b) The TCURV-XINV flag (inversion allowed) is set for the exchange rate type, but no reference currency is set (TCURV-BWAER=SPACE).
The system determines the exchange rate and factors as described under a.), with one exception: if you have not specified an exchange rate from A to B in TCURR and do not enter a 'one-time' exchange rate in the posting transaction, the system uses the B-to-A exchagne rate for the calculation, and determines the factors as described under a.) above.
In this case, the system treates a directly quoted exchange rate from B to A as an indirectly quoted exchange rate from A to B, or vice-versa, whichever is required. As of Release 4.6, the system does not perform aninversion (that is, using the inverse of the TCURR exchange rate), which would require the exchange rate to be rounded to within five decimal places. Inversions took place in older releases because the system did not support indirectly quoted exchange rates in documents.
c) The exchange rate type has a reference currency (for example TCURV-BWAER=EUR).
You do not need to constantly maintain the exchange rates for every conceivable currency pair with this type of exchange rate setting, but only need to maintain the exchange rates between every possible currency and the reference currency.
If you want to convert currency A into currency B, the system does not look in TCURR for the exchange rate from A to B, but instead uses the exchange rates from A to EUR and from B to EUR to perform the conversion, by calculating a direct exchange rate from A to B using the two exchange rates. The system reads the relevant factors from TCURF for each of the two exchange rates, depending on whether they are directly or indirectly quoted.
Whether the resulting exchange rate from A to B is quoted directly or indirectly depends upon the standard notation for that particular currency combination (in table TCURN). This also requires the factors from TCURF for conversion from A to B (direct quotation) or from B to A (indirect quotation).
In this case, the inversion indicator (TCURV-XINV) is irrelevant.
3. How do you make entries in TCURR, either from foreign currency to local currency or vice-versa?
In TCURR, the 'from currency' assumes the role of the foreign currency, while the 'to currency' is treated as the local currency.
The only exception to this is for exchange rates that have a reference currency: you no longer need to enter exchange rates for every desired combination of foreign and local currency, but only for ever desired currency and the reference currency.
The 'from currency' is always the desired currency (that is, either the foreign currency or the local currency), while the 'to currency' is always the reference currency f the exchange rate type. This means that the system normally uses two entries from TCURR to calculate an exchange rate (foreign currency/reference currency and local currency/reference currency).
4. What should I consider when selecting the factors in table TCURF?
If the currency conversion is to function correctly, it is essential that you choose the factors so that the exchange rate falls into a display range of 0.00001 to 9,999.99999.
An exchange rate of 0.00001 is only accurate to one decimal place, while an exchange rate of 9,999.99999 has the maximum nine decimal places available, but risks causing an overflow for even the smallest increase in exchange rate.
A good compromise is to select the factors so that the exchange rate is between 1.00000 and 10.00000. This means that six decimal places are available, and an overflow is not likely unless the exchange rate increases by a factor of one hundred.
5. How should I maintain Cross Rates? What entries should I make in table TCURF?
For exchange rates that have a reference currency, you need to maintain exchange rates both from foreign currency to the reference currency and from the local currency to the reference currency in table TCURR. However, if the reference currency is the same currency as the foreign or local currency, you do not have to maintain an exchange rate between the reference currency and itself.
You can maintain each of the involved currencies as directly or indirectly quoted, as you prefer, but you must create the TCURF factors based upon this decision - that means that you must maintain the factors of the inverted currency pair for indirectly quoted exchange rates, and maintain the factors for the non-inverted currency pair, as displayed in table TCURR.
You must also enter factors in TCURF for the desired exchange rate from foreign currency to local currency, since TCURR does not support a direct exchange.
Since you can override the exchange rate determined by TCURR with a 'one-time' exchange rate, which can be either directly or indirectly quoted, we recommend that you maintain two entries in TCURF for each currency-pair combination (A/B and B/A). However, you do not have to maintain these symmetrically.
It is therefore, possible to set the factors from A to B as 1:1, but to set them as 100:1 or even 1:1,000 in the opposite direction from B to A.
II. Document dates
1. Why are there negative exchange rates in the document table (for example BKPF-KURSF)?
As of Release 4.6, you can update both directly and indirectly quoted exchange rates in documents. Until now, exchange rates have been generally directly quoted.
Indirectly quoted exchange rates are displayed with a minus sign, while directly quoted exchange rates are displayed with a plus sign, as always.
Because an indirectly quoted exchange rate represents the exchange rate relationship in reverse, the minus sign is shows that it is an inverse rate.
2. How should I interpret a negative exchange rate?
A negative, or indirectly quoted exchange rate expresses the value of a unit of the local currency in foreign currency, while a directly quoted exchange rate expresses the value of a unit of the foreign currency in local currency.
Note that the value of the indirectly quoted exchange rate only matches the inverse of the directly quoted exchange rate to within one order of magnitude, because the directly and indirectly quoted exchange rates refer to different factor pairs in table TCURF:
If A is the foreign currency and B is the local currency, a directly quoted exchange rate refers to the TCURF entry from A to b, while an indirectly quoted exchange rate refers to the TCURF entry from B to A.
You can maintain these entries independently of each other.
Therefore, if the TCURF factors for A to B are set as '1:1', and the factors from B to A are set as '1,000:1', a directly quoted exchange rate of 250.00000 is equivalent to an indirectly quoted exchange rate of 4.00000 (displayed internally as -4.00000) (1A = 250B, 1,000B = 4A).
3. Why is the minus sign not displayed in the Document display (for example Transaction FB03)?
The minus sign is only intended for internal use, to distinguish between direct and indirect quotation. For external display, direct and indirect quotation are distinguished by a customizable prefix, which you can define in table TCURP (in Transaction OPRF). If you do not define the customizing in table TCURP, exchange rates are displayed as they were before - directly quoted exchange rates are displayed with no prefix, while indirectly quoted exchange rates are displayed with a "/" character to indicate the division.
When converting amounts of foreign currency to local currency, the system divides by an indirectly quoted exchange rate and multiplies by a directly quoted exchange rate.
From a technical point of view, the "EXCRT" conversion exit is appended to the exchange rate fields; its CONVERSION_EXIT_EXCRT_INPUT and CONVERSION_EXIT_EXCRT_OUTPUT modules control the change from an internal display using plus or minus signs to the external display using other prefixes.
III. Translation of currency amounts
1. How does SAP translate an amount of foreign currency into local currency? Which entries of the TCUR* tables are involved?
First of all, the system determines the exchange rate and factors as described in secion I.1. In the simplest instance, the system multiplies or divides (for directly or indirectly quoted exchange rates, respectively) the foreign currency amount by this exchange rate, and then multiplies or divides the result by the order of magnitude determined by the factors.
The system updates the exchange rate calculated according to section I.1 in the document for exchange rate types, but uses an exchange rate that is accurate to eleven rather than five decimal places.
A special case occurs among exchange rate types with reference currency if you set the Euro indicator (TCURV-XEURO). In this case, the system calculates a direct exchange rate, but it uses the exchange rates determined in TCURR for conversion to the reference currency.
The foreign currency is converted to within three decimal places, as described in the specifications for the European Monetary Union (refer to Note 91481), into the reference currency (that is, EUR), and this amount is then translated into the local currency, if the local currency is not EUR.
2. How accurately are currency amounts translated?
The accuracy of translation is essentially determined by the factors you choose in TCURF. Nine significant decimal places are available for exchange rate types without a reference currency, while up to fifteen significant decimal places are available for exchange rate types that do have a reference currency, provided that the amounts to be translated are sufficiently large. The resultant local currency amounts are rounded commercially to complete units of currency as specified in table TCURX; in general, these units are complete "cent" (with two decimal places instead of the currency in TCURX).
3. If I multiply or divide the foreign currency amount by the exchange rate, I get a different result in local currency. Why is this?
The amount displayed in local currency is not always the direct result of an arithmetic operation using the exchange rate that is maintained in the document; such is the case for an exchange rate without a reference currency; in other cases (see above for examples), it is not.
IV. Exchange rate entry
1. Can you assign authorizations for exchange rate entry at the exchange rate type level?
This is not possible in the old view maintenance transaction, OB08.
Here, the system only checks authorization object S_TABU_DIS, to see if the user has maintenance authorization for TCURR; strictly speaking, the system only checks the table group that is assigned to the V_TCURR view (table TDDAT).
As of Basis Release 6.20, a new exchange rate maintenance transaction is available. It is based upon worklists that you define in the customizing, to which you can assign any combination of exchange rate type and currency pair.
In this maintenance transaction (Transaction code TCURMNT), the system checks authorizations at the worklist level (authorization object S_EXCHRATE).
This means that you can now model an authorization check on the exchange rate type level.
V. Customizing changes
1. What should I consider if I want to change the factors in table TCURF?
Factors in TCURF are time-dependent, and you should amend them to a date that is far enough in the future that no documents can be booked with a conversion date that is later than that date. This is because application documents usually store the conversion date and the exchange rate, but not the TCURF factors that are relevant for the exchange date.
If you book a financial accounting document that has a conversion date in the future, and the relevant factors are set to 1:1, the document contains an exchange rate that refers to these factors. If the factors are set to 100:1 the following day, and you activate a subsequent process that refers to the original document (balance, reminder...), the system reads the exchange rate from the document and mistakently refers to the factor of 100:1, which is currently valid. This can cause conversion results that are incorrect by orders of magnitude, which then trigger error messages.
At best, you should adjust the factors in a period that has not yet been opened for accounting, or in the next business year.
When you change the TCURF factors, you should also change the TCURR exchange rates for the same date, since the last exchange rate will remain valid otherwise, and this may also cause conversion results with errors to the degree of orders of magnitude.
2. What should I consider if I want to change the standard notation from direct to indirect quotation, or vice-versa?
The system uses the standard notation to decide if it should determine and propose a directly or indirectly quoted exchange rate from the rates stored in TCURR for exchange rate types with a reference currency (table TCURV-BWAER is filled). In spite of this, you can enter a directly or indirectly quoted exchange rate in a posting transaction, Adjustments are therefore non-critical.
3. What should I consider if I want to change an exchange rate type to a reference currency?
The TCURV exchange rate type table is not time-dependent, so any change you make to the conversion mode is retroactive - therefore, you should not do this in a live installation! Instead, we recommend that you create a new exchange rate type with reference currency, and make entries in TCURF for the relevant currency pair combination to a date that is sometime in the future (for the same reasons we specified above) for the change to the new exchange rate type.
4. What should I consider if I want to change the prefix for direct/indirect quotation (TCURP)?
TCURP only determines how the system displays directly and indirectly quoted exchange rates in the interface, that is in ABAP lists or on screens. Internally, they are always represented with a plus/minus sign prefix (direct quotation: +, indirect quotation: -).
Displaying already posted documents causes no problems, and any changes you make to display prefixes for exchange rates teake effect immediately. Problems may arise during batch input sessions that you created before the change but that you want to run after the change takes effect.
The data is stored in the external display format - that is with the prefix - in batch input sessions. After you make a chagne, the session encounters an error because the contents of an exchange rate field are invalid, or because the system interprets a system that was initially directly quoted as indirectly quoted or vice-versa.
If possible, do not change the exchange rate display, or run your old batch input sessions before you make the change.
You must also adjust any customer-specific programs that use CALL TRANSACTION ... USING ... to post if they transfer exchange rate fields into the BDCDATA structure.
VI. 'current settings' of the Currency tables:
1. How can I maintain the currency tables directly in different systems?
Refer to the following Notes for further information:
- 77430 Customizing: Current settings
- 135028 Transfer IMG activity to current setting
- 356483 Customizing: Current settings in the test system