Solavel Docs

Multi-currency

Last updated

SolaCount keeps your books in one base currency, such as AED, and lets you invoice, bill, pay and bank in other currencies. Each foreign document stores its own exchange rate, and every journal line records both the foreign amount and the base amount.

Exchange differences are handled in two ways:

  • Realized gain or loss is posted automatically when a foreign document is paid.
  • Unrealized gain or loss is posted when you revalue open balances at period end with a Base currency adjustment.

Where to find it

What Navigation URL
Currencies Settings → Accounting & Tax → Currencies /currencies
Exchange rates Manage Exchange Rates button on the Currencies page /currencies/exchange-rates
Revaluation Journal Entries → Entries → Base Currency Adjustments /base-currency-adjustments
Realized report Reports → Realized Gain / Loss /reports/realized-gain-loss
Unrealized The Unrealized Gain or Loss tile in the Reports catalog (category Currency) opens the Base Currency Adjustments list

The Currencies menu item appears only when Multi-currency is enabled for your organization.

Base currency

  • You must choose the base currency before you can finish SolaCount setup (see Setup).
  • After setup it is locked and shown as Base currency (locked). Trying to change it gives "Base currency is locked after setup and cannot be changed."
  • The base currency always has a rate of 1.0 and is always enabled.

Enable currencies

The Currencies page lists the official ISO-4217 catalog ("Official ISO-4217 catalog (workspace enable/disable)"). You do not create currencies; you switch catalog currencies on or off.

  1. Go to Settings → Accounting & Tax → Currencies. If no base currency is set yet, you are sent to the organization settings with "Select the organization base currency before configuring transaction currencies."
  2. Find the currency, for example USD or EUR. The columns are Code, Name, Symbol, Precision, Base and Enabled.
  3. Switch Enabled on. You see "Currency settings updated."

This page controls only which currencies are available. As the notice says: "Currency conversion for invoices and posting uses dated Exchange Rates, not this page."

Blocked actions

You try Message
Add a custom currency "Custom currencies are disabled. Use the ISO catalog and toggle currencies per workspace."
Edit currency details "Master ISO currency details are read-only."
Delete a currency "ISO currencies cannot be deleted."
Enable a test or reserved code (such as XXX) "Reserved or test currency codes cannot be enabled for operational transactions."

Exchange rates

The Exchange Rates page ("Manage FX rates for your base currency") stores the dated rates that documents and postings actually use.

Rate direction: 1 base = x foreign

Rates are entered as how many units of the foreign (quote) currency equal one unit of your base currency:

1 AED = 0.2723 USD

It is not "1 USD = 3.6725 AED". To convert a foreign amount to base, SolaCount divides by the rate:

base amount = foreign amount ÷ rate, rounded to 2 decimals

For example, USD 1,000 ÷ 0.2723 = AED 3,672.42.

The Base currency adjustment form uses the opposite direction (1 foreign = x base). See that page.

Add or override a rate

  1. In Add / Override Rate, choose the Quote currency (it must be enabled), enter the Rate (greater than 0) and the Date, and optionally a note (up to 255 characters).
  2. Click Save manual rate. You see "Exchange rate saved."

There is one rate per currency per date. Manual rates override API rates for the same date, and API rates override imported ones.

Fetch rates automatically

Click Fetch latest rates to pull today's rates from a free online provider and store them ("Fetched and stored {n} rates for {date}."). If the fetch fails, you see "Unable to fetch rates: …".

  • Fetching happens only when you click. There is no scheduled fetch.
  • Posting never fetches a rate. If no rate is stored for the document date, posting stops with "No saved exchange rate for {BASE} → {QUOTE} on {date}."
  • If exchange-rate approval is on, bulk fetch is blocked; propose rates manually instead.

Rate list

Column / filter Values
From / To Base and quote currency
Source Manual, API or Imported
Status Used, Unused or Locked

You can filter by currency, date from/to and search. Rates used by a posted document are locked and cannot be edited or deleted:

  • Editing gives "This rate is used by a posted document and cannot be edited. Add a new dated rate or post an FX adjustment instead."
  • Deleting gives "This rate is used by a posted document and cannot be deleted."
  • Overwriting gives "A rate for this currency and date is already used by a posted document and cannot be changed."

Other messages you may see:

  • "Base currency does not need a rate to itself."
  • "Exchange rate updated."
  • "Exchange rate deleted." (after confirming "Delete this exchange rate?")

Foreign-currency documents

Invoices, bills, expenses, credit and debit notes, sales receipts and payments can be in any enabled currency. The document stores its currency, its rate and the rate date.

When you choose a foreign currency, the exchange-rate widget shows Base currency: and Rate: 1 AED = x USD, with a Change rate link.

If no rate is stored for the document date, you see Missing exchange rate ("No rate exists for USD → AED · {date}") with two buttons:

  • Fetch automatically fills in a suggested rate.
  • Add Exchange Rate opens Add / Update Exchange Rate, with fields From, To, Date, Rate (and a Fetch button), Source (Manual, Auto-fetched or Imported) and Note. Click Save & use.

The rate must be greater than zero ("Enter a rate greater than zero.").

When the document posts, its rate is frozen. Changing the rate table later never reprices posted documents.

Each journal line keeps the currency, the rate, and the base-currency debit or credit. Reports and the general ledger are in base currency. Aging reports show the base balance due, using revalued amounts where a revaluation applies (see Revaluation carry-through).

Realized exchange gain or loss

When it is posted

Realized gain or loss is posted when a foreign-currency payment is allocated to an invoice (money in) or to a bill or expense (money out) at a different rate from the document's rate.

These never create realized FX:

  • Payments in base currency
  • Transfers
  • The unallocated part of a payment

Refunds of foreign-currency credit notes and debit notes are different: they settle an existing credit, and their exchange difference is posted as described in Settling foreign-currency credits.

How it is posted

SolaCount posts a separate base-currency journal entry:

  • Source PAYMENT_FX, memo "Realized FX settlement for {payment no}", dated on the payment date.
  • The payment's own entry and the original invoice or bill are not changed.

For each allocated amount:

difference = (amount ÷ payment rate) − (carrying base amount of that part of the document)

The carrying base amount is the amount at the document rate, or the revalued amount if the document was revalued. Differences under half a fil are ignored.

Situation Entry
Customer pays more AED than booked (gain) Dr Accounts Receivable / Cr 4305 Foreign Exchange Gain (Realized)
Customer pays fewer AED than booked (loss) Dr 6805 Foreign Exchange Loss (Realized) / Cr Accounts Receivable
You pay fewer AED than booked (gain) Dr Accounts Payable / Cr 4305
You pay more AED than booked (loss) Dr 6805 / Cr Accounts Payable

Default accounts

Account Code Type
Foreign Exchange Gain (Realized) 4305 Revenue, under 4300
Foreign Exchange Loss (Realized) 6805 Expense, under 6800

These accounts are part of the standard chart of accounts. If they are missing, a foreign payment cannot be settled and you see "Realized FX gain account (4305) is not configured…" (or the "loss" version for 6805). Ask your administrator to provision the FX accounts.

Worked example: USD invoice paid at a better rate

Al Noor Trading LLC (base AED) invoices a US customer USD 1,000 on 10 September. The stored rate is 1 AED = 0.2723 USD.

Invoice posted:

Account Debit (AED) Credit (AED)
Accounts Receivable (USD 1,000) 3,672.42
Sales 3,672.42

(The customer is outside the UAE, so the export is zero-rated and has no VAT line.)

The customer pays USD 1,000 on 5 October at 1 AED = 0.2700 USD, which is AED 3,703.70:

Account Debit (AED) Credit (AED)
Bank – USD account 3,703.70
Accounts Receivable 3,703.70

Automatic realized FX entry (PAYMENT_FX): 3,703.70 − 3,672.42 = 31.28 gain.

Account Debit (AED) Credit (AED)
Accounts Receivable 31.28
4305 Foreign Exchange Gain (Realized) 31.28

The receivable is now zero in both USD and AED. If this had been a supplier bill with the same rates, you would pay AED 31.28 more than booked, which is a loss: Dr 6805 31.28 / Cr Accounts Payable 31.28.

Settling foreign-currency credits

A credit note (sales) or debit note (purchases) in a foreign currency is posted at its own rate and carries that base-currency value on the receivables or payables account. Using it later is a settlement of that carried value, and since October 2026 SolaCount posts the exchange difference instead of leaving a few fils in the control account. The original sales, purchase and tax entries are never re-measured.

Settlement What is compared Where the difference goes
Applying a note to an invoice or bill The base value the note carries for the amount applied (spread proportionally if the note is applied in parts) against the base value of the invoice or bill share it clears A separate journal, source NOTE_FX, memo "Realized FX on credit allocation", dated the allocation date. Unapply reverses it.
Refunding a note in cash (supplier refund or customer refund receipt) The note's carried value for the refunded share against the base value of the money at the refund date Extra lines in the refund journal: "Credit settlement carrying-value adjustment" on the control account and "Realized FX gain/loss on credit settlement"

Rules:

  • The realized gain account (default 4305) and loss account (6805) must be active and postable, or you see "Configure an active, postable exchange gain/loss account for this organization."
  • The carrying value is read from the note's own posted journal. If that journal was reversed or cannot be reconciled to the note's base total, settlement stops with "The original credit journal has been reversed. Review it before settlement." or "The credit carrying value cannot be reconciled to its original journal. Review the source before settlement."
  • A refund after an older partial refund that did not follow this rule is blocked until reviewed: "A prior foreign-currency refund needs an auditable carrying-value review before further settlement."
  • Cumulative rounding is handled so the last settlement consumes exactly the remaining carried value.

Example: see the USD debit note in Debit notes: a USD 500.00 note booked at AED 1,836.20 applied to a USD 500.00 bill booked at AED 1,851.85 posts Dr Accounts payable 15.65 / Cr Foreign Exchange Gain (Realized) 15.65.

Foreign bank accounts and advances

A bank account in a foreign currency keeps its quantity in that currency. When a foreign advance is applied, the bank leg keeps the foreign amount and its base value at the payment date, and any difference between that and the advance's carrying value is posted on separate base-currency lines (the receivable or payable control account against realized FX), never by changing the bank line. On the Bank Accounts list, balances are shown in your base currency (the tile reads "Ledger balance in base currency"), while each account keeps its own currency code in the CCY column.

Realized Gain / Loss report

Go to Reports → Realized Gain / Loss. In the reports catalog the tile is Realized Gain or Loss.

  • Choose From and To (both default to today).
  • The summary cards show Entries, Gain, Loss and Net. Net is credits minus debits, so a positive net is a gain.
  • The list shows posted journal lines on your FX gain/loss accounts, such as 4305 and 6805, and on accounts whose name identifies them as exchange gain/loss accounts.
  • You can download it as PDF or Excel. You need report access.

An account named "Unrealized … gain" also matches the name rule. If your unrealized gain/loss account is named that way, its revaluation lines can appear in this report too. Check the source of each line, or keep unrealized revaluations on a differently named account.

Unrealized gain or loss (revaluation)

At period end, revalue open foreign invoices, bills and bank or cash balances to the closing rate with a Base currency adjustment.

There is no separate unrealized report; the Unrealized Gain or Loss report tile opens the adjustments list. Revaluations are not reversed automatically at the start of the next period. They carry forward until the document is settled or the adjustment is voided.

Revaluation carry-through

Once a document has been revalued, later activity uses the revalued carrying amount, not the original document rate:

  • Settlement: realized gain or loss is measured against the revalued amount, so only the movement since the revaluation is realized. The gain is never counted twice.
  • Aging: the AR and AP aging reports show the base balance due at the revalued amount as of the report date, prorated for partial payments. Only revaluations posted on or before that date count.
  • Next revaluation: builds on the previous revaluation, not on the original rate.

Continuing the example: if the invoice had been revalued on 30 September to AED 3,700.00 (+27.58 unrealized), the October payment of AED 3,703.70 would post a realized gain of only 3.70 (3,703.70 − 3,700.00).

To protect this chain, SolaCount blocks backdated or reversing actions that would break it. For example:

  • "A later posted FX revaluation includes this document. Review or reverse it before backdated FX activity."
  • "A later posted FX revaluation includes this settlement. Reverse that revaluation before reversing the payment."
  • "A later posted FX revaluation includes this bank movement. Reverse that revaluation before reversing the payment."
  • "Credit/debit-note allocations changed after FX revaluation. Review their carrying effects before further FX activity."

Permissions

Action Permission
View currencies settings.currencies.view
Enable or disable currencies settings.currencies.manage
View exchange rates settings.exchange_rates.view
Add, edit, fetch or delete rates settings.exchange_rates.manage
Base currency adjustments fx_adjustments.view, .create, .post and .void
Realized Gain / Loss report Report access

Tips and common problems

  • "No saved exchange rate…" when posting: add or fetch a rate for the document date, then post again.
  • A wrong rate was used on a posted document: you cannot edit the locked rate. Reverse or credit the document and re-enter it, or correct the base value at period end with a base currency adjustment.
  • The rate looks inverted: on documents and on the Exchange Rates page it is 1 AED = x foreign. For USD that is about 0.2723, not 3.6725.
  • Manual journals are in base currency only. See Journal entries.

Related