Innledning
I Odoo bestemmer modeller hvordan informasjon organiseres i databasen. Alt fra salgsordrer til varebevegelse og lageroperasjoner ligger i egne modeller som definerer struktur, regler og relasjoner.
Å kjenne Odoos modeller er nyttig både for utviklere og konsulenter. Modellene utgjør kjernen i datastrukturen: hvilke felt som finnes, hvordan poster henger sammen, og hvor forretningslogikken kjører.
Denne teksten tar for seg en nøkkelmodell i Lager-appen: stock.picking. Enten du bygger spesialtilpassede lagermoduler, kobler til eksterne systemer eller setter opp arbeidsflyter, vil du ofte møte denne modellen.
Hva er stock.picking‑modellen
Stock.picking representerer overføringer i Odoo — selve registreringen av at varer flyttes fra ett sted til et annet. Hver post beskriver én enkelt bevegelse av varer mellom lokasjoner.
Modellen brukes gjennom hele lagerappen: mottak, leveranser og interne flyttinger opprettes som stock.picking-poster. Når en salgsordre bekreftes, varer mottas fra leverandør eller lager flyttes internt, oppdateres eller opprettes picking‑poster.
Modellen er implementert i stock‑modulen, og andre moduler bygger videre på den via arv. Salg legger inn felt for leveranse, innkjøp legger mottaksflyt, og produksjon legger materialbevegelser — uten å kopiere kjernefunksjonaliteten.
Stock.picking arver også fra kommunikasjonsmixiner som lar deg spore endringer, skrive meldinger i chatter og planlegge aktiviteter direkte på overføringene.
Viktige felt i modellen
Nedenfor er en oversikt over de viktigste feltene du møter i stock.picking. Å kjenne disse gjør det enklere å arbeide med plukking, pakking og validering i lageret.
1. name
Type: Char. Unik referanse for overføringen, ofte generert fra en sekvens (f.eks. WH/OUT/00001). Vises i toppteksten på plukk og er hovedidentifikatoren for posten.
2. origin
Type: Char. Referanse til kildedokumentet — for eksempel salgsordre eller innkjøpsordre. Nyttig ved sporing og feilsøking.
3. state
Type: Selection. Tilstandsindikator for overføringen. Typiske verdier: draft, waiting, ready, done, cancelled. Tilstanden avgjør hvilke handlinger som er tilgjengelige og beregnes etter relaterte bevegelser.
4. picking_type_id
Type: Many2one (stock.picking.type). Bestemmer om posten er mottak, levering eller intern flytting. Påvirker standard kildesteder og destinasjoner og er påkrevd ved opprettelse.
5. move_ids
Type: One2many (stock.move). Hovedlinjene i overføringen — hvert element beskriver et produkt og mengde som skal flyttes. Reservasjons- og tilgjengelighetslogikk opererer på disse.
6. move_line_ids
Type: One2many (stock.move.line). Detaljerte operasjoner per parti, serienummer eller plassering. Brukes ved plukking, pakking og endelig validering.
7. location_id
Type: Many2one (stock.location). Avsenderlokasjon — hvor varene plukkes fra. Obligatorisk og avhenger av plukktype.
8. location_dest_id
Type: Many2one (stock.location). Mottakerlokasjon — hvor varene skal leveres. Obligatorisk og settes av plukktype.
9. partner_id
Type: Many2one (res.partner). Kontaktinformasjon — kunde ved levering, leverandør ved mottak. Viktig for adresse på dokumenter og fraktintegrasjoner.
10. scheduled_date
Type: Datetime. Planlagt tidspunkt for gjennomføring. Brukes i planlegging og prioritering av plukk.
11. date_deadline
Type: Datetime. Frist for overføringen, ofte hentet fra salg eller innkjøp. Nyttig for å markere forsinkelser og kundeløfter.
12. date_done
Type: Datetime. Tidspunkt for når overføringen ble fullført eller kansellert. Automatisk satt og skrivebeskyttet.
13. priority
Type: Selection. Prioritetsnivå som påvirker reservasjon og ordreutførelse — høyere prioritet prioriteres først.
14. move_type
Type: Selection. Leveringspolicy — f.eks. 'delvis tillatt' eller 'alle varer må være klare'. Påvirker når plukket kan behandles.
15. user_id
Type: Many2one (res.users). Ansvarlig bruker for posten. Brukes ved tildeling og arbeidsbelastningsoppfølging og settes ofte til oppretter.
16. company_id
Type: Many2one (res.company). Selskapspåminnelse i flerselskapsscenarier — bestemmer eierskap for overføringen.
17. group_id
Type: Many2one (procurement.group). Kobler sammen bevegelser som hører til samme innkjøp eller ordregruppe.
18. backorder_id
Type: Many2one (stock.picking). Ved delvis validering opprettes en backorder for resten — dette feltet peker tilbake til originalen.
19. backorder_ids
Type: One2many (stock.picking). Samling av backorder‑poster som ble generert fra denne plukkingen.
20. return_id
Type: Many2one (stock.picking). Ved returer kobles denne plukkingen til originalleveransen.
21. note
Type: Html. Interne notater og instrukser synlige for lagerpersonell.
22. signature
Type: Image. Signatur tatt ved levering som bevis på overlevering. Lagres som vedlegg.
23. is_signed
Type: Boolean. Beregnet fra signature-feltet — angir om levering er signert.
24. owner_id
Type: Many2one (res.partner). Eier som skal tildeles ved validering — nyttig for konsignasjon og tredjepartseide varer.
25. package_level_ids
Type: One2many (stock.package_level). Pakkegrupper når man bruker pakkefunksjoner — samler move lines per kolli.
26. create_date
Type: Datetime. Når posten ble opprettet. Håndteres automatisk av Odoo.
27. write_date
Type: Datetime. Sist endret tidspunkt. Automatisk oppdatert.
28. active
Type: Boolean. Arkiveringsflagg — false betyr at posten er arkivert (soft delete).
Hvordan modellen brukes i forretningsflyter
1. Salg og leveranse
Når en salgsordre godkjennes, oppretter Odoo en leveransepost (stock.picking) knyttet til ordren. Lagerpersonellet plukker, pakker og validerer, og posten går fra utkast til ferdig.
2. Innkjøp og mottak
Ved bekreftet innkjøp opprettes et mottak som flytter varer fra leverandørens lokasjon til eget lager. partner_id peker på leverandøren, og validering oppdaterer lagerbeholdningen.
3. Interne overføringer
Flytting mellom egne lokasjoner eller mellom lager bygger interne pickinger (plukktype med kode 'internal'). Kilde og destinasjon er interne lagerlokasjoner.
4. Returer og backorders
Returer genererer egne return‑plukk som kobles til originalleveransen via return_id. Ved delvis levering opprettes backorder‑poster for gjenstående artikler.
5. Produksjon og montasje
Produksjonsordrer lager pickinger for både råvareforbruk og ferdigvarebevegelser. mrp‑modulen utvider stock.picking for produksjonsflyter.
Hvordan utviklere utvider modellen
Utviklere bygger på stock.picking ved hjelp av Odoos arv- og utvidelsesmønstre. Det finnes flere praktiske måter å legge til felt og logikk på.
Modellarv
Bruk _inherit = 'stock.picking' for å utvide modellen i egne moduler. Legg til felt, overstyr metoder eller definér valideringer. Dette holder endringene adskilt og gjør oppgraderinger enklere.
Legge til felt
Definer nye felttyper i den arvede modellen med passende typer: Char, Many2one, Boolean, Integer, Text eller Selection. Vurder også selskapsavhengige felt i flerselskapsscenarier.
Python‑utvidelser
Overstyr metoder som button_validate, action_assign eller _create_backorder for å injisere forretningslogikk. Huske å kalle super() når det er nødvendig og være forsiktig med tilstandsoverganger.
Odoo Studio
Odoo Studio lar deg raskt legge til felt uten koding — fint for enkle tilpasninger. For kompliserte arbeidsflyter eller fraktintegrasjoner anbefales egen modul for vedlikeholdbarhet.
Beste praksis
- Husk alltid å sette picking_type_id ved manuell opprettelse — det styrer standardlokasjoner og adferd.
- Bruk origin‑feltet konsekvent for å kunne spore plukking tilbake til kildeordren ved rapportering og feilsøking.
- Ved API‑integrasjoner er stock.picking fullt tilgjengelig. Opprett bevegelser via move_ids‑relasjonen og unngå å lage pickinger uten tilhørende bevegelser.
- Bruk scheduled_date aktivt i planlegging — den påvirker reservasjoner og prioritering i systemet.
- Gi egne felt prefikset x_ eller modulnavn for å unngå navnekonflikter ved oppgraderinger.
Vanlige feil
- Opprette pickinger uten picking_type_id. Dette fører ofte til feil standardlokasjoner og uventet adferd.
- Endre move_ids etter at plukk er bekreftet uten å forstå tilstandsmaskinen. Dette kan føre til inkonsistente tilstander.
- Glemme å sette partner_id for leveranser. Fraktberegning og dokumenter trenger kontaktinformasjon.
- Overstyre button_validate uten å kalle super(). Dette kan bryte backorder‑logikk og påvirke andre moduler negativt.
- Tro at move_ids og move_line_ids alltid er synkronisert. Move lines opprettes ved reservasjon eller detaljert plukking, ikke nødvendigvis samtidig med moves.
Konklusjon
Stock.picking er hjørnesteinen i Odoos lagerhåndtering. Den dokumenterer mottak, leveranser og interne flyttinger. Å forstå feltene og hvordan moduler bygger på den gjør det enklere å konfigurere, tilpasse og integrere Odoo.
Enten du kartlegger lagerprosesser som konsulent eller utvikler skreddersydde moduler, vil god kjennskap til stock.picking spare tid og redusere feil.
Klar for å optimalisere lageret ditt i Odoo?
Dasolo bistår bedrifter med implementering, tilpasning og optimalisering av Odoo, særlig innen API‑integrasjoner og utvikling. Vi har lang erfaring med Odoos datamodeller som stock.picking.
Trenger du hjelp med Odoo‑implementasjon, lagermoduler eller integrasjoner, så kan vi bidra med rådgivning og utvikling. Bestill en demo for å diskutere prosjektet ditt.