Subcontracting with Warehouse management – Part 1

Subcontracting with Warehouse management – Part 1

Introduction

A typical real-world scenario for subcontracting in discrete manufacturing looks like this: the local production needs a part at one of the steps which is procured from a 3rd party. This supplier aka subcontractor is provided with some materials for free (“free issue materials”) to perform the work. The free issue materials remain in our local balance. They come back as a semi-finished product with a value-added service on top.

In standard D365FO, a sub-contracted operation is designated with a certain type in the route, and the bill of materials entails a service item representing the value added by the subcontractor. As the production order is getting estimated or converted from a planned production order in the MRP, a purchase order is opened with the supplier for the service item. The receipt of the service item in procurement (with a Delivery note i.e. Packing list or with an Invoice) may report the operation on the route as finished, consume materials associated with this operation, and absorb the sub-contracting cost into the value of the finished product.

The simulation by Microsoft https://docs.microsoft.com/en-us/dynamics365/supply-chain/production-control/subcontracting resembles this story, but it misses one key element: the receipt of the semi-finished product at the inbound location with the mobile scanning device (Warehouse management). Let’s get one thing straight: this just doesn’t work in Dynamics 365 for SCM for the following reason:

Assume, we need a perforated plate for the proverbial Contoso speaker from the Dynamics 365 demo database. We inform the supplier about the need for the perforation with a purchase order, send them the steel plate with a transfer order, receive the perforated plate back, put it on stock and use it in one or many production orders of our own.

Physically we treat the semi-finished product “Perforated plate” as a normal purchase order inbound delivery, but the purchase order is raised only for the service ‘inside’: “Perforation”. In theory, one may even capture a stocked service on a mobile scanner, but it cannot pass the license plate (pallet) number to the subcontracting production order, which is open for a different product number.

Two possible solutions– non-standard and standard – are presented below. None of them is fully satisfactory, though. As Germans figuratively put it, it is “die Wahl zwischen Pest und Cholera”, a choice between the devil and the deep blue sea.

above *) „Knight at the Crossroads“, 1882, by a Russian romantic and early art nouveau painter Viktor Vasnetsov

Prerequisites setup

For this study, we need a new route operation (“Perforation”), and a new Route group (Production control > Setup > Routes > Route groups). The route group Sub will be somewhat special:

The added value is absorbed with the service item, therefore the estimation and costing of the subcontractor’s time it turned off; you will probably create a separate hour cost category with the price of zero.
The Automatic route consumption Quantity is set to Yes to trigger the automatic reporting as finished (RaF) of the semi-finished production upon the PO receipt. Typically, you do not plan the subcontractor’s capacity and consider them a “black box” with a quantity-independent lead time, but for the automatic route consumption and MRP you MUST activate the Process job. The lead time may be entered either in the default order properties of the SFG released product, or in the subcontracting route as a constant Transport time.

Another part of the puzzle for the automatic RaF is the Automatic report as finished flag in the Production control > Setup > Production control parameters:

If you capture production time and yield at Job card terminals with Manufacturing execution, then the ME route/job journals will neglect this flag, and the automatic RaF will only be triggered on manual route journals and subcontracting purchase order posting.
This was about the automatic reporting as finished; the automatic consumption of materials and routes (i.e. quantity reporting + RaF) is triggered by the 2 parameters on the Automatic update tab:

The supplier (en-us: vendor) needs an external warehouse of the Vendor type and a resource of the Vendor type. The subcontractor’s warehouse (here: EUS-104) must belong to the same site as the main warehouse (here: 5). This is because the materials in the semi-finished product BOM are tagged with the subcontractor warehouse in order to trigger a replenishment (“refill”) by an outbound transfer order. Yet the sub-production order may be pointing to our own warehouse (here: 51) to directly post the receipt of the SFG at the local site, if the inbound fransfer EUS-104 -> 51 is organized by the supplier. Such a ‘mix’ of warehouses in one BOM is only possible within the same site in D365FO.

In 99% of the cases, the external warehouse does not Use warehouse management processes, i.e. it is not an ‘advanced’ one, because there is no one from our organization to capture the inbound license plates. Instead, it requires a default receipt and issue location (here: IN_OUT).

The production resource uses this unique Input warehouse, therefore it requires an own dedicated resource group: resource <=> resource group <=> input warehouse.

Should the inbound transfer order from the supplier to our premises be managed by us, then the Output warehouse = Input warehouse = EUS-104.
The Output location is an interesting topic of its own. In reality, the output warehouse comes from the MRP planning, from the MRP demand. The MRP demand comes from the production BOM line which is deemed to consume the subcontracted SFG. Whatever the consumption warehouse is set there, it propagates the planned production order for the SFG, unless the inbound transport is managed by us (then it requires a separate replenishment setting EUS-104 -> 51).

If the same subcontractor delivers products to different warehouses of our own, then the sub-production order does not always comply with the above Warehouse setting at the resource level.
Fortunately, the developer of the method \Data Dictionary\Tables\ProdTable\Methods\defaultOutputLocation() was not sophisticated enough to check if the warehouse in the production order matches the warehouse of the last resource on the production route: the Output location is overwritten unconditionally on reporting the product as finished. It suffices if all warehouses have an output location with the same code RECV-SUB.

Finally, we need a set of released products:

Item numberNameProduct typeStor dim groupItem model groupUoMUnit seq. groupReserv. hier
D0003StandardSpeaker (FG)Item     
M0070Perforated plate (SFG)ItemWare (=WHS-managed)e.g. FIFO (stocked)EaEa PLDefault
M0070_SC*Perforation (service)ServiceWare (WHS) or SiteWH (non-WHS)e.g. FIFO (stocked)EaEa PL or noneDefault or None
M0071Steel plate (RMServiceWaree.g. FIFO (stocked)EaEa PLDefault

*Option 2 only

In standard D365 SCM (hereafter ‘Option 2’), there will be a ‘twin’ service item (here: M0070_SC) defined for every semi-finished product (M0070). As they put it, “…the service product is used to identify the arrival of the semi-finished product”.

Option 1: Subcontracting via Purchase order

1-level BOM: in this case subcontracting is managed through a ‘trading’ flow. The subcontracted semi-finished product is procured via a purchase order and received in stock as a regular inbound shipment. In other words, the subcontracted product does not originate in a production order as otherwise prescribed by the D365 best practices. The component(s) of the product are either provided for free or directly sold to the subcontractor and remain in the master product’s BOM.

In fact, the subcontracting operation “5” in the route on the diagram is not even required, everything is managed through the BOM:

According to the documentation https://docs.microsoft.com/en-us/dynamics365/unified-operations/supply-chain/production-control/manage-subcontract-work-production,
to use subcontracting of route operations for production or batch orders, the product that is used for the procurement of the service must be defined as a product of the Service type. However, an undocumented feature of D365FO allows for stocked products of the type Product (not Service!) in the Vendor-type line.

An analysis of the source code in
\Data Dictionary\Tables\ProdBOM\Methods\postVendorProdBOM
\Data Dictionary\Tables\ProdBOM\Methods\postVendorProdRoute

has shown, that an automatic consumption of the BOM or the route is not supported for Products, unless you extend the ProdBOM.verifyItemType() method. However, it is not such a bad thing: the automatic BOM consumption of a service PO receipt would have consumed the service itself, then any other material at the same route operation (Op 10). But we don’t want to consume the SFG M0070 immediately! The product has to be received, put away to the main warehouse, picked from the warehouse, brought to the step “Assembly” and then consumed.

To backflush the material M0071, it has been attached to the same operation 10 Assembly (note the external warehouse for consumption):

This is not ideal, because the material is needed at the moment of the Op 5 scheduled start. The operation 10 is scheduled later. To mitigate shortages, one should choose the transfer lead times of the free issue materials carefully.
Resource consumption = Yes means the material is picked from the location of the respective machine 5110 (here: 51/002)

Let’s create a production order for D0003 at the site “5”, estimate it and check the MRP explosion:

The estimation of the production order resulted in a purchase order for M0070. In addition, a planned transfer order has been created for the raw material from our site to their site. After the confirmation of the PO by the supplier, this transfer order must be dealt with soon, to ensure the smooth execution of their work. Potentially – depending on the MRP settings – this can be also a purchase order delivered directly to the subcontractor.

To proceed, firm the transfer order, locate the transfer order in the list Inventory management > Inbound orders > Transfer order list by looking at the target warehouse, contact the shipping carrier and organize a pick-up of the goods, then use Ship / Release to warehouse to initiate warehouse work for the reserved (!) material. Process the work at the mobile device: Outbound / Transfer pick. Check out my earlier blog how to call the mobile device emulator:

Once picked and ready to be loaded into the truck, the shipment appears in the list Warehouse management > Shipments > Shipments ready to ship. Print a packing list, confirm the shipment. The transfer order is now officially Shipped. Receive the transfer order for the whole quantity immediately, as this external warehouse is unmanaged. The plates for perforation are now at the warehouse EUS-104.

Someday, the plates come back, full of holes. They need to be received at the mobile scanner (Inbound / Purchase receive). The SSCC number typically exists and can be scanned, there can be an option to print an own label with the product ID and name. Next, the pallet is Put away to the main stock:

With a little customization, the purchase order may be updated with a delivery note by an automated batch for the whole registered quantity, yet this delivery note does not kick off any automatic action in production due to the wrong product type of M0070.
The production may be released now! Make sure the newly received subcontracted product has been reserved, then go for a Release. It creates warehouse work to pick the perforated plate and bring it to the assembly resource. At this moment, M0070 becomes reserved at the location level. Process the work at the mobile device: Production / Production pick

The perforated plate has been brought to the location 002 of the machine. From now on, the production order may be started, and a picking list for the ultimate material consumption may be posted in a vast number of ways. The material M0071 previously brought to the supplier is backflushed too:

Success!
Check out the 2nd part: Subcontracting via Production order.

Semi-finished goods in an advanced warehouse

Semi-finished goods in an advanced warehouse

The management of semi-finished goods in the Production control module in Dynamics 365 SCM is notoriously messy in conjunction with the WHS (warehouse management), see my blog Missing flushing principle. The challenge is posed by the system if the material flows on the production shop floor do not require license plate handling, i.e. if people only need scanners to pick raw materials from the warehouse, but do not need them when passing semi-finished products from one working station to another. It becomes even harder if production orders overlap, i.e. if the downstream production order relies on a constant inflow of semi-finished orders and is started shortly after the upstream production order.

Preamble

We evaluated various scenarios:

  • a separate non-advanced warehouse in production is awkward, because every demand of raw materials results then in a transfer order which is a substantial overhead both in shipping and receiving. Moreover, transfer order put away directives do not ‘sense’ warehouse locations with material shortage, i.e. you cannot ‘aim’ multiple work station locations in one transfer order. Managing multiple transfer orders to different logical warehouses is even a greater overhead compared to a warehouse production picking wave, which flexibly consolidates all picking work for a production order or even for a set of production orders;
  • withdrawal Kanbans are awkward, because they require standalone rules for every material and every workstation. Managing BOMs is much easier than managing Kanban flows and withdrawal Kanban rules (where you don’t even have a data entity to import or update them in bulk!).
    Moreover, Kanbans do not ‘sense’ locations either, and rely on the MRP to trigger them. But the master planning usually does not consider the warehouse location level: if you do so, this renders the advanced warehouse management obsolete. We end up with logical warehouses per machine again. Finally, the MRP is not instant, the master planning may run for hours, but you need the material now!
  • phantom sub-assemblies do not invoke any movements at the warehouse and remain a viable and very safe alternative: the first inventory transaction will be at the very end of the last machine in the chain. This approach is not always possible (at least no at all stages in production) if the factory is required to count WIP items or builds up a safety stock of them.

The approach described below uses classic BOMs and production routes in combination with work policies or automatic work. Every route has a resource (machine, work station), and every resource is associated with one inbound and one outbound warehouse location. Materials in the BOM are marked for Resource consumption i.e. to be consumed from the inbound location of the respective machine. Provided that the locations are NOT license plate controlled, the warehouse management module may be configured to automatically pass the semi-finished materials from one location to another.

Converging or sequential material flows

Consider the following scenario: whatever the semi-finished products are, one machine supplies with them just one downstream machine. Or 2 or more machines feed together the next one, and the path never changes. In this case, the output location of the upstream machine can be defined the same as the input location of the downstream machine.

In the below example the outbound location of the machine 145 equals the inbound of 146: O145 = I146.
Converging material flowsThe inbound and outbound locations are set for a resource (Production control > Setup > Resources > Resource) in connection with a resource group. The group in turn specifies the [advanced] inbound and the outbound warehouses, which are normally the same (unless it’s subcontracting).
Resource locations

However, on an attempt to select a non-license plate controlled warehouse location (the one where in the Location profile the parameter Use license plate tracking = No) for the output, a warning message comes up: “A work policy does not exist for location %1. A work policy must exist for a non-license plate controlled output location”.
Indeed, a work policy must be created first to inhibit any put-away work on reporting products as finished into this location:
No put work policy
An unprocessed put away work is bad even if it points into the same location I146 -> I146, because it reserves the semi-finished product and makes it unavailable to the next machine. With the above policy no put-away work is going to be created out of the location I146, the material is reported as finished into this location and stays there, ready to be reserved and consumed by the downstream resource.

Diverging material flows

Forks in the material flow make it much harder to configure. For example, if one resource may feed different downstream resources depending on the context, then the above setup with a work policy is not going to work.
Diverging material flows
In short, one needs 3 ‘ingredients’:

  • a Work template with an automatic processing;
  • a specially prepared Location;
  • a set of “put” Location directives (“pick” directives are not necessary, because the picking location is always dictated by the resource).

The Work template (Warehouse management > Setup > Work > Work templates) for the Finished goods put away work order type should have a typical Pick-Put pair, the Automatically process flag (!) set and a distinct Query to react to pre-defined semi-finished products.
Work template for Automatic processing
Bear in mind that (1) the automatic work processing requires a Default work user ID in the Warehouse management parameters; (2) the automatic work processing fails if the product is serial number controlled; (3) a number sequence for the license plates must exist: the system is going to take a temporary target LP.

The Location should not be license plate controlled, because if it was, the production worker would have to manually select a distinct LP on the Report as finished or the Manufacturing execution Feedback screen.
However, such a location cannot be selected in a resource, as we know. On the one hand, you don’t wish to have license plates, on another hand you need an automatic put away work to a certain location, and a prohibitive put work policy is not an option anymore.
This is not intended by Microsoft to work, but one can trick the system into it. First, assign a LP-tracked profile to the output location, and select it in the resource. Second, change the profile of the location to a Non-LP-tracked one!

The Put Location directives (Warehouse management > Setup > Location directives) for the Finished goods put away work react to certain products or resources with the help of the directive header Query (one can join the production table with the production route in the query) and divert the automatic put operation from one location to another:
Putaway location directives
The target location is “hardcoded” in the Location directive action Query.

Let the worker report the production order as finished: the system creates and executes put away work despite the missing license plate. One product goes ‘left’ and another goes ‘right’ from the same station fully automatically:
Automatically executed work

Conclusion

It is possible to “hard-wire“ a certain material flow between machines into the Warehouse management. Overlapping production orders remains a nuisance, because BOM lines do not exhibit a location if the warehouse is an “advanced” one. The input location of the machine is derived dynamically and the WHS module works through the reservation: the raw material must be reserved in the inbound location prior to consumption. But how do you reserve a material if it did not exist as you started the downstream production order?! The orders may be chained by the “Pegged supply” or automatically “re-released to warehouse” every X minutes.

 

 

The case of a missing flushing principle

The case of a missing flushing principle

This article is about material consumption in a manufacturing scenario where Manufacturing execution terminals are used with a WHS – enabled (advanced) warehouse in Dynamics 365 for Finance and Operations, and how BOM flushing principles work on different devices.

BOM Flushing principles

Typically, materials are backflushed upon completion of a finished item, i.e. automatically consumed at a ratio defined in the Bill of materials. 4 flushing principles are applicable to a raw material:

In the BOM line the 5th flushing principle is available: <None>. It means the consumption should fall back to the either one of the 4 principles specified in the item master.

Here is how different actions in D365FO react to the flushing principles (ME stays for manufacturing execution i.e. shop floor control, and WHS for the mobile scanner device running the advanced Warehouse management front-end), all in a neat matrix:

 ManualAvailable
at location
StartFinish
Prod. order release (x)  
WHS picking (pick)    
WHS picking (put) x  
Prod. order Start  (x) 
WHS Start production order  (x) 
Route card + Auto BOM consumption(x)(x)(x)(x)
ME Job terminal – Start  (x) 
ME Job terminal – Feedback Operations   (X)
ME Job terminal – Manual consumption feedback(x)(x)(x)(x)
ME Job terminal – Feedback RaF   (X)
Prod. order Report as finished   (X)
WHS Report as finished (put)   X
WHS Report as finished (put away)    

The actions where the material consumption is optional and configurable are put in brackets: (X). For example, one may configure whether the classic production start is accompanied by forward-flushing and how: for all BOM lines or only those with the Flushing principle = Start.

Another example: a manufacturing execution Job card terminal may be configured to consume materials on the current operation (ME Job terminal – Feedback Operations), on the last operation only (ME Job terminal – Feedback RaF), or never. Activating both is clearly not an option, since every production order has a last operation on the route, and triggering both is going to result in double consumption.

I tend to say the intersection between:

  1. ME Job terminal – Feedback Operations
  2. ME Job terminal – Feedback Report as Finished and
  3. WHS Report as finished

is highly problematic, and here is why.

Job card terminals in conjunction with Mobile devices

Consider the following scenario: every machine along the production route is equipped with a Job terminal to report time and WIP quantity output, while packaging and labeling on a mobile device is only required at the last station:
Operations route
On a long-running operation it may be beneficial to consume materials at the run time, i.e. with the help of (1) the ME Job card terminal, “Feedback operations”. However, with the unconditional consumption at (3) the mobile scanner Report as finished, this may only happen at the scanner. Otherwise the consumption is going to be double.

Moreover, the mobile scanner only accepts the “good quantity”, while the ME Feedback offers both the “good quantity” and the “error quantity” i.e. scrap for entering. Since the mobile scanner always consumes raw material, the material consumption is going to be too low. The Production scrap WHS menu is not a good replacement, since it requires the extra consumption of every material SKU to be entered manually.

Now consider a sophisticated environment where packing is performed by a robot, and the operation 30 “Packing” is not managed by the Manufacturing execution module. The WHS “Report as finished” function is triggered as full boxes or pallets pass a simple photoelectric sensor or a bar code reader:
Operations route (no packing)
While the Op. 10 and Op. 20 materials are captured at the Job terminals, it might be tempting to backflush the packaging materials at the ‘non-operation’ Report as finished. This is not possible, because (A) the WHS “Report as finished” unconditionally consumes all materials with the Flushing principle = Finish, and (B) a material with no operation number is accredited to the first operation on the route.
A split of the Finish flushing principle into 2 could have addressed this scenario:

  • Operation finish
  • Production finish

where the mobile device only considered the latter.

Finally, imagine the 3 operations running in dedicated production orders, with tangible semi-finished goods (SFG) exchanged between the machines:
Production order route
This is a common scenario in process manufacturing where the SFG batches can hardly be quantized and bear no labels. The output and input resource locations in the middle (10-20, 20-30) are not license plate controlled and do not have to be equipped with mobile scanners, as there is nothing to scan.

Here we have a different dialectic between semi-finished goods reported as finished at Job devices, and finished goods reported from Mobile scanner devices. This configuration – whether to trigger Reporting as finished in Manufacturing execution or not – is available at the Site level only, not a single Resource level. Yet an Advanced warehouse process cannot span multiple warehouses, let alone sites. This would end up either in full blown transfer orders between machines, or in an inability to track actual time at the Job card device.

Conclusion

At first, there must be an option to turn off material consumption on the mobile scanner, and let the system only backflush materials at the Job card terminal. The Mobile menu items Report as finished and put away and Report as finished must be extended for non-compulsory material consumption.
Ultimately, the error-prone recording of the material consumption is an internal planning and controlling requirement, while labeling and shipping generates revenue. One does not want to see label printing failing just because one screw is missing in the ledger.
Please vote for this idea!

Secondly, advanced scenarios may require a distinction between an “Operation finish” and “Production finish” as opposed to a single flushing principle “Finish”. This is hard to achieve through an extension to D365FO, as the respective enumeration is not extendable.
Please vote for this idea!

Thirdly, the D365FO configuration is not granular enough to divide the Manufacturing execution RaF and the Warehouse management RaF (reporting as finished), and should better be enhanced.
Please vote for this idea!

Hope this helps.