SAP tableObjectTCURRModuleFI_FICO

TCURR table — TCURR Exchange Rate Table

TCURR stores the exchange rates used to convert amounts between currencies. One row is a single rate for one exchange rate type, one currency pair, and one validity date. Postings, valuations, and reports look up the rate valid on or before the translation date, not an exact date match, which is the source of most disputes about which rate was actually used.

TCURR is the master table of exchange rates behind every currency translation in FI, from document posting to foreign currency valuation and consolidation. This page covers the fields that determine which rate gets picked, the joins consultants actually write against BKPF, BSEG, and TCURV, and the recurring mistake of assuming a missing rate on a given date means a missing rate at all.

Published 15 Sept 2026· 1,123 words

What it stores

Each row in TCURR is one exchange rate: for a given exchange rate type, converting from one currency to another, valid from a specific date until superseded by the next entry for the same type and currency pair. SAP does not store a rate per day; it stores the date from which a rate becomes effective, and the system searches backward from the requested date for the most recent entry that is not later than it. Rates are maintained for both direct and indirect quotation depending on configuration, and the ratio fields allow rates to be expressed per unit or per hundred, per thousand, and so on for currencies with large denomination differences. The table is client-independent-looking in structure but carries a client field like all standard tables, and it is small enough in most systems to be read in full without performance concern.

Key fields

  • MANDT - client
  • KURST - exchange rate type, for example M for standard, B for bank buying, EURX for a specific ECB-style feed
  • FCURR - from currency, the currency being converted
  • TCURR - to currency, the currency being converted into
  • GDATU - date from which this rate is valid, used as the lower bound in the backward search for a rate
  • FFACT - ratio factor for the from currency, how many units of FCURR the rate is quoted against
  • TFACT - ratio factor for the to currency, how many units of TCURR the rate is quoted against
  • UKURS - the exchange rate itself

How it joins the data model

  • TCURR-KURST = TCURV-KURST, joining a rate row to the definition of the rate type it belongs to
  • BKPF-WWERT drives the effective date used to search TCURR-GDATU for the applicable rate at posting or valuation time
  • BSEG-KURSF stores the rate actually applied to a line item, which should match a TCURR entry for the document's exchange rate type but is a frozen copy, not a live join
  • ACDOCA rows carrying amounts in multiple currencies (document, local, group) reflect a rate pulled from TCURR at posting time; ACDOCA does not reference TCURR directly, the rate is baked into the stored amounts

How to read it safely

TCURR is small relative to most FI tables, typically a few thousand to a few hundred thousand rows depending on how many currency pairs and rate types are maintained and how far back history goes, so a full table scan is rarely a performance problem. The selective fields are KURST, FCURR, TCURR, and GDATU. Never search for an exact GDATU match when trying to reproduce what a program used; the correct lookup is the maximum GDATU that is less than or equal to the date in question, for the given type and currency pair. The client field is present but irrelevant to selectivity since almost every system runs a single relevant client for FI data.

How to prove it in the data

Symptom: a foreign currency valuation run produced a translated amount that looks wrong for a specific vendor invoice. Take the exchange rate type from the valuation method, the currency pair from the invoice document and company code currency, and the valuation key date. Select TCURR where KURST, FCURR, TCURR match and GDATU is less than or equal to the valuation date, ordered descending by GDATU, and take the first row. That UKURS, adjusted by FFACT and TFACT, is the rate the run should have used. If it does not match the rate embedded in the posting, the discrepancy is in configuration or timing, not in TCURR itself.

ECC vs S/4HANA

TCURR is unchanged in S/4HANA; it remains a standard client-dependent transparent table and continues to be the source table for currency translation across FI, CO, and the universal journal. No CDS compatibility view replacement applies here since the table was never restructured. Programs and CDS views that need exchange rates still read TCURR through the same date-backward lookup logic, now often wrapped in AMDP or CDS-based currency conversion functions rather than custom ABAP, but the underlying table and its fields are identical to ECC.

Common pitfalls

  • Treating a missing rate for today's date as a missing rate entirely: the lookup goes backward, so the last maintained rate before today is used, silently, until someone notices amounts have not moved in weeks
  • Assuming GDATU is the date the rate applies to rather than the date from which it applies; a rate maintained with GDATU of the 1st is used for every day until the next entry, not just that one day
  • Confusing exchange rate types: M is the common default but valuation, consolidation, and statistical reporting frequently use different types, and comparing a rate in M against a posting made with type B looks like an error but is a configuration mismatch
  • Editing UKURS directly in TCURR to correct a past posting; this changes future lookups for that date but does nothing to documents already posted, because the rate was already copied into BSEG at posting time
  • Ignoring FFACT and TFACT and reading UKURS as a flat multiplier; for currency pairs with large scale differences the ratio factors change the effective rate substantially
  • Forgetting that indirect versus direct quotation flips the meaning of the rate, so a rate that looks like it moved the wrong direction may simply be quoted the other way

Whose problem this is

Exchange rate maintenance is normally a treasury or FI master data task, often automated by a feed from a market data provider rather than manual entry. When a translated amount is disputed, the first question for FI is which rate type and date the process used; the answer to whether that rate is correctly maintained in TCURR belongs to whoever owns the rate feed, not to the module consultant running the valuation.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-tables/tcurrERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.