Skip to content
ERP for manufacturing

ERP for manufacturers whose shop floor has outgrown the standard work order

Your BOMs are in the system and work orders get raised on time. But rework is tracked on a whiteboard, scrap gets booked on Friday from memory, and finance has stopped trusting the job cost report. That gap between the planning office and the floor is what we build modules for.

Example request from a manufacturing team

ERPNext v16

Where standard ERP gets awkward in manufacturing

Scrap booked from memory

Operators know exactly why parts failed. By the time someone types it in at the end of the week, the reason is "other" and the quantity is a guess.

Rework that never appears in the system

Parts go back through a station twice, eat an hour of labour, and the work order still shows the original routing time. Your costing looks better than it is.

Subcontracted steps you can't see

Brackets leave for powder coating on a Tuesday. The system can't say how many came back, how many are still at the coater, or what was rejected on return.

Downtime logged on a whiteboard, if at all

The press was down for three hours. The only record is a supervisor's text message, so the capacity plan keeps assuming it runs all shift.

The floor runs on paper even when the office doesn’t

Most manufacturers we talk to aren’t short of software. Sales orders, purchasing and the general ledger are usually in decent shape. The trouble starts the moment a work order is released. The planner’s view says 400 brackets are in progress. The floor knows 26 of them are sitting in a red tote next to the press brake, and half of those can be saved.

That information matters. It changes material requirements, it changes the delivery date the customer was promised, and it changes what the job actually cost. If it lives on a clipboard, your ERP is running a slightly fictional factory.

What ERPNext and Odoo already do on the floor

Before anyone builds anything, it’s worth knowing how much is already there.

ERPNext covers BOMs with operations, Routings, Workstations with hour rates, Production Plans that explode demand into Work Orders and Material Requests, and Job Cards with time logs. There’s a Downtime Entry DocType, a scrap items table on the Job Card, process loss on the BOM, and proper Subcontracting Orders and Receipts since v14. Quality Inspections can be required on receipt, during manufacture or on delivery.

Odoo has manufacturing orders split into work orders, work centres with OEE and loss reasons, unbuild orders, scrap from the MO, and by-products. The shop floor tablet view is good. Quality control points and PLM with engineering change orders are Enterprise apps, so budget for that if you need them.

If your process is “make the thing the BOM says, using the routing”, you may not need a custom module at all. Some settings and a couple of Print Formats will get you there.

Where manufacturers usually end up customising

The requests we see from manufacturing teams are rarely exotic. They’re the places where the standard model is one level too simple:

  • Reject reasons with consequences. Every reject carries a reason code as well as a quantity, and the code decides whether the part is scrapped, reworked or returned to the supplier.
  • Rework as a real loop. A new job card for the rework operation, with its own time, feeding back into the original work order’s cost.
  • Subcontractor tracking by batch. How many went out, how many came back, how many failed incoming inspection, per dispatch.
  • Customer-specific inspection sheets. One customer wants three dimensions checked on every tenth part. Another wants a signed certificate with each shipment.

For those, a proper manufacturing module with job cards and routings plus a quality management module for inspections and non-conformance is usually the right split.

Worked example: rejects at a bending station

Take a sheet metal shop running a work order for 400 brackets. Steel and consumables cost $3.20 a bracket. At the bending station, Dev rejects 26 parts. He taps “reject” on the tablet, picks “springback out of tolerance” for 18 and “cracked on bend” for 8.

The module does the rest. The 8 cracked parts are scrapped, so $25.60 of material is booked against the work order. That’s 2% of the batch, under the 5% threshold, so no alert. The 18 reworkable parts get a rework job card at 0.15 hours each, which is 2.7 hours at the $40 workstation rate, so $108 lands on the job cost.

Next week a different coil comes in and the same job scraps 30 of 400. That’s 7.5%. The production manager gets a notification with the coil’s batch number, and purchasing can see which supplier to call. None of it depended on someone’s memory on Friday.

On ERPNext this is a Frappe app with a Reject Log child table on Job Card, a controller hooked through doc_events, and a Script Report for scrap by reason. Our page on ERPNext custom module development shows how that app is laid out. On Odoo it’s an addon that _inherits mrp.workorder, covered on the Odoo module development page.

Requests we’d talk you out of

A few ideas come up often and tend to go badly. A finite capacity scheduler with drag-and-drop Gantt charts is a product in its own right, and you’ll be happier buying one and syncing it. Real-time machine dashboards need an MES or IoT layer before the ERP sees anything useful. And costing every operation to the second creates data that sits unread. Track the three or four losses that actually move your margin, then add more.

Still choosing a platform? Read our ERPNext vs Odoo comparison first. If you produce food or drink, the food and beverage page covers batch genealogy, which works differently.

Modules manufacturing teams start with

Guides for manufacturing teams

How it works

From a paragraph to a pull request

The long version
  1. 01

    Describe it

    In your own words. Paste the spreadsheet or a photo of the paper form if that's easier.

  2. 02

    Answer a couple of questions

    It asks only what it can't work out from your setup, like who's allowed to override.

  3. 03

    Try it on a sandbox

    A copy of your site with the module installed. Break it, then ask for changes.

  4. 04

    Merge when it's right

    Code lands as a pull request with tests. Your developer, or ours, reviews it first.

Manufacturing ERP questions

Something missing? Email hello@erpfly.com and a person will answer.

Is ERPNext good enough for manufacturing, or should we look at Odoo?

Both handle discrete make-to-order and make-to-stock well. ERPNext gives you more without paying for Enterprise apps. Odoo's MRP interface is nicer for operators, but its Quality and PLM apps need an Enterprise subscription. Process manufacturing with complex formulas is harder in both.

Can operators use this on a tablet at the workstation?

Yes, and we'd push for it. We usually generate a stripped-down job card screen with big buttons for start, pause, complete and reject, so operators don't have to scroll a full ERPNext form with gloves on.

Will it work with our existing BOMs and routings?

That's the default. erpfly reads your current DocTypes or Odoo models and extends them. Your BOMs stay where they are, and the new module adds fields, tables and logic around them.

Can you connect to our machines or PLC data?

We can generate the ERP side, an API endpoint that accepts counts or downtime events. The piece that reads from the PLC (usually a small gateway or an MES) is outside what we build, and we'll say so early.

How do we keep this working after an ERPNext or Odoo upgrade?

The module lives in its own Frappe app or Odoo addon and never edits core. Run the included tests on a staging copy after each major upgrade. Our guide on keeping ERPNext customizations through upgrades covers the usual traps.

Other industries

Your next module is one paragraph away

Write it the way you’d explain it to a new hire. We’ll turn it into an app you can read, test and install.

ERPNext v16