Backdate inventory with full journal entry propagation

Set a past Effective Date on transfers, inventory adjustments, and scrap orders. Stock moves and linked accounting journal entries are updated simultaneously, with a mandatory reason and a full chatter audit trail.

The problem

Stock transactions recorded on the wrong date create silent mismatches between inventory reports, accounting journal entries, and audit trails. Correcting them record-by-record is slow, and no standard Odoo feature prevents posting into a period that accounting has already locked.

The solution

A single module that adds a controlled Effective Date field to transfers, inventory adjustments, and scrap orders. One action updates the stock move date and the linked journal entry date together, checks the accounting lock, requires a written reason, and logs everything in the chatter.

Capabilities

Everything implemented, nothing promised

Every capability below is live in the module.

01

Backdate Stock Transfers

Set a past Effective Date on receipts, deliveries, and internal transfers before validating. The date cascades to stock moves and linked journal entries simultaneously.

02

Backdate Inventory Adjustments

Override the operational date on physical inventory adjustments inline on the form. No detached popup wizard — the date field is right on the document where it belongs.

03

Backdate Scrap Orders

Apply a historical date to scrap order validations, ensuring both the stock move and the accounting journal entry share the same backdated timestamp — no silent date split.

04

Audit Trail & Reason Field

Every backdate logs a chatter note recording the original date, the new date, the user, and a mandatory reason — giving auditors a complete in-system history without any extra configuration.

05

Fiscal Period Lock Validation

Attempting to backdate into a period already locked in Odoo Accounting raises a blocking error that names the locked period, preventing silent postings into closed books.

06

Backdated Badge in List Views

Transfers, adjustments, and scrap orders that have been backdated display a visible “Backdated” indicator in the list view — no need to open every record to spot altered dates.

07

Bulk Backdate Wizard

Select multiple transfers or adjustments from the list view and apply a single past date and reason to all records in one action. Built for go-live data migrations with hundreds of historical records.

08

Inventory as of Date Report

A built-in report under Inventory › Reporting shows on-hand quantities at any chosen historical date by rewinding stock moves. No separate module needed.

09

Per-Document-Type Settings

Administrators can independently enable or disable backdating for Transfers, Inventory Adjustments, and Scrap Orders from a single Inventory Settings configuration page.

Workflow

How it works

1

Enable in Settings

Turn on backdating for the document types you need under Inventory › Configuration › Settings.

2

Set Effective Date

Open a transfer, adjustment, or scrap order, enter the past date and a mandatory reason before validating.

3

Validate & Propagate

Clicking Validate updates the stock move date and the accounting journal entry date in a single operation.

4

Audit & Report

The chatter logs who changed the date and why. Run Inventory as of Date to verify on-hand quantities at the backdated moment.

Questions

Frequently asked

No sales fog. If your question isn't here, email us and we'll answer it the same way.

Yes. When you validate a document with an Effective Date set, the module updates the stock.move date and the linked account.move (journal entry) date in the same operation, so inventory reports and accounting reports stay aligned.

Get the app

Buy it on the Odoo App Store

Purchase, download and install directly from the official Odoo Apps Store — you'll always get the latest supported build.

Inventory Backdate

Backdate transfers, adjustments, and scrap orders with full journal entry propagation, fiscal period lock validation, and a built-in audit trail.

Buy on Odoo App Store