Fixed Kanbans in Dynamics 365 SCM with Warehouse Management

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

Fixed Kanbans in Dynamics 365 SCM with Warehouse Management

In a warehouse-managed environment, supplying production resources with small quantities of material is a common requirement. One possible solution is a Kanban flow, where the operator uses one container while the second container is replenished by the warehouse team. Once the first container is empty, it is returned to the replenishment cycle, ensuring that material is available at the resource without requiring the operator to create a warehouse request manually.

In Dynamics 365 Supply Chain Management, this process can be implemented using fixed Kanban rules in combination with Warehouse Management (WHS). The destination is defined by the activity in the production flow, whereas the source location in the main warehouse can be controlled by WHS location directives.

Configuration: Fixed Kanban Replenishment with WHS

  1. Navigate to Production control > Setup > Lean production flow > Value streams and create a value stream for the material supply process. The value stream provides the organisational context for the production flow and its activities. After that create a generic logistic Production flow model.
  2. Create the production flow with 1 transfer activity: Lean production flow > Production flows, associated with the value stream. Add a Version.
  3. Under the Activities button, use Create new plan activity, where in the wizard you create the transfer activity: Activity type = Transfer. The work cells are irrelevant; mark both Update on hand on receipt and Update on hand on pick.
  4. Choose the same “From” and “To” locations, namely the location of the resource: the activity represents the destination of the material flow. The actual source location can be determined separately by the WHS location directive.
  5. Enter something into the time, finish creating the activity, but then enter the Details mode and enable Auto complete by put line! This setting allows the transfer activity to be completed automatically with the last put step on the mobile device in the warehouse.
  6. Activate the flow version.
  7. Create the fixed Kanban rule: navigate to Product information management > Lean manufacturing > Kanban rules and create a rule of type Withdrawal.
  8. The same screw will be at more locations, potentially in containers of different sizes. Every Item-Location combination requires an own Kanban rule with a specific quantity.
  9. Set Replenishment strategy = Fixed. Select the transfer activity created in the previous steps as the First plan activity. This automatically populates the Receipt location of the resource. Set Register as empty = Manual.
  10. Specify the product and the Default quantity. This quantity defines how much material is requested when an empty container triggers replenishment i.e. the size of the box.
  11. Set the Fixed kanban quantity = 2 for the two-container replenishment cycle, or 1 if the replenishment is fast enough for a one-container system.
  12. At the bottom of the screen, you may pre-create the Kanban cards with the button + Add. Each becomes a unique barcode and a unique – and different from the barcode card number – Kanban number.
  13. Configure warehouse work classes and the work template:  under Warehouse management > Setup > Work, create the work classes required for Kanban picking and putting, then a work template for the Kanban picking work order type with the following sequence:
  14. Under Warehouse management > Setup > Location directives, configure a directive for the Kanban picking work type. Use the directive query and actions to determine the source location from which the material is picked. This is where the actual warehouse source is controlled, independently of the destination defined in the production flow.
  15. No separate put-away location directive nor a Kanban put away work template is required for this scenario because the destination is given by the transfer activity.
  16. Under Warehouse management > Setup > Waves > Wave templates, configure the template used to process Kanban replenishment demand. Enable automatic wave creation and automatic release of work. Configure the remaining wave settings according to the intended processing flow.
  17. Test the process: scan a Kanban card on the Transfer Kanban board (Production control > Kanban > Kanban board for transfer jobs) to make it empty.
  18. The system creates the replenishment demand and processes the corresponding wave to generate warehouse work. The warehouse worker executes the picking and put operations, replenishing the container with the fixed quantity defined in the Kanban rule.
  19. After the put operation, the material is available at the resource location, and Auto complete by put line allows the transfer activity to be completed through that process: the Kanban resets and becomes Completed automatically, awaiting the new cycle.

The fixed Kanban card cycle

To summarise:

  1. An empty container triggers replenishment: when a container is empty, the operator scans its Kanban card on the transfer-job Kanban board in empty-container mode. This triggers the replenishment process for that card.
  2. The system creates the replenishment demand: the Kanban is activated, and a Kanban wave is generated. Wave processing creates the warehouse work required to pick the fixed quantity and deliver it to the destination associated with the production-flow activity.
  3. The warehouse replenishes the container: the warehouse worker executes the picking and put operations. The source location is determined by the WHS location directive, while the destination is defined by the production-flow activity. The quantity to be replenished comes from the fixed Kanban rule.
  4. The replenished container returns to the resource: once the warehouse work is completed, the container is available for use at the resource. The other container can continue to supply material while this replenishment takes place.
  5. The cycle repeats: when the next container becomes empty, its Kanban card triggers another replenishment cycle. The circulating cards allow the process to repeat without creating a new Kanban rule for each replenishment.

Fixed Kanban or Min/Max replenishment?

For this process, the fixed Kanban rule provides a direct connection between the production resource, the container and the replenishment quantity. The empty Kanban card is the trigger, and the Kanban rule determines the quantity to be replenished. The WHS module then generates and lets execute the warehouse work, including the determination of the source location. The machine operator is in control.

Min/Max replenishment addresses a slighty different requirement. It is a warehouse replenishment mechanism based on inventory thresholds by location (!), whereas the fixed Kanban process is driven by the consumption and replenishment cycle of a defined container. The Dynamics 365 system periodically controls the min/max levels and hopefully reacts on time, but only as well, as good the quantities in the BOM are, and as timely the workers record material consumption.

Assistance and Secondary operations in D365 for SCM to separate machining costs from labour

Assistance and Secondary operations in D365 for SCM to separate machining costs from labour

In Dynamics 365 Supply Chain Management (SCM), in its recent internal MES incarnation called “Production Floor Execution” (PFE), there is a notion of Assistance.

The Assistance model helps solve a controlling challenge: recording machine costs and labour costs separately. For example, setting a machine up consumes less energy than a full speed machine operation: during the setup job, the labour cost prevails if we neglect the amortization. On a contrary, once a highly automated work cell is programmed and set up, the worker may leave and let the cell run on its own. The machine cost prevails. Consequently, instead of a blended rate of the machine hour, we may decide to split the hours into 2 different route categories: one for the machine, one for the worker, and even one more for the energy consumption.

Assistance is when multiple workers share one job. A lead worker (pilot) is assigned the production order job, and other workers join as assistants. The Pilot’s time is replicated into the Assistant’s time records, thus increasing the labour cost per item: N workers : 1 order.
In contrary, if workers handle several production orders at once it is called bundling. This mode shares labour costs across orders, lowering the cost per item: M orders : 1 worker. In a general case, the relation between the orders and workers may be M:N, if a team of assistants takes on a bundle of production orders.

Primary vs. Secondary operations

In Dynamics 365, production steps are called operations. Some operations are “primary”, meaning they control the main task, usually involving a machine or workstation. Others are “secondary”, like additional labour or support roles, running alongside the primary task. Primary and secondary operations share the same operation number but have different Operation IDs in Dynamics 365. They both run at the same time, and the primary operation controls how long the job lasts.

The key is, secondary operations allow for distinct cost recording for personnel assisting a machine operation. These can help track labour costs separately and in real-time.
 

Setting up secondary operations for labour cost tracking

  1. Define distinct Production control > Setup > Routes > Cost categories for the machining and for the labour.
  2. In Production control > Setup > Routes > Route groups, create one group and activate the Setup and/or Process jobs appropriately. Check Job management and Capacity to make the jobs visible on the PFE terminal. Turn on the Setup time and/or Run time estimation and costing.
  3. Define secondary operations in the Route: specify the main machine task as the primary operation and the labour support task as the secondary.
  4. In Production control > Setup > Manufacturing execution > Configure production floor execution, choose Design tabs and make sure the button (Action) “Assistant” is placed onto one of the toolbars.
  5. Check if the system jobs Start assistance and Stop assistance exist under Time and attendance > Manage indirect activities > Indirect activities. Use Time and attendance > Setup > Wizards > Time and attendance configuration wizard if they don’t.
  6. Go to Production control > Setup > Manufacturing execution > Production order Defaults and check Assistants use secondary operations on the Operations tab. This setting lets assistants’ time be logged under the secondary operation, ensuring correct labour cost tracking.
  7. Make sure a dummy worker representing the machine exists alongside the real machine operator and they are activated for Time registration in the Time and attendance > Setup > Time registration workers.
  8. With the setup in place, Release a test production order.
  9. Open the Production control > Manufacturing execution > Production floor execution terminal, perform the initial configuration if needed. Choose the machine ID as a filter for the production jobs. 
  10. Clock in the machine first with its fictive Badge ID. The PFE terminal opens the list of the primary jobs planned at the machine as shown on the screenshot above.
  11. Let the machine “Start job“.
  12. In a “shared terminal” scenario such as ours, the PFE terminal usually immediately logs the user=machine off, otherwise click Leaving / Log off.
  13. Log in as a human worker (machine operator) with your own Badge ID.
  14. Use the Assistant button on the PFE terminal to “attach” yourself as an assistant to the Pilot=machine.
  15. You will see a “You are now registered as an assistant” message right after. The machine becomes the “pilot”.
  16. Check Time and attendance > Inquiries and reports > Teams: there is now a Job pilot driving the primary operation and an assistant Worker attached to it.

The Resource pilot in this form is a remnant of a nice feature Assist Resource. The Assist Resource was supposed to be a machine or a similar asset acting as the Pilot instead of a dummy machine worker, making it simpler to track time. However, the corresponding button "Assist resource" is defunct on the modern PFE terminal: the necessary twin action "Start resource jobs" from the legacy Job card terminal is not implemented in the Production floor execution, so the Assist resource does not do anything useful.

  1. Check the time records of the day in the Time and attendance > Review and approve > Approve list: a Start assistance line has been recorded for the worker. The T&A module is quietly listening to everything what the pilot does:Start assistance
  2. After a while, Clock out the human worker.
  3. Check the time records in Time and attendance > Review and approve > Approve: the T&A module has now copied all the records of Pilot=machine to the Assistant during the active assistance period, yet the Process Job ID is not the same, it is the one of the secondary operation with its distinct cost rate! This does not work properly if you register route operations instead of jobs. Specifically, a Job level = Route is a no-go in Production order defaults.
  4. Check Time and attendance > Inquiries and reports > Teams again: the team is disengaged. If the worker mostly serves the same machine, you may activate Permanent teams in the Production control > Setup >  Manufacturing execution > Manufacturing execution parameters. This will auto-attach the human worker to the machine on subsequent clock-ins.
  5. At the end of the shift, assistants must clock out first: the Pilot can’t clock out until all assistants have done so. Indeed, you may now Clock out the machine.

Separate energy cost

In the above scenario, the human machine operator may come and leave at will, his or her working time is independent from the machine schedule. Recording a separate energy contribution is a slightly different, simple scenario.
Here we may use secondary operations, too. If we can attribute a certain volume of natural gas or electric energy to one hour of the machine’s operation or to a kilogram of the product / semi-finished product, then this overhead may be posted synchronously with every machine time/quantity route transaction.
 
Create a special Route group for the secondary operation. Deactivate Job management, because the electricity meter is not going to actively post its working hours. Turn on the Run time (=constant consumption in kWh per machine hour) or Quantity (=constant consumption in kWh per machined piece) in the Automatic route consumption group. Do it in sync with the Estimation and costing sliders.
 
Assign this Route group to the secondary operation on the route. This will be the NRJ on one of the screenshots above.

Integrate APS with Dynamics 365 for SCM

Integrate APS with Dynamics 365 for SCM

APS means “Advanced Planning and Scheduling”. APS systems are used to optimize production processes by planning and scheduling manufacturing orders, taking into account factors like resource availability, machine capacity, and production deadlines. As a “better, smarter MRP”, APS helps companies improve efficiency, reduce lead times, and respond quickly to changes in sales or production orders.

In the German market, the 2 widely used programs are FELIOS from Inform-Software and HYDRA by MPDV. To be precise, their APS system is called FEDRA, with the HYDRA being a sister Manufacturing Execution System (MES). I had an occasion to integrate both with Dynamics 365 for SCM. By the way, a MES integration is something else and it already exists in Dynamics 365: Integrate with third-party manufacturing execution systems – Supply Chain Management | Dynamics 365 | Microsoft Learn.

High-level concept of the APS interface

An integrated APS uses data from the operations system, such as Dynamics 365 for SCM, including open sales, purchase, and production orders, current stock levels, and master data (BOMs, routes, resources, products and materials). All the data may be extracted from D365 with the standard or slightly modified entities.

The APS then generates an optimized production plan, often suggesting new raw material purchases and production orders, acting as a full-scale master planning system. However, we may neglect the planned order proposals and only import the updated production routes to align the ERP system with the APS. The process reduces to 5 steps:

  1. After the nightly D365 MRP run, the above data is exported as .TXT files, representing the day’s snapshot.
  2. APS loads these files, refreshes its database, and performs a planning run.
  3. Operators may adjust the plan in APS the day after.
  4. The final plan, with updated order and route dates, is exported as a set of inbound .TXT files.
  5. The production route file is used to update production route operations in D365 via a custom entity, since the standard one may only write to Created production orders.

The production route entity at step “5” is teased in another blog: “Import a D365 FO entity with a virtual KEY field“. The entity should skip rescheduling if the operation dates in the file match those in Dynamics 365 and only touch route operation/jobs in the following statuses: Scheduled, Released, Started.

Key step: adopt the APS route schedule

Once the route is updated with the start, end dates and times (the FELIOS system only knows the date), the “jobs” and other internal structures in Dynamics 365 must be aligned with the updated operation times. The necessary actions triggered by each line = route operation in the APS file are:
 
  1. Unlock the production order if it’s locked.
  2. Re-schedule jobs associated with the route operation, using the dates and times imprinted upon the ProdRoute record. This will update capacity reservations according to the new dates. As a positive side effect, this will adjust the start and end dates of the production order if the operation is the first or last in the route. It will also update raw material demand dates and times on related BOM lines in the production order.
  3. Lock the production order, protecting the scheduled route operation from further changes.
The below code snippet performs these key actions:
				
					    public void reschedule2jobs()
    {        
        ProdTable       prodTable = prodRoute.prodTable();
        ProdRouteJob    prodRouteJob;

        // 1. Unlock the order if locked
        if (prodTable.ProdLocked)
        {
            Args args = new Args(this);
            args.record(prodTable);
            ProdMultiLockForReschedule::construct(args).run();
        }

        // 2. Prepare a planning parameters set
        ProdParmScheduling  parm;
        parm.initParmDefault();
        parm.initFromProdParametersDim(prodTable.prodParametersDim());
        parm.CapLimited         = NoYes::No; // The APS system knows the capacity, resource, mat. availability better
        parm.MatLimited         = NoYes::No;
        parm.WrkCtrIdSched      = prodRoute.WrkCtrIdCost;

        // 3. Schedule the setup job, if any
        prodRouteJob = ProdRouteJob::findJobType(prodRoute.ProdId, prodRoute.OprNum, prodRoute.OprPriority, RouteJobType::Setup);
        if (prodRouteJob)
        {
            parm.initFromProdRouteJob(prodRouteJob);
            parm.SchedDirection = ProdSchedDirection::ForwardFromSchedDate;
            parm.SchedDate = prodRoute.FromDate;
            parm.SchedTime = prodRoute.FromTime;
            ProdUpdScheduling_Job::newParmBuffer(parm).run();
        }

        // 4. Schedule the process job
        prodRouteJob = ProdRouteJob::findJobType(prodRoute.ProdId, prodRoute.OprNum, prodRoute.OprPriority, RouteJobType::Process);
        if (prodRouteJob)
        {
            parm.initFromProdRouteJob(prodRouteJob);
            parm.SchedDirection = ProdSchedDirection::BackwardFromSchedDate;
            parm.SchedDate = prodRoute.ToDate;
            parm.SchedTime = prodRoute.ToTime;
            ProdUpdScheduling_Job::newParmBuffer(parm).run();
        }

        // 5. Lock the production order against any manual re-scheduling
        prodTable.reread();
        Args args = new Args(this);
        args.record(prodTable);
        ProdMultiLockForReschedule::construct(args).run();
    }
				
			

Remark: the highlighted line is used to change the work centre in the route operation. The APS system sends a new resource number, it is written directly into the route operation into the cost resource column. From there, the programme relays the changed resource number to the D365 planning core to reserve the capacity of the new work centre and de-reserve the capacity of the old.