Assembly
The Dual Unit of Measure app allows you to assemble and consume items in weight/volume and units. The app also supports defining Assembly BOMs using Dual Unit of Measure items as components.
This documentation assumes you have a working knowledge of Assembly in Business Central. If you are new to Assembly, we recommend that you familiarise yourself with the standard Business Central documentation, which you can find here.
Assembly BOM
We have added the Units Per field on the Assembly BOM lines, which you can specify for Dual Unit of Measure component items. This field is used to specify the number of units of the component required to assemble each unit of the parent item.
When the finished item is a Dual Unit of Measure item, the Assembly BOM page also shows the Units per (Assembly UOM) and Quantity per (Assembly UOM) columns. These fields always reflect the values based on the finished item's unit conversion — regardless of the BOM's unit of measure. You can update these values, and the app will automatically update Units Per and Quantity Per.
The following fields are added to the Assembly BOM lines:
| Field | Purpose |
|---|---|
| Unit of Measure - Units | Specifies the Units unit of measure of the component item. This is read-only and is derived from the item card. |
| Units Per | Specifies how many units of the component are required to assemble one unit of the parent item. If you enter a value here, the app will update the Quantity Per using the setup against the item. If you update the Quantity Per, the app updates this field, too. |
| Units per (Assembly UOM) | Specifies the units per based on the finished item's unit conversion. See additional info above. |
| Quantity per (Assembly UOM) | Specifies the quantity per based on the finished item's unit conversion. See additional info above. |
Assembly Orders
We have extended the Assembly Order page to support Dual Unit of Measure items.
Assembly Order Header
The following fields are added to the header:
| Field | Purpose |
|---|---|
| Units | Specifies how many units of the assembly item you expect to assemble. If you enter a value here, the app will update the Quantity using the setup against the item. If you update the Quantity, the app updates this field, too. |
| Units to Assemble | Specifies how many units of the assembly item you want to post for this run. To post the full order, leave this unchanged. If you enter a value here, the app will update the Quantity to Assemble using the setup against the item. |
| Remaining Units | Specifies how many units of the assembly item remain to be posted as assembled output. |
| Assembled Units | Specifies how many units of the assembly item have already been posted as assembled output. |
| Reserved Units | Specifies how many units of the assembly item are reserved against this assembly order. |
Assembly Order Lines
The following fields are added to the component lines:
| Field | Purpose |
|---|---|
| Unit of Measure - Units | Specifies the Units unit of measure of the component item. This is read-only and is derived from the item card. |
| Units Per | Specifies how many units of the component are required per unit of the assembly item. If you enter a value here, the app will update the Quantity Per using the setup against the item. If you update the Quantity Per, the app updates this field, too. |
| Units | Specifies the total units of this component required for the full assembly order. This is calculated from Units Per and the header Quantity and is read-only. |
| Units to Consume | Specifies how many units of the component you want to post as consumed in this run. If you enter a value here, the app will update the Quantity to Consume using the setup against the item. |
| Consumed Units | Specifies how many units of this component have already been posted as consumed during assembly. |
| Remaining Units | Specifies how many units of this component remain to be consumed. |
| Reserved Units | Specifies how many units of this component are reserved for this assembly order line. |
When the finished item's unit of measure differs from its Units unit of measure (e.g. the assembly order is in KG but the finished item's units UOM is PCS), the Units Per and Quantity Per on the component lines are automatically converted from the BOM values when the order is created. The BOM's Units per (Assembly UOM) and Quantity per (Assembly UOM) always reflect the original BOM-defined values regardless of the assembly order's unit of measure.
Assembly Quotes
The Assembly Quote page has also been extended. You can enter Units on the quote header for Dual Unit of Measure items. The Units field behaves identically to the Assembly Order.
Assemble to Order
The app supports Assemble to Order (ATO) scenarios linked to Sales Orders and Sales Quotes. When a sales line triggers the creation of an assembly order, the units from the sales line are carried to the assembly order header. During partial posting, the app ensures the units on the assembly order remain in sync with the quantity being shipped from the sales line or warehouse shipment.
Posted Assembly Orders
The Posted Assembly Order page has been extended to show the Units that were assembled. The posted subform lines also show the Units Per and Units that were consumed per component.
Scenarios
Scenario 1: Assembly BOM defined in Units
Item Card
Below is the item card for our finished assembly item. You will notice:
- The item is a Dual Unit of Measure item.
- The Base Unit of Measure is KG.
- The Units Unit of Measure is PCS.
- The Ratio - Weight/Volume to Unit is set to 2.5, which means the average weight per piece is 2.5 kg.
Assembly BOM
Below is the Assembly BOM for the finished item. You will notice:
- The Units Per is set on each Dual Unit of Measure component, specifying how many units of each component go into one unit of the assembly item.
- The Units per (Assembly UOM) and Quantity per (Assembly UOM) columns show the same values expressed in the assembly item's own unit conversion.
Assembly Order
Below is the Assembly Order for the finished item. You will notice:
- The Units on the header is set to 10, so we plan to assemble 10 pieces.
- The Quantity is set to 25, reflecting the average weight of 2.5 kg per piece.
- The Units to Assemble mirrors Units for a full order run.
Component Lines
Below are the component lines for the Assembly Order. You will notice:
- Each Dual Unit of Measure component shows Units Per, Units, Units to Consume, and Remaining Units.
- The Units column reflects the total units required for the full order (Units Per × header Quantity).
- The Units to Consume column reflects the units to consume in this run (Units Per × Quantity to Assemble).
Scenario 2: Partial Assembly Posting
When you post an Assembly Order partially (i.e. Units to Assemble is less than Units), the app:
- Reduces Assembled Units and Remaining Units on the header accordingly.
- Reduces Consumed Units and Remaining Units on the component lines.
- Carries the correct units to the Item Ledger Entries and Posted Assembly Order.
Unsupported Scenarios
The following scenarios are not supported by the app. If you attempt to use them, the units recorded on the resulting Item Ledger Entries may be incorrect.
Multiple Item Tracking Lines on a Lot-Tracked Assembly Output
When the finished good on an Assembly Order is lot-tracked, the app expects a single item tracking line on the assembly header output before each post. Creating two or more item tracking lines on the header output — whether for the same lot number or different lot numbers — in a single posting run is not supported. In this scenario, the app is not able to correctly split the header Units across the multiple tracking lines, and the resulting Item Ledger Entries will not reflect the expected units.
Workaround
Instead of assigning multiple item tracking lines in one go, split your posting into multiple runs:
- Set Units to Assemble on the header to the portion you want to post against the first lot.
- Assign a single item tracking line to the header output for that lot and quantity.
- Post the assembly order.
- Repeat for the next lot: set Units to Assemble again, assign a single tracking line, post.
- Continue until the full order is posted.
Each post run produces its own Posted Assembly Order and its own Item Ledger Entry with the correct lot number and units.
This limitation only applies to the finished good's item tracking on the assembly header. Item tracking on component lines (Assembly Lines) supports multiple tracking lines per line, and is covered by the automated tests listed below.
Automated Test Coverage
For the full list of automated test scenarios, see the README.