Odoo version 16 changes the logic of calculating the exchange rate for an invoice: until version 15 the base for calculation the exchange rate was the posting date, from version 16 it is the invoice date. In addition, the mechanism does not work quite properly (according to the code as of December 10, 2022 for calculation rate in manual accounting journals).
In our opinion, such changes should not take place in mature ERP systems, it affects the accounting policy. The Act on Accounting even requires that changes in accounting principles, including valuation methods, must be introduced with effect on the first day of the current or next financial year, not during the year. Therefore, introducing such changes should maintain backward compatibility and, for example, a control parameter should be added to decide which date is to be taken into account (this is how it was done in Microsoft Dynamics 365).
What's more, our accounting and tax regulations on exchange rates refer to the date of the business operation, i.e. the date of actual delivery of goods to the buyer or the date of service completion, and the invoice is only a confirmation for finances and can be issued later.
After the negative opinion of the Odoo R&D department on the functionality of calculating rates, our Trilab Invoice module was extended in 2022 with the option of independently indicating the date of the exchange rate, with the option of changing it manually. By default, for invoices, this date is the invoice date. In case of manual book entries this option is also available, however, if there is no such adjustment, the exchange rate is downloaded following on the posting date, from the day preceding that day.
This solution is quite common in other ERP systems (e.g. Oracle E-Business Suite) and it is worth having such a standard also in Odoo. Especially since the change is not very complicated as opposed to writing code modifications/overloads.
But maybe in the next versions of Odoo the multi-currency issue will be better handled, because there are still a few gaps ... but more on that in another post.
Update from January 2023 - regarding the functionality (or rather not workin functionality) of automatic recalculation for manual accounting entries, Odoo support confirmed that this is intended:
"The behaviour has indeed changed between Odoo 15 and Odoo 16.
But it is the expected behaviour.
Generally, you don't use miscellaneous operations in foreign currencies. And if you do is to make a correction (revaluation of the currency, exchange difference, ...). Therefore, you don't use the exchange rate by default for correction."
Odoo support workaround is calculate base currency amount manually:
...no comments.., there will be more work to fix the standard.