I've been searching for the last two weeks about how to implement Multi-Currency correctly in our organization. I'm pretty sure I'm not the only one who noticed that if you want to use the Advanced Currency Management (ACM) to track the exchange rate history and display valid currencies, you have to deal with some major limitations. Here's just a quick list for anyone passing by (and also so any user can refer to them in answers):
(1) Dated exchange rates are used for opportunities, opportunity products, opportunity product schedules, campaign opportunity fields, and reports related to these objects and fields. Dated exchange rates are not used in forecasting, currency fields in other objects, or currency fields in other types of reports.
Considering this, if you plan to track Invoices or anything else containing money/currencies in Salesforce, you are out of luck. Also (from my understanding), if you want to report on multiple objects (let's say Account > OPP), I don't think it will behave correctly, they system will instead use the static rate (or partially use dated rate and static depending on if the field is located in the opportunity object or account).
(2) Organizations with advanced currency management support roll-up summary fields between two advanced currency management objects. For example, roll-up summary fields are supported from an opportunity line object to its opportunity object, because both are advanced currency management enabled. However, if you enable advanced currency management, you can’t create roll-up summary fields that calculate currency on the opportunity object rolling up to the account object, and you can’t filter on the opportunity currency field on the account object. A*ll existing currency-related roll-up summary fields on the opportunity object are disabled* and their values are no longer calculated. If your organization enables advanced currency management, you should delete any currency roll-up summary fields using opportunities and accounts or opportunities and custom objects.
If you want to make any roll-up from the Account object to see the sum of every opportunities (or from any other object/custom object), you are out of luck too. The only alternative I see is probably to use a trigger to automatically update a currency field in your Account object on save of your Opportunity (similar to this article written in 2009).
(3) Cross-object formulas always use the static conversion rate for currency conversion.
Any formula referring a field in the Opportunity will not use the historic exchange rate, but the static one. This basically mean (if I'm right) that it will display inaccurate information outside any other object than the one listed in (1).
(4) If advanced currency management is enabled, you can't bind Visualforce pages that use
<apex:outputField>components to currency fields that support advanced currency management.
If you plan to bind your currency fields in a Visualforce page from an Opportunity, Opportunity Product..., you are out of luck, it will not work anymore. You will have to find workaround to allow user input, process the value and map it to the right field.
Ideas related to this issue:
- Allow both Advanced Currency Management and Summary Roll-ups
- Advanced Multi-Currency Support for All Currency Fields in Salesforce
- Workaround for Advanced Currency Management on Custom Objects?
- Dated exchange rates for custom objects
Based on my previous analysis, it is seriously difficult to support dated currency if you plan to use custom objects or add additional currency-related logic outside of the Opportunity. Unless we use the corporate one everywhere else, I don't see any other solution than to add triggers to every single objects where you plan to use multi-currency to emulate the work that ACM should do by default. Otherwise, relying on external application to support currency calculation might be the other solution, but you have to integrate with this external system.
For any user who had to deal with this, how did you approach this situation with your organization to use dated rates in other objects and reports?