Dynamics 365 for Finance and Operations (D365FO) has basic support for Vendor Managed Inventory (VMI) in the form of Consignment replenishment orders.
From a warehouse perspective, there are however some serious limitations to consignment replenishment orders. In this post I discuss how you can overcome some of these limitations using Powerapps and Electronic Reporting.
VMI warehouse limitations
The main problem with consignment replenishment orders is that VMI items can only be received in non-warehouse management enabled warehouses. That’s a problem – because it forces you to have all your “normal” items in one (warehouse management enabled) warehouse and your VMI items in a separate non-warehouse management enabled warehouse.
This has serious implications for all processes where you would want to use your VMI items, including replenishment, raw material pick, sales order picking etc. All your normal scanner supported warehouse processes will simply not work with VMI items.
VMI replenishment pain points
In my company, a significant part of the raw materials on production sites are sourced as VMI items. So the primary warehouse process “suffering” from VMI items is the replenishment process to the production staging area.
The fact that VMI items must be kept in a non-warehouse-management enabled warehouse leads to the following two pain points:
- Zone replenishment can not be used to trigger and calculate the replenishment of production staging ares
- The actual picking of the VMI items can not be done using scanners, but must be done by entering inventory ownership change journal and subsequent transfer journal
On the site I’m currently working on, we have 3 production buildings that are regularly replenished from the same VMI area. Zone min/max replenishment would therefore have been the right thing for us, because each of the 3 production buildings are separate zones with individual min/max thresholds.
We ended up solving the first paint point with an Electronic Reporting based workaround that simulates zone replenishment. But in this post I will focus on the second pain point – not being able to pick VMI items with scanners.
VMI replenishment using Powerapps
The production site i’m currently working on, went live on D365FO early April 2020. The users quickly found the standard replenishment process for VMI items in D365FO to be very cumbersome.
First they had to pick the items physically from the VMI area. Then they had to go back to a PC and register each combination of item/batch in the inventory change ownership journal. Then they also had to re-enter the exact same item/batch combinations in a transfer journal to get the items moved from the VMI warehouse to a trolley location in the main warehouse. So a typical replenishment trip could result in manual entering of 100-150 journal lines.
Apart from taking a lot of time – the manual entering of journal lines is also more likely to result in registration error.
We discussed a number of alternatives and ended up with a workaround based on a Powerapp and electronic reporting.
The Powerapp allows the worker to scan the items while picking them from the VMI locations. The Powerapp creates a Transfer order from the VMI warehouse to the main warehouse. The transfer order contains the items/batches scanned by the worker.
Electronic reporting is then used to generate the inventory ownership change journal.
Optimized VMI replenishment process
So the Powerapp will intially display a Transfer order header screen where From/To warehouse is displayed and the transfer order number is generated automatically. The user will basically just accept the proposed values by clicking the sign.
This will result in the creation of the Transfer order header in D365FO.
Next a pick screen is displayed with a white scan field at the top. In here the user scans location, item and batch barcodes.
The Powerapp will then automatically update the related fields with the scanned values. After scanning the user will click on the Quantity field and a numeric keyboard will be displayed on the scanner. The user enters the picked quantity.
When done the user will click on the sign. This will result in the creation of a Transfer order line with the scanned item/batch/quantity.
The Powerapp will then present an empty pick screen again and the user will continue to scan next item/batch.
When all items have been scanned the user will click on the X sign and the Powerapp will display a complete list of the scanned items.
The user can then choose to edit/delete records before finalizing the picking using the standard canvas Powerapps user interface.
When done a transfer order has been created in D365FO with the scanned items.
Before the transfer order can be posted, an inventory ownership change journal must be generated and posted for each of the items in the transfer order. This part is handled by electronic reporting (more details on that in a follow-up post).
When the transfer order is posted – then the items are moved from the VMI warehouse to the main warehouse to a Trolley location where they will stay until they are putaway to the production staging locations in the production buildings.
How to create the Powerapp
I started by creating a canvas Powerapp based on the TransferOrderLines data entity:
This will give you a very “raw” app – like you can see below. But it will contain all the basic navigation to be able to create and edit transfer order lines.
I decided to change the theme to a black and green theme to give a somewhat similar experience as the “normal” warehouse app.
Next I adjusted which fields should be displayed and the field order on each screen.
Adding Transfer order header screen
Before adding transfer order lines you must be able to create a Transfer order header. To be able to do this, a Transfer order header screen was created like this:
The sign in the Transfer order header form was modified to open the Transfer order line creation form upon successful creation of the Transfer order header.
Calculating the Transfer number
One of the biggest challenges turned out to be the calculation of the Transfer order number. I did not manage to subtract a new number in the Transfer order number series. Instead I adjusted the number series in D365FO to allow manual override, to be able to calculate the new number series number manually:
A minimum transfer order number was defined as a global variable. This minimum number was set well above the normal Transfer order number series to avoid conflicts with transfer orders created from within D365.
The Transfer number was then calculated as the currently highest Transfer number + 1:
Receiving location main warehouse
Another challenge is to control which locations the items are received in your main warehouse. In our production site we do not receive items using WHS scanners. Items are received using Arrival overview journal. I was therefore able to specify my trolley location as the main receiving location in my main warehouse.
But if you are receiving your items using whs scanners – then you can not solve it like this. Then you can control the receiving location by setting the standard receive location on each VMI item like this:
So half of the VMI replenishment problem has now been “worked-around”. The workers are now able to scan items during replenishment picking using the Powerapp. The Powerapp creates a Transfer order that will move items from the VMI warehouse to a Trolley location in the main warehouse.
What’s still missing is the creation of the inventory ownership change journal. Because there is no data entity for that in D365FO, the powerapp can not create these journal lines. This can however be “worked-around” using Electronic reporting. I will get into more details on that in part II of this little blog series on Vendor managed inventory replenishment.
Until then – feel free to have a look at my example Powerapp here.