Common Odoo Errors and Fixes
Read the message
Odoo’s error messages are more helpful than most. The problem is that they use Odoo’s vocabulary, so they read as obstruction rather than explanation.
Almost every one of them is protecting something. This article translates the common ones.
“You cannot delete this record”
What it usually says: something about the record being referenced elsewhere.
What it means: other records point at this one. Deleting it would leave them pointing at nothing.
A customer with invoices. A product with stock moves. A journal that has entries.
What to do: archive it instead. Archiving hides the record from normal views and keeps every link intact. It is almost always what you actually wanted.
A general rule: archive by default, delete almost never.
“You cannot change the unit of measure”
What it means: this product already has stock moves or order lines, and its unit is embedded in all of them. Changing it would make every historical record wrong.
What to do: in most cases, nothing — the change is not safe. Options:
- Create a new product with the correct unit and archive the old one
- If it is genuinely early and the history is disposable, clear the transactions first
Prevention is the real answer. Decide units of measure before importing products. This error is the most common expensive mistake in Odoo setups.
“You cannot edit a posted entry”
What it means: the invoice or journal entry has a sequence number and has hit your ledger.
What to do: issue a credit note to reverse it, then create a corrected version. Odoo has an option to reverse and open a new draft in one step.
Why: this is standard accounting practice, not an Odoo quirk. Any auditor expects exactly this trail.
FIGURE 1: FOUR ERRORS THAT ARE PROTECTING YOU
Cannot delete
- Other records point at this one. Archive instead.
Cannot change unit of measure
- It is embedded in every past transaction.
Cannot edit a posted entry
- Issue a credit note. This is how accounting works.
Cannot cancel a done transfer
- Stock and value already moved. Create a return.
“Not enough stock” or “insufficient quantity”
What it means: you are trying to deliver more than is available at that location.
Check these, in order:
Is stock at the right location? Very common. The goods exist, in a different warehouse or a sub-location the operation does not draw from.
Is it reserved for another order? Compare On Hand against Free to Use. The difference is committed to other customers.
Is the receipt recorded? Goods can be physically present and not yet validated in the system.
Is your stock record simply wrong? Run a count.
What to do: find which of the four it is before changing settings. Allowing negative stock to make the error go away hides a problem rather than fixing it.
“No journal found” / “No account configured”
What it means: a transaction needs an accounting account and the configuration does not say which one.
Usually one of:
- A product category without stock accounts set
- A journal not configured for that operation
- A tax without accounts assigned
- A payment method without a journal
What to do: the message usually names the model. Go to that configuration and fill in the missing account. Ask your accountant which account — this is not a guess.
Prevention: this appears when a configuration was half-completed at setup. Running a full test cycle before go-live catches almost all of them.
“You cannot cancel this transfer”
What it means: the transfer is already Done. Stock moved and, with automatic valuation, value posted.
What to do: create a return — an opposite movement. Same principle as a credit note in accounting: you do not erase history, you post a correction.
“This operation is not allowed” / permission errors
What it means: your user does not have the rights.
Two possibilities, and they need different answers:
You should have access and do not. Somebody needs to add you to the right group.
You should not have access. The restriction is working. Find out who does.
Do not solve this by making everyone an administrator. It is the most common and most damaging response to permission errors.
FIGURE 2: TWO WAYS TO RESPOND TO AN ERROR
Fixing the cause
- Find out why stock is short before allowing negatives
- Add the missing account configuration
- Ask who should have the permission
Hiding the symptom
- Enable negative stock to make it go away
- Make the user an administrator
- Delete the record and re-enter it
“Circular reference” / recursion errors
What it means: something points back at itself. A bill of materials containing itself. A partner set as its own parent. A category loop.
What to do: trace the chain until you find where it loops back. Usually a data entry mistake rather than a system problem.
Reports that will not print
Usually one of three:
A missing library on the server. PDF generation needs specific components installed. Common on self-hosted setups after a server change.
A template error, if the report has been customised.
Data the template did not expect — a missing value where the template assumes one exists.
What to do: try a different record. If it prints, the problem is data in the first record. If nothing prints, it is server-side and needs your technical partner.
The blank page or spinning loader
Not an error message, and worth knowing what to do.
Check the browser console — press F12. There is often a message there that never reached the screen.
Try a different record. Isolates data from system.
Try a different browser. Rules out a cached asset.
Ask whether anything was installed or updated recently. A module or an upgrade is the usual cause.
When to escalate
Handle yourself: missing configuration, permission questions, stock discrepancies, anything with a clear message naming what is missing.
Escalate to your technical partner:
- Anything with a Python traceback
- Errors that appeared after a module was installed or upgraded
- Anything affecting all users at once
- Anything touching accounting that you cannot explain
FIGURE 3: WHAT TO SEND WHEN YOU ESCALATE
The exact message
- A screenshot of the full error, not a description of it.
What you were doing
- The record, the button, the steps to reproduce it.
What changed
- A module installed, an upgrade, an import. This is usually the answer.
Preventing most of them
Five habits.
Run a full test cycle before go-live. Sales, purchase, stock, invoice, payment. Most configuration errors surface here.
Decide units of measure early. The most expensive category to fix later.
Archive rather than delete. Avoids an entire class of errors.
Count receipts properly. Prevents most stock discrepancies.
Keep customisation in modules and test at upgrades. Prevents most post-upgrade errors.
The short version
Most Odoo errors are protections, and the message usually says what is missing.
Archive instead of deleting. Credit note instead of editing. Return instead of cancelling. Those three cover a large share of what people hit.
And when you escalate, send the exact message, what you were doing, and what changed recently. That third one is usually the answer.
Hitting an error you cannot get past?
Get in touch. Send us the exact message and what changed recently — that combination usually identifies it straight away.