If you make what you sell, the interesting number isn’t the price of the parts. It’s what the finished thing actually cost - parts, plus the hours, plus the overhead those hours carry - and whether that matches what you thought it would.
This runs the making and books the cost as it goes, so the answer is there when the order closes rather than at a stocktake.
What you can do
- Keep versioned bills of materials with an output quantity, component lines and scrap allowance.
- Define routings: the ordered operations that make something, and the standard hours each takes.
- Set up work centers with a cost per hour and an overhead percentage.
- Run work orders through release, consume, log hours, complete and close.
- Watch work in progress carry the real cost of the work done so far, as you do it.
- Receive finished goods at actual cost, so the next sale’s margin is measured against what it really took to make.
- Settle the difference to a production variance account, so a closed order leaves nothing behind.
- See the cost breakdown on the order: material, labor, overhead, what completion relieved, and what a close would settle.
- Ask what you’re short of, and whether to buy it or make it, with the arithmetic shown on every line rather than a number you have to take on trust.
- Record the lot or batch a component arrived in, and which one went into which work order.
- Start a bill of materials from a kit you already sell, rather than retyping the same lines.
How it works in practice
Describe where the work happens (Manufacturing → Work Centers). A bench, a paint booth, a machine. Each carries a cost per hour and an overhead percentage applied on top of the labor, plus the two ledger accounts those applications credit. Leave the accounts unset and hours are still tracked - only the posting waits.
Describe how it’s made (Manufacturing → Routings). The operations in order, each naming a work center and its standard hours per batch of the BOM’s output. Editing a routing never touches a running work order, because operations are copied onto the order when it’s released. Changing the method tomorrow doesn’t rewrite what the floor is doing today.
Describe what it’s made of (Manufacturing → Bills of Materials). A BOM belongs to a finished product and carries a version and an output quantity, then component lines with a quantity per output and a scrap percentage. Attach a routing if you want one.
Then run the order (Manufacturing → Work Orders), in five steps:
- Release explodes the BOM into requirements - quantity times the planned output, plus scrap - reserves the stock, and copies the routing’s operations in with hours scaled the same way.
- Consume issues the components. Stock goes out, and their cost goes into work in progress.
- Log hours against each operation as the work happens. Labor is hours times the work center’s rate, overhead is a percentage on top, and both land in work in progress immediately, so WIP is never a stale number waiting for month end.
- Complete receives the finished goods into stock at the full accumulated cost: material, labor and overhead. That unit cost becomes the product’s cost going forward, which is what makes the next sale’s margin honest.
- Close settles whatever accumulated after completion to the production variance account, so a closed order ends with work in progress at exactly zero.
Rework is expected. Hours can still be logged on an order that’s done, which is why closing is a separate step from completing, and why the residual gets settled rather than assumed to be nothing.
Check the figures on the order itself. The cost breakdown is computed by the same code that writes the journals, so the screen and the ledger can’t tell you different things.
Good to know
- You’ll need the Manufacturing extension switched on (Settings → Extensions), and stock switched on first, since components and finished goods move through the same single stock path as everything else.
- Missing accounts skip the posting, not the work. Stock still moves and hours still accumulate when a work center or work order has no account set, and only the journal waits. Worth checking your first order end to end before you trust the second.
- Planning answers one question: what’s short today. It nets open work-order demand and your minimums against stock on hand, less what’s reserved, plus what’s already on order - then says buy or make, and shows you how it got there. What it deliberately won’t do is pretend to schedule: there are no lead times, no “needed by” dates, and a suggestion to make something doesn’t pull its own components through. Nothing is saved either, so the answer is always today’s, not a plan that quietly went out of date.
- Only released work orders count as demand. An order still at planned is a maybe, and buying stock for a job that never runs is how a stockroom fills up.
- A BOM’s routing is chosen when the BOM is created. Attaching a different routing later means a new version of the BOM, which is arguably the right record anyway, since the method changed.
- Lot capture is a code you type, not a lot master. You can record a batch on the goods receipt and pick it again when you issue components, and the code is kept on both ends so the trail reads from either direction. But there’s no register of lots, no expiry date and no picking the oldest batch first. The code isn’t checked against what’s in stock either, so a typo makes a lot that looks like it’s overdrawn rather than being refused, and a component issued from two batches keeps only the second code. Read that again before promising anyone traceability - if you’re audited on batches, this isn’t yet the tool for it.
- Selling a kit isn’t manufacturing. If you only need several products to appear as one line on an invoice, product groups do that without this extension. See product groups, bundles and kits.