If you record foreign currency transactions you might experience a situation in which Dynamics AX records foreign currency gains/losses on the wrong ledger account. This blog post illustrates the circumstances under which you might run into this situation and provides you a possibility how to fix this issue.
For this example, the following (fictional) currency exchange rates between the EUR and USD are used. (Please note that the local company currency is EUR). The first transaction recorded in Dynamics AX on 1 January 2015 is a vendor invoice for 1000 USD. At the time the vendor invoice is recorded the EUR/USD exchange rate stands at 80 EUR/100 USD, resulting in an amount equivalent to 800 EUR. As the invoice is not settled until the end of January 2015, a foreign currency revaluation is run in the Accounts Payable module. This foreign currency revaluation process results in an unrealized exchange rate gain of 50 EUR (1000 USD * [80/100 EUR/USD – 75/100 EUR/USD]), which is recorded on the ledger account for unrealized exchange rate profits. The next screenshot shows the corresponding voucher.
On 5 February 2015 the vendor invoice is paid by using a wire transfer. This transfer is – as usual – recorded in a vendor payment journal in the Accounts Payable module. Because the USD appreciated to 87 EUR/100 USD at the time the payment is made, an exchange rate loss of 70 EUR is realized. This loss is recorded on the ledger account for realized exchange rate losses. At the same time, Dynamics AX cancels the previously recorded unrealized exchange rate gain of 50 EUR. The next screens show the payment made and the corresponding vouchers created. Please note that the payment is made via a transfer account – in my example account “109053 Transfer Bank Charlie”. This transfer account is cleared on 8 February when the bank transaction is posted (see the next screenshot). As the EUR/USD exchange rate changed from 87 EUR/USD (at the time the payment was made) to 83 EUR/USD (at the time the bank transaction was posted), a balance of 40 EUR remains on the payment transfer account. This balance can be identified in the following screenshot.
To clear this balance on the transfer account the foreign currency revaluation process is run in the General Ledger module for the respective account. The outcome of this revaluation process is a balance of 0 EUR on the transfer account.If one takes a close look at the foreign currency posting that is made to clear the balance on the transfer account, one can identify that the balance was posted on the ledger account that is used for recording unrealized exchange rate losses (see the next screenshot). Posting the remaining balance of 40 EUR against the unrealized exchange rate loss account is wrong because the transaction represents a realized loss. The next figure summarizes all transactions that have been recorded for this example and highlights the remaining realized and unrealized exchange rate gains and losses recorded in Dynamics AX.Even though the total exchange loss of 30 EUR is correct from an overall perspective, the elements that make up this total amount are wrong. That is, if your company reports realized and unrealized currency exchange gains/losses separately, your profit and loss statement shows incorrect figures.
In this section I will show a possible solution to the problem illustrated. This solution requires some minor system modifications that are described next.
The first modification required is extending the Base Enum values “FinancialGain” and “FinancialLoss” of the “CurrencyGainLossAccountType” Base Enum. In my example I simply added the country codes for Germany (DE) and the USA (US). Please see the next screenshot for details.
The next (optional) step is to change the following two labels: @GLS109008 and @GLS109005.
Step three requires extending the LedgerExchAdj class by the same country codes that have been used in step 1. Please note that those codes are entered slightly different (#isoDE, #isoUS).
A similar adjustment is required in the ledger form as illustrated in the following screenshot.
The result of those modifications is that two new exchange rate transaction types are available in the ledger form (see the next screenshot).
With this setup I repeat the previously recorded transactions on another (“fresh”) bank account and its corresponding transfer account. All steps and vouchers are identical except the voucher that is generated when running the foreign currency revaluation in GL for the transfer account.
As you can identify from the next screenshot, after having done the previously described system modifications, Dynamics AX does now record the exchange rate adjustment of 40 EUR on the newly setup account that represents a realized exchange rate adjustment. This change allows you reporting currency exchange rate differences correctly in your profit and loss statement.
Please note that the foreign currency revaluation process in the Bank module is also affected by the changes described here. For details, please see my previous post.