Skip to content

Products

1. Purpose

Products are the catalogue of everything the business buys, sells, stocks or charges for. Every sales line, purchase line, stock move and invoice line points at a product, and the product carries the defaults — price, tax, unit of measure, accounts — that those documents inherit.

A badly configured product catalogue produces wrong prices, wrong taxes, wrong stock valuation and empty dashboards, all at once and all silently.

2. Features

  • Product records with internal reference, barcode, and sales and purchase descriptions
  • Product categories, hierarchical, carrying costing method and valuation configuration
  • Product types — storable, consumable and service — determining whether stock is tracked
  • Units of measure, with conversion inside a UoM category (buy in cartons, sell in pieces)
  • Separate purchase and sales units of measure per product
  • Sales price and cost, with cost maintained by the costing method
  • Product variants from attributes — size, colour, capacity — as one template with many variants
  • Taxes defaulted per product for both customer and vendor documents
  • Income and expense accounts per product or per category
  • Product packagings
  • Vendor pricelists per product, with lead times and minimum quantities
  • Images and product presentation
  • Archiving, so discontinued products leave the selection lists without breaking history

3. Where to find it

  • Menu: Inventory → Products → Products, and the equivalent under Sales and Purchase
  • Technical name: product
  • Tier: Odoo core (Community Edition)
  • Available in: Odoo 16, 17 and 18. Required directly by our Odoo 16 and 17 modules.

4. Modules used

Module Tier Why it is needed
product Odoo core Products, templates, variants, categories, units of measure, pricelists
uom Odoo core Units of measure. Split into its own module in Odoo 18; part of product before that.
stock Odoo core Only if stock is tracked — gives the product on-hand quantities
account Odoo core Income and expense accounts, and product taxes

NestERP custom modules that build on Products

Module Odoo version What it adds
inventory_dashboard 16 Product-level stock dashboard
aegis_dg 16 Dangerous-goods classification on products

5. Configuration

  1. Agree the category tree with the client first. Categories carry costing method and valuation, so the tree is an accounting decision, not a merchandising one.
  2. Create product categories — Inventory → Configuration → Product Categories. On each, set the Costing Method and Inventory Valuation, and if valuation is automated, the stock input, output and valuation accounts.
  3. Enable Units of Measure — Inventory → Configuration → Settings. Without this, every product is transacted in Units only.
  4. Create units of measure and their categories if the client buys and sells in different units. Conversion only works inside a single UoM category.
  5. Enable Variants if products differ by attribute, then create the attributes and their values before creating templates.
  6. Create the products. For each: internal reference, category, type, sales price, cost, customer and vendor taxes, and the units of measure.
  7. Set the product type correctly. This decides whether stock exists — see the Version differences section, because the field changed in Odoo 18.
  8. Add vendor pricelists on the Purchase tab for products that are bought.
  9. Set income and expense accounts where they should differ from the category default.

Configuration traps

  • Product type is the single most consequential field on the record. Get it wrong and the product holds no stock, appears in no inventory report, and is invisible to dashboards that filter on storable products. We have hit this in production: on the Odoo 16 inventory system, newly created products defaulted to the wrong type and were silently missing from the dashboard.
  • Costing method and valuation live on the category, not the product. A product inherits whatever category it is filed under.
  • Unit of measure cannot be changed once a product has stock moves. Odoo blocks it, correctly. Decide the buying and selling units before go-live.
  • UoM conversion only works within a UoM category. Cartons and kilograms cannot convert to each other.
  • Taxes default from the product, then get overridden by the customer's fiscal position. When a tax looks wrong on an invoice, check both.

6. How it's used

Creating a product

  1. Storekeeper or Product Manager — Inventory → Products → Products → New.
  2. Sets name, internal reference, product type and category.
  3. Sets the sales price, and the cost if the costing method is Standard.
  4. Sets the units of measure for purchase and sale.
  5. Confirms the customer and vendor taxes.
  6. Adds vendors and their prices on the Purchase tab.

Day-to-day

  1. Purchasing — selects products on purchase orders; price and UoM default from the vendor pricelist.
  2. Salesperson — selects products on quotations and sales orders; price and tax default from the product and pricelist.
  3. Product Manager — archives discontinued products rather than deleting them, so historical documents stay intact.

Screenshots needed

Save to docs/assets/products/: product list view · product form General Information tab · product form Purchase tab with vendor pricelist · product category showing costing and valuation · units of measure configuration · a variant template with its attributes.

7. Access rights

Group Can do
Sales / User Read products, select them on documents
Inventory / User Read products and see stock quantities
Inventory / Administrator Create and edit products, categories and units of measure
Manage Product Variants Unlocks attributes and variant creation
Manage Multiple Units of Measure Unlocks the UoM fields

Products can be shared across companies or restricted to one. A product with no company set is visible to all companies — usually what a client wants for a shared catalogue, and occasionally a surprise in multi-company deployments.

8. Version differences (16 / 17 / 18)

  • Product type is the type field: Storable Product, Consumable, Service. Stock is tracked only for storable.
  • detailed_type also exists alongside type, and the two can disagree if records are created programmatically — a real trap we hit on the Odoo 16 inventory system, where new products ended up invisible to the dashboard.
  • Units of measure are part of the product module.
  • Same product type model as 16.
  • attrs and states removed from view definitions.
  • Storability moved out of type into a separate boolean, is_storable. type now carries only consumable and service. Any domain, filter, report or dashboard testing type == 'product' returns nothing on Odoo 18.

This is not theoretical: it was the one and only fix stock_dashboard needed for its v18 upgrade. Check every product-type test when porting a module to 18. - uom is a separate module rather than part of product. - <tree> elements superseded by <list>.

9. Known limitations

  • No product lifecycle management or engineering change orders. Enterprise.
  • No native multi-vendor price comparison beyond the vendor pricelist.
  • Variant explosion is not managed — attributes with many values generate every combination unless variants are created selectively.
  • Product images are single-image per product in core; extra media requires the website module.
  • No approval on price changes — anyone with product-edit rights can change a sales price or cost.
  • Barcode fields exist, but barcode scanning workflows are Enterprise (stock_barcode).

Needs verification on the Thalia live instance

  • The product category tree, and the costing method and valuation on each
  • Whether Units of Measure and Variants are enabled
  • How products are typed — and whether any storable products are mistyped
  • Whether products are company-specific or shared across companies
  • Whether vendor pricelists are maintained, or prices entered per order
  • Which taxes are defaulted on products, and whether fiscal positions override them