Introduktion
I Odoo bestämmer modellerna hur affärsdata organiseras i databasen. Allt från order till lagerflyttar sparas i modeller — de är ritningen för var och hur informationen lagras.
Att förstå Odoo-modeller är viktigt både för utvecklare och funktionella konsulter. Modellerna avgör fälten, relationerna mellan poster och den logik som körs när data skapas eller ändras.
Den här guiden fokuserar på en av de mest centrala modellerna i lagerappen: stock.picking. Oavsett om du sätter upp plock- och packflöden, kopplar ihop externa system eller skräddarsyr processer kommer du att behöva hantera den här modellen.
Vad är modellen stock.picking?
I korthet representerar stock.picking en lagerflytt i Odoo. Varje post motsvarar en överföring av varor från en plats till en annan och är navet där status, ansvarig och de rörliga artiklarna samlas.
Stock.picking används i hela lagerområdet: inleveranser, utleveranser och interna förflyttningar skapar alla pickings. När du bekräftar en försäljningsleverans, tar emot varor från en leverantör eller flyttar mellan lager skapas eller uppdateras en picking.
Modellen ligger i stock-modulen och andra moduler kompletterar den via arv. Försäljning lägger till leveransfält, inköp hanterar inleveranser och produktion kopplar sina materialrörelser — utan att upprepa kärnmodellen.
Stock.picking är dessutom trådad mot Odoos kommunikationslager (mail.thread och mail.activity.mixin), vilket gör att du kan följa historik, skriva i chatter och planera aktiviteter direkt på en överföring.
Viktiga fält i modellen
Nedan följer de viktigaste fälten i stock.picking som du oftast kommer att behöva för att konfigurera, felsöka eller bygga funktionalitet runt lagerflyttar.
1. name
Typ: Char. Referensen för överföringen — ofta ett sekvensgenererat nummer (t.ex. WH/OUT/00001). Visas tydligt i formulärets header och används som huvudidentifierare för pickingen.
2. origin
Typ: Char. Referens till källordern eller dokumentet — till exempel försäljningsorder eller inköpsorder. Används för spårbarhet och rapportering.
3. state
Typ: Selection. Pickings status (t.ex. draft, waiting, ready, done, cancelled). Statusen styr vilka åtgärder som är möjliga och härleds från tillhörande lagerrörelser.
4. picking_type_id
Typ: Many2one (stock.picking.type). Anger om det är inleverans, utleverans eller intern flytt. Bestämmer också standardkäll- och destinationsplatser och påverkar beteende.
5. move_ids
Typ: One2many (stock.move). Själva raderna med vilka produkter och kvantiteter som ska flyttas. Bokningslogik och tillgänglighetskontroller jobbar primärt mot dessa poster.
6. move_line_ids
Typ: One2many (stock.move.line). Detaljerade operationsrader som används vid lots/serienummerhantering och för fysisk plockning/packning och validering.
7. location_id
Typ: Many2one (stock.location). Källa — var produkterna tas ifrån. Obligatoriskt och avser ofta lagerets interna plats för utleveranser.
8. location_dest_id
Typ: Many2one (stock.location). Destination — var produkterna flyttas till. Obligatoriskt och är ofta kundplats vid leverans eller lagrets plats vid mottag.
9. partner_id
Typ: Many2one (res.partner). Kontakt kopplad till överföringen — kund vid leverans, leverantör vid mottag. Används även för adresser och fraktintegration.
10. scheduled_date
Typ: Datetime. Planerat datum för hantering. Viktigt för planering och prioritering eftersom det påverkar reservationer och köbildning.
11. date_deadline
Typ: Datetime. Deadline för leverans eller mottag — ofta är detta värde ärvt från försäljnings- eller inköpsorder och används för att flagga försenade leveranser.
12. date_done
Typ: Datetime. Tidsstämpel när överföringen validerades eller annullerades. Sätts automatiskt och är vanligtvis skrivskyddad.
13. priority
Typ: Selection. Prioritetsnivå som påverkar i vilken ordning lager reserveras och plockas (höga prioriteringar behandlas först).
14. move_type
Typ: Selection. Leveranspolicy — till exempel "så snart som möjligt" (delplock tillåtet) eller "vänta på allt" (allt-eller-inget). Påverkar när plockningen får processas.
15. user_id
Typ: Many2one (res.users). Ansvarig användare för pickingen. Används för assignments och för att följa arbetsbelastning. Fylls ofta med aktuell användare vid skapande.
16. company_id
Typ: Many2one (res.company). Företagstillhörighet — särskilt viktigt i multi-företagsinstallationer då det styr vilka regler och lager som gäller.
17. group_id
Typ: Many2one (procurement.group). Kopplar samman relaterade försörjnings- eller leveransgrupper, användbart när flera pickings hör till samma orderflöde.
18. backorder_id
Typ: Many2one (stock.picking). Vid partiell validering skapas ett backorder för kvarvarande kvantiteter — detta fält länkar tillbaka till ursprungspickingen.
19. backorder_ids
Typ: One2many (stock.picking). Lista över backorders som skapats från den här pickingen när delar validerats senare.
20. return_id
Typ: Many2one (stock.picking). Om pickingen är en retur länkar detta fält till originalleveransen — viktigt för returhanteringsflöden.
21. note
Typ: Html. Internt notfält där plockare eller lagerpersonal kan lägga instruktioner, hanteringsanvisningar eller andra kommentarer.
22. signature
Typ: Image. Captured signatur vid leveransvalidering — används som bevis för leverans och lagras som bilaga.
23. is_signed
Typ: Boolean. Beräknat fält som indikerar om en signatur finns — snabbt sätt att visa om leveransen signerat.
24. owner_id
Typ: Many2one (res.partner). Ägare av varorna vid validering — används för konsignationsvaror eller när varor tillhör tredje part.
25. package_level_ids
Typ: One2many (stock.package_level). Paketnivåer vid packhantering — grupperar move lines i paket inför frakt.
26. create_date
Typ: Datetime. När posten skapades — automatiskt hanterat av Odoo och användbart för spårbarhet.
27. write_date
Typ: Datetime. När posten senast ändrades — också automatiskt och bra för revision.
28. active
Typ: Boolean. Mjuk borttagning — sätts False för att arkivera poster utan att fysiskt radera dem.
Hur modellen används i affärsflöden
1. Försäljning och utleverans
När en försäljningsorder bekräftas skapas en utleverans (stock.picking). Pickingen kopplas tillbaka via origin, plock- och packsteg utförs av lagret och statusen går från utkast till klar till genomförd.
2. Inköp och mottag
När ett inköp bekräftas genereras en inleverans. Varor flyttas från leverantörsplats till lagret, partnerfältet refererar leverantören och validering uppdaterar lagersaldon.
3. Interna flyttar
Flyttar mellan lager eller lokationer skapar interna pickings där picking_type har kod 'internal' och både källa och destination är interna lagerplatser.
4. Returer och backorders
Returer skapar separata returnpickings som länkas till originalet via return_id. Vid partiell leverans skapas backorders för det som återstår att plocka.
5. Produktion och tillverkning
Produktionsordrar skapar pickings för konsumtion av råmaterial och för färdiga produkter. Mrp-modulen bygger vidare på stock.picking för dessa flöden.
Hur utvecklare bygger vidare på modellen
Utvecklare bygger på stock.picking genom flera mönster — främst via Odoos modell-arv och genom att lägga logik i modellerna.
Modellarv
Använd _inherit = 'stock.picking' i ditt modulmanifest för att lägga till fält, ändra metoder eller valideringar. Det håller dina ändringar separata och gör uppgraderingar enklare.
Lägga till fält
Definiera nya Odoo-fält i din ärvda modell med rätt typ: Char, Many2one, Boolean, Integer, Text eller Selection. Tänk också på företagsspecifika fält i multi-company-miljöer.
Pythonförlängningar
Överlagra metoder som button_validate, action_assign eller _create_backorder för att införa egen logik. Anropa super() när du behöver behålla grundbeteendet och var noga med tillståndslogiken.
Odoo Studio
Odoo Studio är smidigt för snabba tillägg utan kod — bra för extra etiketter eller notfält. Men för komplexa regler eller integrationskrav är egna moduler mer robusta.
Rekommenderade arbetssätt
- Sätt alltid picking_type_id när du skapar pickings manuellt — det styr standardplatser och mycket av beteendet i lagret.
- Använd origin-fältet för spårbarhet. Det gör felsökning och rapportering av leveranser mycket enklare.
- Vid API-integrationer exponeras stock.picking fullt via Odoos API. Skapa moves genom move_ids-relationen — undvik att skapa pickings utan moves.
- Planera med scheduled_date — det påverkar reservationer och prioriteringslogik i systemet.
- För egna fält använd x_ prefix eller modulprefix så risken för namnkonflikter med framtida Odoo-versioner minskar.
Vanliga misstag
- Att skapa pickings utan picking_type_id, vilket kan leda till felaktiga standardlokationer och oväntat beteende.
- Att manipulera move_ids efter bekräftelse utan att förstå tillståndsmaskinen — det kan orsaka inkonsistenser i status och reserveringar.
- Att glömma partner_id för leveranser — fraktlösningar och utskrifter behöver kontaktuppgifter för att fungera korrekt.
- Att override:a button_validate utan att anropa super() — det kan förstöra backorder-logik och bryta andra moduler.
- Att anta att move_ids och move_line_ids alltid är synkade — move lines skapas vid reservation eller detaljerad hantering och kan skilja sig temporärt.
Sammanfattning
Stock.picking är navet i Odoos lagerhantering: det lagrar överföringar, leveranser och mottag. Kännedom om fälten och hur andra moduler bygger vidare är avgörande för korrekt konfiguration, anpassning och integration.
Oavsett om du kartlägger lagerprocesser som konsult eller bygger moduler som utvecklare, sparar en gedigen förståelse av stock.picking tid och minskar risken för fel.
Redo att optimera ditt Odoo-lager?
Dasolo hjälper företag att implementera, anpassa och optimera Odoo. Vi är specialiserade på API-integrationer och skräddarsydd utveckling, med djup kunskap om Odoos datamodeller som stock.picking.
Behöver du stöd med Odoo-implementering, lageranpassningar eller integrationer? Vi kan hjälpa till. Boka en demo för att diskutera ditt projekt.