Het probleem
Het is maandag, 9:40. Je webshop toont 40 stuks van je bestseller. Een klant bestelt er drie. Je picker loopt naar het schap, vindt niets en schrijft "niet op voorraad" op de pickbon. Het systeem zei 40. Het schap zei 0.
Nu moet je een klant te woord staan, een terugbetaling boeken en een vraag beantwoorden waar je nog geen antwoord op hebt: welk getal klopt? Meestal kloppen ze allebei, maar ze meten iets anders. Of een van de twee heeft niet gehoord dat er iets is bewogen. Het goede nieuws: je vindt het verschil zelf, en de oplossing zit meestal in instellingen en werkafspraken, niet in code.
Waarom het gebeurt
Eerst de vraag: welke webshop heb je? Draait je webshop op Odoo zelf, dan leest hij de voorraad live uit Odoo zodra hij een product toont. Een verschil komt dan bijna altijd door een definitie of een instelling. Is je webshop iets anders, zoals Shopify, WooCommerce, Magento of een marktplaats, dan heeft hij een eigen kopie van het getal. Hij weet alleen wat hem het laatst is verteld. Dan begint het verschil bij de koppeling.

Daarna: Odoo rekent bij elk product dat je volgt drie getallen uit. "Op voorraad" is wat het systeem denkt dat er fysiek ligt. "Vrij beschikbaar" is dat getal min wat gereserveerd is voor open leveringen. "Verwacht" is op voorraad plus inkomend min uitgaand. De Odoo-webshop toont vrij beschikbaar, voor het magazijn dat je bij de website hebt ingesteld, naar beneden afgerond op hele stuks. Hij toont dus niet "op voorraad" en niet "verwacht". Je voorraadscherm en je shop kunnen allebei kloppen en toch een ander getal laten zien.

schap , een kassa die verkopen laat boekt, verlopen partijen, en een externe webshop met een eigen kopie. De stappen hieronder lopen ze in die volgorde langs.
Zo los je het op, in zes stappen
- Vergelijk de juiste getallen. Kies één product waar het misgaat. Kijk in Odoo naar "op voorraad", "vrij beschikbaar" en "verwacht". Komt de shop overeen met "vrij beschikbaar", dan doet Odoo wat het hoort te doen, en zit je verschil tussen vrij beschikbaar en op voorraad: reserveringen. Komt de shop met geen van de drie overeen, ga dan naar stap 2.
- Kies het websitemagazijn. Werk je met meer dan één magazijn? Open dan Instellingen, ga naar het onderdeel Website en kies bij "Warehouse" het magazijn dat je webshoporders verzendt. Staat het veld leeg, dan staat er "All warehouses" en telt elk magazijn mee, ook voorraad die niet naar klanten kan. Het veld verschijnt alleen als je meerdere magazijnen hebt ingeschakeld.
- Sluit de open eindjes in je magazijn. Bevestig leveringen die al weg zijn. Een levering die niemand bevestigt, houdt zijn voorraad gereserveerd. Het getal in de shop zakt dan, terwijl "op voorraad" er nog goed uitziet. Verwerk je fysieke tellingen, want een telling die je niet toepast, verandert niets. Boek retouren en afschrijvingen. Heb je ook winkels met de Odoo-kassa? Check dan de instelling "Update quantities in stock". Standaard staat die op "In real time". Staat hij op "At the session closing", dan komt een winkelverkoop pas in je gedeelde voorraad als de sessie sluit. Je webshop blijft dan artikelen verkopen die uren geleden de winkel uit zijn.
- Kies wat de shop bij nul doet. Open het product, ga naar het tabblad eCommerce en kijk bij de groep Inventory. Je ziet die alleen bij producten waarbij "Track Inventory" aan staat. "Sell when Out-of-Stock" staat standaard aan. Zet hem uit bij alles wat je niet kunt nabestellen. De shop blokkeert de bestelling dan zodra "vrij beschikbaar" min wat de klant al in het mandje heeft onder 1 komt. Voeg een melding toe voor uitverkochte producten. Met "Show Available Qty" laat je klanten zien hoeveel er nog zijn zodra de voorraad onder een drempel zakt (standaard 5).
- Let op vervaldata. Volg je vervaldata? Dan gaat verlopen voorraad die niet gereserveerd is van "vrij beschikbaar" af. Het schap kan het artikel nog hebben, maar de shop verkoopt het niet. Verplaats of boek verlopen partijen af.
- Geef voorraad één eigenaar als je webshop buiten Odoo draait. Odoo boekt de voorraad. De webshop leest hem en schrijft nooit. Check dan drie dingen: welk getal Odoo verstuurt (vrij beschikbaar, niet verwacht), hoe vaak het getal wordt verstuurd, en wat er gebeurt als een verzending mislukt. Verkopen marktplaatsen dezelfde voorraad? Houd dan per kanaal een kleine buffer aan. Test met één product: verkoop één stuk in de webshop en meet hoe lang het duurt voordat Odoo de order toont en voordat de shop het nieuwe getal laat zien.

Waar het vaak misgaat
Producten in een winkelmandje zetten geen voorraad vast. Standaard wordt voorraad gereserveerd zodra de order bevestigd is en de levering ontstaat, niet terwijl het artikel in een winkelmandje ligt. Odoo telt je eigen mandje wel mee als "Sell when Out-of-Stock" uit staat, maar de mandjes van andere klanten niet. Twee klanten kunnen dus nog steeds het laatste stuk kopen.

Afronding verbergt voorraad. De shop rondt naar beneden af op hele stuks. Verkoop je op gewicht en is er 0,9 kilo vrij, dan toont de shop 0.
De verwachte voorraad is geen echte voorraad. Stuurt een koppeling of een rapport het verwachte getal door, dan belooft je shop goederen die er nog niet zijn.
Tijd hoort bij de voorraad. Zolang niemand een inkomende levering bevestigt, bestaat die niet voor de shop. Hoe sneller je magazijn boekt, hoe kleiner het verschil.
Tot slot: deze regels komen uit de open code van Odoo en zijn hetzelfde in Odoo 19 en 20. Koppelingen met externe webshops verschillen per aanbieder. Test die op een kopie van je eigen database.
Checklist
- Kies één product waar het misgaat en schrijf "op voorraad", "vrij beschikbaar" en "verwacht" op.
- Check de instelling voor het websitemagazijn.
- Bevestig oude leveringen en verwerk openstaande tellingen.
- Check wanneer je kassa de voorraad bijwerkt.
- Zet "Sell when Out-of-Stock" per product goed.
- Zoek naar verlopen partijen.
- Draait je webshop buiten Odoo? Check welk getal wordt verstuurd, hoe vaak, en wat er gebeurt als een verzending mislukt.
- Doe één testbestelling en meet de tijd.
Wanneer schakel je BlueZebra in
Met één magazijn en de Odoo-webshop kom je met standaard Odoo ver. Het wordt lastiger met meerdere magazijnen, winkels die voorraad delen met een webshop, marktplaatsen, of een externe webshop die op het verkeerde moment het verkeerde getal krijgt.
Bij BlueZebra werken we vanuit standaard boven maatwerk: eerst kijken wat Odoo zelf al oplost, en pas daarna bouwen wat echt nodig is. Heb je winkels en een webshop, dan houdt System2System voorraad, prijzen en orders tussen Odoo en je webshop gelijk, ook na een upgrade. Zo hoef je niet bang te zijn dat een nieuwe Odoo-versie je voorraadkoppeling breekt.
Wil je weten waar het verschil in jouw voorraad zit? Plan een procesanalyse en we lopen je getallen met je door, op basis van wat er nu werkt.
Veelgestelde vragen
- Waarom toont mijn Odoo-webshop een andere voorraad dan mijn magazijn?
- De webshop toont de vrij beschikbare voorraad (op voorraad min gereserveerd) voor het websitemagazijn, naar beneden afgerond, terwijl je voorraadscherm meestal "op voorraad" toont. Open leveringen, een websitemagazijn met de verkeerde reikwijdte, tellingen die je niet hebt toegepast en verlopen partijen vergroten het verschil.
- Toont de Odoo-webshop voorraad of verwachte voorraad?
- Geen van beide. De shop toont "vrij beschikbaar": op voorraad min wat gereserveerd is voor open leveringen, en min niet-gereserveerde verlopen voorraad. De verwachte voorraad toont hij niet.
- Hoe voorkom ik dat Odoo een product verkoopt dat niet op voorraad is?
- Open het product, ga naar het tabblad eCommerce en zet "Sell when Out-of-Stock" uit in de groep Inventory. De optie staat standaard aan, en je ziet de groep alleen bij producten waarbij "Track Inventory" aan staat.
- Hoe toon ik in de webshop alleen de voorraad van één magazijn?
- Schakel meerdere magazijnen in en kies dan bij de Website-instellingen bij "Warehouse" het magazijn dat je orders verzendt. Laat je het veld leeg, dan telt elk magazijn mee.
- Hoe vaak werkt Odoo de voorraad in de webshop bij?
- De Odoo-webshop rekent het getal uit zodra hij het product toont, dus hij volgt je boekingen. Het getal verandert pas als iemand een voorraadbeweging bevestigt, dus te laat boeken is de gebruikelijke vertraging. Een externe webshop hangt af van hoe vaak de sync het getal verstuurt.
- Waarom wijkt mijn Shopify- of WooCommerce-voorraad af van Odoo?
- Een externe webshop heeft een eigen kopie van het voorraad getal en weet alleen wat de sync het laatst stuurde. Check welk Odoo-getal wordt verstuurd, hoe vaak, en wat er gebeurt als een verzending mislukt.