Skip to content
Back to catalog
ReportInventory & warehouseNew

Stock Variance

Everything that happened to a product, with the balance after each move

A product's full history over the period you choose: every receipt and issue with its document, its customer or vendor, its price and the exact balance left afterwards. Inbound in green, outbound in red, monthly summary at the end.

Compatibility
Odoo 19Odoo 18Odoo 17Odoo 16

How you get it

Every development works in all three Odoo environments. The only thing that changes is how we deliver it.

Nothing to install

Odoo Online (SaaS)

You do not need the ability to install modules. A Millora consultant comes in with temporary access that you authorize and implements it with Odoo Studio. When they are done, you revoke the access.

Install it today

Odoo.sh or your own server

You receive the module and the installation guide by email as soon as payment clears. Install it yourself, or we install it with you.

Installation · shell
# 1 · copia el módulo a tu addons_path
cp -r millora_variacion_de_stock /mnt/extra-addons/

# 2 · reinicia y actualiza la lista de apps
odoo-bin -u all -d tu_base --stop-after-init

# 3 · instala desde Apps
#     busca "Stock Variance"

What it solves

The problem

When stock doesn't add up, the question is always the same: which movement threw it off?

Odoo has the movements, but won't let you read them as a story. There is no report laying out everything that happened to a product in order, and above all it doesn't tell you how much was there after each movement. Without that running balance, finding the row where the difference started is impossible: you can only see the movements and add them up by hand.

And the facts you need to judge each movement — who the customer or vendor was, which document it came from, at what price — are scattered across other screens.

How it works

You pick a product, the date range, and the legal entity if you run several companies.

The report returns the history in date order. Each row carries the quantity, the picking reference, the source document, the customer or vendor, that operation's price and the exact balance left after that movement. At the top, the balance the period opened with and current stock on hand.

Inbound rows are green and outbound rows are red. It sounds cosmetic and isn't: it's what lets you scan a hundred rows and spot the odd streak without reading every figure.

At the end, a second table summarises the period month by month, with totals in and out.

What it does not do

Read-only. It changes no stock, corrects no differences and creates no adjustments.

It does not project forward and raises no alerts: it tells you what already happened.

It does not say who made the movement. It shows the document and the counterparty, but not the user responsible. If what you're after is accountability rather than chronology, this isn't the report.

And it depends entirely on data entry being right: it reflects what Odoo has recorded, not what happened in the warehouse.

What changes

Investigating a discrepancy stops being an export and an afternoon of adding up. The row where the balance stopped making sense stands out, with the document behind it right there.

And for the monthly close, the summary table gives on one screen what normally takes cross-referencing two reports.

What's included

  • Shows a product's full history over the date range you choose
  • Computes the exact balance left after every movement
  • States the period's opening balance and current stock on hand
  • Details picking reference, source document, customer or vendor and price per operation
  • Marks inbound green and outbound red so the history reads at a glance
  • Summarises the period month by month, with totals in and out
  • Filters by company in multi-entity databases

Requirements

  • Inventory module active
  • Movements entered up to date: the report shows what Odoo recorded, not what happened on the floor
  • A user with inventory permissions to open the report
  • One specific product and date range. The report works one at a time, not in bulk