Introduksjon
I Odoo beskriver modeller hvordan forretningsdata lagres og organiseres i databasen. Alt fra ordre og fakturaer til lagerbevegelser ligger i egne modeller som bestemmer hvilke felter og relasjoner som gjelder.
Å kjenne modellene er sentralt både for utviklere og funksjonelle konsulenter. Modeller utgjør ryggraden i Odoos datamodell og inneholder felter, koblinger mellom poster og den forretningslogikken som styrer oppførselen.
Denne artikkelen går i dybden på en kjernekomponent i lagerstyringen: stock.move. Enten du setter opp lagerregler, bygger integrasjoner mot andre systemer eller finjusterer plukke- og leveringsflyter, vil du møte denne modellen ofte.
Hva er stock.move-modellen
stock.move representerer én enkelt varebevegelse — overføringen av en vare fra et sted til et annet. Hver gang noe plukkes, flyttes mellom lokasjoner eller leveres, opprettes eller endres en stock.move-post som dokumenterer hva som skjedde.
Modellen brukes av Lager-modulen og blir opprettet av mange forretningshendelser: salg, innkjøp, produksjon og nettbutikk. Når en leveranse bekreftes, varer mottas eller et produksjonsoppdrag fullføres, opprettes/oppdateres tilhørende stock.move-poster.
Stock.move ligger i stock-modulen, men andre moduler utvider den via Odoo-arv. Salg legger til referanse til salgsordren, innkjøp knytter kjøpslinjer, og produksjon refererer produksjonsordre — hver modul tilfører det den trenger uten å duplisere kjernen.
Viktige felt i modellen
Nedenfor finner du felt som er verdt å kunne godt. De forklarer hva en varebevegelse inneholder og hvordan Odoo bruker informasjonen ved reservering, planlegging og rapportering.
1. name
Tekstfelt som beskriver selve bevegelsen. Navnet konstrueres ofte fra produkt og mengde og vises i lister og på dokumenter som primær beskrivelse.
2. product_id
Lenke til produktet som flyttes (product.product). Obligatorisk — hver bevegelse må peke på et produkt slik at lager og regler kan beregnes.
3. product_uom
Enhet for mengden (uom.uom). Angir måleenheten for denne bevegelsen og sikrer at tall tolkes riktig i systemet.
4. product_uom_qty
Flyttemengden i valgt enhet. Dette er det planlagte behovet — den mengden som forventes å bli flyttet før operasjonen utføres.
5. quantity
Visnings- eller beregnet felt for mengde. Ofte brukt for å vise en mer brukervennlig eller omregnet verdi i grensesnittet.
6. location_id
Kildeplasseringen (stock.location). Hvor varen kommer fra — for utlevering typisk lagerlokasjon, for mottak kanskje leverandørens lokasjon.
7. location_dest_id
Destinasjonsplasseringen (stock.location). Hvor varen skal til — kunde, lager eller skraplokasjon avhengig av type operasjon.
8. picking_id
Lenke til plukk-/transfer-dokumentet (stock.picking) som samler flere bevegelser, for eksempel en leveranse eller et mottak.
9. picking_type_id
Type operasjon (stock.picking.type). Angir om bevegelsen er innkommende, utgående eller intern, og styrer standardlokasjoner og arbeidsflyt.
10. state
Bevegelsens status. Mulige verdier inkluderer draft, waiting, confirmed, assigned, done, cancelled — som viser hvor i prosessen posten befinner seg.
11. date
Planlagt dato og tid for bevegelsen. Brukes i planlegging og prioritering av operasjoner.
12. date_deadline
Frist for når bevegelsen bør være gjennomført, ofte brukt for kundeleveranser og prioritering.
13. origin
Referanse til kilden (for eksempel salgsordre- eller kjøpsordrenummer) for å spore hvorfor bevegelsen ble opprettet.
14. move_dest_id
Lenke til etterfølgende bevegelse når flyten er kjedeformet — for eksempel når produksjonsresultat mates videre til en leveranse.
15. move_orig_ids
Liste over tidligere bevegelser som ledet fram til denne — nyttig for sporbarhet og historikk.
16. move_line_ids
Detaljerte linjer for bevegelsen (stock.move.line) med lot-/serienummer, eksakt kvantum og lokasjonsdetaljer som opprettes ved reservasjon og plukking.
17. partner_id
Knyttet kunde eller leverandør (res.partner). Brukes til adressering, rapportering og tilknytning mot salg/innkjøp.
18. company_id
Viser hvilken juridisk enhet posten tilhører i flerbedriftsoppsett og påvirker synlighet og intercompany-regler.
19. quantity_done
Reelt behandlet mengde. Oppdateres ved plukking eller mottak — når denne matcher product_uom_qty blir bevegelsen fullført.
20. reserved_availability
Hvor mye som er reservert for denne bevegelsen. Viser tilgjengelig reservering før reell plukking skjer.
21. create_date
Tidspunkt for når posten ble opprettet — automatisk styrt og nyttig for revisjon.
22. write_date
Tidspunkt for siste endring på posten — også automatisk og viktig for sporbarhet.
23. sequence
Sorteringsrekkefølge innenfor et plukk. Mindre tall vises først og styrer presentasjonen i brukergrensesnittet.
24. priority
Prioritetsnivå for bevegelsen. Brukes i planleggingslogikk for å prioritere hasteoppdrag.
25. description_picking
En kort beskrivelse eller instruks for bevegelsen som vises på plukklister og dokumenter.
26. reference
Intern referansekode som kan brukes for integrasjoner eller ekstra sporbarhet.
27. group_id
Procurement-gruppe som knytter sammen relaterte bevegelser fra samme anskaffelse eller salg for enklere planlegging.
28. procure_method
Strategi for anskaffelse: gjør fra lager eller gjør ved bestilling. Styrer om bevegelsen trekker fra eksisterende lager eller trigges produksjon/innkjøp.
29. sale_line_id
Lenke til salgsordrers linje — lagt til av salgsmodulen for sporbarhet mellom salg og lagerbevegelse.
30. purchase_line_id
Lenke til kjøpslinjen — brukt ved mottak for å knytte varen tilbake til innkjøpet.
31. production_id
Henvisning til produksjonsordre — brukes for råvareforbruk og ferdigvarebevegelser i produksjonsflyten.
32. active
Arkiveringsflagg. Sett til False for å skjule poster uten å slette dem fysisk, nyttig for historikk og rydding.
Hvordan modellen brukes i forretningsprosesser
1. Kundeleveranse
Når en salgsordre bekreftes opprettes en eller flere stock.move-poster med lager som kilde og kunde som destinasjon. Disse samles i et plukk; ved plukking oppdateres quantity_done og status settes til done.
2. Leverandørmottak
Ved bekreftet kjøpsordre opprettes innkommende bevegelser fra leverandørlokasjon til lager. Når varer tas imot validerer brukeren mottaket og setter quantity_done.
3. Intern overflytting
Flytting mellom egne lokasjoner/lagre danner stock.move-poster som brukes for omdisponering, påfyll eller flytting mellom lageravdelinger.
4. Produksjon
Produksjonsordre genererer både uttak av råvarer og innlegging av ferdigvarer. Feltet production_id knytter disse bevegelsene til produksjonen, og move_dest_id skaper løpende koblinger videre i flyten.
5. Retur og skrap
Returer og skrap håndteres også av stock.move. Returlager lager reverserte bevegelser, mens skrap går til egen skraplokasjon — alt styrt av riktig picking_type.
Hvordan utviklere utvider modellen
Utviklere bygger på stock.move med Odoo-arv og flere vanlige mønstre for å legge til felt eller logikk.
Modellarv
Bruk _inherit = 'stock.move' for å utvide modellen. Da kan du legge til felt, overstyre metoder eller legge inn valideringer i en separat modul slik at endringene blir vedlikeholdsvennlige.
Legge til felt
Definer nye felt i din arvede modell med passende typer (Char, Many2one, Boolean, Integer, Text, Selection). For lagerflyt er det vanlig å legge til ekstra sporingsnummer, transportreferanser eller batch-atributter.
Python-utvidelser
Overstyr metoder som _action_done, _action_assign eller _action_cancel for å injisere logikk. Kall super() for å bevare eksisterende oppførsel, spesielt der lagerkvantum og kjedeoperasjoner påvirkes.
Odoo Studio
Odoo Studio gir en rask vei for å legge til felter uten kode — fint for enkle tilpasninger. For kompliserte arbeidsflyter eller forretningsregler er en modul i kode som kan versjonshåndteres ofte å foretrekke.
Anbefalte fremgangsmåter
- Sørg alltid for at location_id og location_dest_id er korrekte — feil lokasjoner fører lett til gale lagerverdier.
- Bruk picking_id for å gruppere bevegelser som tilhører samme transfer. Å opprette løse bevegelser uten plukk kan bryte reservasjonslogikken.
- Ved integrasjoner, benytt XML-RPC eller JSON-RPC og kartlegg eksterne ID-er nøye. stock.move er tilgjengelig gjennom Odoos API, men korrekt mapping er kritisk.
- For egendefinerte felt, bruk x_-prefiks eller modulspesifikt prefiks for å unngå kollisjoner med fremtidige Odoo-versjoner.
- Sett move_dest_id og move_orig_ids riktig for å bevare sporbarhet. Når du lager kjedede bevegelser programmatisk må disse koblingene opprettes.
- Ta hensyn til forskjellen mellom product_uom_qty (planlagt) og quantity_done (faktisk). Systemet tillater delvise leveranser, så valideringslogikk må ta høyde for dette.
Vanlige feil
- Opprette bevegelser med feil lokasjonstyper. Kilde og destinasjon må være kompatible — for eksempel er det sjelden meningsfullt å flytte fra kunde til kunde.
- Endre product_uom_qty etter at move lines finnes kan skape inkonsistenser. Ofte er det tryggere å avbryte og gjenskape bevegelsen.
- Å glemme å sette origin gjør det vanskelig å spore hvorfor en bevegelse ble opprettet — alltid knytt tilbake til kildeordre om mulig.
- Overstyre _action_done uten å kalle super() kan bryte lageroppdateringer og integrasjoner — pass på å bevare kjernen i logikken.
- Opprette bevegelser direkte uten riktig plukk-workflow kan hindre reservasjon og føre til uventet oppførsel — følg standardprosessene når mulig.
- Ignorere move_dest_id ved splitting eller sammenslåing kan etterlate koblinger i uorden og gjøre sporbarhet vanskelig.
Oppsummering
stock.move er hjørnesteinen i Odoos lagerstyring. Den dokumenterer hver eneste varebevegelse mellom lokasjoner. Å forstå feltene, statusene og hvordan andre moduler bygger på modellen gjør det enklere å konfigurere, tilpasse og integrere systemet.
Enten du kartlegger lagerprosesser som konsulent eller bygger funksjonalitet som utvikler, vil god kjennskap til stock.move redusere feil og spare tid i implementasjonen.
Trenger du hjelp med Odoo-implementasjonen din?
Dasolo bistår bedrifter med å implementere, tilpasse og optimalisere Odoo. Vi har spisskompetanse på API-integrasjoner og dyp erfaring med Odoos datamodeller, inkludert stock.move.
Trenger du hjelp med implementasjon, egenutviklede moduler eller integrasjoner mot Odoo? Vi kan ta en prat og finne riktig løsning for ditt prosjekt. Book en demo for å diskutere prosjektet ditt.