Home Blog Changes in Acumatica Multicurrency for Developers

Changes in Acumatica Multicurrency for Developers

We review Acumatica's recent changes to multicurrency that affect developer customizations made to Acumatica Cloud ERP. It is important for 3rd party developers and consultants to review these changes.
Sergey Nikomarov | March 23, 2022


The business logic developer teams in Acumatica have been reworking the multicurrency implementation for some time now to make it easier to understand and customize. With this work, there are some important changes in the functionality of our multicurrency implementation that affect developers that we believe is important to share with you.

New Graph Extension

We have a new generic graph extension: MultiCurrencyGraph<TGraph, TPrimary> that stores the common multicurrency logic. From this graph extension developers should derive their specific currency graph extension to support multicurrency in their graph. The details of this process are described in this article from Acumatica help portal:

Platform API: Implementation of the Multicurrency Support on a Custom Form

However, switching to the new logic may require some changes from partner developers. The changes will affect you if there are DAC fields in your custom DACs or DAC extensions that store money in some currency. In this case you need to review your code and adjust it to these changes. Moreover, this can be especially important to customization developers that integrate their code with Acumatica modules.

Overview of Changes

To show why it is important I must first make an overview of changes in the multicurrency.

There are now two sets of currency attributes for DAC fields. Old attributes are located in the PX.Objects.CM namespace and the new set is in the PX.Objects.CM.Extensions namespace. Most currency attributes in these two sets have the same names.

For example, there are both PX.Objects.CM.PXDBBaseCuryAttribute and PX.Objects.CM.Extensions.PXDBBaseCuryAttribute.

This makes the switch to the new multicurrency implementation easier since you don’t have to learn new attribute names or remember two sets of attributes. But at the same time, it makes it easier to miss the incorrect currency attribute from the wrong namespace during the review of a DAC code. So please be careful.

When you declare or review a DAC field in a DAC/DAC extension that will store some currency dependent information (for example, money amount in some currency) you will need to declare on the DAC field property an appropriate currency attribute from one of these two sets.

It is very important to NOT mix old legacy attributes and new currency graph extensions because this will result in issues within the system.

First, you need to find out which graphs use the DAC containing the aforementioned DAC field.

The old currency attributes in the PX.Objects.CM namespace contain the multi-currency support implementation inside of them.

With the new currency attributes, the PX.Objects.CM.Extensions namespace rely on the multicurrency graph extensions which now contain multicurrency implementation support.

New Currency Attributes

We have new currency attributes which are designed to work together with the currency graph extensions. Therefore, the following rules apply:

  1. If all graphs using your DAC do not have corresponding currency graph extensions and you are not going to introduce a new currency graph extension, then you should use the old currency attributes.
  2. If all graphs using your DAC have corresponding currency graph extensions, then you should use the new currency attributes.
  3. If only some of the graphs using your DAC have corresponding currency graph extensions, you need to declare cache attached graph events for these graphs for your DAC fields. In the cache attached event declaration, you should declare a currency attribute suitable for the graph. Use rules 1 and 2 to do this.

This covers the basics of how to choose a currency attribute. You can find more details in these two articles from our help portal:

Platform API: Implementation of the Multicurrency Support on a Custom Form

Platform API: Insertion of a Multicurrency Document

The Importance of Integrating the Changes in the Currency Attributes

Now let’s return to the reason why it is important to integrate these changes.

First, the old currency attributes are now legacy and thus won’t receive a lot of support and improvements going forward. There is a possibility that they will be discarded at some point in the future when all Acumatica modules and large customizations are migrated to the new multicurrency implementation.

Second, some customizations must integrate the changes in multicurrency to work correctly on newer and future versions of Acumatica.

As I have mentioned previously, the old attributes must not be mixed with the new currency graph extensions.

Imagine a situation when there is a customization that extends the PX.Objects.APTran DAC with a custom DAC field SomeBusinessSpecificAmt that uses an old currency attribute. The APTran DAC is used on the “Bills and Adjustments” screen. In this case, the business logic of the screen is stored in the PX.Objects.AP.APInvoiceEntry graph.

Now if Acumatica developers add a currency graph extension to this graph and you publish this customization the old and new multicurrency logic will become mixed. This will lead to errors in the system.


Acumatica developers have been reworking multicurrency support in Acumatica modules for the past several years. They are gradually integrating these changes into various Acumatica modules.

The history of changes we have made over time looks something like this:

  • Acumatica 2018R2: the support was added to the Opportunity graph in CRM
  • Acumatica 2019:  the Field Services module implemented with the new multicurrency functionality
  • After Field Services, the support was added to quotes and proformas in projects
  • In Acumatica 2021R2: AP, AR, and other finance modules were reworked
  • Currently, developers are reworking the distribution modules

The customizations that extend these modules should integrate the changes we have made to multicurrency that we have outlined here today.

Please review your customization in the following cases:

  • Customizations that contain custom DACs with DAC fields storing currency related data and graph extensions to existing Acumatica graphs that use these custom DACs in their logic
  • Customizations that contain custom DAC extensions to Acumatica DACs and these DAC extensions declare DAC fields with currency related data

Should you have any questions, please post these in our Community Developer public Forum – Miscellaneous Developer Topics.

Happy Coding!

Blog Author

Sergey joined Acumatica in 2017 and started as an application developer on the OEM team, where he did a lot of Acumatica Framework development – along with doing several customizations. An example is a large customization for automated budget control for Censof, an OEM partner. In 2019, he joined the Platform Development team as a system developer. And most recently, Sergey is responsible for Acuminator and our RVT development and maintenance. Participating in a number of internal Acumatica hackathons, Sergey was part of the winning team – along with Vladimir Panchenko – that created Acuminator. In a subsequent hackathon, his team extended it further in developing the Code Map with some other improvements to Acuminator.

Receive blog updates in your Inbox.