Inleiding
In Odoo definiëren modellen hoe gegevens zijn gestructureerd en opgeslagen in de database. Elk stuk bedrijfsdata waarmee u werkt, van verkooporders tot facturen tot voorraadbewegingen, bevindt zich in een model.
Het begrijpen van Odoo-modellen is essentieel voor zowel ontwikkelaars als functionele consultants. Modellen zijn de basis van de Odoo-gegevensarchitectuur. Ze definiëren velden, relaties en bedrijfslogica.
Dit artikel richt zich op een van de belangrijkste modellen in Odoo: stock.move. Of u nu aangepaste magazijnmodules bouwt, externe systemen integreert of voorraadworkflows configureert, u zult met dit model werken.
Wat is het stock.move Model
Het stock.move-model vertegenwoordigt een enkele voorraadbeweging in Odoo. Het definieert de overdracht van een product van de ene locatie naar de andere. Elke keer dat goederen een plank verlaten, tussen magazijnen verplaatst worden of aan een klant geleverd worden, wordt er een stock.move-record aangemaakt.
Dit model in Odoo wordt gebruikt door de module Voorraad (Stock). Verkoop, Aankoop, Productie en e-commerce creëren allemaal stock.move-records wanneer ze voorraadoperaties activeren. Wanneer je een leveringsorder bevestigt, goederen van een leverancier ontvangt of een productieorder voltooit, maak je of werk je stock.move-records bij.
Het model is gedefinieerd in de stockmodule. Andere modules breiden het uit via Odoo-modelovererving. Verkoop voegt sale_line_id toe. Aankoop voegt purchase_line_id toe. Productie voegt production_id toe. Elke module voegt toe wat het nodig heeft zonder de kernstructuur te dupliceren.
Belangrijke Velden in het Model
Hier zijn de belangrijkste Odoo-velden in het stock.move-model. Het begrijpen hiervan zal je helpen om effectief te werken met voorraadbewegingen.
1. naam
Type: Char. Dit veld slaat de naam of beschrijving van de beweging op. Het is doorgaans opgebouwd uit de productnaam en hoeveelheid. Weergegeven in veel Odoo-weergaven en is de primaire identificatie voor de beweging in lijsten.
2. product_id
Type: Many2one (product.product). Het product dat wordt verplaatst. Dit is een verplicht veld. Elke stockmove moet naar een product verwijzen. Odoo gebruikt dit om hoeveelheden bij te houden en voorraadregels toe te passen.
3. product_uom
Type: Many2one (uom.uom). De eenheid van maat voor de hoeveelheid. Verplicht. Meestal overeenkomend met de standaard UoM van het product. Odoo valideert dat hoeveelheden in deze eenheid worden uitgedrukt.
4. product_uom_qty
Type: Float. De hoeveelheid die moet worden verplaatst in de eenheid van maat van het product. Dit is de vraaghoeveelheid. Wanneer de beweging is voltooid, is quantity_done de werkelijke hoeveelheid die is verwerkt.
5. hoeveelheid
Type: Float. Een berekend of weergaveveld dat de hoeveelheid toont. Vaak gebruikt in weergaven voor gebruiksvriendelijke weergave. Kan hetzelfde zijn als product_uom_qty of een geconverteerde waarde.
6. locatie_id
Type: Many2one (stock.location). De bronlocatie. Waar het product vandaan komt. Vereist. Voor uitgaande bewegingen is dit de stocklocatie. Voor inkomende bewegingen kan dit een leverancier of productielocatie zijn.
7. locatie_dest_id
Type: Many2one (stock.location). De bestemmingslocatie. Waar het product naartoe gaat. Vereist. Voor inkomende bewegingen is dit de stocklocatie. Voor uitgaande bewegingen kan dit een klant of schrootlocatie zijn.
8. picking_id
Type: Many2one (stock.picking). Het transfer- of pickingdocument dat deze beweging groepeert. Een leveringsorder, ontvangst of interne overdracht. Bewegingen worden gegroepeerd per picking voor gebruikersoperaties.
9. picking_type_id
Type: Many2one (stock.picking.type). Het type operatie. Bepaalt of dit een uitgaande levering, inkomende ontvangst of interne overdracht is. Stuwt de workflow en standaardlocaties.
10. status
Type: Selectie. De huidige status van de beweging. Waarden: concept, wachten, bevestigd, toegewezen, voltooid, geannuleerd. Concept is nog niet bevestigd. Toegewezen betekent dat de voorraad is gereserveerd. Voltooid betekent dat de beweging compleet is.
11. datum
Type: Datum en tijd. De geplande datum voor de verhuizing. Gebruikt voor planning en scheduling. Odoo gebruikt dit om overplaatsingen te prioriteren en operaties te plannen.
12. deadline_datum
Type: Datum en tijd. De deadline voor de verhuizing. Voor klantleveringen is dit vaak de beloofde leverdatum. Gebruikt in urgentieberekeningen.
13. oorsprong
Type: Char. Verwijzing naar het oorspronkelijke document. Bijvoorbeeld een SO-nummer, PO-nummer of MO-nummer. Helpt de verhuizing terug te traceren naar de bron.
14. move_dest_id
Type: Many2one (stock.move). De bestemmingsverhuizing in een keten. Wanneer de ene verhuizing de andere voedt (bijv. productie-output voedt een levering), verbindt dit ze. Gebruikt voor verhuizingen in ketens en propagatie.
15. move_orig_ids
Type: One2many (stock.move). De oorspronkelijke verhuizingen. De inverse van move_dest_id. Lijst verhuizingen die in deze verhuizen. Gebruikt voor traceerbaarheid.
16. move_line_ids
Type: One2many (stock.move.line). De verhuizingslijnen. Gedetailleerde uitsplitsing van de verhuizing met partij-, serienummer- of locatiegegevens. Wanneer je voorraad reserveert of verwerkt, worden verhuizingslijnen aangemaakt.
17. partner_id
Type: Many2one (res.partner). De partner die aan de beweging is gekoppeld. Voor klantleveringen, de klant. Voor leverancierontvangsten, de leverancier. Gebruikt voor adres en rapportage.
18. company_id
Type: Many2one (res.company). In multi-company setups geeft dit aan tot welke Odoo-onderneming de beweging behoort. Beïnvloedt de zichtbaarheid van records en intercompany-regels.
19. quantity_done
Type: Float. De hoeveelheid die is verwerkt of gedaan. Wanneer de gebruiker kiest of ontvangt, wordt dit bijgewerkt. De beweging is voltooid wanneer quantity_done gelijk is aan product_uom_qty.
20. reserved_availability
Type: Float. De hoeveelheid die voor deze beweging is gereserveerd. Voorraad wordt gereserveerd wanneer de beweging is toegewezen. Dit veld toont hoeveel beschikbaar is.
21. create_date
Type: Datetime. Slaat de datum en tijd op waarop het record is aangemaakt. Automatisch beheerd door Odoo. Nuttig voor rapportage en auditing.
22. write_date
Type: Datetime. Slaat de datum en tijd van de laatste wijziging op. Ook automatisch beheerd. Helpt bij het bijhouden wanneer gegevens voor het laatst zijn bijgewerkt.
23. volgorde
Type: Geheel getal. Weergavevolgorde binnen een picking. Gebruikt om bewegingen in de gebruikersinterface te sorteren. Lagere nummers verschijnen eerst.
24. prioriteit
Type: Selectie. Urgentieniveau. Vaak 0 voor normaal, 1 voor urgent. Gebruikt in planning en organisatie. Urgente bewegingen kunnen worden geprioriteerd in operaties.
25. beschrijving_picking
Type: Char. Een beschrijving of opmerking voor de beweging. Weergegeven op pickingdocumenten. Nuttig voor speciale instructies of verwerkingsnotities.
26. referentie
Type: Char. Interne referentie of code. Kan worden gebruikt voor mapping met externe systemen of aangepaste tracking.
27. groep_id
Type: Many2one (procurement.group). De inkoopgroep. Groepeert gerelateerde bewegingen van dezelfde inkoop (bijv. een enkele verkooporder). Gebruikt voor planning en chaining.
28. inkoopmethode
Type: Selectie. Maak op voorraad of maak op bestelling. Bepaalt of voorraad wordt genomen uit bestaande inventaris of wordt geactiveerd voor productie/inkoop.
29. sale_line_id
Type: Many2one (sale.order.line). Toegevoegd door de Verkoopmodule. Verbindt de beweging met de verkooporderregel die deze heeft getriggerd. Gebruikt voor traceerbaarheid en rapportage.
30. purchase_line_id
Type: Many2one (purchase.order.line). Toegevoegd door de Aankoopmodule. Verbindt de beweging met de aankooporderregel. Gebruikt bij het ontvangen van goederen van leveranciers.
31. production_id
Type: Many2one (mrp.production). Toegevoegd door Productie. Verbindt de beweging met de productieorder. Gebruikt voor het verbruik van grondstoffen en de output van eindproducten.
32. active
Type: Boolean. Soft delete-vlag. Wanneer False, wordt het record gearchiveerd en verborgen in de standaardweergaven. Records worden niet fysiek verwijderd.
Hoe Dit Model Wordt Gebruikt in Bedrijfsworkflows
1. Klantlevering
Wanneer een verkooporder is bevestigd, maakt Odoo stock.move-records aan voor elke productregel. Elke beweging heeft location_id als de stocklocatie en location_dest_id als de klantlocatie. De bewegingen worden gegroepeerd in een picking (leveringsorder). Wanneer het magazijn pakt en verzendt, wordt quantity_done bijgewerkt en verandert de status van de beweging in gedaan.
2. Levering van leveranciers
Wanneer een aankooporder is bevestigd, maakt Odoo stock.move-records aan voor binnenkomende goederen. location_id is de leverancierlocatie, location_dest_id is de stocklocatie. De bewegingen worden gegroepeerd in een ontvangst. Wanneer de goederen aankomen, valideert de gebruiker en wordt quantity_done ingesteld.
3. Interne Overdracht
Overdrachten tussen magazijnen of locaties creëren stock.move records. location_id is het bronmagazijn, location_dest_id is de bestemming. Gebruikt voor aanvulling, herverdeling van voorraad of multi-magazijn operaties.
4. Productie
Productieorders creëren twee soorten bewegingen: inkomende grondstoffen (van voorraad naar productie) en uitgaande eindproducten (van productie naar voorraad). Het veld production_id koppelt deze bewegingen aan de productieorder. Beweging chaining via move_dest_id verbindt productie-output met downstream leveringen.
5. Retouren en Schroot
Klantenretouren creëren omgekeerde bewegingen. Schrootoperaties creëren bewegingen naar een schrootlocatie. Hetzelfde stock.move model behandelt al deze stromen. Het picking_type_id bepaalt het type operatie en de workflow.
Hoe Ontwikkelaars Dit Model Uitbreiden
Ontwikkelaars breiden stock.move uit met verschillende patronen. Odoo modelovererving is het belangrijkste mechanisme.
Modelovererving
Gebruik _inherit = 'stock.move' om het model uit te breiden. Voeg nieuwe velden toe, overschrijf methoden of voeg beperkingen toe. Het erfmodel in Odoo houdt je wijzigingen in een apart module voor gemakkelijke upgrades.
Velden Toevoegen
Definieer nieuwe Odoo-velden in je geërfde model. Gebruik het juiste veldtype: Char, Many2one, Boolean, Integer, Text, Selection. Overweeg bedrijf-afhankelijke velden voor multi-bedrijf. Voor stock moves zijn veelvoorkomende uitbreidingen aangepaste trackingnummers, vervoerdersreferenties of batchattributen.
Python Uitbreidingen
Overschrijf _action_done, _action_assign of _action_cancel om logica toe te voegen. Gebruik super() om de originele aanroep te doen. Wees voorzichtig met voorraadupdates en ketenbewegingen. Het API-model in Odoo stelt deze methoden beschikbaar voor uitbreiding.
Odoo Studio
Odoo Studio stelt je in staat om velden toe te voegen zonder code. Goed voor snelle aanpassingen zoals aangepaste velden op verplaatsingsformulieren. Voor complexe logica of workflowwijzigingen zijn aangepaste modules beter onderhoudbaar.
Beste Praktijken
- Zorg ervoor dat je location_id en location_dest_id correct instelt. Verkeerde locaties kunnen leiden tot verkeerde voorraadniveaus.
- Gebruik de picking_id om gerelateerde verplaatsingen te groeperen. Maak geen verplaatsingen zonder een picking wanneer ze tot een overdracht behoren.
- Bij het bouwen van API-integraties, gebruik de XML-RPC of JSON-RPC API. Het stock.move-model is volledig toegankelijk. Map externe ID's zorgvuldig.
- Voor aangepaste velden, gebruik de
x_prefix of een moduleprefix om conflicten met toekomstige Odoo-versies te vermijden. - Gebruik move_dest_id en move_orig_ids voor traceerbaarheid. Wanneer je ketenbewegingen programmatisch aanmaakt, stel deze links dan correct in.
- Overweeg quantity_done versus product_uom_qty bij validatie. Deeltijdleveringen zijn toegestaan.
Veelvoorkomende Fouten
- Verplaatsingen maken met verkeerde locatie types. Bron en bestemming moeten compatibel zijn (bijv. niet beide klantlocaties).
- Wijzigen van product_uom_qty nadat verplaatsingsregels bestaan. Dit kan leiden tot inconsistenties in de voorraad. Annuleer en maak opnieuw aan indien nodig.
- Vergeten om de oorsprong in te stellen. Zonder oorsprong is het moeilijk om een verplaatsing terug te traceren naar het brondocument.
- Het overschrijven van _action_done zonder super() aan te roepen. Dit kan de voorraadupdates en andere modules verstoren.
- Directe creatie van bewegingen zonder het juiste workflow te volgen (bijv. stock.picking). Het omzeilen van de picking kan reservering en toewijzing verstoren.
- Het negeren van move_dest_id bij het splitsen of samenvoegen van bewegingen. Aaneengeschakelde bewegingen kunnen wees worden.
Conclusie
Het stock.move model is centraal in Odoo voorraadbeheer. Het slaat elke beweging van goederen van de ene locatie naar de andere op. Begrijpen van de velden en hoe modules het uitbreiden zal je helpen Odoo effectief te configureren, aanpassen en integreren.
Of je nu een functionele consultant bent die magazijnprocessen in kaart brengt of een ontwikkelaar die aangepaste modules bouwt, een goed begrip van stock.move zal tijd besparen en fouten voorkomen.
Hulp Nodig Bij Uw Odoo Implementatie?
Dasolo helpt bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo. We zijn gespecialiseerd in API-integraties en Odoo-ontwikkeling. Ons team heeft diepgaande ervaring met de Odoo-gegevensarchitectuur en modellen zoals stock.move.
Als je hulp nodig hebt bij je Odoo-implementatie, aangepaste modules of integraties, zijn we hier om te helpen. Boek een demo om je project te bespreken.