Consumable “Kanban” parts in D365 Warehouse management

Small consumable items (Kanban)
Small consumable items (Kanban)

Consumable “Kanban” parts in D365 Warehouse management

Low value parts such as bolts, screws, gaskets, clamps, and other fasteners, as well as small electric parts, are rarely retrieved from the main warehouse in the precise quantities by production order. Instead, they are stored in surplus at the workbenches, typically organized in boxes of various sizes. The usage of these parts is not actively monitored; rather, they are automatically deducted from the inventory based on the production bill of materials. Additionally, there is no manual counting of these items at the workbenches. Once the quantity reaches a predefined minimum level, the boxes must be promptly restocked, that’s why they may call them “Kanban” items.

The “canonical” solution in the Dynamics 365 Warehouse management is the Min/Max replenishment: https://learn.microsoft.com/en-us/dynamics365/supply-chain/warehousing/replenishment#minmax-replenishment  The locations to replenish are the input locations of the resources. One box typically stores one item. One screw may be needed at multiple machines = locations. From the list of items at every location you derive the list of locations per item, and these become the fixed locations of the items at the production warehouse. In accordance with the Set up a min-max replenishment process – Supply Chain Management | Dynamics 365 | Microsoft Learn guidance, you choose Replenish empty fixed locations (because a voluntary non-fixed location must have a quantity > 0 to get initially replenished, but this condition is not necessarily met) and Replenish only fixed locations.

In practise, this canonical solution does not always work well. First, the min/max replenishment must be set up to happen often, every 5-20 minutes to simulate an immediate response to the demand. Yet the processes in the Dynamics 365 Warehouse management are essentially PULL processes, and the replenishment is as fast as the warehouse personnel pulls the new work from the queue. It is a different sense of emergency as opposed to seeing a red Kanban card brought by the production worker. If the warehouse workers fall behind, the D365 system is going to detect the critical shortage and include the small parts into the regular production waves, and pick them for the production order(s) in small quantities.

Second, the min/max replenishment relies on the stock level monitoring in the boxes, and the backflushed quantity should better be exact. But the workers sometimes use more parts than stipulated in the BOM. The stock levels in the locations are going to start accumulating errors, and the actual quantity in the boxes is likely to be less than expected, while manual triggering of the replenishment is not possible. In the end, some sort of a spot counting will be needed.

Moreover, at the factory I am consulting right now some of the items are vendor-managed (VMI): a salesperson visits the factory regularly and replenishes the boxes; only a few days later the invoice for the goods is received by the accounting. This makes the internal stock level monitoring an impossible task.

One may suggest deleting these items from the BOM altogether, but this is going to (1) remove the “sink” for the quantities so that the stock levels will continuously grow, (2) distort the price of the product and (3) confuse the workers who use the BOM as a reference. Another suggestion was to make these items non-stocked [in the item model group], but a non-stocked item may not be added to a BOM in Dynamics 365. One may also declare a product not eligible to the Warehouse management, but this choice of the Storage dimension group may only be made once at the beginning of the product lifecycle, while the list of “Kanban” items undergo optimization often.

The below solution that really works relies on the negative picking from a non-advanced warehouse. The negative stock and the auto-consumption at the machine will deplete the stock. The usual purchase delivery note / VMI invoice will increase the stock. Sometimes the stock level recorded in D365 will be higher than the real one, sometimes it will be lower, sometimes it may even be negative, but the production process will not stop because of one allegedly missing screw. The replenishment happens outside of the system in a manual Kanban process triggered by the worker at the machine, or it may be vendor managed, or driven by the warehouse personnel regularly looking for empty boxes.

The setup is as follows:

  1. Create a new warehouse (e. g. NA) where the mode Use warehouse management processes is turned OFF. Set some Default input and production input locations.
  2. Choose this warehouse in the Default order settings of the item as the default purchase and inventory warehouse.
  3. Create if needed a dedicated Item model group, where the Physical negative inventory = Yes. Apply it to the item.
  4. At the released product, keep the usual options Flushing principle = Finish, Material picking in license plate locations = Order picking. You may also want to set the coverage group to Manual.
  5. Make sure the production parameter Journals / Picking list journal / Pick negative is ON, because the negative picking is only allowed when both Physical negative inventory + Pick negative are ON.
  6. In the BOM, use the “Kanban” items mostly as usual, but do NOT select the Resource consumption as we want to consume them from the virtual warehouse NA.

Kanban Items In The BOM

Refer to the blog The case of a missing flushing principle for more insight on the backflushing.

Dynamics 365 SCM: Do not reserve in Inbound

Dynamics 365 Inbound status process
Dynamics 365 Inbound status process

Dynamics 365 SCM: Do not reserve in Inbound

You are going to have this error in Dynamics 365 Warehouse management, guaranteed. The error manifests itself at the production order picking or at sales order picking: the picking location is empty. Depending on the Location directive failures setup under the Warehouse management parameters this is going to either create a broken warehouse work or throw an error, but the outcome will be bad in any case.  This issue can occur when materials or merchandise have arrived but have not yet been put away in their expected location. They are not on the shelves but still somewhere in a staging area, possibly waiting for sorting or expecting a quality control. If your location directives are correct, you may need to adjust your inventory status settings to prevent this issue from happening.

The below recipe was invented either by Carsten or Thomas, maybe Nicolas, all kudos to them, I have just picked up the torch, refined the recipe and shared it with my colleagues and customers at 2 other implementation projects.

In a nutshell, create a new Inventory status called INBOUND and assign it to every purchase order. Make sure every sales or transfer order becomes the regular inventory status AVAILABLE. When a production order covers the demand, it will inherit the “Available” status and pass it to the BOM lines. Only “Available” raw materials will be reserved, not “Inbound”. If you attempt to release the production order, it will fail, because the reservation will misfire (but only if you install my fix Production order should not get Released on material shortage). This is a desired behaviour, because the materials have not been inspected or deconsolidated yet. The “Inbound” inventory status remains transparent to master planning and won’t be replenished unless the quality inspection fails and the goods become BLOCKED.

To implement this scenario, you’ll need to adjust some very specific parameters throughout the system. Below are the notes to myself:

  1. Inventory status InboundIn Warehouse management > Setup > Inventory > Inventory statuses, add a new inventory status called “Inbound“. Do not mark it as inventory blocking; it only needs to differ from the “Available“.
  2. In Warehouse management > Setup > Warehouse > Warehouses, do not set the default inventory status ID at your advanced warehouse, as it will overrule other settings.Default inventory status ID
  3. In Warehouse management parameters, set the default inventory status ID to “Available” and mark Use default status for sales orders and transfer orders to force most material demand to look for Available items only.Default inventory status for sales orders
  4. Default purchase inventory status IDEnsure that every purchase order line becomes a different status by assigning the default inventory status ID “Inbound” to every supplier, new or existing (Accounts payable > Vendors > All vendors).
  5. Turn OFF the Reserve ordered items inventory parameter in Inventory management > Setup > Inventory and warehouse management parameters. To be honest, I have not seen any customer yet who benefited from the reservations in purchase orders not yet received, it just messes things up. If you do let the system reserve in open purchase orders, it is going to reserve the Inbound status, which is clearly not our intent, and the picking location will be empty again.
  6. Now it becomes tricky. If you use master planning, do not firm planned orders in the Standard or– God forbid – Extended Update marking mode. This marking will again be later converted into a fixed reservation of the materials / merchandise in the Inbound status. Instead, carefully set the default Update marking mode in Master planning > Setup > Master planning parameters. In a retail/distribution scenario, choose “None”. In a MTO (manufacture-to-order) or a ETO (engineer-to-order) scenario, choose Single level standard. The latter is quite a new addition to Dynamics 365 SCM: D365 New Feature – Make to order supply automation – Logan Consulting. This will establish a link between the Sales order and the production order, but not their lines or lower-level production orders to purchase orders. If there is a strong need for a chain of assembly / sub-assembly’s production orders, you may still use the Pegged supply BOM line type. This will make the upstream production order a derived requirement and it will establish a firm marking between the top-level and bottom-level production orders.
  7. Change inventory status InboundConfigure a recurring batch job in Warehouse management > Periodic tasks > Change inventory status to quickly update the status of “Inbound” items to “Available” once they are put away in their regular storage locations. Find a good set of criteria to capture all regular locations for storage and picking:

By following these steps, you can avoid the empty picking location error and ensure that your inventory status settings are correctly configured.

Bye-bye work report, welcome wave labels!

Bye-bye work report, welcome wave labels!

One of the common customizations of the Dynamics 365 Warehouse management module was the automatic printing of the work report [for the sales order picking work]. If the number of shipments exceeds a hundred per day, the electronic work list (Menu item type = Display open work list) on the Warehouse mobile device becomes unmanageable, and the distribution of the daily picking work amongst the warehouse workers requires printing and sorting of some carbon documents. This used to be the Work report in the Warehouse management > Work > All work list. However, it is better printed interactively out of the browser UI i.e., the supervisor requires a PC with a mouse, and the printing can hardly be automated / integrated with the other wave processing steps.

The latest Wave label printing – Supply Chain Management | Dynamics 365 | Microsoft Docs feature is the remedy;
In the Containerization scenario, the Wave label type is assigned to the respective level in the Unit sequence group:

Yet the Wave label printing can not only produce box labels after the system-driven containerization, but also simply print the picking work i.e., it will take the Work headers and Lines as a data source and send them to the label printer(s)!

Wave label printing setup

Activate the wave label printing feature on the Feature management screen. Add a new Warehouse management > Setup > Document routing > Wave label type.

The Wave label layout is by far more complex than the classic put-away routing layout. It consists of a Header and a Footer static ZPL code, and a dynamic Body ZPL part. With 0..N bodies per label, the Wave label feature may render complex business documents of a variable height, such as a Bill of lading.

The below sample layout prints just one label = header + body + footer for every Pick work line (see Wave label row settings, Rows per page = 1). Create a Wave label row settings / Row ID = XXX first, then use the proprietary <Row name =”XXX”>… </Row> closed tag in the Body section:

Header
^XA
^SZ2^JMA
^MCY^PMN
^PW810
~JSN
^JZY
^LH0,0^LRN

Body
<Row name="WorkLine">
^FT21,37
^CI0
^A0N,28,38^FDPicking label ¸ Eugen Glasow^FS
^FO17,54
^BY3^BCN,102,N,N^FD>:$WHSWorkLine.WorkId$^FS
^FT135,182
^A0N,28,38^FD$WHSWorkLine.WorkId$^FS
^FT21,276
^A0N,28,38^FDSales order:^FS
^FT214,276
^A0N,28,38^FD$WHSWorkLine.OrderNum$^FS
^FT52,236
^A0N,28,38^FDShipment:^FS
^FT214,236
^A0N,28,38^FD$WHSWorkTable.ShipmentId$^FS
^FT541,50
^A0N,34,46^FDPacking^FS
^FT541,85
^A0N,34,46^FDLocation:^FS
^FT589,133
^A0N,34,46^FD$WHSWorkLine.WMSLocationId$^FS
^FO640,235
^BQN,2,6^FN1^FS
^FT571,390
^A0N,28,31^FN2^FS
^FT651,216
^A0N,28,38^FDPart no:^FS
^FT146,316
^A0N,28,38^FDQty:^FS
^FT214,316
^A0N,28,38^FD$WHSWorkLine.QtyWork$^FS
^FT110,356
^A0N,28,38^FDBatch:^FS
^FO214,331
^GB266,30,30^FS
^FT214,357
^A0N,28,53^FR^FD$WHSWorkLine.FEFOBatchId$^FS
^XZ
^XA
^XFR:SSFMT000.ZPL^FS
^FN1^FDLA,$WHSWorkLine.ItemId$^FS
^FN2^FD$WHSWorkLine.ItemId$^FS
</Row>

Footer
^PQ1,0,1,Y
^XZ

In the Wave label template, the labels may be sent to different label printers depending on the picking Zone, for instance. Moreover, a separator – a zone Break label – may be inserted into the endless stream of picking labels for the tearing at the right place. This requires a sorting (see Edit query) by the Zone field and a Group by + Print break label option under Wave label template group. From my experience, more than one sorting / grouping level does not work.

Work label printing: test run

The above layout may be used not only for managing the picking work, but also for labelling the picked items for the end customer with the sales order / shipment / transport package ID:

To test the labels, create a wave step code “Label Printing”, and add the waveLabelPrinting method to the Wave template right after the work creation step. Release some test sales orders to the warehouse, then Process the outbound wave.
A warning “There is no unit for the … wave label type on the … unit sequence group. Wave labels are not created for the … item” may be shown, but it may be ignored. A stream of labels should come out of the printer, one per picking work line for every work header created.