New: Odoo and Dynamics 365 cost calculators.Estimate your costs

ERP inventory management: what the module must do before you buy

An ERP inventory module has one defining job: keep the count of every unit, the place it sits, the lot or serial it carries, and the cost attached to it in the same ledger as your purchasing…

FlecticUpdated 19 min read

An ERP inventory module has one defining job: keep the count of every unit, the place it sits, the lot or serial it carries, and the cost attached to it in the same ledger as your purchasing, sales and accounting postings. When those four records share a ledger, the quantity a sales order promises and the value on the balance sheet come from the same postings. Odoo 19 and Dynamics 365 Business Central both clear that bar. They differ in default enforcement, costing locks and how their pricing treats warehouse staff.

This checklist turns those differences into six tests you can fail a bidder on: lot and serial enforcement, valuation and its locks, multi-warehouse transfers, cycle counts, replenishment and expiry picking. Each test carries the documented behavior from both platforms, the license math for the inventory team, and the demo asks that expose a weak setup. Behavior below follows Odoo 19.0 and current Business Central documentation as of October 2026. Work the list in a single demo session and you leave with a scored sheet, a cost model and a short list of answers the vendor still owes you.

What the inventory management module in an ERP must do

If you are shortlisting an ERP for inventory management, hold every candidate to one definition: the module runs stock and money off the same postings. A working version comes from ERP Research, which describes ERP inventory management as software that "tracks stock levels, valuation and availability across every warehouse, lot and sales channel" (ERP Research). Odoo documents its Inventory app as both an inventory application and a warehouse management system, covering lead times, automated replenishment and advanced routes (Odoo 19.0 documentation). Business Central covers the same ground through locations, item tracking codes and costing setup. The labels differ. The obligations are shared, and each one can fail quietly in a demo that runs on the vendor's prepared database.

Score a bidder on all six:

  • 1 (Test: Lot and serial control · What a pass looks like: Odoo will not validate a lot-tracked receipt until a lot number is assigned. On Business Central the outbound line will not post until the serial, lot or package number that entered inventory is named, with Undefined at 0)
  • 2 (Test: Valuation and its locks · What a pass looks like: The bidder names the costing method, says what hardens once history posts, and opens the entry a shipment creates)
  • 3 (Test: Multi-warehouse stock · What a pass looks like: Ten units transfer between two warehouses or locations. On Business Central the tracking numbers stay unchanged while the transfer is in progress. An in-transit balance counts only if it is on screen)
  • 4 (Test: Cycle counting · What a pass looks like: A shortage is counted, adjusted and posted, with two counters sharing the work)
  • 5 (Test: Replenishment · What a pass looks like: Forecast drops below a minimum, the system drafts the purchase, and the bidder says who the units are reserved for)
  • 6 (Test: Expiry picking · What a pass looks like: The pick sequence follows expiry dates, and the bidder answers for a lot with no expiration date)

Lots and serials: what each system blocks

Odoo refuses to validate a receipt for a lot-tracked product until a lot number is assigned (Odoo 19.0 documentation). Turn tracking on after stock already exists and Odoo raises a warning; an inventory adjustment then assigns numbers to the units you hold (Odoo 19.0 documentation). The defaults fit most flows: new lots are created on receipts and existing lots are consumed on deliveries, with Create New versus Use Existing set per operation type (Odoo 19.0 documentation).

Business Central splits the same job across item tracking codes, which control serial, lot and package policies separately (Microsoft Learn). Enable SN, Lot or Package Specific Tracking and the number that entered inventory has to be named again when the item leaves; letting warehouse staff assign numbers during picking or shipping needs SN Warehouse Tracking or Lot Warehouse Tracking on top (Microsoft Learn). The enforcement is blunt: "the system refuses to let a transaction post without the tracking" (WiredCIO). On the tracking lines, tracked quantities must match the document line, displayed as 0 in the Undefined fields (Microsoft Learn). A transfer order uses the same tracking lines for shipment and receipt, and the numbers cannot change while the transfer is in progress (Microsoft Learn).

All of it serves one recall question: "Which supplier provided a defective component? Which finished products used it?" (Rand Group). A bidder who waves that question away has failed the first test.

In the demo, run three moves: receive a lot-tracked product and try to validate with the lot field empty (Odoo will not validate until a lot number is assigned), post an outbound line without naming the serial, lot or package number that entered inventory (Business Central will not post, and Undefined must read 0), and start a transfer and attempt to edit the lot while it is in progress.

Valuation: three methods in Odoo, five in Business Central

Odoo 19 supports three costing methods, set in accounting settings and optionally on the product category: Standard Cost at a unit cost you maintain manually, Average Cost (AVCO) as the weighted average of all units, and FIFO (Odoo's valuation cheat sheet). Removal strategies add LIFO and FEFO, and Odoo documents both as picking rules that choose which unit leaves; the valuation method stays on the category, and Odoo notes LIFO is disallowed under IFRS (Odoo's valuation cheat sheet). Valuing by lot or serial narrows the field further: it requires FIFO or Average Cost, Track Inventory set to By Lots or By Unique Serial Number, and the Valuation by Lot/Serial number checkbox enabled (Odoo 19.0 documentation).

For a US company, the accounting setting matters as much as the method. Odoo describes perpetual (Anglo-Saxon) accounting, which posts vendor bills as stock assets and expenses goods when they are sold, as best practice in countries that follow Anglo-Saxon accounting, and names the USA (Odoo's valuation cheat sheet). Odoo 19 also changed how perpetual posts: the stock valuation account updates at invoice level, with one closing entry covering gaps such as bills to receive and invoices to issue; before Odoo 19, every stock move carried a real-time accounting entry (Odoo's valuation cheat sheet). A team arriving from Odoo 18 should expect a differently shaped general ledger. For the arithmetic itself, our FIFO versus AVCO valuation guide works the math on real numbers.

Business Central ships five costing methods: FIFO, LIFO, Average, Specific and Standard (Microsoft Learn). The lock is the part to press on: Microsoft states you cannot change an item's costing method once item ledger entries exist for it (Microsoft Learn), so the choice hardens the day history starts. Specific costing uses the exact receipt cost of the particular unit and requires item tracking on inbound and outbound transactions; item tracking also runs without Specific costing, in which case cost follows the selected method (Microsoft Learn). Average cost is a periodic weighted average whose settings bind for a full fiscal year: the period is Day, Week, Month or Accounting Period, the calculation runs per Item or per Item, Variant and Location, and only one period and one calculation type can apply in a fiscal year (Microsoft Learn). Back-dated postings recalculate average cost when the Adjust Cost - Item Entries job runs (Microsoft Learn).

If you value by lot, decide the method before migration is planned: Business Central locks it against history, and Odoo limits lot valuation to FIFO or Average Cost. In the demo, ask for three postings in sequence: a shipment and its value entry, a back-dated receipt followed by a cost adjustment run, and the change on screen once the item carries two years of postings.

Warehouses, bins and stock in transit

Every Odoo database starts with one warehouse at the company address, and you add warehouses from there (Odoo 19.0 documentation). Two setup details decide how much of the warehouse you can model: the warehouse short name is required and capped at five characters, and one-, two- and three-step receipts and deliveries appear only after Multi-Step Routes is enabled (Odoo 19.0 documentation).

Business Central calls its equivalent a location, defined as a warehouse or any other place you buy, store or sell, and stock moves between locations on transfer orders (Microsoft Learn). Bins are optional: Bin Mandatory is a toggle on the location, and zones group bins where you want directed put-away (Microsoft Learn). Location setup carries the same rule as costing: a location's configuration can change only while it holds no item ledger entries (Microsoft Learn). Our Business Central warehouse management guide covers the full location, bin and zone setup.

Ask for three things in the demo:

  • Transfer ten units between two warehouses or locations. On Business Central, confirm the tracking numbers cannot change while the transfer is in progress. Count an in-transit balance only if that balance is on screen.
  • Request a three-step delivery and count how many documents it produces.
  • Try to change a setting on a location that already carries postings.

Cycle counts that survive a real warehouse

Odoo schedules counts per storage location, which requires Storage Locations to be enabled (Odoo 19.0 documentation). Each location carries an Inventory Frequency set in days, defaulting to 0, and the full annual count defaults to 31 December (Odoo 19.0 documentation).

Business Central organizes a count as a physical inventory order, often one per location, and captures the results in physical inventory recordings; several recordings can split one order across employees (Microsoft Learn). The catch is zoning: if the warehouse uses zones, physical inventory orders cannot be used, and the warehouse physical inventory journal takes over, with warehouse entries synchronized to item ledger entries afterwards (Microsoft Learn).

Ask the bidder to split one count across two recordings, post the shortage, and show where the entries land after synchronization. If your floor runs zones, insist the count happens inside a zoned warehouse.

Replenishment: who decides to buy or make

An Odoo reordering rule watches a minimum forecast quantity and a maximum quantity (Odoo 19.0 documentation). A Buy route drafts a request for quotation, a Manufacture route drafts a manufacturing order, the trigger defaults to Auto, and the scheduler runs once a day (Odoo 19.0 documentation). One quirk deserves a demo: the 0/0/1 rule drafts a single unit when a sales order pushes forecast below zero, reserves nothing for the sales order that triggered it, and links no replenishment order to that sales order, unlike Replenish on Order (MTO), which reserves the unit and links the replenishment to the sales order (Odoo 19.0 documentation).

An item in Business Central is planned only when it carries a reordering policy; a blank policy leaves it to manual planning (Microsoft Learn). The four policies are Fixed Reorder Qty., Maximum Qty., Order and Lot-for-Lot, with reorder point and safety stock deciding when to act and order modifiers setting minimum quantity, maximum quantity and order multiple (Microsoft Learn). One detail surprises multi-site teams: time-bucket calculation ignores the working calendars on Company Information and the Location Card (Microsoft Learn).

Two demo moves matter here: push forecast below the minimum and watch what the system drafts, then ask whether those units are reserved for the sales order that caused them and which calendar set their dates.

FEFO picking and expiry dates

FEFO in Odoo picks the lot whose removal date, defined as a number of days before expiration, arrives first; it requires Lots & Serial Numbers plus Expiration Dates (Odoo 19.0 documentation). Then comes the override that trips teams up: when a product category sets Force Removal Strategy, the category wins over any strategy the location defines (Odoo 19.0 documentation).

Business Central's FEFO needs three switches set together: the item tracking code needs SN, Lot or Package Warehouse Tracking, the item needs an expiration date posted, and the location needs Pick According to FEFO (Microsoft Learn). Warehouse picks add a Bin Mandatory requirement (Microsoft Learn). With Strict Expiration Posting on, expired items drop out of the pick (Microsoft Learn). A serial or lot written on the source document is respected before FEFO fills the remaining quantity, and equal expiration dates break the tie by the lowest serial or lot number (Microsoft Learn).

Ask what the pick sequence does when one lot carries no expiration date. Then set a removal strategy on the location under a category that forces one, and ask which wins.

What the inventory module costs

Neither product sells inventory as a separate line item, so the license mix becomes the cost driver. Odoo folds Inventory into the per-user fee that covers every app (Odoo Pricing). Microsoft prices Business Central per user, and its own summary puts finance, sales and operations in Essentials, with service management and manufacturing added in Premium (Microsoft pricing, US). The budget turns on three decisions: how many floor staff can run on light seats, whether manufacturing pushes you to Premium, and who prices the scanner users.

All figures are as of October 2026.

Odoo: inventory rides on the user fee

Odoo's Standard and Custom plans include all apps, Inventory among them, for one per-user fee (Odoo Pricing). The One App Free plan runs one app with unlimited users on Odoo Online at USD 0 (Odoo Pricing). The pricing page shows two pairs of Standard figures, USD 24.90 and USD 31.10, also labeled USD 31.10 and USD 38.90, per user per month, with the discount valid for 12 months for initial users ordered (Odoo Pricing). Custom shows USD 49.00 and USD 61.10, also labeled USD 61.00 and USD 76.20, and adds Studio, multi-company and the external API, with Odoo.sh hosting priced extra (Odoo Pricing).

The seat that matters for warehouse teams is the Light User at USD 8.90 per user per month, whose listed capabilities include Inventory Barcode Operator; Odoo issues that license after an advisor reviews your requirements (Odoo Pricing). Odoo also documents a Barcode app for scanner-driven receipts, deliveries and adjustments, and the pricing page lists no separate Barcode line (Odoo 19.0 documentation). Implementation is a separate purchase: Odoo says companies under 50 employees often buy Success Packs while companies over 50 usually work with a partner (Odoo Pricing). When we scope an Odoo implementation, the first cost question is how many floor users can run as Light Users.

Business Central: the license is the module

Essentials lists at USD 80 and Premium at USD 110 per user per month, paid yearly, with Premium adding service management and manufacturing to Essentials (Microsoft pricing, US). Team Members seats cost USD 8 and cover limited read, approve, and create or update of select information (Microsoft pricing, US). A 30-day trial costs USD 0 (Microsoft pricing, US). Canadian list prices are CAD 108.50 for Essentials, CAD 149.20 for Premium and CAD 10.90 for Team Members, plus applicable tax (Microsoft pricing, Canada).

The mobile app on iOS or Android scans 1D and 2D barcodes with the device camera, including serial, lot and package numbers on item tracking lines, item journals, warehouse activity lines and the warehouse physical inventory journal (Microsoft Learn). Ask each bidder to price your scanner users as their own line and to name the license each one would hold.

A worked example: assume 8 full users and 12 barcode operators. On Odoo, using the displayed Standard figure of USD 38.90 (one of the two Standard pairs listed above), licenses run 8 × USD 38.90 plus 12 × USD 8.90, or USD 418.00 per month (Odoo Pricing). The Light User rate applies only when the advisor issues those licenses. On Business Central Essentials, the same 8 full users cost 8 × USD 80 (Microsoft pricing, US), or USD 640 per month, with the 12 scanner users priced separately by your bidder.

Score the demo, then scope phase one

Any test the bidder runs on their own prepared database, with every serial pre-received and every lot pre-dated, says little about your operation. Re-run the failed tests on a copy of your own item file and three months of transactions before anyone signs.

  • Lot receipt (Pass condition in a live demo: Odoo will not validate the lot-tracked receipt until a lot number is assigned · The failure to watch for: The bidder types freely into an unvalidated field)
  • Outbound tracking (Pass condition in a live demo: On Business Central the outbound line will not post until the serial, lot or package number that entered inventory is named, with Undefined at 0 · The failure to watch for: The line posts with Undefined above 0)
  • Costing (Pass condition in a live demo: The method shows as locked where history exists (Business Central); the lot valuation checkboxes are shown (Odoo) · The failure to watch for: The method changes freely on an empty demo item)
  • Transfer (Pass condition in a live demo: Ten units move between two warehouses or locations. On Business Central the tracking numbers stay unchanged while the transfer is in progress. An in-transit balance is accepted only when it is on screen · The failure to watch for: The demo database holds one warehouse)
  • Count (Pass condition in a live demo: A shortage posts and the entries appear, including the warehouse journal where zones apply (Business Central) · The failure to watch for: Counting happens only on a flat location)
  • FEFO (Pass condition in a live demo: The pick sequence is shown with an expiry date and with one missing · The failure to watch for: Every demo lot arrives pre-dated)

Phase one works when it stays small: one site on finance-grade inventory with the tracking rules your regulator or insurer requires, then bins, then directed put-away. That sequencing is how we run supply chain implementations for Odoo and Business Central, the same checklist behind our Business Central implementations for operations teams. Our target for a first usable phase is 8 to 12 weeks, delivered on the Flectic Accelerated Delivery Framework. Bring the scored sheet to a discovery call; it is the agenda.

How Flectic can help

Flectic brings pricing, multi-warehouse inventory and finance together on Dynamics 365 or Odoo for distributors of 20 to 100 people, so each order posts to the ledger without re-keying. Flectic sends a written proposal with a fixed price for each phase before work starts. See Flectic's ERP for wholesale and distribution for branch sourcing and how we pilot one branch first. To start, book a free discovery call.

Sources

Frequently asked questions

Is LIFO allowed for our inventory valuation?

Odoo documents LIFO as a removal strategy that only changes which unit gets picked, and states it is not allowed under IFRS. Business Central lists LIFO among its five costing methods while noting it is disallowed in many countries or regions. Ask your accountant which methods your reporting framework allows before the costing method is set.

Do we need Business Central Premium for warehouse work?

Microsoft's pricing summary describes Essentials as covering finance, sales and operations, with Premium adding service management and manufacturing. Bin and directed-pick requirements have to be confirmed in a demo on your own data before you commit to either plan.

Which warehouse staff need a full license?

Odoo publishes a Light User license at USD 8.90 per user per month whose listed capabilities include Inventory Barcode Operator, issued after an advisor reviews your requirements. Business Central's Team Member seat at USD 8 covers limited read, approve and update work, and Microsoft's pricing pages do not document it as a scanner license. Ask each bidder to price your scanner users as their own line and to name the license each person would hold.

Does the inventory module cost extra on top of the license?

Odoo includes Inventory among the apps covered by the per-user Standard and Custom plans, and implementation services are separate, with Odoo pointing companies under 50 employees to Success Packs and larger companies to a partner. Business Central prices Essentials, Premium and Team Members per user per month, with implementation priced separately by the partner you choose. Have data migration and scanner users quoted as their own lines.

Can two people count the same item at once?

Business Central splits a physical inventory order across multiple recordings, so two employees can each record part of the same count. Odoo schedules counts per storage location with a frequency you set in days. Assign each location one owner before go-live so recordings never cover the same shelves.

What should we ask a vendor to show in an inventory demo?

Ask them to receive a lot-tracked product and try to validate with the lot field empty, post an outbound line without naming the serial, lot or package number that entered inventory, transfer ten units between two warehouses and try to edit the tracking numbers mid-transfer, post a shortage from a count, trigger a reorder from a sales order, and open the ledger entry behind the inventory value. Insist on your own products, sites and volumes for the run-through.