-
In AX 2009, the task of refilling picking locations was automated and improved. The main idea behind the new functionality is that, if required, processes that impact quantities at picking locations should activate a refill.
This blog post describes how to set up parameters for the new functionality and how to use it. It also includes references to the code where some of the main functionality is implemented.
Parameter Setup
To enable automatic creation and activation of refill transports, you need to set up the following parameters.
· Select Automatic activation for the picking store area in the Store area form under Inventory management > Setup > Inventory breakdown > Store areas.
With the new check box for automatic activation the periodic Create refill batch job becomes obsolete.
· Enter a value for the warehouse item in the Required minimum field in the Warehouse items form under Inventory management > Item details > Setup > Warehouse items. You can also define a maximum quantity to control the quantity that can be transferred to the location.
Creation of Refill Transports
Once the required setup has been completed, refill transports are created when the following events occur:
· A pick reduces the quantity at a picking location to a quantity that is below the required minimum (WMSOrderTransType_OutputDontPostTransfer.activateRefill() is responsible).
· A picking route is activated or started (wmsPickingRoute.activateRefill() is responsible).
· A pallet transport is finished (wmsTransport.activateRefill() is responsible).
To determine whether a refill transport should be created, the following rules are applied:
1. If (physical inventory on the location >= Max. storage capacity) -> no refill is created.
2. If (physical inventory >= Required minimum) -> no refill is created.
3. For picking route activation and start, the quantity that is already on activated and started routes are taken into consideration and the formula is:
a. If (physical inventory – quantity on activated/started routes >= Required minimum) -> no refill is created.
These rules are implemented in the method WMSPickingLocationRefillCheck::checkAndRefill().
Note: Refill transports that are created manually ignore the maximum storage capacity that is specified in the Warehouse items form, so for manually created refill transports the maximum storage capacity can be exceeded.
If none of the above rules evaluate to true, an attempt is made to create a refill with a requested quantity equal to the maximum storage capacity minus the physical inventory on the location.
The refill transport functionality now supports partial deduction of items from a pallet so reservations on a pallet are made even if the requested quantity is smaller than the quantity of a full pallet.
If a partial pallet is moved using a refill transport, the check box To pallet required is selected:
If the item being transported uses serial numbers or similar dimensions, it is possible to change the dimensions on the transport lines and thereby change the reservation. For example, an operator can now move items reserved at the bottom of a pallet to the top of the pallet.
When the transport is started, you are asked to specify the pallet that the items are going to be moved to:
In this example, only part of what is on the pallet is going to be moved so you must specify a pallet or create a new pallet at the To location.
If a pallet has not been specified at the To location, you are asked to specify the pallet when the transport is finished.
Note: The To pallet dimension is automatically selected in the dialog box if:
- Only one pallet exists on the picking location.
- The Use empty pallet location setting on the warehouse item specifies that an empty pallet should not automatically be moved to the empty pallet location.
By Bibi Christensen, Per Lykke Lynnerup & Lennart Conrad, Inventory Management, Microsoft Dynamics Ax.
-
We have received extensive feedback on previous blog postings about the outbound processes within Inventory management in Microsoft Dynamics AX. Many readers have requested information on how to interact with Microsoft Dynamics AX via .NET Business Connector to create picking operations.
With this technical posting we will try to demonstrate how easy it is to code a terminal solution in C# .NET and call simple picking update methods in Microsoft Dynamics AX.
The solution is coded by using Microsoft.Dynamics.BusinessConnectorNet;
You will need a reference in the project to run the example code.
HINT: Get more information about the .NET Business Connector at MSDN (Microsoft Dynamics AX Developer Center) http://msdn.microsoft.com/en-us/library/aa659581.aspx
This small Microsoft Visual Studio project includes information about:
How to log on to an AX installation
// company name, language, object server, configuration
// this uses Windows Authentication
ax.Logon(CompanyId, null, null, null);
How to read data from AX and insert the data in a grid on a Windows form
![clip_image002[9] clip_image002[9]](http://blogs.msdn.com/blogfiles/dynamicsaxscm/WindowsLiveWriter/e971cbac86d3_A61E/clip_image002%5B9%5D_thumb.jpg)
View picking routes in the upper pane and picking lines in the lower pane.
How to prepare data and call picking update functions from the .NET C# code
Picking in AX: In AX you can pick multiple lines by calling the WMSOrderTrans::finishPickingLinesMulti method. This method takes a packed AX Map where the key is the recId of the wmsOrdertrans to be picked and the value is an AX container with the OrderId and recVersion.
The example shows how to prepare the map and call the method to do the pick.
private AxaptaObject BuildAxaptaMapForWMSPickingLines()
{
//build a map of the following structure
//key is <c>WMSOrderTrans.recId</c> and whose value
//is [WMSOrderTrans.OrderId,WMSOrderTrans.recVersion].
AxaptaObject axMap = ax.CreateAxaptaObject("Map", (int)Types.Int64,(int)Types.Container);
foreach (DataGridViewRow dgvRow in wmsOrderTransGrid.SelectedRows)
{
AxaptaContainer axContainerWMSPair = ax.CreateAxaptaContainer();
DataRow row = null;
DataRowView drv = (DataRowView)dgvRow.DataBoundItem;
row = drv.Row;
axContainerWMSPair.Add(row.Field<string>(1)); //orderid
axContainerWMSPair.Add(row.Field<Int32>(7)); //recversion
//add to axapta map
axMap.Call("Insert",
row.Field<Int64>(6), axContainerWMSPair);
}
return axMap;
}
private void PickSelectedLinesFromMap(AxaptaObject axaptaObjectMap)
{
// call below takes a packed map whose key is
// <c>WMSOrderTrans.recId</c> and whose value is
// <c>WMSOrderTrans.OrderId,WMSOrderTrans.recVersion</c>.
ax.CallStaticClassMethod("WMSOrderTransType",
"finishPickingLinesMulti",
axaptaObjectMap.Call("pack"));
}
Apart from the method to multi-update picking lines the project also includes a method to pick-update multiple picking routes by calling WMSPickingRoute::finishMulti.
private void PickSelectedRoutesFromList(AxaptaObject axList)
{
ax.CallStaticRecordMethod("WMSPickingRoute",
"finishMulti",
axList.Call("pack"));
}
Have fun trying this yourself!
Bibi Christensen, Alexander Malafeev, Per Lykke Lynnerup & Lennart Conrad
-
Overview
The purpose of this post is to present the major changes and new functionality that was introduced for sales and transfer order picking in AX 2009.
The aim and the idea behind these changes is to move towards a single system for picking that can be shared in order to simplify and unify future extensions.
The post contains information about:
- User Interface changes
- Changes to tables and classes
- Upgrade scripts
- New functionality for order picking
- New enhancements for advanced WMS outbound processes
Differences in terminology
Picking registration, as known in AX 4.0, is referred to as order picking. Picking with output orders and advanced WMS, as applied in AX 2009, is referred to as consolidated picking.
Differences from a UI perspective
The parameter Set inventory transactions to picked in AX 4.0 is now obsolete, and it has been replaced by the Picking route status parameter.
The following conversion rules apply:
| Dynamics AX 4.0 |
Dynamics AX 2009 |
| Set inventory transactions to picked = selected |
Picking route status = Complete |
| Set inventory transactions to picked = not selected |
Picking route status = Active |
When you post a picking list, and the picking route status is Active, the reference for inventory transactions is set to Output order instead of Invent-picking list registration:
When you click Posting/Picking list registration from a sales order or a transfer order, a new registration form opens:
The Picking list registration form is used to register what was picked and it is quite similar to the picking registration form in AX 4.0. You can either update the entire picking route or update individual lines, and you can view and pick both consolidated lines and order picking lines in this form.
Additional functionality available from this form:
- Barcode identification
- Split of picking lines
- Unpick of picking lines with the option to put items on another location
- Cancellation of picking lines
A new inventory parameter, End output inventory order, is introduced:

The End output inventory order parameter controls whether or not the reference between an output order and inventory transactions is removed when you delete or decrease the quantity of a picking registration line.
If the End output inventory order parameter is selected, the behavior is similar to the behavior in AX 4.0, and that is to say that after posting, the inventory transactions do not reference an output order.
It the End output inventory order parameter is not selected, the reference between the output order and inventory transactions is not removed and a new picking route can be created from the Open output orders form.
When the picking list is posted, the status of the picking lines and the inventory transactions changes.
In AX 2009, there are no separate tables to store picking list journal and picking list registration data.
Differences from a code perspective
In AX 2009, picking is handled using the WMS module and several classes and tables prefixed with WMS are used. This means that several tables are controlled by the LogisticsAdvanced configuration key rather than by the WMSAdvanced configuration key as in AX 4.0.
The figure below shows how the tables in AX 4.0 map to the tables used in AX 2009:
Changes to classes
In AX 4.0, several classes were used when posting a picking list for transfer orders or sales orders. These classes are not directly replaced by new classes.
The picking route is updated by calling the updateRoute method on the WMSPickingRoute table.
The WMSOrderTransType class hierarchy is used for the actual pick of the line. A new class, WMSOrderTransType_Output_OrderPick, has been added, and this class is dedicated to order picking.
Upgrade scripts
The upgrade of the picking list data is handled by the createWMSPickingData script in the ReleaseUpdateDB41_Invent class.
Only active picking lists for registration that are not yet picked are updated into the new tables.
New functionality in the advanced WMS module in AX 2009
This post covers the changes to the order picking functionality.
However, several enhancements were made to the Advanced WMS functionality in AX 2009 enabling you to, for example:
- Use shipment template priority for automatic addition of output orders
- Add shipment lines in an active shipment process
- Include service items and items without locations to a shipment
- Partially activate a shipment picking process for inventory on hand
- Rerun shipment reservation
- Run shipment reservation and physical shipment updates in batch
- Control shipment reservation rules
- Use outbound rules to control the process
- Use new picking forms to unpick operations
- Cancel picking routes and individual lines
- Use minimum quantity on bulk pallet before creating a pallet transport
- Refill with less than a full pallet from bulk locations
- Use new refill pallet triggers and automatically activate refill of pallet transports
- Use a paper based picking list enhanced with barcode identification and sorting based on optimal route
- Deliver picked items to staging/production
- Pack items for loading and subsequently load items
Hopefully we would cover more on this exiting functionality in our next posts. Keep watching.
Per Lykke Lynnerup & Lennart Conrad, Inventory Management, Microsoft Dynamics Ax.
-
Introduction
This article describes the setup process of the outbound flow for external shipment in Microsoft Dynamics AX 2009. The process itself has already been described here, so the focus of this article is the settings and adjustments that can be made to the system to enable a typical business scenario within world class warehouses.
With this setup the following can be accomplished:
1) Use of locations within warehouses.
2) Inventory items are set up to use warehouse management including the consolidated picking method.
3) Output orders are automatically added to a shipment that is not yet activated or a new shipment is automatically created.
4) The shipment reservation runs automatically when the delivery date is [Today – 1 day].
5) The reservation sequence use multiple warehouses within a site and both batch picking routes and output pallet transports are used.
6) After having been picked, items are delivered to the shipment staging area and the staging can be completed. A shipment cannot be sent until all the shipment lines have been loaded.
7) When the goods have been shipped, the physical update is automatically carried through based on the shipment lines.
Why should I continue reading this post?
From this post you can get a clear picture of the main steps that need to be accomplished to set up basic outbound flows in Microsoft Dynamics AX 2009.
Set up warehouses
Start by creating a site [Inventory management > Setup > Inventory breakdown > Sites].
In this example, two warehouses are created and associated with the site [Inventory management > Setup > Inventory breakdown > Warehouses].
When using warehouse management in Microsoft Dynamics AX 2009 you can set up the warehouse layout. In general, two main strategies can be applied for the warehouse layout.
- Picking locations below bulk locations on the same rack
- Picking locations and bulk locations on isolated racks
In Warehouse 22 in this example, the picking locations and the bulk locations are on the same rack and in Warehouse 23, the picking locations are in an isolated area.
In Microsoft Dynamics AX 2009, a location can be specified by: Warehouse, Aisle, Rack, Shelf and Bin.
When using the Location wizard [Inventory management > Setup > Inventory breakdown > Warehouses > Functions -> Location Wizard], you must specify the format of the locations for the warehouse at the Location tab.
The Location and the Update store areas wizards make it possible to automatically create and update the warehouse layout. You can, however, also create and update the layout manually by using the entry forms in the Inventory breakdown folder.
In general, both inbound and outbound layout must be set up. The store zones make it possible to group store areas in order to, for example, ensure that items that need to be stored in a cooling area are guided to a cooling area location.
The area on top will be filled first when using random storage and directed put-away with an input pallet transport.
In this example, the bulk locations hold full pallets and both warehouses use random storage. The layout for Warehouse 23 is best suited for inventory that can be controlled with picking locations that have a smaller capacity than the bulk locations. In Microsoft Dynamics AX 2009, the item picking location must be specified on the warehouse item.
Set up items for warehouse management
When using warehouse management in Microsoft Dynamics AX 2009, items must be set up to enable the warehouse management processes.
Min. output pallet quantity
In this example, output pallet transport from bulk locations is used. To control when a pallet transport is created, the Min. output pallet quantity field on the Setup tab in the Item Details form is set to 24. This means that a pallet transport can be created as long as the pallet quantity is equal to or higher than 24.
Inventory model group
In this example, all items that hold inventory are associated with an inventory model group that uses the consolidated picking method.
Inventory dimension group
Items are set up with an inventory dimension group with active inventory dimensions for site, warehouse, location and pallet. Site is specified as a primary stocking location to ensure that the optimal warehouse within the site is reserved through the shipment reservation. Only items with the Location dimension selected can use an optimized picking route where an operator is guided between the different locations in the warehouse. When a shipment reservation is run, items that do not have the Location dimension selected are added to a new, not-optimized, picking route.
Warehouse item
The warehouse item specify different setting for an item related to a warehouse and you enter information about the item picking location and the store zones related to directed put-away in the Warehouse items form [Inventory management > Common Forms > Item Details > Setup > Warehouse items].
If you specify a value in the Required minimum field, a refill transport is generated from a bulk location based on the quantity in the Max. storage capacity field. Use the Automatic activation check box for individual picking areas to control if the refill transport should be activated automatically. The Mode of handling parameter can be used if both online terminal and paper picking is used within the same warehouse in different picking areas.
Shipment template (automatically add output orders)
A shipment template [Inventory management > Setup > Distribution > Shipment templates] can be created to automatically assign output orders to a shipment.
The shipment type in this example can only contain sales orders related to site 2 and only sales order lines that are going to be shipped with UPS can be part of this shipment.
The default shipping location is from Warehouse 22, but inventory from Warehouse 23 can also be used. For both warehouses a full picking logic is used with picking routes and output pallet transports including refill from bulk to picking locations.
Clear the Reservation required check box to allow activation of the shipment even though not all inventory is physically on-hand.
The priority indicates that based on this shipment template the program starts searching for matching output orders to be added automatically to a shipment.
Shipment reservation in batch
Set up running of shipment reservation in batch under [Inventory management > Periodic > Shipment update > Shipment reservation].
In this case the shipment reservation must be run when a shipment line is going to be delivered tomorrow. To add this query statement, use the LessThanDate(2) method which will return [< “Today+2 days”].
Shipment reservation sequence
The shipment reservation sequence defines how and where the shipment reservation process reserves. You set up shipment reservation processes under [Inventory management > Setup > Distribution > Shipment reservation sequence].
The shipment reservation process contains different layers: Reservation sequence -> Reservation combinations -> Reservation methods.
In this example, the reservation sequence at first tries to reserve inventory from Warehouse 23 and if this warehouse does not have enough physical inventory, Warehouse 22 is the next.
The reservation combination must be enabled for pallet transports and picking route logic.
Outbound rules
To control the process after picking, an outbound rule must be used and associated with the shipment. In this case, the picked inventory must be delivered to the shipment staging area and it must be loaded before the shipment can be sent.
Physical update of the shipment in batch
Set up running of shipment reservation in batch under [Inventory management > Periodic > Shipment update > Physical shipment update]. In this example, the related sales order inventory transactions will be deducted when the shipment is sent.
Per Lykke Lynnerup & Ievgenii Korovin, Inventory Management, Microsoft Dynamics Ax.
-
Introduction
The WMS (Warehouse Managements System) encompasses the core components within average Microsoft Dynamics AX installations that are implemented to manage and run world class warehouses.
The WMS functionality is enabled by the configuration keys LogisticsAdvanced, WMSBasic, and WMSAdvanced. Formal training is available with the courses “Trade and Logistics I in Microsoft Dynamics® AX 2009” and “Trade and Logistics II in Microsoft Dynamics® AX 2009”. The training material covers main flows and processes, but there is still plenty of room for discussions on this exiting subject.
Please welcome the first post of a WMS series on this blog.
Why should I continue reading this post?
This post describes core Microsoft Dynamics AX 2009 outbound shipping process components, such as output order and shipment, and it provides an overview of the outbound process in general. We would definitely recommend that you continue reading this post to:
· Get a clear overview of outbound shipping processes with WMS in AX2009
· Learn more about new features in the shipping process, such as consolidated picking
Let’s get started.
Outbound process
In Microsoft Dynamics AX 2009 outbound shipping via warehouse management is processesed through a shipment [Inventory management > Common Forms > Shipments].
A shipment is a collection of items that are packed in the same container for transport by, for example, ship, rail, truck, or plane. A shipment includes an entire order, a part of an order, or a consolidation of multiple orders.
Based on the contents of the shipment, one or more picking routes, one or more pallet transports, or both are created.
An output order is a request for a picking requirements and it forms the basis of a shipment. From the shipment you can activate a pallet transport, a picking route, or both. The shipment status is based on the lowest denominator of the shipment lines’ status.
When, for example, a sales order line is created in Microsoft Dynamics AX 2009 an inventory transaction is created with a negative quantity to control an expected issue of inventory. To control the process of issuing the physical inventory, an output order is used in the warehouse management area. The output order [Inventory management > Inquiries > Output orders] is created when the reference order is released (Posting of the picking list).
The output orders are associated with a shipment, and in that process Microsoft Dynamics AX 2009 creates shipment lines. When shipment reservation is run, the program creates picking routes and/or output pallet transports based on predefined settings. The following activation of the picking process makes it possible to pick and deliver picked inventory to the shipment staging areas where the shipment is staged and loaded before it is sent.
As shown below, the outbound process can be set up to include only part of the existing stages.
Output orders
In Microsoft Dynamics AX 2009, the warehouse management outbound processes use output orders [Inventory Management > Inquiries > Output orders].
The output order [Inventory management > Inquiries > Output orders] is created when the reference order is released (Posting of the picking list), or when a manual output is requested from the issue reference line.
The output order holds information about the status of the outbound process and it is linked to the detailed information of the issue reference line.


Relation to inventory transactions
When the output order is created, it takes “ownership” of corresponding issue inventory transactions. This relationship is maintained by two dedicated fields on the InventTrans table (TransChildType and TransChildTypeRef). All related inventory transactions are marked consistently against an output order. Consider the following code example of output order creation.
AOT/Classes/WMSOrderCreate/updateCreateWmsOrder()
…
inventTrans.TransChildType = InventTransChildType::WMSOrder;
inventTrans.TransChildRefId = wmsOrder.OrderId;
Shipment
A shipment consists of a shipment header and lines, and the information relates to output orders which, again, relate to the different reference order lines. Note, that when using advanced warehouse management in AX, a shipment can contain references to multiple issue orders, and these orders can even be of different order types.

The shipment status is based on the lowest denominator of the shipment lines’ status. A shipment can be in one of the following statuses:
|
Status |
Description |
|
Registered |
The shipment has been created but not yet reserved or, if just one shipment line exists, without being part of a route. |
|
Reserved |
The shipment has been reserved and picking routes and/or pallet transports have been generated, but they have not yet been released for picking. |
|
Activated |
Both picking routes and pallet transports have been released, but not all of them have been completed.
Note that picking can start even when all items for the shipment cannot be reserved. |
|
Picked |
At least one line of the shipment line is still at the picked stage. |
|
Staged |
At least one line of the shipment line is still at the staged stage. |
|
Loaded |
At least one line of the shipment line is still at the loaded stage. |
|
Sent |
The shipment has been sent and the shipment has been fully expedited. |
|
Canceled |
The shipment has been canceled. |
Shipment template
A Shipment template available from Inventory management > Setup > Distribution > Shipment templates, is used as the basis of a shipment.
A shipment template is required only if features such as automatic shipment creation, automatic creation of output orders, or creation of shipments via a wizard are applied, otherwise a shipment can be created manually. When a shipment template is applied, output orders can automatically be assigned to a shipment – and then a shipment need not be created manually.
Picking
Microsoft Dynamics AX 2009 supports three outbound picking processes:
· Consolidated picking
· Order picking
· Inventory transaction picking (for example, Accounts receivable > Common Forms > Sales Order Details (Lines) > Inventory > Pick)
The order picking and consolidated picking processes use the same framework, called output orders, but the consolidated picking method has much more functionality and it requires a license to Advanced Warehouse Management.
If consolidated picking is not applied, Microsoft Dynamics AX 2009 automatically creates a shipment and a picking route when, for example, a picking list is posted from the Sales orders form.
We do not recommend using inventory transaction picking in combination with one of the other picking methods since inventory transaction picking does not update output order related information.
The following example illustrates the possibilities of controlling the outbound warehouse management processes utilizing output orders in Microsoft Dynamics AX.
Consolidated picking implies that multiple orders can be combined into one picking list. The orders can potentially be of different types, for example sales orders or transfer orders.
Consolidated picking uses advanced shipment functionality such as reservation via shipment, activate picking, activate pallet transport, and guided picking routes.
For flexibility of use, the consolidated picking method can be set up in a hierarchy of levels:
- Inventory model group
- Warehouses
- Warehouse items
- Picking list posting
Unpick and cancelation of pick
In Microsoft Dynamics AX 2009 inventory can be unpicked and returned to a different inventory dimension as, for example, a location and/or pallet. The inventory transactions are returned to the original status after an unpick operation has been performed. The reference to the output order still exists, and the picking line can be updated to Picked again right after unpicking. When a picking line is canceled, the output order reference is moved to the issue reference line and the output order, therefore, needs to be released again from the issue order. Alternatively, the reference line or the “deliver remainder” quantity on the issue reference line can be canceled.
The unpicking and cancelation methods can be found on the picking list registration [Inventory management > Periodic > Picking list registration], lines – Functions. All the picking lines can also be canceled in one operation via Functions on the picking route header.
Note that after the unpick action it is still possible to pick the same inventory again and again. Since the historical information is not stored in the system, the final inventory transactions are marked against the latest selected picking route, and the original reference using inventory transactions (TransChildType, TransChildTypeRef) is not valid anymore which means that these fields are empty on related inventory transactions. This aspect should be considered by every partner, who is planning to customize functionality in this area.
Data model
Please look at the following data model which represents the relationships between all entities in the scope of this blog post.
Per Lykke Lynnerup & Ievgenii Korovin, Inventory Management, Microsoft Dynamics AX.
-
Quick abstract
As many of you may know, with the latest release of Dynamics Ax 2009, the new Quality Management System (QMS) module is available within the Inventory Management Area, formerly the Fullscope TQM (Total Quality Management) solution, which was acquired and evolves in the new module.
As some of you may know, the upgrade scripts from previous TQM solutions have been provided a couple of months after the official release. Considering the fact that the previous TQM solution was a part of the BUS layer, but not a SYS layer, the upgrade scripts weren’t included in the Dynamics Ax 2009 SP1 and they were only available as hot fix 955735 (since September 2008). You can request the hot fix from here
Why do I need to continue reading this post?
This post is about the TQM->QMS upgrade and there are at least three good reasons why we would recommend partners and Dynamics Ax professional to read it. The post will include information about:
· the upgrade strategy from the BUS to the SYS layer between versions
· pre-upgrade data requirements that any partner should be aware of in advance
· how to adjust an upgrade process with a minimum of effort to support existing customizations
Let’s get started.
Prepare your data before upgrade
TQM evolves in the QMS module and as a result of the transformation the data model has been adjusted to follow the latest Dynamics Ax data model and code best practices. For instance, the text fields to keep comments for particular orders have been converted to standard document handling functionality; a new transaction type (InventTransType::QualityOrder) to mark related transactions on InventTrans table has been introduced for quality orders; QMS inventory transactions are treated by the system in a consistent way (an example would be that now there is no need for special fields like QmmScrap on InventTrans to specify scrap).
The extended data type (EDT) size truncation issue affecting primary keys
The standard extended data types have been applied to the amount of fields and this transformation results in adjustment/truncation of some fields in the new tables. For instance, QmmTestGroup.QmmTestGroupCode EDT (string size 20) evolves in InventTestGroup.InventTestGroupId EDT(string size 10). It may result in an index duplication violation error during the upgrade process in case you have an existing number sequence which is not unique within a size of ten digits for the QmmTestGroup.QmmTestGroupCode field.
Possible workaround
Before you upgrade, we recommend that you change QmmTestGroup.QmmTestGroupCode values of more than 10 characters to a maximum length of 10. To do this:
1. Right-click the field “Test group”
2. Select Record info
3. Click the Rename button
4. Expand the field length to 10.

You can find the full list of truncated fields in the corresponding KB article for hot fix 955735.
Upgrade strategy
In releases prior to Dynamics Ax 2009 the TQM code base took place in the BUS layer, but in the latest release it was “moved” to the SYS layer. The main problem is that “old” TQM application objects are on the BUS layer, but the “new” QMS application objects are on the SYS layer. This situation is not typical for the product. Usually the upgrade scripts upgrade the previous SYS layer to the current SYS layer. However, this is not the case with the QMS upgrade.
The strategy for upgrading the Dynamics Ax 4.* BUS layer to the Dynamics Ax2009 SYS layer uses an “ID based mapping” approach, which allows to:
· Consume any “old” TQM application object (QMM* tables) in the database from the “new” Dynamics Ax2009 SYS layer.
· Associate “new“ application objects (so called DEL_ placeholder tables) with “old” qmm* tables which contain “old” data, that must be upgraded.
· Create the usual x++ upgrade scripts, which can be accessed from the Upgrade Cockpit (new upgrade jobs marked as “QMS”).
Let’s go thought each step of proposed upgrade process
· First of all, we need to remove the old axBUS.aod file from the AOS directory.
o At this point of time there is no access to “old” qmm* tables from the application, but data are still “physically” persistent in the database. Let’s consider table one of those TQM tables in the database – QmmMyTable, as the example.
· The second step is to import all application placeholder objects (one of them will be called DEL_ QmmMyTable) that have the same IDs as the previous qmm* tables (same table and field IDs).
o All placeholder application objects will be mapped by the system to the “old” database tables, so by using the DEL_ QmmMyTable table from the x++ code this object gets associated to the old QmmMyTable table. Now we can write the regular x++ upgrade scripts.
· The third step is to import x++ upgrade scripts (ReleaseUpdateDB41_QMS class) and recompile the ReleaseUpdate* classes hierarchy, so that the framework becomes aware of any new upgrade script classes.
· Finally we can follow the normal upgrade path by running the upgrade jobs from the Upgrade Cockpit!
What should I do if there are partner customizations in the TQM solution and if the ID values of the placeholder tables of the hotfix don’t match my implementation?
The answer is simple – make sure that the placeholder tables match your original qmm* tables. One way of doing this is to export the project, which contains all qmm* tables in the order of any new proposed placeholder tables (placeHolders.xpo) and use any applicable merge tool (WinDiff) to apply the correct table/field IDs for the placeholder tables. For example, in the original TQM solution the table ID value for QmmMyTable is equal to 100, but say, that in a partner customization, the value is changed to 101. The DEL_ QmmMyTable placeholder table will then have a table ID value that equals 100, and the partner has to change the placeholder table ID value prior to the upgrade in order to make the placeholder table map to the correct source table.
Conclusions
The TQM->QMS upgrade process is quite different from the usual upgrade process in Ax, but at the same time it is designed to require minimal customer interaction and enables transparent mechanisms to consider existing customization and to make the whole process as smooth as possible. We would love to hear about your experiences. Have a nice upgrade!
Ievgenii Korovin, Inventory Management, Microsoft Dynamics AX.