• Home
  • About Me
  • Contact Me
  • Downloads
  • White Papers
  • Web Sites
  • Post List
  • Articles
  • FAQ

Olof Simren - Microsoft Dynamics 365 Business Central Blog

  • Home
  • About Me
  • Contact Me
  • Downloads
  • White Papers
  • Web Sites
  • Post List
  • Articles
  • FAQ

Alternative Production BOMs and Routings

June 14, 2015 Posted by Olof Simren Development, Manufacturing 22 Comments

Using alternative production BOMs or routings is quite common in a manufacturing environment. It could for example be that larger orders are run in higher capacity machines, versions of products are produced with slight variations in components (like different colors), or you might produce the same item in two different locations and therefor need two different routings. These are just some examples, there are many more scenarios like that where you might need to change the production BOM or routing based on different factors.

Microsoft Dynamics NAV allows you to manually change both the routing and production BOM used on each individual production order. This blog post describes how this is done manually and also how you can automate the process with some relative simple modifications. If you frequently are changing production BOMs and/or routing on production orders then automating it would be an alternative (kind of a requirement if you run MRP and want accurate suggestions).

In the examples below I will use a bicycle that is produced in two different locations and in different colors. The different colors are managed using variant codes on the item like below (blue and red color bicycle).

Variants-Codes-On-Item-Card-Dynamics-NAV

The bicycle has a standard production BOM and a routing that represent how it is typically produced (and it is also the ones that is used in the standard cost roll-up). Those are what are selected on the item card for the bicycle.

Item-Card-BOM-Routing-Dynamics-NAV

In addition to this I have create two alternative production BOMs for the two different colors; 1000-BLUE for a blue bicycle and 1000-RED for a red bicycle. They share the same components except for the paint component (blue paint in one and red in the other).

Production-BOM-Blue-Bicycle-Location-Dynamics-NAV

For the routing I have an alternative routing created for producing the bicycle in my TAMPA location. This alternative routing have a different work center and a different operation.

Routing-TAMPA-Location-Dynamics-NAV

That should be what is needed in terms of setup.

Manually Change Production BOM or Routing

Now when a production order is created it will always use the production BOM and routing from the item card, to manually change this you just select an alternative on the production order line and then refresh the component and/or operations. Below I changed the routing no. from 1000 to 1000-TAMPA.

Change-Routing-BOM-On-Production-Order-Line-Dynamics-NAV

When you refresh the production order after you have changed the production BOM or routing then remember to uncheck the Line option, otherwise the field you just changed will be set back to the standard values.

Refresh-Production-Order-Dynamics-NAV

Now the components and routing on the production order will be according to how the alternatives are setup. Simple and easy.

Note that you can also change the components and/or the routing manually on individual production orders as well without changing the production BOM no. and routing no.  on the production order line. This might be the more common way of doing it if the change is due to an exception (like a machine that is down, or a component that is missing).

Automatically Change Production BOM or Routing

Now to the fun stuff! 🙂

If you want Dynamics NAV to automatically select a production BOM or routing based on criteria like order quantity, location or variant code then this is relatively easy to do with a customization. Below is a suggestion of how to do it.

We need a setup to define the criteria for the alternative BOMs and routings. For this I create two new tables, one called Alternative Prod. BOM and the other called Alternative Routing. You could potentially do it with one table, but this is how I did it in this case (having two different tables could be an advantage from a permissions point of view, if you for example have engineers that are maintaining the BOMs and manufacturing people maintaining the routings then you probably want it separated).

The primary key for both the tables are Item No., Variant Code, Location Code, Min Order Size and Max Order Size. What fields you put in the tables depends on what logic you want NAV to use when selecting the alternatives.

The alternative Prod. BOM table is according to below. I have entered a setup to link the two production BOMs to the item and its variant codes.

Alternative-BOMs-Dynamics-NAV

The alternative Routing table is according to below. I have entered a setup to link the alternative routing to the TAMPA location for item 1000.

Alternative-Routings-Dynamics-NAV

You can potentially add the above tables to the item list and card like below, so that users can easy access them from an item.

Alternative-BOMs-Routings-Item-Card-Dynamics-NAV

Now we need to write the logic for NAV to select the correct alternative. The logic is going to be used both when new production orders are created manually and when the planning worksheet is generated as part of MRP. If I know that something is going to be used in multiple places I typically place the code in a separate codeunit (instead of create new functions in each of the objects with the same kind of code). In this case I created an Alternative Prod. Mng codeunit where I placed two functions, one for retrieving the production BOM and one for the routing.

Alternative-Production-Management-Dynamics-NAV

The functions above are self-explained I think, they basically returns the production BOM no. or routing no. based the parameters it is called with. If no alternative is found then the standard one from the item record is returned.

Now we have the tables where we do the setup and the functions to select and return the production BOM no. and routing no.. Next we need to place some code in the standard objects where the production BOM and routing is going to be selected.

The object to change is the prod. order line table, this is where the standard Dynamics NAV code for retrieving the production BOM no. and routing no. from the item record exists. We changes this so that the new functions in the codeunit above is used instead. This is the in the OnValidate trigger of the item no. field in that table. The code needs to be changed in two places according to below.

Code-Change-Prod-Order-Line-Table-Dynamics-NAV

The above code change is all it takes to have production order that are refreshed to use the alternative production BOMs and routers. If you also want the same logic to happen if a user manually changes a production order line you need to insert the same code into the OnValidate triggers of the fields that are included in the logic. Wrap the code with ‘IF CurrFieldNo = FIELDNO(“Variant Code”) THEN BEGIN’ to not get a crazy circular reference. Something like below.

Code-Change-Prod-Order-Line-Table-2-Dynamics-NAV

This should be it for the production orders that are created manually. Next we do similar changes to the MRP suggestions.

To do this we need to change the requisition line table. The change to the code will be very similar to what was done above to the prod. order line table. In this case it is in the OnValidate trigger of the replenishment system field where we basically replace the places where NAV retrieves the production BOM no. and routing no. from the item record with the new functions in the codeunit. Something like below.

Code-Change-Requisition-Line-Table-Dynamics-NAV

And just like with the prod. order line table, if you want Dynamics NAV to automatically update the production BOM and routing if a user manually makes changes to the MRP suggestions in the planning worksheet then you will have to add code on those fields that are included in the logic, like below.

Code-Change-Requisition-Line-Table-2-Dynamics-NAV

This should be all, time to test it! 🙂

I create a new production order for 10 bicycles by entering the item no., due date, location code, and quantity and then hit refresh. I can see that a production BOM and routing is selected on the line and it seems to be as expected (the standard ones).

Production-Order-Standard-BOM-Routing-Dynamics-NAV

Now I change the location code of the production order to the TAMPA location and refreshes the entire production order. The routing on the line changes accordingly. Nice! 🙂

Production-Order-Alternative-Routing-Dynamics-NAV

Next I change the variant code on the line to be the blue bicycle variant and you can see the production BOM changes. You also need to recalculate the components after this (Dynamics NAV does not have a variant code in the header of a production order, which is a bit strange in my mind, but off-topic for this post).

Production-Order-Alternative-BOM-Dynamics-NAV

The production order all seems to work fine. We also need to test the MRP suggestion. This can be done by setting up some SKUs with some planning parameters, running the plan and look at the suggestion. In this case I create 4 SKUs (blue/red variants on two different locations) with reorder point higher than the projected quantity on hand.

SKUs-For-Bicycles-Dynamics-NAV

When I run the MRP I get the following suggestions in the planning worksheet, where the production BOMs and routings are selected based on my criteria. Sweet! 🙂

Planning-Worksheet-Alternative-Production-Dynamics-NAV

Just to be safe you should also check the planning components and planning routing to confirm that they are according to the production BOM and routing in the planning worksheet. This is what will drive the demand for the components and the allocation towards the work centers.

Planning-Components-Dynamics-NAV

Planning components above looks good (the red variant gets the red pain component).

Planning-Routing-Dynamics-NAV

Planning routing also looks good (the suggestions on the TAMPA location gets the TAMPA routing).

Note that if you are using versions of production BOMs and routings then this should work as well since the code for finding the valid version is in the OnValidate triggers of the production BOM no. and routing no. fields.

Summary

As a summary I would say that if you are handling exceptions with alternative production BOMs or routings then changing them manually on individual production order would probably be fine (and this way you don’t need to do any modifications). You can also manually change individual components and operations without using any other production BOM or routing.

If alternative production BOMs or routings are frequently used, the doing some kind of modification like above would make sense (and it is not a big thing to do as you can see). The logic you build into selecting what production BOM or routing to use would be up to your business requirement.

Share this:

  • Share on Facebook (Opens in new window) Facebook
  • Share on X (Opens in new window) X

Related


Discover more from Olof Simren - Microsoft Dynamics 365 Business Central Blog

Subscribe to get the latest posts sent to your email.

Tags: DevelopmentMRPProductionProduction BOMProduction OrdersRoutingVariants
22 Comments
Share
17

About Olof Simren

I am a Microsoft Dynamics NAV and 365 Business Central Expert, I started implementing Microsoft Dynamics NAV in 2002, back then it was called Navision Attain. Throughout the years there has been many exciting implementations in different parts of the world, all of them with different challenges but with one common theme; manufacturing. As a consultant, I bring over 20 years of experience in implementing Microsoft Dynamics NAV and 365 Business Central within manufacturing and distribution companies. The services I offer includes project management, consultation, development and training. Feel free to contact me if you need help with anything related to Microsoft Dynamics NAV or 365 Business Central. I work through my company Naviona where I team up with other skilled Microsoft Dynamics NAV and 365 Business Central Experts.

You also might be interested in

Turn Report Selections into a Selection Dialog

Jun 12, 2014

Here is a small trick that I have used a[...]

Subcontracting Part 1: The Basics

Aug 5, 2014

This is the first part of a series of blog[...]

Reversing Production Output and Consumption

Oct 27, 2016

Production orders in Dynamics NAV allows you to consume both[...]

22 Comments

Leave your reply.
  • Mike
    · Reply

    June 15, 2015 at 3:51 AM

    Clear and helpful as always, thanks!

  • Ali
    · Reply

    July 21, 2015 at 6:16 AM

    Great Post…Very Useful. Thank you!

  • Moreno
    · Reply

    July 22, 2015 at 5:44 AM

    Very clear and of great interest to practitioners NAV. I studied, like, article about maintenance. The same appreciation I have. Thank you!

  • Angeles
    · Reply

    February 28, 2016 at 6:06 AM

    Kenny,How does the process go for their sales? From what you say, I furgie it is something like this (for the sake of clarity company is your customer and customer is theirs:1. The customer orders a product (still sounds much like an installation to me is it an installation, or is it really a product?)2. The company asks their principal for configuration (blueprint)3. The company assembles the product (where is it assembled, at the company’s place, or at the customer’s place?)4. For this one I’m not sure: The company delivers the product to the customerHow does the invoice look like? Does it contain the list of assembly parts, or the finished product? Does the invoice list assembly services (machine costs, workers costs) as separate lines? Is any scrap involved? How is it handled?The answer how to do it in NAV depends a great deal on the answers to these questions.

  • Manish
    · Reply

    June 29, 2016 at 10:09 AM

    Hey there Olof,

    I just want to know if we can define BOM based on quantity of one of the child item.In process industry ,Output quantity is defined based on input size.Also other component requirement is calculated based on key RM input.

    • Olof Simren
      · Reply

      Author
      June 30, 2016 at 9:41 AM

      Hi Manish,
      That sounds like it would require a modification.
      Do you want the entire production order (output, other components, operations) to adjust based on the quantity of one the components?

      /Olof

  • Glenn Cook
    · Reply

    September 28, 2016 at 6:33 PM

    Hi Olof,
    When using an Alternative BOM and/or Routing is it possible to also change the Unit Cost (despite changing the Production BOM and Routing the Unit Cost remains as per the Item Card). Also, on the Prod. Orders list under Routing the default Routing code (from the Item Card) also remains and cannot be amended – is there a way to resolve this?

    • Olof Simren
      · Reply

      Author
      September 28, 2016 at 6:49 PM

      Hi Glenn,
      You can change the unit cost manually, if you want it to be adjusted based on the Production BOM or Routing you will have to make some kind of modification.
      This unit cost is only used for the interim inventory cost, and the actual cost will be based on whatever is posted against the order independent of this field.
      The routing no. in the header is a field that can be added to the page and changed, to be honest I don’t know anyone using that field since it is the line that determines the routing.

      /Olof

  • BruceJ
    · Reply

    December 7, 2016 at 3:25 PM

    Hi Olof,
    Thank you for your helpful examples.

    We have two factories (H and N) that make the same product. Each factory has its own cost structure so the cost to produce a unit of 300-001 at H (say $1.00) is different to the cost of 300-001 at N (say $2.00). These have been set up in NAV as two separate items (300-001H and 300-001N) each with their own separate BOMs, routings and overheads. While this works from a production point of view, it causes problems for sales (who just want to sell a generic 300-001 at a standard unit cost), production planning (who just want to schedule 300-001 to meet those sales orders), and logistics (who just want to ship the required number of units of 300-001 from wherever to fulfil the sales orders).

    Based on what you have outlined above, we could set up a generic item (300-001) which as a default would have the 300-001H BOM, H routing and H overhead (and therefore a standard cost equivalent to the current 300-001H item). When we manufacture the product at H, the production order just uses the default settings as defined in the item card for 300-001. Then on those occasions when we need to make the product at N, we change the BOM to 300-001N and the routing to N. However, this raises the following questions in respect of production variances, recoveries and inventory valuation when the product is made at N:

    1. Materials variances: are these generated based on the default 300-001H BOM or the alternate 300-001N BOM? And would this be posted to the N cost centre or the default H cost centre?
    2. Labour and variable cost recoveries (which are associated with the Work Centres in the Routings): are these generated based on the default H routing or the alternate N routing? Again, would this be posted to the N cost centre or the default H cost centre?
    3. Overhead recovery: since this is specified in the item card, I assume this would always be the default rate (i.e. the H overhead)? And would this be posted to the N cost centre or the default H cost centre?
    4. Inventory value: can you confirm that the output produced would be valued at the default standard cost for 300-001 (i.e. based on the H costs) and not the alternate BOM and routing?

    Any other insights would be much appreciated!

    • Olof Simren
      · Reply

      Author
      December 8, 2016 at 9:24 AM

      Hi Bruce,
      Thanks for your comment.
      My overall thought is to use one item number and then do a modification like above, I think in the long run this is better that having two separate items.

      Here are my replies to your questions;
      1. The variances will be generated based on the default BOM and Routing. NAV calculates the variances by comparing what was posted against the production order with what BOM and Routing that was used when you did the cost roll-up (which will be the default ones). Not sure what a cost center is in your case, the variances are going to be posted onto the same g/l accounts no matter what location the production order is on. What I have done in the past is to enhance NAV to allow default dimensions on the locations, this way you can get a P&L by location (assuming a cost center in your case is factory H vs. N). That’s another modification as well, but for companies that have multiple factories within the same company it is a common one to make.
      2. This works the same way as with the material variances (answer #1).
      3. Same answer as for question #1 and 2.
      4. Yes, that’s correct, assuming you are on the standard costing method. If you use FIFO you will have actual cost and they will be based on how each individual production order is posted.

      I hope this helps!

      /Olof

  • Luca
    · Reply

    February 26, 2017 at 3:11 AM

    Hi all.
    I try this solution on a custumer to resolve some problem with variants.
    I modify also the low level calculation bacause the system, using alterantive Prod BOM, don’t schedule correctly with MRP if the Prod BOM is not set on item Card.
    For the rest, Alterantive Prod BOM is very usefull.

    Thank you

    • Olof Simren
      · Reply

      Author
      February 26, 2017 at 12:03 PM

      Hi Luca,
      Many thanks for you feedback!

      /Olof

  • L.A
    · Reply

    May 10, 2017 at 1:44 PM

    HI Olof,

    I have a similar issue but not too complex as such. I have read the article and very helpful, Many Thanks.

    scenario:

    I have a finish product A as an item And Semi finish product SFPA as an item also.

    Therefore I have ”BOM :A” and ”BOM: SFPA” RESPECTIVELY.

    Note that ”BOM: A” HAVE SFPA as a component item in its BOM.

    Now the issue is that I need another version of “BOM: SFPA” Which i can call ”BOM: SFPA-V2”
    So that when producing the semi-finish product A (SFPA) I can decide which BOM TO USE base on the ingredient used during production.

    Proposed Solution:
    I have created another BOM Called ”BOM: SFP-V2”
    and I have MANUALLY removed the ”BOM: SFPA” FROM THE ITEM CARD OF ITEM ”SFPA” AND REPLACE IT WITH THE NEW BOM “” SFP-V2″. for a new production order of semi finish product.

    and the semi-finish product produced will be used in ”BOM : A” to produce the final product.

    so any time we want to use an alternative BOM TO PRODUCED THE SEMI-FINISH PRODUCT I WILL BE JUST CHANGING MANUALLY THE BOM ON THE ITEM CARD OF THE SEMI-FINISH PRODUCT NO NEED TO CHANGE THE BOM OG THE FINAL PRODUCT.

    Please is this correct or best practice???

    and is this going to affect costing of the semi-finish product at any point we shift from one version of BOM to the other?

    Many Thanks for your feedback!!

    • Olof Simren
      · Reply

      Author
      May 12, 2017 at 8:50 AM

      Hi LA,
      Thank you for you comment.
      You should be able to just change the Production BOM on the production orders instead of the item card.
      I would recommend setting up the item card with the most commonly used Production BOM, and for order that are going to use the other Production BOM you just change it on the line of the production order and refresh the components using the standard refresh function.
      If you change the Production BOM it will most likely affect the costing (since the components are different), if you are using standard cost then this will affect the material variance, if you are using FIFO then this will affect the cost of the produced product.

      I hope this makes sense.

      /Olof

      • LA
        · Reply

        May 15, 2017 at 6:03 AM

        Hi Olof,

        Many Thanks for your GREAT FEEDBACK.

        If i leave the first version of the production BOM on the item CARD and ask users to be selecting the new versions on their production line there is a high probability they may forget and produced with the old version. Note that we are using FIFO.
        Q1)Please the implication on COSTING is it on the semi-finish product only or it will affect the finish product cost as well?
        Q2) Is the effect going to be negative, ?? ( Actually i was expect cost of semi finish product to increase or decrease depending on the unit cost of the new component introduced in the new version and when i change it back to the first version the system should be able to calculate cost based on the old version so that in my costing analysis i can have the trend of cost changing depending on the change of component???

        Kindly help me to understand the costing effect( IMPACT) of changing the BOM on the item card.

        Many Thanks.
        L.A

        • Olof Simren
          · Reply

          Author
          May 15, 2017 at 10:35 AM

          Hi LA,
          The costing will affect both the semi-finished product and the finished product (since the cost of the semi-finished product gets added to the finished product).
          The cost would either go up or down, so I am not sure about your question asking if it is negative.

          You might also want to look into the Production BOM Versions, then you can change BOM from one to the other by setting start and ending dates on the versions and you don’t need to update the item card.

          /Olof

          • LA

            May 15, 2017 at 2:49 PM

            Many Thanks Ola for your great replies !

  • Brett
    · Reply

    December 21, 2017 at 3:38 PM

    Hello Olof,

    Great article, well documented and clear as glass.

    Would this functionality be possible with Nav2017?

    • Olof Simren
      · Reply

      Author
      December 23, 2017 at 10:29 AM

      Hi Brett,
      Yes, this would apply to NAV 2017 as well.

      /Olof

  • Tam Bui
    · Reply

    July 13, 2018 at 5:56 AM

    Great Post!

    I’m stuck in the below situation:
    Product A (BOM A: RM1, RM2, Product B)
    Product B (BOM B: RM3, RM4)
    I create a Sales Order with Product A
    and then I create a Production Order from “Sales Order Planning”, (with phantom BOM setup) system will create one Production Order for Product A with component lines are RM1, RM2, RM3, RM4.

    How can I create 2 separate Production Order for:
    Product A with component lines are RM1, RM2, Product B
    Product B with component lines are RM3, RM4

    I’m using NAV 2018

    Many thanks.
    Tam

  • Andrew
    · Reply

    July 30, 2018 at 1:58 PM

    Hey Olof,

    thanks for this sharing your approach and the related code. It works just fine.

    The only issues I have are regarding the low-level code calculation. What if you want to have differing low-levels on variants of a single item? Doesn’t it break the standard behavior?

    In that case, am I right to suggest that you would have to invent a low-level code for variants and adjust the low-level code calculation (and MRP) accordingly in that case?

    Best, Andrew

    • Olof Simren
      · Reply

      Author
      July 31, 2018 at 9:42 PM

      Hi Andrew,
      Thanks for your comment, good question.
      I don’t think that’s an issue, the above approach allows you to have different BOMs per variants, that in itself does not affect the low-level code. What affects the low-level code is what BOMs the variants exists in (as components) and having variants in BOMs is standard NAV (in which case it most likely puts the deepest low-level code on the item and plans all variants on that level).

      /Olof

Leave a Reply

Your email is safe with us.
Cancel Reply

Subscribe to My Blog via Email

Check Out Our Apps in AppSource

My Dynamics NAV Partner

Naviona, LLC

Categories

  • Assembly (3)
  • Development (35)
  • Finance (14)
  • General (28)
  • Inventory (24)
  • Manufacturing (36)
  • Miscellaneous (27)
  • Purchase (9)
  • Sales (11)
  • Warehouse (7)

Tags

.net Add-in AI AppSource Assembly Assembly BOM Business Central CAL Capacity Consumption Contact Copilot Costs Customer Development Dimensions Excel Finance Flushing General Ledger Inventory Item Item Tracking Low-Level Code MRP NAV 2015 NAV 2016 Output Planning Production Production BOM Production Orders Purchase Orders Receipts Reporting Reports Routing Sales Sales Order Stockkeeping Unit Subcontracting Task List Warehouse Warehouse Shipment Work Center

Recent Posts

  • Business Central Configuration Audit using Vibe Coding
  • Copilot in Planning Parameter Worksheet
  • Copilot in Planning Worksheet
  • Copilot Inventory Queries
  • Record Deletion Tool for Business Central in AppSource
  • Reopen Finished Production Orders
  • XML Buffer and CSV Buffer Tables
  • Functionality Improvements in NAV 2017
  • Reversing Production Output and Consumption
  • Return Merchandise Authorization (RMA)

Categories

  • Assembly
  • Development
  • Finance
  • General
  • Inventory
  • Manufacturing
  • Miscellaneous
  • Purchase
  • Sales
  • Warehouse

Contact Us

We're currently offline. Send us an email and we'll get back to you, asap.

Send Message

Categories

  • Assembly (3)
  • Development (35)
  • Finance (14)
  • General (28)
  • Inventory (24)
  • Manufacturing (36)
  • Miscellaneous (27)
  • Purchase (9)
  • Sales (11)
  • Warehouse (7)

Tags

.net Add-in AI AppSource Assembly Assembly BOM Business Central CAL Capacity Consumption Contact Copilot Costs Customer Development Dimensions Excel Finance Flushing General Ledger Inventory Item Item Tracking Low-Level Code MRP NAV 2015 NAV 2016 Output Planning Production Production BOM Production Orders Purchase Orders Receipts Reporting Reports Routing Sales Sales Order Stockkeeping Unit Subcontracting Task List Warehouse Warehouse Shipment Work Center

Recent Posts

  • Business Central Configuration Audit using Vibe Coding
  • Copilot in Planning Parameter Worksheet
  • Copilot in Planning Worksheet
  • Copilot Inventory Queries
  • Record Deletion Tool for Business Central in AppSource
  • Reopen Finished Production Orders
  • XML Buffer and CSV Buffer Tables
  • Functionality Improvements in NAV 2017
  • Reversing Production Output and Consumption
  • Return Merchandise Authorization (RMA)

Recent Comments

  • Olof on Business Central Configuration Audit using Vibe Coding
  • Andrew Trayfoot on Business Central Configuration Audit using Vibe Coding
  • Barrett Allen on Reopen Finished Production Orders
  • Kateryna on Business Central Configuration Audit using Vibe Coding
  • Takeshi Setoya on Reopen Finished Production Orders
  • Steve on Consignment Inventory
  • Olof Simren on Copilot in Planning Worksheet
  • Omaer Amjad on Copilot in Planning Worksheet

© 2026 · Olof Simren

  • Home
  • About Me
  • Contact Me
  • Downloads
  • White Papers
  • Web Sites
  • Post List
  • Articles
  • FAQ
Prev Next