Overslaan naar inhoud

Het stock.move-model: Odoo’s Architectuur voor Voorraadbewegingen

Uitgebreide gids voor het kernmodel van voorraadbeweging in Odoo — voor ontwikkelaars en functionele consultants
10 maart 2026 in
Het stock.move-model: Odoo’s Architectuur voor Voorraadbewegingen
Dasolo
| Nog geen reacties

Introductie


In Odoo bepaalt een model hoe bedrijfsgegevens in de database worden georganiseerd. Alles wat met je operationele processen te maken heeft — orders, facturen, voorraadbewegingen — krijgt een plek in een model zodat het consistent opgeslagen, doorzocht en verwerkt kan worden.


Kennis van Odoo-modellen is onmisbaar voor zowel technische ontwikkelaars als functionele consultants. Modellen vormen de ruggengraat van de data-architectuur: ze definiëren welke velden bestaan, hoe records met elkaar verbonden zijn en waar de kernlogica draait.


In dit artikel zoomen we in op één van de cruciale modellen binnen Odoo: stock.move. Of je nu magazijnlogica bouwt, koppelt met externe systemen of voorraadprocessen instelt, op dit model kom je telkens terug.

Wat is het stock.move-model?


Het stock.move-record beschrijft één enkele verplaatsing van een artikel binnen je voorraadbeheer. Het legt vast welk product van welke locatie naar welke locatie gaat — bijvoorbeeld van opslagplaats naar klant of van magazijn naar productie — en vormt zo het atomische bouwblok van elke fysieke beweging.


De Inventory-module werkt intensief met stock.move. Verkooporders, inkooporders, productieorders en webverkoop genereren allemaal moves wanneer ze een voorraadhandeling triggeren. Wanneer je een leveringsbon bevestigt, goederen ontvangt of een productie afrondt, ontstaan of wijzigen er stock.move-records.


Het model is gedefinieerd in de stock-module en andere modules breiden het uit via Odoo-inheritance. De verkoopmodule voegt bijvoorbeeld een koppeling naar de verkoopregel toe, inkoop voegt een verwijzing naar de inkoopregel toe, en productie koppelt moves aan productieorders — elk module voegt alleen wat nodig is zonder het hele basisontwerp te dupliceren.

Belangrijke velden in het model


Onderstaande velden zijn het belangrijkst om te kennen in stock.move. Wie deze velden begrijpt, kan betere aanpassingen maken en beter troubleshooten bij voorraadproblemen.


1. name

Type: Char. Geeft de omschrijving of titel van de beweging weer, vaak opgebouwd uit productnaam en hoeveelheid. Dit veld verschijnt in veel weergaven en helpt gebruikers snel te identificeren waar de move over gaat.


2. product_id

Type: Many2one (product.product). Het artikel dat verplaatst wordt. Dit is verplicht: zonder product heeft een move geen betekenis. Odoo gebruikt dit veld om voorraadaantallen en regels toe te passen.


3. product_uom

Type: Many2one (uom.uom). De eenheid waarin de hoeveelheid uitgedrukt is (stuks, kg, liter…). Meestal afgestemd op de standaard UoM van het product en essentieel voor correcte hoeveelheidsberekeningen.


4. product_uom_qty

Type: Float. De gevraagde hoeveelheid om te verplaatsen in de gekozen eenheid — de 'vraag' van de beweging. Bij afronding wordt quantity_done gebruikt om aan te geven wat er daadwerkelijk is verwerkt.


5. quantity

Type: Float. Een weergegeven of berekende hoeveelheid, vaak gebruikt in de UI voor leesbaarheid. Kan gelijk zijn aan product_uom_qty of een geconverteerde waarde naar een andere eenheid.


6. location_id

Type: Many2one (stock.location). De bronlocatie — waar het product vandaan komt. Verplicht. Afhankelijk van het type operatie is dit bijvoorbeeld het magazijn of een leverancierlocatie.


7. location_dest_id

Type: Many2one (stock.location). De bestemmingslocatie — waar het product naartoe gaat. Verplicht. Bij inkomende leveringen is dit vaak een opslaglocatie, bij uitgaande leveringen de klantlocatie.


8. picking_id

Type: Many2one (stock.picking). De transfer- of pickingsdocumentatie die moves groepeert. Een levering, ontvangst of interne verplaatsing: moves worden per picking samengevoegd voor verwerking door gebruikers.


9. picking_type_id

Type: Many2one (stock.picking.type). Bepaalt het soort operatie — inkomend, uitgaand of intern — en stuurt standaarden zoals standaardlocaties en flowgedrag.


10. state

Type: Selection. De status van de move (bijv. draft, waiting, confirmed, assigned, done, cancelled). Draft betekent nog niet bevestigd; assigned betekent dat er reservering is; done betekent voltooid.


11. date

Type: Datetime. De geplande datum/tijd van de beweging. Wordt gebruikt voor planning en prioritering van transfers in de operatieplanning.


12. date_deadline

Type: Datetime. De uiterste datum voor de move — vaak de beloofde leverdatum voor klanten — en relevant voor urgentie- en SLA-berekeningen.


13. origin

Type: Char. Een referentie naar het brondocument (bijv. verkooporder- of inkoopordernummer). Belangrijk voor traceerbaarheid en audits.


14. move_dest_id

Type: Many2one (stock.move). Link naar de 'volgende' move in een keten. Wanneer een beweging een andere voedt (zoals productie-output die naar een levering gaat), worden die moves hiermee gekoppeld.


15. move_orig_ids

Type: One2many (stock.move). De voorafgaande moves die deze beweging hebben aangevuld — inverse van move_dest_id — nuttig om herkomst en ketens te kunnen volgen.


16. move_line_ids

Type: One2many (stock.move.line). Gedetailleerde regelregels met serienummer, lot, exacte locatie of partitie. Tijdens reserveren en picking ontstaan move lines die de fysieke handelingen vastleggen.


17. partner_id

Type: Many2one (res.partner). De betrokken partner bij de beweging — klant bij een uitgaande zending of leverancier bij ontvangst. Gebruikt voor adressering en rapportering.


18. company_id

Type: Many2one (res.company). Geeft aan tot welke bedrijfseenheid de beweging behoort in multi-company-omgevingen. Bepaalt zichtbaarheid en intercompanyregels.


19. quantity_done

Type: Float. De werkelijk verwerkte hoeveelheid. Wordt aangepast tijdens picking/ontvangst; de move wordt als 'done' beschouwd zodra quantity_done gelijk is aan product_uom_qty.


20. reserved_availability

Type: Float. Hoeveelheid die momenteel voor deze move gereserveerd is. Geeft inzicht in hoeveel voorraad voor de move gereserveerd en dus toegezegd is.


21. create_date

Type: Datetime. Tijdstip waarop het record aangemaakt is. Automatisch beheerd en handig voor rapporten en audits.


22. write_date

Type: Datetime. Tijdstip van de laatste wijziging. Automatisch beheerd en nuttig om te zien wanneer data voor het laatst is aangepast.


23. sequence

Type: Integer. Bepaalt de volgorde van moves binnen een picking. Lagere waarden verschijnen bovenaan in lijsten en pickings.


24. priority

Type: Selection. Prioriteitsniveau (bijv. normaal of urgent). Wordt gebruikt door planningstools om urgente moves eerder te behandelen.


25. description_picking

Type: Char. Vrij veld voor instructies of opmerkingen die op pickings verschijnen — handig voor specifieke handling- of verpakkingsinstructies.


26. reference

Type: Char. Interne referentie of code die nuttig is bij koppelingen met externe systemen of custom tracking.


27. group_id

Type: Many2one (procurement.group). Verzamelt verwante moves die voortkomen uit dezelfde procurement (bijv. één verkooporder), en helpt bij planning en ketenlogica.


28. procure_method

Type: Selection. Bepaalt of het 'make to stock' of 'make to order' is — dus of voorraad uit bestaande voorraad gehaald wordt of nieuwe productie/inkoop moet worden getriggerd.


29. sale_line_id

Type: Many2one (sale.order.line). Toegevoegd door de verkoopmodule: koppelt de move aan de verkoopregel die hem veroorzaakte, nuttig voor rapportage en traceerbaarheid.


30. purchase_line_id

Type: Many2one (purchase.order.line). Toegevoegd door inkoop: koppelt de move aan de inkoopregel voor ontvangsten van leveranciers.


31. production_id

Type: Many2one (mrp.production). Toegevoegd door productie: koppelt moves aan productieorders en wordt gebruikt bij het reserveren van grondstoffen en het boeken van eindproducten.


32. active

Type: Boolean. Soft-delete vlag: wanneer False is het record gearchiveerd en niet zichtbaar in de standaardweergaven, maar het blijft bestaan voor historische doeleinden.

Hoe dit model in bedrijfsprocessen gebruikt wordt


1. Klantlevering

Bij bevestiging van een verkooporder genereert Odoo voor elke productregel een stock.move. De bron is het magazijn, de bestemming de klantlocatie, en alle moves worden samengevoegd in een picking (leveringsbon). Tijdens picken wordt quantity_done ingevuld en verandert de status naar 'done'.


2. Levering van leverancier

Bij inkooporders worden inkomende moves aangemaakt: leverancier als bron, magazijn als bestemming. Deze moves vormen een ontvangstdocument; bij binnenkomst valideert de gebruiker en vult quantity_done in.


3. Interne transfers

Verplaatsingen tussen locaties of magazijnen creëren moves met bron- en bestemmingslocaties ingesteld op de betrokken opslagplaatsen. Dit gebruik je voor voorraadverplaatsing, herbalancering of voorraadverplaatsingen tussen sites.


4. Productie

Productieorders maken moves voor zowel de aanvoer van grondstoffen naar productie als de uitgaande afgewerkte producten terug naar voorraad. De productie_id koppelt deze moves aan de productieorder; chaining via move_dest_id verbindt output met opvolgende leveringen.


5. Retouren en afval

Retourzendingen van klanten worden als omgekeerde moves aangemaakt; scrapping naar afvallocatie wordt ook als move geregistreerd. De picking_type bepaalt hoe de flow verwerkt wordt.

Hoe ontwikkelaars dit model uitbreiden


Ontwikkelaars breiden stock.move uit met verschillende technieken, waarbij Odoo's model inheritance centraal staat.


Modelovererving

Je gebruikt _inherit = 'stock.move' om velden of methoden toe te voegen of te overschrijven. Zo blijven aanpassingen netjes in een eigen module en blijft de basiscode upgradebaar.


Velden toevoegen

Voeg nieuwe Odoo-velden toe in je geërfde model: Char, Many2one, Boolean, Integer, Text, Selection enz. Denk aan bedrijfsafhankelijke velden in multi-company. Vaak toevoegen teams track-IDs, vervoersreferenties of batcheigenschappen voor moves.


Python-extensies

Overschrijf sleutelmethoden zoals _action_done, _action_assign of _action_cancel om aangepaste logica te injecteren; gebruik altijd super() om basisgedrag te behouden. Wees voorzichtig met voorraadboekingen en ketenlogica bij het aanpassen van deze flows.


Odoo Studio

Odoo Studio is handig om snel velden en simpele formulierwijzigingen door te voeren zonder te programmeren. Voor complexe workflows en duurzaam maatwerk blijft een custom module aan te raden.

Aanbevolen werkwijzen


  • Zorg dat location_id en location_dest_id altijd correct zijn ingevuld. Verkeerde combinaties veroorzaken onjuiste voorraadstanden.
  • Gebruik picking_id om verwante moves te groeperen. Maak geen losse moves aan als ze bij een transfer horen; dat compliceert reserveringen en verwerking.
  • Voor API-koppelingen werk met XML-RPC of JSON-RPC. stock.move is beschikbaar via de API — let op correcte mapping van externe ID's en datatypes.
  • Geef custom velden een veilige prefix (bijv. x_ of modulenaam_) om botsingen met toekomstige Odoo-versies te vermijden.
  • Stel move_dest_id en move_orig_ids in voor volledige traceerbaarheid. Bij geautomatiseerde ketens is het essentieel deze links correct te leggen.
  • Houd rekening met het verschil tussen quantity_done en product_uom_qty — partiële leveringen zijn toegestaan en moeten correct worden gevalideerd.

Veelgemaakte fouten


  • Bron- en bestemmingslocatietypes onjuist gebruiken. Beide locaties moeten compatibel zijn (bijv. niet twee klantlocaties samen), anders ontstaan fouten bij verwerking.
  • product_uom_qty aanpassen nadat move lines bestaan. Dat kan leiden tot voorraadinconsistenties — annuleer en maak de move opnieuw aan als je de geplande hoeveelheid structureel wijzigt.
  • Origin vergeten te vullen. Zonder verwijzing naar het brondocument is het moeilijk om de beweging terug te traceren naar een verkoop-, inkoop- of productieorder.
  • Een _action_done overschrijven zonder super() aan te roepen. Dat kan voorraadboekingen breken en andere modules destabiliseren.
  • Moves rechtstreeks aanmaken zonder de pickings-workflow te gebruiken. Bypassen van pickings kan reserveringen, toewijzingen en downstream-processen verstoren.
  • move_dest_id negeren bij splitsen of samenvoegen van moves. Dan ontstaan makkelijk verweesde (orphaned) moves en raakt de keten verstoord.

Slotwoord


Het stock.move-model is een kerncomponent van het Odoo-voorraadbeheer. Het legt elke fysieke verplaatsing tussen locaties vast. Wie de belangrijkste velden en uitbreidingspunten begrijpt, kan Odoo zowel functioneel als technisch veel effectiever inzetten.


Of je nu processen in kaart brengt als consultant of uitbreidingen bouwt als ontwikkelaar: een degelijke kennis van stock.move voorkomt vele operationele fouten en spaart ontwikkeltijd.

Hulp nodig bij je Odoo-implementatie?


Dasolo ondersteunt bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo. We zijn gespecialiseerd in API-koppelingen en maatwerkontwikkeling en hebben veel ervaring met de Odoo-datamodellen, waaronder stock.move.


Heb je hulp nodig bij implementatie, maatwerkmodules of integraties voor Odoo? We staan klaar om je project te ondersteunen. Boek een demo om je project te bespreken.

Het stock.move-model: Odoo’s Architectuur voor Voorraadbewegingen
Dasolo 10 maart 2026
Deel deze post
Aanmelden om een reactie achter te laten