Costing versions and trade agreements
Assume that you want to define the costing versions per item for two sites with different sales and purchase prices. The first step is to create the planned costs for the sites and then you activate the costs. However, sales and purchase orders always pick up the price of the corresponding type that was most recently activated, regardless of the specified site.
If you are familiar with the details of the setup and know why the system responds in this way, you may not want to read the rest of this article. But if you want to know more about costing versions and trade agreements and learn more about how to create a price setup that supports the requirements of your environment, the contents of this article might be useful to you.
Costing versions and sales and purchase prices
Costing versions were introduced in AX 2009. The Item price form (InventItemPrice) is assumed to be the primary entry point to define the price and cost setup per standard and non-standard cost item. The item price and cost data are used within various cost accounting calculations such as inventory closing and BOM cost calculation. Click this link for more information about costing versions: Inventory Costing and Validation in Microsoft Dynamics AX 2009 Course.
Sales and purchase prices of items are only applied in a few processes in Dynamics AX. The reason why this information is part of the item price setup is to conform to the general framework by providing a single point of entry for all price related setup. In future versions of Dynamics AX, more functionality can be associated with the sales and purchase price setup, but in AX 2009 and AX 2009 SP1 the main purpose of the sales and purchase price fields is to be able to update the default cost price of the item master when a costing version is activated. So this functionality helps to associate the new price and cost setup with the item price setup that was available in previous versions of Dynamics AX.
The item master does not include inventory dimensions such as storage and site and it does not include dates for when the prices are valid so this information is not part of an item master update.
Updates of prices are sequenced by the activations of the costing versions and prices are overwritten in the order that they were activated. The costing version that was activated most recently for an item is the costing version that is associated with the item master. Any dimensions or effective dates that apply to the item are disregarded.
Implementation of the sales and purchase price setup
The InventTableModule table entity covers the purchase and sales settings for item master information such as default under or over delivery rates and miscellaneous charges. The InventTableModule table also contains default cost, sales, and purchase price information per item.
The default sales and purchase settings can be modified manually on the Price/Discount tab in the Item details form under Inventory management > Common Forms. These settings appear on the illustration below. However, we recommend using costing versions for that purpose instead.
The activation of costing versions is initiated through the InventPriceActivation* classes hierarchy and the Sales price and Purchase price types are activated through the InventPriceActivationModule class.
The InventPriceActivationModule.activate() method initializes and updates the corresponding InventTableModule buffer with the latest prices.
Purchase price setup example
Follow the steps below to see how the purchase price of a standard cost item is updated in a multisite environment.
1. Click Inventory management > Item details and select an item.
2. Click Price to open the Item price form and, on the Pending prices tab, create a price setup of the type Purchase price for site 1 with a purchase price of 10.00.
3. Click Activate to activate the price.
- In the Item details form on the Price/Discount tab, verify that the default purchase price is now 10.00.
4. Click Inventory management > Item details and select an item.
5. Click Price to open the Item price form and, on the Pending prices tab, create a price setup of the type Purchase price for site 2 with a purchase price of 20.00.
6. Click Activate to activate the price.
- In the Item details form on the Price/Discount tab, verify that the default purchase price is now 20.00.
Price calculations and trade agreements
When sales and purchase order lines are created, the correct prices are retrieved by the price calculation engine. The starting point of the price search is a search for a valid trade agreement for the item. The search observes the setup of the item’s dimension group. If a price is not found, the default price from the item master is applied. The following description provides an overview of the implementation of this functionality.
Implementation of the price calculation functionality
The search for correct sales and purchase prices based on existing trade agreements depends on the PriceDisc class hierarchy. If a trade agreement is not found, a fallback to the default purchase order setting is initiated by the PriceDisc.findItemPrice() method.
In this example, no purchase price has been specified in a trade agreement.
- Verify the trade agreement setup for an item in the Price (purch.) form under Inventory management > Item details -> Trade argmt. > Purchase prices.
As it appears from the following illustration, the order line price defaults to 20.00 for both site 1 and site 2 when new purchase order lines are created.
Purchase price setup example (continued)
To apply unique sales and purchase prices per site, you must create a trade agreement for each site where you specify inventory dimensions that correspond to the inventory dimensions that are enabled for price search on the inventory dimension group.
To create a trade agreement with a unique price for site 1, do the following.
1. Click Inventory management > Item details > Trade agrmt. > Purchase prices.
2. In the Site field, specify S1 and specify warehouse GW in the Warehouse field.
3. In the Price field, specify a price of 10.00.
In this example, the price search is enabled for the Site and Warehouse dimension fields on the item’s inventory dimension group, so these dimensions must be specified on the trade agreement to retrieve the correct price for the site.
- View the inventory dimension setup under Inventory management -> Setup -> Dimensions -> Dimension groups.
4. Click Accounts payable > Purchase Order Details, and press Ctrl+N to create a new purchase order line for site 1 and warehouse GW.
As it appears from the following illustration, the correct price is automatically transferred to the order line from the associated trade agreement.
The trade agreement functionality and the price retrieval algorithm are fully described in Trade and Logistics II in Microsoft Dynamics AX 2009 Course and in Development IV in Microsoft Dynamics AX 2009 Course.
Prospects for integration between the sales and purchase order price calculation and the price system
To be considered for future versions of Dynamics AX:
- Possibility to maintain default prices for sales and purchase orders as records on the trade agreement and support for more advanced criteria to identify the correct prices such as inventory dimensions, customer/vendor related attributes and validity date.
Meanwhile, please continue using the trade agreement features.
We're always looking for feedback and would like to hear from you. Please head to the Dynamics 365 Community to start a discussion, ask questions, and tell us what you think!