Birger Larsen – AX / Dynamics 365 blog on WMS

WMS, Distribution, Logistics, Birger, Larsen, AX, 2012, WAX, TRAX, Dynamics 365

Increase warehouse transparency with Power BI heatmaps — October 13, 2017

Increase warehouse transparency with Power BI heatmaps

You can increase transparency in your warehouse by applying heatmaps to visualize data from your warehouse. The heatmap can visualize data like pick frequency, fill percentage, ABC slotting, work exceptions and other warehouse data directly onto a warehouse floorplan. The visualization of data onto the physical layout of your warehouse, provides additional insight into warehouse data and transactions compared to traditional warehouse reports.

In a previous post, I discussed how you can create your own warehouse performance reports using Power BI and Dynamics 365 for finance and operations – enterprise edition (D365FOE). In this post I will explore this opportunity further by discussing how you can combine D365FOE warehouse data with the heatmap concept.


Creating a pick frequency heatmap in Power BI

As an example I will create a pick frequency heatmap, that will display the pick frequency as a color for each of the locations in the warehouse. The darker the color – the higher the pick frequency:

Pick frequency - close up.png

The heatmap is good at revealing anomalies and patterns that are difficult to extract from normal D365FOE screens / reports. An example of this is location D016 in the heatmap above. Why is this remote pick location so heavily trafficked? And conversely why is one the best picking locations D124 so rarely visited. The colors indicates that items on these locations should be re-slotted.

If your pickers experience congestion problems – you can also use the pick freqency heatmap to identify traffic jam areas in the warehouse. Once the traffic jam areas has been identified, you can reslot your items to avoid this.

In the next sections I will walk through the required steps to create the heatmap.

Import the Synoptic panel visualization

First step in creating the heatmap is to import the Synoptic Panel visualization into Power BI.  You can import it either from a file (downloaded from OKviz site) or from the store.



Synoptic panel2

Create heatmap template

Before you can create the heatmap in Power BI, you must first create a heatmap template on the webpage. Drag an image of your warehouse floorplan on to the empty canvas and start to map the locations:

Synoptic designer


When you have mapped all locations and given them the correct location names (it’s very important they are named precisely the same as your location names in D365FOE), then click Export to Power BI and save the presented image on you local machine:

Export to Power BI

Now you have a picture containing your warehouse floorplan including mapped locations.

Create heatmap in Power BI

Now you are ready to create your heatmap in Power BI. Start by clicking the Synoptic panel visualisation.

Select synoptic panel


Add the entity store as a datasource:



Select and load the WHSwarehouse_Worklines measure:


Now setup the Category and measure as displayed below. The field dragged into the Measure area will be the field visualized by color. I have selected Worklines, because that can be interpreted as the pick frequency.

Edit 10-26-2017: After posting the blog I found that it’s not correct to use the standard worklines measure as a count for worklines. It will not be correct if you have more than 1 pick line in your work. You should create a new measure instead counting the worklines:  worklinesnew = COUNTROWS(WHSWarehouse_WorkLines). You should use this instead in the examples below. This is what happens when ERP consultants starts playing with Power BI 🙂



Now setup the colors and their corresponding thresholds:



Now you are ready to import your heatmap template:

Import template

Now refresh your data and view the result of your work:


As mentioned above you can use the heatmap to display a variety of other warehouse data, including

  • location fill percentage
  • slotting of your ABC items
  • work exceptions
  • locations requiring replenishment
  • worker activity in the warehouse
  • Last cyclecount

In my next post I will explore some of these further. Until then you can watch this nice podcast with Fredrik Sætre, Mirza Abdic and others, where they also talk about Power BI heatmaps..



Do-it-yourself warehouse reporting with Power BI — October 5, 2017

Do-it-yourself warehouse reporting with Power BI

Did you know that you can create your own rich warehouse performance reports on your Dynamics 365 powered warehouse?

Microsoft Dynamics 365 for finance and operations – enterprise edition (hereafter D365FOE), contains a selection of warehouse report models to be used with Power BI. These models provide out-of-the box kpi’s on shipping performance, vendor performance, inventory accuracy and more. Watch a video here on how to install these.

Shipping performance

Warehouse reporting now accessible for power users

But – an equally interesting fact is that – Microsoft also provided a number of “aggregate measurements” that will allow power users – and consultants – to do their own warehouse performance reporting in Power BI.

In this post I will discuss how to create your own exploratory warehouse reports using the new aggregate measurements.

Note that this post is the first of two posts on Power BI and warehouse reporting. You can find the second post on Power BI and heatmaps here .

Aggregate measurements – the reporting friendly tables

Normal D365FOE tables are intended for storing transaction data, but are not really well suited for reporting purposes. A simple report like a warehouse work progress report, draws data from many D365FOE tables. If you were to build a report directly on tables, you would need to have detailed knowledge about which tables contained the data and also how the tables are related.

As an alternative to the tables, you have the aggregate measurements. Despite the unfriendly name, they are very friendly when it comes to report building. They provide you with most of the building blocks you need to make quick reporting in Power BI, as you will see below.

Connect to D365FOE from Power BI

All the data generated by the aggregate measures are stored in a entity store database – a database dedicated for reporting. The entity store is updated regularly with data from D365FOE.

Entity store

To get access to the entity store from Power BI, click the Get data icon, select SQL server and enter server and entity database name:


Power BI will now display a list of all the aggregate measures available for reporting. Filter on WHS to see the warehouse measures.


One of the most interesting ones is the WHSWarehouse_Worklines.  Mark it and click the Load button. Power BI will now load the workline aggregate measure. You will now find that most of the important fields related to warehouse work are available for reporting:



Work progress report

A common reporting requirement from warehouse managers is the ability to monitor progress of on-going warehouse work. A good overview of work progress will reveal possible delays early and allow you to re-allocate workers to areas experiencing delays.

For a start you might want to see work per warehouse (with drill down to zone) and work status. You can create that visualization by performing these 6 steps:

  1. Select a visualization (graph type)
  2. Drag the ∑Worklines measure onto the visualization (the total worklines is now displayed)
  3. Create a WarehouseID/Zone hierachy by dragging WarehouseZoneId onto WarehouseID (required to be able to drill down from warehouse to zone)
  4. Drag the WarehouseID/zone hierarchy created in step 3 onto the visualization (worklines per warehouse is now displayed)
  5. Drag the Workstatus field onto the visualization
  6. Add a slicer with work created date. Set the slicer to last 1 day (only worklines created today are displayed)

Edit 10-26-2017: After posting the blog I found that it’s not correct to use the standard worklines measure as a count for worklines. It will not be correct if you have more than 1 pick line in your work. You should create a new measure instead counting the worklines:  worklinesnew = COUNTROWS(WHSWarehouse_WorkLines). You should use this instead in the examples below. This is what happens when ERP consultants starts playing with Power BI 🙂

The visualization now displays todays open and closed work per warehouse. From the graph you can see that warehouses 24 and ncars still have large chunks of open work.


Because we made the warehouse/zone hierarchy, it’s possible to right click on a warehouse and drill down to the underlying zones in the warehouse:


For warehouses working with waves and/or loads, you would also like to see work grouped by wave/wave template and/or load. Wave is partially supported in the sense that a wave id is available in the aggregate measure, but you would probably require the wave template – to make really usable.  I did not find any support for visualizing work per load. They should be fairly simple to add – so Microsoft please, please add them to version 2 J

Warehouse worker performance

Another type of report that warehouse managers would be interested in, are worker performance reports. This is especially relevant in large warehouses with heavy use of temporary workforce. The worker performance reports will reveal if additional training of the workforce is required. In the example below I have created the most basic worker performance report, displaying closed worklines per employee for a given day. Create this report by performing these steps:

  1. Select visualization (graph type)
  2. Drag the ∑Worklines measure onto the visualization (The total worklines is now displayed)
  3. Drag the UserId field onto the visualization (worklines per user is now displayed)
  4. Drag the WorkclassId field onto the visualization
  5. Add a slicer with work closed date and select a date.


The visualization now displays closed work lines per employee. From the graph you can see that employee ncars is by far the most productive. My demo data here is probably not the best – but I think you get the idea.


In real life you would probably rather use work pool or work template instead of Work class id, but my demo data did not contain any work pool values and work template is not included in the aggregate measure.

Another major enhancement to the warehouse worker performance report, would be to base the report on labor standards. It would e.g. acknowledge that some pick/put types are more time consuming than others. This would give a more precise view on the performance, than just a raw work line count. This is however not supported in the standard aggregate measures.

High runners

You may know that D365FOE offers ABC classification of items out of the box. Unfortunately the ABC classification can only be performed based on revenue, margin, inventory value and carrying cost. All of these measurements are fine, but from a warehouse point of view you would want to know which items generates the most picks – the high runners. It’s important to know because you will want your high runners to be located on the most attractive pick locations – requiring the shortest pick route.

In the example below I have created a graph that displays High runners by zone. Each zone has a color and within the zone, the items with the highest number of worklines are displayed. The larger the square – the higher the number of pick work lines. Create this report by performing these steps:

  1. Select the Treemap visualization
  2. Drag the ∑Worklines measure onto the visualization (The total worklines is now displayed)
  3. Drag the Warehouseid field onto the visualization
  4. Drag the Itemnumber field onto the visualization
  5. Add a slicer with work closed date and select a date.


Alternatively you can just view as a plain old list view:


You can extract a variety of other reports / perspectives from these standard aggregate measures. There are however, still areas within warehouse reporting, that’s not covered by the standard aggregate measurements. Some examples are:

  • Location fillrate
  • Forecasted inbound/outbound warehouse work – e.g. based on load appointments or sales/purchase order lines converted to pallets
  • Visualization of slotting of A,B,C items in respective zones

Hopefully Microsoft will provide us with more aggregate measurements to allow us to build these commonly used reports as well. If you can’t wait for these, then consider making your own customized aggregate measurements.

Opportunistic counting with dynamics 365 for operations — June 1, 2017

Opportunistic counting with dynamics 365 for operations

Many larger enterprises have moved from traditional year-end stock count to cycle counting. The main benefits are

  • no facility down time because items are counted continuously – typically when order picking activity is low
  • Counting is done intelligently. Cycle count plans enforce that fast moving items are counted more often than slow moving items
  • Less deviations/noise/ errors in other warehouse processes, because counting is performed continuously and not just once a year

A natural extension of the cycle count approach is to perform opportunistic counting in the warehouse. Opportunistic counting is performed (or triggered) by warehouse workers during other warehouse processes – e.g. picking.


Zero confirmation

One well known example of opportunistic counting is zero confirmation. This counting type is used when a picker empties a pick location. The system will then ask him to perform a count of the location to verify that the location is empty.

The main benefits here are:

  • The worker is already at the location – eliminating a separate trip to the location during cycle count.
  • Confirming that a location is empty is much faster than a cycle count of the location when many items are present on the location.

Cycle count thresholds

D365O supports zero confirmation by the concept of cycle count thresholds. A cycle count threshold specifies that cycle count should be performed when a threshold is hit for a combination of item(s)/locations.


In the example above I have specified, that when the quantity on locations Floor-17 & 18 hits a quantity threshold 5, then I would like the picker to perform a count of the location during the pick operation. The threshold can also be specified as a percentage of volume/stocking limits.

To illustrate the process I have setup an example, where D365O believes location FLOOR-17 contains a full pallet of 100 pieces and a leftover license plate with 3 pieces. In reality the leftover is not physically available at the location.


The worker is now asked to pick 100 pieces from location FLOOR-17:


When the worker confirms the pick, a cycle count screen is presented instead of the normal put screen, because on-hand on the locations is now reduced to 3 – a value that’s below the threshold of 5.


The mobile device asks the worker to enter the quantity of the leftover license plate LP05. The system on-hand is 3, but the location is now empty. The worker therefore enters 0 in quantity:


The mobile device asks him to confirm (recount) – because the counted quantity deviates from the known on-hand quantity:


The worker confirms zero quantity again and the pick operation continues:


The result of the count can now be viewed in the cycle count work pending review form, where it can be accepted or rejected by a supervisor:




Other opportunistic count techniques

D365O also supports cycle counting initiated by a worker reporting a short pick on a location.

The main benefit of this, is that the difference is eliminated instantly, rather than on the next scheduled cycle count of the location.

In this example, a worker is sent to pick items from FLOOR-17 location, but the location is empty. The worker now selects the short pick menu item to report that the items can’t be picked:


In the short pick window the worker selects 0 in pick qty and the short pick reason “Shortpick with cycle count”


Next the worker confirms the shortpick:


Because the worker selected the reason code “Shortpick with cycle count”, a cycle count work has now been generated:


The Cycle count work is created, because the short pick reason code I selected has been setup to trigger cycle count in the Work exceptions form:

Work exceptions

When the location is counted, then this will be taken into consideration by the cycle count plans. Because the location is counted now – then the next counting of the item will be postponed.



Opportunistic counting is an valuable supplement to the cycle count plans and should be considered / deployed together with the cycle count plans, when implementing D365O. Note that the examples above are also supported in AX 2012 R3.


Build your own warehouse apps with dynamics 365 — November 22, 2016

Build your own warehouse apps with dynamics 365

With the release of Dynamics 365 for operations (hereafter D365O), it is now within reach for users with no developer skills, to build their own phone/tablet apps. The apps can display information from most of the forms in D365O. From a warehouse perspective, this allow users to build apps to display e.g. load information, work status, container info etc. Furthermore the apps also allows users to perform much of the standard warehouse logic directly from the mobile phone – e.g. releasing a picking wave, assign work to users etc.

This is made possible by a new mobile app designer embedded in D365O, where the user basically builds the app by pointing at fields and actions in D365O forms.

You can read a general introduction here Note that this Mobile app designer has nothing to do with Powerapps, though they have somewhat overlapping purposes.

In this post I will show how these “homemade” apps can be built and the opportunities it opens in the warehouse context.

Wave status app – example

Let’s say you are a warehouse planner, responsible for monitoring and releasing picking waves in the warehouse.

You would like to be able to see status on the current waves and also be able to release waves from your own phone. To achieve this we will build a small wave status app. Start by opening the shipment wave form:



Activate the “still slightly secret” mobile app designer by adding “&mode=mobile” to the URL and open the (now visible) Manage mobile app form:


The mobile app designer is now opened in the right part of the window. Enter a name for the app in the mobile app designer


Creating a wave list page

Click Add page to create a wave list page, displaying waves:


Now let’s add some fields to our mobile page by clicking Select fields. D365O will now display “Plus” signs besides the fields, that you can add to your app page. Click on the fields you would like to display in your app. Click done and a wave list page has been created in your app.


Create a wave details page and the release action

Now let’s create a wave details page, that will display more information about the wave when the user clicks on a wave in the wave list.

Create the wave details page, the same way as the wave list page – but pick the fields from wave details form in D365O. The result could be something like this:


Now let’s add the possibility to release a wave. Click in the Actions button in the wave details page and enter a name for the action.

This next step is slightly confusing: Make sure you have the D365O wave details form displaying a wave that’s processed, but not yet released. Now Click Select fields.


Now release the wave. The Mobile designer will now record the release action. Now close the action and the wave details form and you are almost done.

Link the wave overview and wave details form

The only thing remaining is to link the wave list and wave details page. To do that, edit the Wave list page and edit the grid list


Enter the wave details page in the Select existing page and click done.


Finally publish your new wave status app:


The result…

Now let’s look at the result… Find and download the Dynamics 365 for Operations app on your favourite phone app store. Start by entering your D365O URL and the company you want to logon to.


A list of apps (or rather workspaces) you and other D365O users have made are now displayed. Select your new Wave status app.


The wave list page is now displayed


It’s possible to search on all the fields in the list – e.g. search for all rush waves:


If you click on one of the waves –  the waves details page will be displayed.  Notice the Actions  button. When you click that, the release action is displayed. And it worked as expected when I tested it – the wave was released – just as if I had done it from within D365O.


I did however have some trouble with the wave details page. As you can see only some of the field values were displayed. Every now and then no field values were displayed.

What to make of this?

From my point of view we’re witness to a “stealth revolution” here. The mobile app for D365O together with powerapps and flow will seriously affect how ERP solutions will be delivered going forward. Sure these new tools are still in the making and will need time to mature. But it seems clear already now, that they will challenge us consultants to expand our “toolbox” to a broader set of tools. Many issues we would previously have solved with customizations in D365O will now be replaced by app building, flow and powerBI.



Consolidate item leftovers in the warehouse — October 12, 2016

Consolidate item leftovers in the warehouse

Sometimes warehouse workers find themselves in a situation, where they have a small quantity of an item that they want to consolidate with a larger quantity on another location. It could be item samples in a quality area or leftover raw materials in the production area, that needs to be returned to a bulk area – preferably to a location where the item is already located. It could also just be misplaced items in the warehouse that you’d want to move to their correct location.

In these situations the worker would need help to move the leftover items to a location where the item is already stored.

Using the mobile device to find the existing quantity

Fortunately AX has a nice function that will help the worker with just that. Before I get into the details with the setup, I will show you the process first. Note that the example below is from the new Dynamics AX, but the setup and process is the same in AX 2012 R3 (from CU9 and up I believe).

So in my example we have a leftover of 22 pieces of item BILAR002 on location BULK-090. The warehouse worker wants to consolidate this leftover with an existing pallet if possible. From the on-hand form you’ll see that a pallet exists at location BULK-021 – but the warehouse worker has no knowledge of that.


The warehouse worker activates a new Consolidate function on the mobile device:


First he scans the leftover license plate:


The mobile device will  now present a somewhat redundant pick window – that you’ll just press OK to.


The mobile device now proposes to put the items on location BULK-021, because  item BILAR002 is already on stock on that location:


If you just press OK in form above, then the LP-LEFTOVER license plate will be moved to location BULK-021. In that case, the end result would be that location BULK-021 would contain two license plates: LP-LEFTOVER with a quantity of 22 and LPBILAR002 with a quantity of 99,955. You can however consolidate the two license plates too by pressing Override LP:


And now the end result is that item BILAR002 is consolidated at both location level and License plate level on location BULK-021:


The consolidate strategy is your friend

The function used to perform the Consolidation above is the Movement by template function, combined with a location directive setup with a Consolidate strategy.

Here’s the location directive with the consolidate strategy:



You also need a work template:


And finally the consolidate menu item setup as Movement by template:


If you’re working with batch controlled items you typically want to consolidate at the batch level also. Meaning you want the system to propose the location where a pallet is stored with the same item AND batch id. The consolidate directive does not support that. It should however be a fairly simple task to extend it to the batch level. You are welcome to contact me if you want help with that.

You can find more information on Movement by template in these links:



“Registration requirements” parameter is not compatible with WMS — September 29, 2016

“Registration requirements” parameter is not compatible with WMS

If you’ve worked with AX logistics in older versions of AX, you may know the Registration requirements in the inventory model group form. This parameter has been around since XAL. It will force all items to be received in a Item receive journal (or the registration form), before the product receipt is posted. It used to be best practice to tick this parameter in projects with item receipt process.


This Registration requirements parameter will however –  NOT work with the new WMS module. If you tick this parameter you will expericence that change of inventory status and pick/pack/load processes can be blocked.

The mobile device will give you an error message along these lines: “Quantity 70,00 cannot be received because inventory transactions with status Registered are insufficient”.   See examples below:

Change of inventory status is not possible due to “registration requirements” parameter

And here ‘s an example from a packing operation

Closing a container is not possible due to “registration requirements” parameter


So make sure you untick this parameter for items that are WMS controlled.

There may be similar issues with “Picking requirements” parameter. I’m not sure about that.

Customization not working on the mobile device? — September 22, 2016

Customization not working on the mobile device?

If you ever experience that a customization is not working in the browser version of the mobile device, but works in the internal AX version of mobile device, then start by making a full CIL compilation and restart the IIS.

If it’s still not working in the browser version, then try to give the AX user – used by the IIS/WMDP – the system administator role. This last thing has done the trick for me, when full compilation and IIS restart did not fix it.



Understanding on-hand and reservations for WMS controlled items — May 10, 2016

Understanding on-hand and reservations for WMS controlled items

If you have worked with the WMS module introduced in AX 2012 R3, you may have struggled with understanding the on-hand form in AX. Especially the reservations in the on-hand form tends to create some confusion among AX users… and consultants 🙂

Some of this confusion comes from the fact that AX supports reservations at both warehouse level and at location/license plate level and these reservations serve different purposes and have different consequences.

In this post I will walk through the basic order and warehouse transactions and discuss the effect on the on-hand form with focus on reservations. If you have never worked with the on-hand form before, you can find a basic introduction to the fields here:

Important note: The example in this post is based on a batch controlled item with batch dimensions setup below location in the reservation hierarchy. Items setup with batch above location will behave differently in regards to on-hand and reservations. Going into details about that will require a separate blog post…

 A simple example…

To illustrate how the various transactions affects on-hand and reservations I will use a simple example with one sales order and one purchase order and follow the items through the warehouse.

I have created a purchase order …

01-purchase order

… and a sales order

02-sales order

The sales order has been reserved against the items ordered on the purchase order. In the on-hand form it looks like this:


The purchase order can be seen in the Ordered in total field, and the 1000 reserved from the sales order in the Ordered reserved column.

If you have worked with earlier versions of AX there should be no surprises so far.

On-hand after Item receive

Now the item is received on 3 pallets with license plates LP01, LP02 and LP03. All 3 pallets with batch B01.

If you open the on-hand form now and only display on warehouse level it’s easy to see the effect of the item receipt. 1200 is now registered as physical inventory, with 1000 being physical reserved to the sales order, leaving 200 available physical for other sales orders:

04-onhand after item receive

If you activate the batch dimension in the on-hand form, the result looks slightly different:

05-onhand after item receive-batch level2

Note that the Physical inventory is now displayed at the batch level, instead of the warehouse level. This is because AX will display the physical inventory at the lowest possible storage dimension selected in the form. In this case it’s the batch level.

Another important thing to learn from the picture above is that the sales order reservation of the 1000 is only displayed at the item/warehouse level and not at the batch level. This is because sales order reservations are only performed at the item/warehouse/inventory status level. Sales orders are not causing reservations at more detailed storage levels like batch (unless batch is setup for batch above location in reservation hierarchy), location and license plates. And that is actually a nice thing for warehouse operations – not having sales to dictate which location, license plate etc. should fulfill a particular sales order.

Lesson: Sales order reservations only reserves at item/warehouse/inventory status level and not at detailed storage levels like location, batch or license plate.

If you activate location and license plate storage dimensions, the on-hand form looks like this:

06-onhand after item receive-license plate level


First thing to notice is the Physical inventory is now displayed at the license plate (pallet) level.

The next thing to notice is the Physical reserved field. The sales order still has a reservation of 1000 at the item/warehouse/inventory status level. But there’s now 500+500+200 reserved on license plate LP01, LP02 and LP03. These reservations are caused by putaway work created when we received the items. The putaway work states that the pallets must be moved from the RECV location to a location in the warehouse.

The license plate reservations are different by nature than the sales order reservation and have different consequences. The license plate reservations have no effect on the physical available quantity on the item/warehouse/inventory status level. So it’s still possible to reserve the remaining 200 physical available to another sales order, even though 1200 seems to be reserved at license plate level.

Lesson: Putaway reservations from pending putaway work will not affect/block sales order reservation

It is however not possible to release a sales order while items are still reserved to putaway work. So you will need to put the items in the warehouse before sales orders can be released to warehouse and pick work can be created.

Lesson: Putaway reservations from pending putaway work will block for release of sales order to warehouse.

One final note is regarding the Physical reserved column. As opposed to the Physical inventory you can never calculate a the total physical reserved for an item by summing the values in the Physical reserved column. This is not possible because reservations at different storage dimensions are not comparable.

Lesson: Never summarize reservations across different storage dimensions.


On-hand after putaway

Now the items are putaway to locations in the warehouse. If you open the on-hand form with warehouse, location, batch number and license plate displayed, the form looks like this:

07-onhand after putaway

From the form you can see that the three pallets have now been placed at location FL-004, FL-005 and FL-006. You’ll also notice that all putaway reservations have been removed. Only the sales order reservation of the 1000 remains.

At this stage the warehouse can move the pallets around in the warehouse, because a reservation only exist at the item/warehouse level.

Lesson: Sales order reservations do not prevent movement of items within the warehouse

Note that the Available physical on the license plate LP01 and LP02 is only 200. This is because the total available on the item/warehouse/inventory status level is 200. This overrules the 500 on the license plate. If you try to change the inventory status on the pallet LP01 from available to blocked you will get error because only 200 is available physical and the license plate qty is 500. But if you try the same with pallet lp03 you will be able to change the inventory status because the complete license plate quantity (200) is available physical.

A final important thing to observe is that you can’t calculate the total physical available by just summarizing the Available physical column. If you do that in the above example you’ll get the faulty impression that 800 is physically available, where the correct answer is 200.

Lesson: Never summarize the Available physical column


On-hand after release to warehouse

The sales order is now released to warehouse and work is created:

08-pick work


The effect on the on-hand form:

09-onhand after release to warehouse


Two new reservations from the pick work is generated against locations FL-004 and FL005. Note that the reservations are not generated against batches or license plates. The warehouse worker is free to pick any license plate/batch found at the location.

Lesson: Pick work generates reservations against pick locations, not license plates

The pick work reservations on the locations has the effect/consequence that it’s not possible move the items on these locations around anymore. This is a known limitation in the new warehouse module – that can be a hassle especially for staged items – but that’s another post.


On-hand during pick of items

Now the warehouse worker 24 arrives at the first location and picks up the first pallet. If you open the on-hand form now you’ll see that that pallet LP01 has been moved to location 24. The pallet will remain here until pick work has been completed. Location 24 is special warehouse worker location. All warehouse workers will have location named after their worker name. These locations are used to hold items picked to work but not yet put

Lesson: During pick (and other) work items will be placed at a user location.

10-onhand during pick2



On-hand after pick

When all pick work has been completed the on-hand only contains the remaining quantity of 200. The 2 empty lines for license plate LP01 and LP02 will disappear when the packing slip is posted.

11-onhand after pick2



Tips to improve the AX 2012 mobile device experience — April 17, 2016

Tips to improve the AX 2012 mobile device experience

In the AX 2012 warehouse management module, most processes are executed using a mobile device (aka rf scanner).

In this blog I will go through a couple of tips to improve the mobile device experience.

Setup colors for error and confirmation messages

To help warehouse workers quickly distinguish between confirmation messages and error messages you can setup different colors for errors and confirmation messages respectively.

Open the mobile device text color form (Warehouse management > Setup > Mobile device > Mobile device text colors). Select an appropriate color for error, success and warning messages.


Here’s an example of a confirmation and an error message with green and red color respectively:



Remove top margin on mobile device forms

If you are working with older RF devices with small screens you will quickly be annoyed by the large default top margin on the mobile device forms. In the example below the yellow area is “unused” top margin area.


To remove the top margin area, you need to edit the style sheet. The standard style sheet can be found using the internet informations services manager:


The default stylesheet is defaultrf.css:


Take a copy and change the top margin from 80px to 10px to remove the top space:


Open the work user mobile device display settings form (warehouse management > setup > mobile device > work user mobile device display settings). Change the default style sheet to the copy you just edited.


Now reopen the mobile device browser form and the top margin has been reduced:


Disable autocomplete

Most browsers offer to remember values previously entered in forms. This is a nice feature in “normal” web browsing situations, but in warehouse processes this is a dangerous feature.

In the example below the browser proposes the previous batch number when the user starts entering a batch ID. Not ok…


You will therefore want to disable this feature ASAP. Different browsers have different setup but for internet explorer you can find it under Content / Autocomplete:


Keyboard shortcuts

If you have a mobile device with a keyboard, you can assign function keys (or any other key) as shortcuts to the mobile device buttons displayed on the screen.

Open the work user mobile device display settings form (warehouse management > setup > mobile device > work user mobile device display settings). Insert the shortcut as displayed below.


The result is that you can now use F3 button as a shortcut to cancel any operation on the mobile device – and F2 as a shortcut to the full button.


You can find more info on keyboard shortcuts in this Microsoft blog:

Other tips

Mobile devices can be setup to perform an automatic carriage return whenever a scan has been performed. Find that setup on your mobile device and activate it. This will make the scanner jump to next field when a successful scan has been performed.


SSCC support for license plates and containers in AX 2012 R3 WMS — November 14, 2015

SSCC support for license plates and containers in AX 2012 R3 WMS

In many industries the SSCC barcode is used to label shipping pallets/cartons. The SSCC barcode is a globally unique identification of your shipping pallet/carton. AX 2012 R3 has some support of SSCC, but this area is not that well documented. Furthermore the AX SSCC support is limited to license plates. The container entity in AX is not SSCC supported.

In this post I will go through the SSCC functionality in AX and also discuss how SSCC support of containers can be obtained.

Edit: After Publishing I found this nice – somewhat related blog –  that gives some more details on the license plate part.

What is a SSCC barcode?

A generic SSCC barcode looks like this:

sscc label

The SSCC barcode is composed of 5 elements:

  • The Application identifier: Always 00 to identify the barcode as an SSCC barcode
  • Extension digit: Can be used freely by the company issuing the SSCC ID
  • GS1 company prefix: Your company’s GS1 organization prefix
  • Serial number: The serial ID of the shipment unit
  • Check digit: Is a calculated one-digit number used to ensure data integrity.

You can read more about the SSCC standard here:

License plates and SSCC

A license plate id in AX is actually a SSCC barcode, provided the WMS parameters are setup correctly. In the example below you can see a license plate that been generated by AX. A closer look reveals that it consists of the 5 SSCC elements:

license plate

The first SSCC element – the Application identifier – is the two zeroes at position 1 and 2 in the license plate. There is no setup in AX related to the application identifier – it’s “hardcoded” that the two first characters of a license plate are zero.

To me it’s a bit surprising though, that the application identifier is included in the license plate. Normally the application identifiers are only used to identify the type of value that’s being scanned. If you scan a batch id in a GS128 barcode, you would not store the batch application identifier in the batch field. It would be stripped from the actual batch code during the scan process.

The advantage of storing the application identifier in the license plate is that you will be able to scan the SSCC barcode without having to strip the application identifier during scan. Perhaps that’s why Microsoft chose to include it in the license plate. But if you plan to forward the license plate in an ASN (with the application identifier included) – you might be in trouble if the receiving part is stripping the application identifier in their scanning process.

SSCC related setup in AX

The second SSCC element – the extension digit at position 3 – is fetched from the field License plate packing type in the Unit of measure group.

packing type

The third SSCC element – the GS1 company prefix – is setup under warehouse parameters:

gs1 prefix

The fourth SSCC element – the serial number – is drawn from the license plate number series setup from the Warehouse parameters

number seq

Because the GS1 company prefix in this example is 8 characters long, I have set my license plate number series length to 8. I do that because the GS1 company prefix and the serial number must always be 16 characters long. Had my GS1 company prefix only been 7 characters– then I would have set my license plate number series to 9 characters.

number seq2

The fifth SSCC element – the check digit in the end – is calculated by AX. No setup is required for that to be calculated.

License plates or containers?

If you do the picking directly in the shipper carton, then the target license plate is a good choice to represent your shipment unit. But for many other pick/pack processes, the license plate is not the best suited entity to represent the shipping unit.

If e.g. several warehouse workers pick items for the same customer order/shipping pallet, you would have at least 2 target license plates – one for each pick work. In that situation there’s not a 1 to 1 relationship between the license plate and the shipping pallet. In that case you need some other entity to represent your shipping unit. A possibility is to setup containerization to generate a container to represent the shipping unit. Or if you – at the time of picking – do not know how many shipper cartons you need – then you can use the pack window to create the required number of containers. If you want to know more about packing with containers – Microsoft has written some nice blogs on containerization and the pack window.

So for many pick/pack processes, the container is a natural choice to represent the shipping unit. It’s therefore surprising that containers do not have SSCC support. The container id is just a plain number without the SSCC check digit.

Adding SSCC support for containers

It is however easy to add SSCC support for containers. Basically you just need to copy/modify the generateLicensePlateidNoItem method that generates the SSCC license plate id:


The modified containerversion could look like this:


Now all you need to do is to trigger the new SSCC calculated container ID when the container is created. The result is container ID’s that are in fact SSCC barcodes, like you see below.