Hi everyone,
We are migrating to Epicor from our current system, It is quite old and certain things are handled in very particular ways, which are no longer valid today. I will try to explain the problem as clearly as I can.
We are working with complex machines with multi-level BOMs and a multitude of available options. To accommodate this we are building a number of configurators and so far they worked well with less complex machines. However with more complex machines we ran into the following problem:
Let’s say the base machine BOM looks like this:
- Machine A
1.1. Subassembly A
1.1.1. Material A
1.1.2. Material B
1.1.3. Material C
1.2. Subassembly B
1.2.1. Material A
1.2.2. Material B
1.2.3. Material C
1.3. Subassembly C
1.3.1. Material A
1.3.2. Material B
1.3.3. Material C
Now, the way our current system works is by combining a base BOM with a kind of an overlay BOM that would contain additional parts required for a specific variant selected, but also parts which need to be removed with a negative quantity. When combined, the negative quantity in overlay BOM would cancel out material quantities in base BOM.
Base subassembly BOM:
- Subassembly A
1.1. Material A (Q:1)
1.2. Material B (Q:1)
1.3. Material C (Q:1)
Overlay BOM:
- Subassembly A-1
1.1. Material C (Q:-1)
1.2. Material D (Q:1)
Combined BOM:
- Subassembly A
1.1. Material A (Q:1)
1.2. Material B (Q:1)
1.3. Material C (Q:0)
1.4. Material D (Q:1)
I know that this exact behaviour cannot be replicated in Epicor as we cannot use negative quantities in materials. The simple solution is to engineer a full BOM for Subassembly A-1 and let the configurator pull the correct one. However I am trying to save our engineers time having to create/modify 100s, maybe even 1000s of BOMs. Also later on down the road, a single change in spec could result in having to modify 30-40 BOMs with all the different options we have.
My question is this: is there a way to modify the BOM of a subassembly on the fly during configuration? I’d like to try to avoid sub-configurators as we don’t want to add unnecessary complexity here.

