5.1 Products & warehouse operations

Key Takeaways

  • In Odoo 19 the product Type field is Goods, Service, or Combo; a separate Track Inventory toggle on a Good decides whether Odoo keeps on-hand quantities.
  • Storable = Goods with Track Inventory enabled; consumable = Goods with tracking off; service = Service — only tracked goods drive stock reports, reservation, and valuation.
  • Only Internal locations hold real countable stock; Vendor, Customer, Transit, Inventory Loss, and Production are virtual counterparts that give every move a source and destination.
  • The three core warehouse operations are Receipts (Vendor to Internal), Deliveries (Internal to Customer), and Internal Transfers (Internal to Internal), each governed by a configurable Operation Type.
  • Odoo inventory is double-entry: stock is never created or destroyed, only moved via stock moves between locations, so total quantity across all locations is always conserved.
Last updated: July 2026

Product types in Odoo 19

Odoo 19 reorganizes the classic product-type field. Instead of the old three-way choice, the Type field now offers Goods, Service, and Combo. Any physical item you buy, stock, or sell is a Good. Whether Odoo keeps a running on-hand quantity for that good is controlled by a separate Track Inventory toggle on the product's Inventory tab. This split is the single most important product concept on the exam, so learn how the new toggle maps onto the familiar labels.

  • Goods with Track Inventory enabled behave like the classic storable product: Odoo records stock moves, on-hand and forecasted quantities, and can trigger replenishment. These are the only products that appear in the Inventory app's stock reports and the only ones that can be lot- or serial-tracked.
  • Goods with Track Inventory disabled behave like the classic consumable: they can be bought, sold, and placed on transfers, but Odoo never blocks a delivery for lack of stock and keeps no quantity on hand.
  • Services are intangible (labor, consulting, subscriptions) and never generate stock moves; they exist so you can invoice work.
  • Combo products bundle several products into one saleable line, used mainly in Point of Sale.

For the exam, memorize the mapping: storable = Goods + Track Inventory, consumable = Goods without tracking, service = Service. Only tracked goods drive procurement, reservation, and valuation.

Units of measure

Enabling Units of Measure lets a product be purchased, stored, and sold in different units that belong to the same UoM category — for example buy in Boxes of 12, keep stock in Units, and Odoo converts automatically using each unit's ratio to the category's reference unit. Conversion only works inside one category: you can move between g, kg, and t because they share the Weight category, but you cannot convert kg into Units. Each product carries a default Unit of Measure (used for inventory and sales) and a separate Purchase UoM for buying.

Warehouses and locations

A warehouse is a physical site with an address; each warehouse owns a tree of locations. Every location has a type that defines its role in Odoo's double-entry inventory:

Location typeRole / example
InternalPhysical space you own (Stock, shelves, Input, Output, QC)
VendorVirtual — where goods "come from" when received from a supplier
CustomerVirtual — where goods "go to" when delivered to a customer
TransitVirtual — goods in motion between warehouses or companies
Inventory LossVirtual — counterpart for inventory adjustments and scrap
ViewNon-stockable node used only to structure the location tree
ProductionVirtual — counterpart for manufacturing consumption and output

Only Internal locations hold real, countable stock. The virtual types (Vendor, Customer, Transit, Inventory Loss, Production) exist so that every quantity change has a genuine source and destination — they are structural, not cosmetic.

Core operations and operation types

Day-to-day warehouse work happens through three core operations, each backed by an Operation Type — a configurable template that sets default source and destination locations, a reference sequence, reservation behavior, and whether backorders are created:

  1. Receipts — bring goods in from a Vendor location to an Internal location.
  2. Deliveries — send goods from an Internal location to a Customer location.
  3. Internal Transfers — move goods between two Internal locations, whether shelf-to-shelf inside one warehouse or between two warehouses via a transit location.

Each warehouse automatically gets its own Receipts, Deliveries, and Internal Transfers operation types; enabling features such as Manufacturing or multi-step routes adds more. Because operation types are templates, changing one (for instance, to always create backorders) changes every future transfer of that kind.

On-hand versus forecasted quantity

For tracked goods Odoo maintains two figures that the exam often contrasts. On-hand quantity is what physically sits in your Internal locations right now. Forecasted quantity projects future stock by adding confirmed incoming receipts and subtracting confirmed outgoing deliveries. Reordering rules and procurement look at the forecasted value, not on-hand, which is why a product can show positive on-hand stock yet still trigger a purchase because committed deliveries will consume it. When a delivery is confirmed, Odoo also reserves the matching on-hand units so two orders cannot claim the same stock.

Stock moves and double-entry inventory

The heart of the Inventory app is the stock move: one quantity of one product traveling from a source location to a destination location. Odoo treats inventory like double-entry accounting — stock is never created or destroyed, only moved between locations. Receiving goods is a move Vendor → Stock: the Vendor location's balance goes negative while Stock rises. A delivery is Stock → Customer. An inventory adjustment that adds five units is really a move Inventory Loss → Stock, and scrapping is Stock → Scrap/Inventory Loss.

Because every event is a balanced move between a source and a destination, the total quantity across all locations is conservative, and Odoo can reconstruct the full history of any unit. The transfer (the picking document users open) is simply a group of stock moves sharing a source, destination, and operation type. Each move can split into move lines that pin down the exact lot, serial number, and sub-location handled. Grasping this double-entry model explains many exam scenarios: why a receipt draws stock from the Vendor location, why adjustments post against Inventory Loss, and why the virtual location types must exist at all.

Test Your Knowledge

In Odoo 19, how do you configure a product so Odoo keeps a running on-hand quantity and includes it in stock reports?

A
B
C
D
Test Your Knowledge

When you receive goods from a supplier, what does the double-entry stock move look like, and what happens to the Vendor location's balance?

A
B
C
D
Test Your Knowledge

A warehouse worker moves stock from the Input dock to a storage shelf, both inside the same warehouse. Which operation type does this use?

A
B
C
D