Skip links

Odoo Stock Moves Explained

What a stock move is

A stock move is the record of goods going from one location to another.

That is it. Every change in your stock figures — every receipt, delivery, transfer, adjustment and production consumption — is one or more stock moves.

If you understand stock moves, you can explain any number in your inventory. If you do not, stock figures will occasionally look wrong and you will have no way to investigate.

The parts of a move

Product. What moved.

Quantity. How much.

Source location. Where it came from.

Destination location. Where it went.

Date. When it happened.

Reference. The document that caused it — a delivery order, a receipt, a manufacturing order.

State. Where it is in its life.

The states

A move does not appear finished. It goes through stages, and knowing them explains a lot of “why is my stock not right” questions.

Draft. Created but not confirmed. Nothing has happened.

Waiting. Confirmed, but something else must happen first. Usually the goods have not arrived yet.

Ready. The stock is available and reserved. It can be processed.

Done. It happened. Stock has changed. If you use automatic valuation, the accounting entry posted at this moment.

Cancelled. It will not happen.

Only Done moves change your stock. Everything before that is planned rather than actual.

FIGURE 1: THE LIFE OF A MOVE

Draft

  • Created, nothing committed

Waiting

  • Something must happen first

Ready

  • Stock reserved and available

Done

  • Stock changed, entry posted

Reservation

When a move reaches Ready, the stock is reserved — committed to this move and not available for anything else.

This is what makes your Free to Use figure differ from On Hand. On Hand is what you physically have. Free to Use is what is not already promised.

Why it matters: it stops two salespeople promising the same item to two customers.

Where it confuses people: you have stock, the report says you have stock, and a new order says unavailable. The stock is there and it is spoken for.

Four worked examples

Receiving from a supplier

You order 100 units. The goods arrive and the warehouse validates the receipt.

Move: 100 units, from Vendor location to WH/Stock. State: Done.

Result: stock on hand rises by 100. With automatic valuation, an entry posts — stock value in, and a matching entry to a holding account until the vendor bill arrives.

Delivering to a customer

A sales order for 20 units is confirmed and the warehouse ships it.

Move: 20 units, from WH/Stock to Customer location. State: Done.

Result: stock falls by 20. An entry posts — value out of stock, into cost of goods sold.

An inventory correction

You count a product and find 95 where the system says 100.

Move: 5 units, from WH/Stock to Inventory Adjustment. State: Done.

Result: stock falls by 5, and the difference is posted to your inventory adjustment account.

This is why the virtual location exists. The five units did not vanish — they moved somewhere that balances the books.

Manufacturing

You produce 10 finished units from components.

Moves: components from WH/Stock to Production, and 10 finished units from Production to WH/Stock. All Done.

Result: components down, finished goods up, value carried across.

FIGURE 2: EVERY OPERATION IS THE SAME MECHANISM

Receipt

  • Vendor location to your stock. Stock and value go up.

Delivery

  • Your stock to customer location. Stock and value go out.

Adjustment

  • Your stock to or from the adjustment location. The difference is posted.

Manufacturing

  • Components to production, finished goods back out.

Moves and move lines

A distinction that appears in the interface.

A stock move is the intention: 100 units of this product, from here to there.

A move line is the detail of how it actually happened: 60 from this shelf, 40 from that one, or 50 of this lot number and 50 of another.

For simple setups they look the same. Once you use lots, serial numbers or detailed locations, one move can have several lines.

When investigating a discrepancy, the move lines have the detail.

Reading the history

This is the most useful report in Inventory and it is underused.

On any product, Moves History shows every movement: what, when, how much, from where to where, and which document caused it.

When a stock figure looks wrong, this is where you go. Work backwards from the current quantity through the moves until you find the one that does not make sense.

You will usually find one of four things:

  • A receipt validated for the ordered quantity rather than what actually arrived
  • A delivery validated for the wrong quantity
  • An adjustment somebody made without recording why
  • A move still sitting in Waiting or Ready that everyone assumed was Done

FIGURE 3: WHY A STOCK FIGURE LOOKS WRONG

Usually one of these

  • A receipt validated without counting
  • A delivery processed for the wrong quantity
  • An adjustment made with no explanation
  • A move never actually validated

Rarely this

  • Odoo miscalculating
  • The database losing records
  • A bug in the stock engine
  • Something unexplainable

Cancelling and reversing

A move not yet Done can be cancelled cleanly. Nothing has happened.

A move already Done cannot simply be deleted. Odoo blocks it, and that is deliberate — deleting history would break your valuation and leave your accounts unexplainable.

To reverse it, you create an opposite movement: a return for a delivery or receipt, or an adjustment for a correction.

This is the same principle as accounting. You do not erase an entry; you post a correcting one. It leaves a trail somebody can follow.

Practical habits

Validate with real quantities. The single most important habit. A receipt validated at the ordered quantity without counting is the root of most stock discrepancies, and no software setting fixes it.

Explain adjustments. A correction with no note is a mystery in three months.

Watch for stuck moves. Transfers sitting in Ready for weeks usually mean something happened physically and nobody recorded it.

Check Free to Use against On Hand. A large gap means a lot of stock is committed.

The short version

Every stock change is a move between two locations. Only Done moves change your figures.

Reservation is why Free to Use differs from On Hand — the difference is promised to customers.

When a number looks wrong, read the moves history. The answer is almost always a receipt validated without counting, or a move nobody finished.

And you cannot delete a completed move. You reverse it, the same way you would reverse an accounting entry — because that is exactly what it is.

Stock numbers that do not match the shelf?

Get in touch. We will trace it through the move history, and it is usually a counting habit rather than a configuration problem.

Leave a comment

Drag