Odoo 19 changed inventory accounting: what moved, and how to get per-move entries back
Odoo 19 no longer posts stock to the ledger at receipt or delivery. What the new Perpetual (at invoicing) flow does, what accountants lose, and the options on Odoo Online.
Up to Odoo 18, validating a receipt posted a journal entry: Stock Valuation up, Stock Interim (Received) up. The vendor bill then cleared the interim account. Deliveries worked the same way through Stock Interim (Delivered). Your balance sheet moved with your warehouse, every day, and every transfer had a journal entry you could open.
Odoo 19 removed that. Under the new Perpetual (at invoicing) method, nothing is posted when goods arrive or leave. The Stock Valuation account only moves when a vendor bill or a customer invoice is posted, and a month-end Stock Closing entry books whatever gap remains into a Stock Variation account. The interim accounts and the valuation layers are gone; the value now lives on the stock move itself.
What you lose
- Goods received but not yet billed are not on the balance sheet until the closing is run. For a distributor with two weeks of supplier bills in transit, that is a material amount missing on any mid-month report.
- Goods delivered but not yet invoiced carry no cost of sales until the invoice posts, so a month with late invoicing understates COGS.
- No journal entry per transfer. Auditors who ask where a Stock Valuation balance comes from get a closing entry and a stock report, not a trail of receipts.
- The closing entry absorbs everything at once: price differences, timing differences and real mistakes land in one Stock Variation line.
Odoo's position is that this is an accounting-team process: run the closing, then accrue bills to receive and invoices to issue separately. That works, and it is also how most of the discussion on the Odoo forum ends: with a month-end checklist that did not exist before.
The options
- Run the month-end process Odoo describes: Stock Closing, then the Bills to Receive and Invoices to Issue accruals from the Review menu. Correct at month end, blind in between.
- Install a module that restores per-move posting. Several exist on the Odoo app store, from about fifteen dollars. They need a database where you can install third-party code, which rules out Odoo Online.
- Post the entries from outside through the standard API. This is what Odoomation's Live Inventory Accounting does: it reads the done stock moves Odoo did not post, creates one journal entry per move through two interim accounts, reclassifies bills and invoices when they post, and posts revaluations when a value changes later. Nothing is installed; it works on Odoo Online, Odoo.sh and self-hosted 19.
What the external approach has to get right
- Never double count. Odoo's Stock Closing computes stock value minus the posted balance of the valuation account, so external entries reduce the variance one for one. But moves dated on or before a posted closing are already in the ledger: they must be skipped, and the start date must sit after the last closing.
- Bills still hit Stock Valuation in Odoo 19. If goods were booked at receipt, the bill's debit has to be moved to the received-interim account, and the receipt line reconciled with it, otherwise the valuation account doubles.
- Values change after the fact. A bill at a different price revalues the receipt move; landed costs do the same. The difference must be posted, not ignored.
- Lock dates do not reject an entry; Odoo quietly moves it to the first open period. The posted date has to be read back and flagged.
- Everything must be reversible. Posting to a customer's general ledger needs a review mode first, an undo that uses Odoo's own reversal, and a reference on every entry so it is never created twice.
Who should care
Any company on Odoo 19 that reports mid-month, has suppliers who bill late, or has auditors who want a journal entry per transfer. Companies on Odoo 16, 17 or 18 do not have the problem yet; it arrives with the upgrade, which is the moment to decide whether month-end accruals or per-move entries fit the finance team better.
Live Inventory Accounting is included in every Odoomation plan and starts in Review mode, so you can see every entry it would post before it writes anything. Book a walkthrough from the add-on page.
Send us one PDF and get it back as an Odoo return order within 48 hours. No sign-up.