An item can exist in multiple counting journals

New functionality that allows an Item to exist in multiple count journals.

It might have been a long while since I last blogged, but it’s been even longer since I had to fight with counting journals in Dynamics AX. Never the less, I spotted something count related in the December 2017 release of R3 that piqued my interest.


This hotfix is related to count journal functionality in the inventory module, not Cycle count work in the Warehouse module. And the last time I used count journal functionality in anger, I encountered two commonly known limitations:

  • An item can only exist in one open count journal*
  • A single count journal can only be opened by one user
* stictly speaking, you can count the same item in different journals, but only if you are counting it in different warehouses.

These two limitations pose quite a problem when counting a warehouse that contains several thousand locations. You’d want to create multiple journals (perhaps one per warehouse aisle or area) so that you can spread the data entry burden across multiple people, but you can’t do that if there’s a chance that some items might appear in different journals. In fact, unless you modified the behaviour, you ended up with one very large count journal, and dozens of count teams standing around whilst the poor system administrator punched in all the counted quantities.

I took a look in a test environment to see if this hotfix offers a solution to this problem….

The new functionality surfaces through a new Counting status registration policy parameter on the Journal name setup form:

Journal name setup form

The help text for the new field is long, and reads: Use this setting to control if counting should be registered as started for items on the journal lines. When enabled, an item with identical dimension values can only be included within the same counting journal. If disabled, counting will not be registered as started for warehouse items and an item with the same set of inventory dimension values can be included on any number of counting journals.

So the new functionality is active when the Counting status registration policy is set to Disabled. And after adding an item to an appropriately configured count journal, I find that the Counting started parameter on the Warehouse items form does not become ticked:


If I create another count journal, I am able to add the same item, and both journals can be posted without error. Certainly it solves the problematic scenario I described above.

Of course, you do have to be careful not to make the same count adjustment in multiple journals. For example, in Location 11, I have found one more of the item than AX expected.


If I post this result in both journals, AX actually increases the On-hand quantity from 1.00 to 3.00!


Despite this, I’d rather have the option to make that mistake than be forced to do the whole count in a single journal.

Note that I tested this in an environment that also included hotfix KB4093686, which is included in the February 2018 release of R3:


Links to both hotfixes on LCS: KB4057006 and KB4093686

Changing Reservation hierarchy when tracking dimensions are involved

A review of KB4022327, which allows the Tracking Dimension Group and Reservation Hierarchy of an item to be changed.

The Reservation hierarchy in Dynamics AX is the thing that enables two-level inventory reservation. Essentially, we get to choose if we want to reserve inventory at Batch and/or Serial level, or not. Once set, changing a Reservation hierarchy has been particularly difficult, especially because often this is being done in combination with a Tracking Dimension Group change.

I knew for an upcoming project that I was going to need to change Items that were set as Batch-only to become Batch & Serial enabled. I had already dabbled with it, and found that you hit a catch-22; you can’t set a serial-enabled Tracking Dimension Group if your item has a Reservation hierarchy which does not have Serial in it…. and, well, the periodic job that exists for changing an item’s Reservation hierarchy did not seem particularly interested to do that for item’s which already have a Reservation hierarchy. (Rather, it worked for items which did not. This might be fine if you’re enabling warehouse management functionality in an environment for the first time, but was no good for me).

It was whilst reviewing a list of recently released hotfixes (as I’m sure you all do) that I spotted KB4022327: ‘You cannot change Tracking dimension group (and Reservation hierarchy) for WHS enabled items’. It’s like it was written for me; how did they know! Although it was released in May, I only just got round to checking it out.

After installing it, I rushed to change the Tracking dimension group of one of my items, and find I am presented with an updated error message:

'use the Change tracking dimension group for items periodic task'
‘You can change the tracking dimension group and reservation hierarchy simultaneously by using the ‘Change tracking dimension group for items’ periodic task’

Change both the Tracking Dimension Group and the Reservation hierarchy at the same time? You spoil me! But where is this periodic task? It’s been added in the Warehouse module (alongside the ‘Change item hierarchy’ job), and you’ll now also find both of these jobs in the Product Information Management module:

The 'Change tracking dimension group for items' periodic job.
The ‘Change tracking dimension group for items’ periodic job.

Opening the job reveals this shiny new dialogue:


There are some things that you need to do in preparation for running this job. Things that you would have to do anyway when you change a significant property of a Tracking Dimension Group….

  • You need to make sure that the Products (which are linked to your Released products) do not have a Tracking Dimension Group set. If they do, you can just remove it from the Product.
  • You’re going to need to remove all inventory for the items. After doing that, you might think about doing an Inventory close (and therefore, when you do this for real, you might need to do it at a period end).
  • The job will error if you have any open reservations. When you removed all inventory of the items, you would needed to remove all reservations anyway.
  • The job will error if you have any open receipt transactions. It’s odd that I’m allowed to make this change if I have open sales orders, but not if I have open purchase orders. The very first link I posted at the top of this post says, in relation to changing a Reservation hierarchy, ‘all items must be purchased or sold’. If you decide to leave open sales orders, I suggest that you test that they can still be released/picked afterwards.

After doing these things, the job worked for me on my test items. One less headache to worry about.

Cancel ‘Product receipt’ and ‘Packing slip’ in WHS Scenarios

Functionality to Cancel Packing Slips and Product Receipts has been introduced to AX 2012 R3 and Dynamics 365 for Operations

AX 2012 introduced functionality to allow amendments to or cancellations of posted Sales order Packing slips (Delivery notes) and Purchase order Product receipts.

Correct / Cancel a posted Packing slip
Correct / Cancel a posted Packing slip

The functionality was an improvement over the solution available in AX 2009 and earlier, which was to create an order line for an equal but opposite quantity and post that on another packing slip, effectively reversing the earlier posting. As if to to confirm the that new functionality was the correct way to handle adjustments to posted packing slips and product receipts, the ability to reverse the posting using the AX 2009 method was removed in AX 2012.

This was all fine, until the release of AX 2012 R3 and the Warehouse management module. The functionality to Cancel or Correct Packing slips and Product receipts did not work well in scenarios which involved Warehouse management processes (with Loads, Shipments and the like), and with the release of CU9 the functionality was actually prohibited in these cases.

Unable to Cancel/Correct Product receipts and Packing slips in WHS scenarios
Unable to Cancel/Correct Product receipts and Packing slips in WHS scenarios

The good news is that Microsoft have reintroduced the functionality to WHS scenarios with CU12 – and you can get it now via hotfix KB3196554. I installed it into my R3 CU11 demo VM so that I could take a look.

It wasn’t immediately obvious how I could take advantage of the new functionality, so I extracted the contents of a model which had ‘KB3196554’ in the name:

Contents of the KB3196554 model
Contents of the KB3196554 model

The changes to the WHSLoadTable form looked the most promising; three new buttons on the ‘Ship and receive’ tab on the ribbon bar of the Load:

The 'Reverse' area on the 'Ship and receive' tab of the 'All loads' list page
The ‘Reverse’ area on the ‘Ship and receive’ tab of the ‘All loads’ list page

A maximum of one of these buttons will be available at any time, depending on which action is appropriate for the direction and status of the Load which you have highlighted. And you’ll also notice that it is now possible to Reverse the Confirmation of a Sales order Shipment (although it is still not possible to do that for a Shipment linked to a Transfer order).

After a quick look at the functionality, it seems that if you want to cancel a Sales order packing slip, you must do it from the Load; which is fine, because all Sales orders have Loads (even if you aren’t particularly using the Load functionality). However, you can also cancel a Purchase order Product receipt from the Product receipt journal, which is good, because the use of a Load is optional for Purchase order receipt.

The functionality in this R3 hotfix is also included in the November 2016 update for Dynamics 365 for Operations.


GRNI (Accrued purchases) Report

In the U.K., a report to show Goods Received Not Invoiced (GRNI) seems to be a common requirement. Dynamics AX 2012 has an Accrued purchases report which fits the bill, but unfortunately this report has been enabled only for legal entities operating in the USA and Canada. As a workaround, I have been known to suggest using appropriate filtering on the the inventory transactions table, but this did not stop at least three projects I have worked on requesting that we enable the real Accrued purchases report.

Microsoft have provided a short example of how it is possible to remove the regional restriction on this report, but I recall the date field on the dialogue box also needed modifying to recognise dates in the UK format, so I think that this example could be a bit lacking.

Luckily, all of these problems are resolved by a hotfix that was released at the end of April for Dynamics AX 2012 R3. The hotfix is KB 3160455 and is titled ‘Accrued purchase report can be available for all countries’. I installed it into my demo VM so I could take a look at it.

The country/region restriction on the report is now completely removed, and I also see that it has a new name – ‘Accrued purchases excluding sales tax report’:

The menu item of the Accrued purchases report
The menu item of the Accrued purchases report

Unfortunately, ‘sales tax’ is normally translated to ‘VAT’ in the en-gb language, but if the report works, I think I’ll forgive that. The appearance of the report’s dialogue box has not changed, and offers the option to exclude receipts which have not been recorded in the ledger:

Accrued purchases report dialogue box
The dialogue box of the Accrued purchases report

It seems to be happy with the UK formatted date that I give it. The output itself looks like this:

Accrued purchases report
The Accrued purchases report

And at the bottom of the last page, there is a grand total.

Comparing it to the output from the report in an R3 CU8 system that I have to hand, it seems that one column ‘Value of line of PO’ has been removed, but otherwise the output is the same.

How would you like to double the number of DIXF entities you have?

A colleague pointed me to a hotfix that will be released in AX 2012 R3 CU10. The hotfix is KB3061216 and is called ‘Support for new DIXF entities’. The hotfix description lists fourteen AX modules and shows the number of new entities in each module; in total 226 new entities. But it doesn’t tell you what the new entities are. I only knew one way to find out, so I installed it into my R3 CU9 Demo VM.

Since I wanted to know which entities were new, first, I dumped a list of the entities that I had in CU9 into Excel; 238 in total. And then I installed KB3061216. And after completing the software update checklist, I rushed to the ‘Target entities’ form and hit the Export to Excel shortcut. And I still had 238 entities. Hmm. Not what I was expecting. Perhaps the list needs refreshing. I looked around for an option to do that, but couldn’t find one. What if I delete them all, and then re-open the Target entities form? Worth a try – and that did it. Now I have 467 entities.

That’s a whole 229 new entities. Actually, I did some comparisons and found that two of the entities in CU9 had disappeared – ‘VendPaymFee’ (Payment fee in the A/P module) and ‘Terminals’ from the Retail module. So that’s 231 new entities. What are they all? To save you the bother of installing the hotfix to find out, I’ve attached an Excel list of all 467 entities.

Entities KB3061216

In the list, the lines in green are entities that were added by the hotfix. I don’t know if any existing entities have been extended – I took a look at the Product entity and it appeared that it had not been. Let me know in the comments below if any entities you’ve really been waiting for have been added.

Power BI comes of age

Earlier in the year, I took a look at Power BI, and tried to find out what it could do with AX data. My ambition was to use Power BI’s natural language search to build reports on AX data. Natural language search (called Q&A in Power BI) allows you to create reports by typing english sentences – such as ‘Sales by Month’.

In the end it didn’t go quite as well as I’d hoped. I couldn’t get the website to look at my on premise SQL database, and I couldn’t get it to look at the standard AX Cubes. But the post did end on an optimistic note – support for the functionality I was looking for was either in development or being planned.

Since then, Power BI has come out of Beta. And it has had lots of updates; specifically, the Power BI Personal Gateway, which allows you to connect to your on-premise SQL database. (I still can’t connect to the AX cubes – that work is not yet finished). So with my AX 2012 R3 CU9 Demo VM, I thought I’d take a look at it in action.

The link above describes how to install the Power BI Personal Gateway, but the first thing I notice is that the Personal Gateway is only available if you have a Power BI Pro subscription. This cost £9.99/month, and will be required for whoever create the reports, and anyone who views them. Its not loads of money, but I don’t particularly want to spend anything for this exercise. Luckily, a free 60-day trial of Power BI Pro is available, so I’ll go for that. To download the Personal Gateway, I login to and click the Downloads icon in the top right:

Download the Power BI Personal Gateway

There are some limitations about where you can install the Personal Gateway. It must be on a 64bit Windows operating system, and you’ll probably want to install it on a device which is left powered on (at least, in real use you will. For this test, I installed it into the CU9 Demo VM). Whilst running the install, its worth being signed in as a user with Windows Administrator permissions. If you do this, the Personal Gateway will install as a Windows Service, and will run even if no-one is signed onto the computer.

The install is an easy ‘Next’, ‘Next’, ‘Next’, and when its finished you’re asked to sign-in to Use the same login that you used when you downloaded the Personal Gateway, and if you get it right you’ll be asked to provide the windows credentials that the Personal Gateway will use:

Provide the details of a windows (or domain) account

When it’s complete, I’m asked to sign-in to to configure my datasources. We can’t simply go to and ask to connect to our on premise database. First, we have to create a report which uses that database, and upload it to I’ll use Power BI Desktop for this. You can download it from the same place that you downloaded the Personal Gateway. In Power BI Desktop, SQL Server is listed as one of the data sources:

The SQL Server data source

I enter the details which allow Power BI Designer to find my SQL database:

Enter the location of the SQL database

At the next screen, I have to say if I want to use Windows login or SQL login to access the database, and then I’m presented with all the tables (and views) in my AX database. Since I know the views CustTableCube and CustInvoiceTransExpanded are used by the AX cubes, and provides a nice set of data for reporting, I’ve used those to create this report which shows Invoice value by Zip Code in the USMF company:

A map showing sales by zip code

When I’m done, I publish the report to And when I head to, I see I’ve a new Dataset. If I click the three dots next to the Dataset, I’m able to Refresh it, or Schedule a refresh:

Refresh a dataset

When I attempt a Refresh, I am informed that I need Power BI Pro, and asked if I want to create a trial:

Power BI Pro is required

And the first time I refresh, I have to confirm that I want to use Windows authentication:

Confirm authentication

And after that, my data can refresh. I also have the option to schedule a refresh (up to eight times per day), and as long as my Personal Gateway is running, the data will refresh for me. Result!

But can I use natural language to create a report? Sure I can:

A report created by Power BI Q&A

The report above was created by typing ‘Show Value by Customer in a column chart’. I had to add ‘in a column chart’, because it wanted to use a horizontal bar chart, and I didn’t like it. All they need to do now is integrate Cortana, and I’ll be in seventh heaven:

“Cortana, show me contribution by customer group”

And that is not a dream – work has already started. You can even see it demonstrated by Joe Belfiore in the Ignite 2015 Keynote (skip forward to 00:45:30).

This is all very nice, but I live in the AX world. Why should I be bothered? I’ll leave you with one more thought. If you look hard enough, you’ll see news is also coming out about tighter integration between Power BI and the yet-to-be-release AX 7, and that’s enough to keep me interested.

Pimp your AX demo VM

Recently, Microsoft released an updated Demonstration VM for Dynamics AX 2012 R3 CU9. You can find it here on PartnerSource, and here on CustomerSource. For the last VM (CU8), I converted both the Virtual Hard Disk files (VHDs) and Virtual Machine Generation to the latest version supported by Hyper-V. I also made some other tweaks which might help with performance. Doing it again now for the CU9 VM, I thought I’d write down the steps. I’ve put them here for everyone to read, but this is a really long post, and gets quite technical (in a non-AX way) in places. If this doesn’t sound like something you want to do, I’d stop reading now. It might be that I’m the only person who finds this interesting or useful. If that’s the case, at least I’ve got it written down for next time!

The download for the Demo VM is spread over 38 files (each 1GB in size), so go ahead and download those, and come back when you’re finished.

Downloading the VM using File Transfer Manager

Once the downloads are complete, you need to make sure all the files you’ve downloaded are in the same folder, and run the executable:

Run the executable file

Although it opens an InstallShield Wizard, all it really does is unpack one of the 38 files you downloaded (and display a licence agreement, which I assume is the real reason for this step!). It offers to ‘Install’ it into C:\Program Files. I would change it to the location which you downloaded the 38 files to. And once its done, you’ll have two executables in your folder. Now, run the one with ‘part001’ in the name:

Run the second executable to uncompress the files

It will trigger the unpacking of the 38 files, one by one. You can set the same folder you’ve used before as the destination for this step. Be aware that whereever you do it, you need nearly 110GB of free space. It will take a long time to complete – almost as long as it took me to download the 38 files in the first place.

When it’s done, you’ll have a word document, and a folder containing the VHDs and configuration of the Virtual Machine.

The unpacked files

The VHDs are the ‘virtual hard disk’ files used by the VM. They are the VM’s C: and E: drives. C: contains Windows and the applications. E: contains the SQL database files.

At this point, you can delete the file you downloaded called ‘AX2012R3CU9DemoVMA.exe’. You’ll not need it again. You can also delete all of the files with the word ‘part’ in the name. Or, if you think you’ll need them again (maybe you’ll kill this instance of the VM one day, and want to start again), I normally copy them off to an external drive. Either way, we don’t need them now.

Before we boot it up, we’re going to convert the VHD files to the VHDX format. After we’ve booted it up (and made an important change within the VM) we’re going to convert the VM to Generation 2. If you’re hoping to squeeze better performance from your VM because of this, there is a crumb of hope for you. The VHDX format includes support for something called ‘4K logical sectors’. This is something that is only supported in the latest releases of Windows, and offers the potential for a performance increase.

I’m going to use a command line tool to convert the VHDs, and to make it easier, I’m going to move the whole of the AX2012R3A folder to the root of a drive, in this case my C: drive:

The files are moved to C:\

The tool we’ll use is called Convert-VHD, and you need to open PowerShell to run it:

PowerShell from the Start Menu

The command I will use is:

Convert-VHD -Path "C:\AX2012R3A\Virtual Hard Disks\AX2012R3A_OS.vhd" -DestinationPath "C:\AX2012R3A\Virtual Hard Disks\AX2012R3A_OS.vhdx"

If you did not put your ‘AX2012R3A’ folder into the root of the C: drive, you’ll need to modify this. This step will require around 115GB free for the new VHDX files that get created. I have room for them on my C: drive, so I created them in the same place as my VHD files. If you don’t have room, modify the DestinationPath to create them on a different drive.

Put the command into the PowerShell window (hint – Paste is available by clicking the blue PowerShell icon at the top left of the window) and hit Enter:

Paste the command into the PowerShell window

The conversion will begin:

Converting the VHD

There is another command I will run, to set the sectors on the disk to the magical 4K size. The command is below. Just put it into the PowerShell window after conversion is complete:

Set-VHD -Path "C:\AX2012R3A\Virtual Hard Disks\AX2012R3A_OS.vhdx" -PhysicalSectorSizeBytes 4096

Then repeat for the second VHD. The commands are:

Convert-VHD -Path "C:\AX2012R3A\Virtual Hard Disks\AX2012R3A_Data.vhd" -DestinationPath "C:\AX2012R3A\Virtual Hard Disks\AX2012R3A_Data.vhdx"


Set-VHD -Path "C:\AX2012R3A\Virtual Hard Disks\AX2012R3A_Data.vhdx" -PhysicalSectorSizeBytes 4096

You can now delete the old VHD files, but leave the VHDX files alone!

At this point, I’m going to move the AX2012R3A folder to location I want it to live when I’m using the VM. I have a folder in my Documents called ‘My Virtual Machines’ and I’m going to put it there:


I also don’t like the name AX2012R3A, since no doubt the CU10 Demo VM will have the same name, and I won’t know which is which. So I rename it AX2012R3CU9. Finally, I’m not going to use the VM configuration provided by Microsoft. It is the XML file that is in the ‘Virtual Machines’ folder, and I’ll delete it that file. The configuration already won’t work, because it is looking for VHD files (and we don’t have any). It also wants a network card called ‘AX2012R3’, and that isn’t what mine is called.

Instead, we’ll create a new configuration now. But first, we need an Internal network card to give to the VM. Open Hyper-V Manager, and then ‘Virtual Switch Manager’. (If Hyper-V Manager is not installed on your PC, you can add it by ‘Turn Windows features on or off’). If you already have an ‘Internal’ switch, that’s fine. If not, hit ‘Create Virtual Switch’. Call it ‘Internal’, and set the type to ‘Internal network’ then click Apply and OK.

Create a new Internal switch

Now we’re ready to create the VM. Click ‘Action’ -> ‘New’ -> Virtual Machine. Run through the Wizard. I’m going to call mine ‘AX2012R3CU9’, and I specify I want to save it in my ‘My Virtual Machines’ folder that I created:

Specify the location for your VM

On the next screen, select ‘Generation 1’. This is very important. You might think we can just go ahead and create a Generation 2 VM now. We can’t. The boot disk is not configured for Generation 2 and it won’t boot. On the next screen, give it as much RAM as you can afford. It wants 24GB (24,576 MB). I only have 16GB in my laptop, so I can’t give it that. I give it 12GB (12,288 MB). At ‘Configure Networking’, give it the Internal switch that you have. At ‘Connect Virtual Hard Disk’, choose ‘Use an existing..’ and point it to the VHDX for the OS:

Attach the hard disk for the operating system

Then we’re done. Well, not quite. But we’re done with the Wizard. But we still need to add the second VHDX file. Select your new VM, and choose ‘Settings’. On ‘IDE Controller 1’, there is a DVD Drive. I don’t need that, so I’ll Remove it and hit Apply:

Remove the DVD Drive

On IDE Controller 1, I then add a Hard Drive. I point it at my Data VHDX, and click Apply:

Add the Data Hard Disk

When I’ve added the second Hard Disk, I’m ready to boot up the VM. Close the ‘Settings’ window, and Start the VM.

Once it has booted (and after you’ve logged in), I suggest going to Control Panel -> Network and Internet -> Network Connections, and re-naming the connection that exists to ‘Internal’. Later, I add an ‘External’ card, and knowing which is which might be useful one day. Whilst we’re in here, check the IP address that the Internal adapter has. If it begins with 169., it’s not got the right address. There’s a utility in the root of C: drive on the VM which will fix that. Browse to the utility (it’s called setnetworkip), right-click on it and choose ‘Run with PowerShell’. The utility will look for network adapters with an address in the 169. range and assign the correct address (in the 10.20.12.x range) to it. The network adapter should remember the address it’s been assigned, so you shouldn’t need to run this utility again.

Now at this point, we start the conversion of the VM to Generation 2. Generation 2 VMs are only supported by Windows 8.1 (or Windows Server 2012 R2, and I assume Windows 10). If you don’t have Hyper-V running on those operating systems, don’t do the conversion to Generation 2 part of this blog post.

We’re going to use a utility that can be found here, on Part 10 of a blog post written by a Microsoft program manager on the Hyper-V team. On Part 8 of that blog, he describes that we have to disable something called the ‘Recovery environment’ on the Demo VM. You’re already logged into the Demo VM. Open Command Prompt as an Administrator:

Open the command prompt as an Administrator

Enter this command to disable the recovery environment:

reagentc /disable

Hopefully I’ll remember to enable that again later, after we’re done. Now, we’re ready to start the conversion, so shutdown the Demo VM. If you do it right, Hyper-V will report the ‘State’ of the VM as ‘Off’. Once that is done, close Hyper-V Manager.

Now you need to download a utility called ‘Convert-VMGeneration.ps1’. You can get it from Part 10 of that blog. I save it to the root of C: drive.

The utility will copy the OS VHDX into a VHDX which is formatted for Generation 2. To do this, it needs to create an image of the Generation 1 VHDX file. That means at one time it needs three times the space of the OS VHDX. I don’t have enough space for that on my C: drive, so I use a parameter (the ‘WIM’ parameter) to tell it to create the image on my D: drive. I have space on my D: drive, and when the utility is finished with the image it will delete it. So my command to launch the utility looks like this:

.\Convert-VMGeneration.ps1 -VMName AX2012R3CU9 -Action All -Path "C:\Users\guy.terry\Documents\My Virtual Machines" -WIM D:\temporary.wim -NewVMName AX2012R3_CU9

I’ve told it the name of the VM I wish to convert, and I’ve told it the ‘Path’ to put my new VM in. The ‘WIM’ parameter tells it to temporarily create a file on my D: drive, and the final parameter is the name of my new VM (it has an underscore in it to differentiate it from the old VM).

Again, we run the utility in PowerShell, which you open as an Administrator. Use this command to move to the root of C: drive (which is where I saved the utility):

cd /

Then paste in the command:

The utility is ready to be launched

When it starts, there is a lot going on very quickly. You might notice Windows Explorer opens, with some odd drive letters. The utility has mapped the Demo VMs drives – it’s nothing to be alarmed about. After that though, it stops, waiting for your input. It is telling you that it is about to erase the data on a disk, and wants you to check its got the right one. It has created a new disk for your Generation 2 OS VHDX and wants you to check that this is the disk it is erasing. In my screenshot, it says it will erase Disk 3, and that I should open Disk Management to check what Disk 3 is:

Check before you let it erase a disk

You’re on your own at this point. If it has got it wrong and you lose something important, I can’t help you. If you’re not comfortable, answer ‘N’ and skip this part of the blog. I checked in Disk Management and I can see that all my important data is on Disk 0 and Disk 1, so I answer ‘Y’.

After some time (I think more than an hour), the utility reports that it is finished:

The creation of the Generation 2 VM is complete

The new VM appears alongside the original in Hyper-V Manager. I have to do a little tidying. I delete the original VM. The utility has only converted the boot disk. The E: drive is attached to the new VM, but in its old location. So I remove the second disk from the VM, move the Data VHDX file to the location I want, and then add the second disk back to the VM. I also give the VM 4 processors, instead of 1.

When the VM has booted, remember to open the command prompt as an Administrator and re-enabled the Recovery Environment:

reagentc /enable

If you were skipping the ‘Convert to Generation 2’ part, this is where you pick up again, because unfortunately, we’re not done there (although you should find AX works fine, and you can use the VM). The VM Profile Manager makes a welcome return in the CU9 Demo VM, and by default it is set to give you the full demo experience. Personally, I don’t need any of the Retail POS stuff, so I open the VM Profile Manager, and on the ‘Settings’ tab I set the profile to ‘Minimum’.

Shut down the VM, so that we can check the VM Profile Manager loads a smaller set of applications when we re-boot. But whilst it’s shut down, I create a second switch in ‘Virtual Switch Manager’. This time, it’s an external one, and will allow the VM to communicate to the internet. When you create the switch, select whichever network adapter you want it to use to access the internet. I normally choose my wireless adapter, since it is much more likely that I’ll have a wireless connection than a cabled one. Add this new ‘External’ adapter to the VM, and power it up.

This time when I boot, I can see a whole bunch of windows services (e.g. ten with Retail Commerce Data Exchange in the name) which haven’t started. Good! Go to Control Panel -> Network and Internet -> Network Connections and rename the new network connection ‘External’.

I think we’re nearly done now. I do one more thing, which may help with performance. There are a couple of SQL Trace Flags I like to turn on. They are T4136 & T4199. If you want to know why I turn them on, look here. To enable them, open SQL Server 2014 Configuration Manager. On the left, click on ‘SQL Server Services’. On the right, find ‘SQL Server (MSSQLSERVER)’. Right-click on it and choose ‘Properties’. Head to the ‘Startup Parameters’ tab. Use the ‘Add’ button to add each flag in turn, using the exact format shown in the screenshot (a dash in front, and no spaces):

Add the SQL Trace Flags

They’ll take effect the next time you reboot the VM.

So that’s pretty much it. There are other things I do, which I won’t write about here. You might put the latest SQL service pack and CU on (SQL Server 2014 RTM is on the VM). You might install the latest windows updates. I set the Time Zone and other language settings in Windows to United Kingdom. I turn off a lot of stuff in the AX Licence Configuration that I will never use (like some Russian functionality, US Payroll stuff, the Public sector functionality) or functionality that barges its way onto many forms (e.g. Catch weight). You might also want to think about disabling WMSII (since it’s not supported with Warehouse management).

Well, that was far too long a post. Its my notes for the next time I do this really, but if it helps one or two others then that’s even better.