Introduktion
I Odoo definierar modeller hur data struktureras och lagras i databasen. Varje del av affärsdata du arbetar med, från försäljningsorder till fakturor till lagerförflyttningar, finns i en modell.
Att förstå Odoo-modeller är avgörande för både utvecklare och funktionella konsulter. Modeller är grunden för Odoos dataarkitektur. De definierar fält, relationer och affärslogik.
Denna artikel fokuserar på en av de viktigaste modellerna i Odoo: stock.move. Oavsett om du bygger anpassade lagermoduler, integrerar externa system eller konfigurerar lagerarbetsflöden, kommer du att arbeta med denna modell.
Vad är stock.move-modellen
Modellen stock.move representerar en enskild lagerförflyttning i Odoo. Den definierar överföringen av en produkt från en plats till en annan. Varje gång varor lämnar en hylla, flyttas mellan lager eller levereras till en kund, skapas en stock.move-post.
Denna modell i Odoo används av modulen Lager (Stock). Försäljning, Inköp, Tillverkning och e-handel skapar alla stock.move-poster när de utlöser lageroperationer. När du bekräftar en leveransorder, tar emot varor från en leverantör eller slutför en tillverkningsorder, skapar eller uppdaterar du stock.move-poster.
Modellen definieras i lager-modulen. Andra moduler utökar den genom Odoo-modellärvande. Försäljning lägger till sale_line_id. Inköp lägger till purchase_line_id. Tillverkning lägger till production_id. Varje modul lägger till vad den behöver utan att duplicera den grundläggande strukturen.
Nyckelfält i modellen
Här är de viktigaste Odoo-fälten i modellen stock.move. Att förstå dessa kommer att hjälpa dig att arbeta effektivt med lagerförflyttningar.
1. name
Typ: Char. Detta fält lagrar namnet eller beskrivningen av förflyttningen. Det byggs vanligtvis från produktens namn och mängd. Visas i många Odoo-vyer och är den primära identifieraren för förflyttningen i listor.
2. product_id
Typ: Many2one (product.product). Produkten som flyttas. Detta är ett obligatoriskt fält. Varje lagerförflyttning måste referera till en produkt. Odoo använder detta för att spåra mängder och tillämpa lagerregler.
3. product_uom
Typ: Many2one (uom.uom). Måttenheten för mängden. Obligatorisk. Matchar vanligtvis produktens standard UoM. Odoo validerar att mängderna uttrycks i denna enhet.
4. product_uom_qty
Typ: Float. Mängden som ska flyttas i produktens måttenhet. Detta är den efterfrågade mängden. När förflyttningen är klar är quantity_done den faktiska mängden som har bearbetats.
5. kvantitet
Typ: Float. Ett beräknat eller visningsfält som visar kvantiteten. Används ofta i vyer för användarvänlig visning. Kan vara samma som product_uom_qty eller ett konverterat värde.
6. location_id
Typ: Many2one (stock.location). Källplatsen. Där produkten kommer ifrån. Obligatorisk. För utgående flyttningar är detta lagerplatsen. För inkommande flyttningar kan det vara en leverantör eller produktionsplats.
7. location_dest_id
Typ: Many2one (stock.location). Destinationsplatsen. Där produkten går. Obligatorisk. För inkommande flyttningar är detta lagerplatsen. För utgående flyttningar kan det vara en kund eller skrotplats.
8. picking_id
Typ: Many2one (stock.picking). Överförings- eller plockdokumentet som grupperar denna flytt. En leveransorder, mottagning eller intern överföring. Flyttningar grupperas efter plock för användaroperationer.
9. picking_type_id
Typ: Many2one (stock.picking.type). Operationstypen. Definierar om detta är en utgående leverans, inkommande mottagning eller intern överföring. Styr arbetsflödet och standardplatser.
10. status
Typ: Val. Den aktuella statusen för flytten. Värden: utkast, väntande, bekräftad, tilldelad, klar, avbruten. Utkast är ännu inte bekräftad. Tilldelad betyder att lagret är reserverat. Klar betyder att flytten är slutförd.
11. datum
Typ: Datum och tid. Det schemalagda datumet för flytten. Används för planering och schemaläggning. Odoo använder detta för att prioritera överföringar och planera operationer.
12. datum_deadline
Typ: Datum och tid. Deadline för flytten. För kundleveranser är detta ofta det lovade leveransdatumet. Används i brådskapsberäkningar.
13. ursprung
Typ: Char. Referens till det ursprungliga dokumentet. Till exempel ett SO-nummer, PO-nummer eller MO-nummer. Hjälper till att spåra flytten tillbaka till dess källa.
14. move_dest_id
Typ: Many2one (stock.move). Den destination som flytten går till i en kedja. När en flytt matar en annan (t.ex. tillverkningsutgång matar en leverans), länkar detta dem. Används för flyttkedjor och propagation.
15. move_orig_ids
Typ: One2many (stock.move). De ursprungliga flyttarna. Inversen av move_dest_id. Lista över flyttar som matar in i denna. Används för spårbarhet.
16. move_line_ids
Typ: One2many (stock.move.line). Flyttlinjerna. Detaljerad uppdelning av flytten med parti-, serienummer eller platsdetaljer. När du reserverar eller bearbetar lager skapas flyttlinjer.
17. partner_id
Typ: Many2one (res.partner). Den partner som är kopplad till rörelsen. För kundleveranser, kunden. För leveranser från leverantör, leverantören. Används för adress och rapportering.
18. company_id
Typ: Many2one (res.company). I flerföretagsinställningar anger detta vilken Odoo-företag rörelsen tillhör. Påverkar synlighet av poster och regler mellan företag.
19. quantity_done
Typ: Float. Den mängd som har bearbetats eller gjorts. När användaren plockar eller tar emot, uppdateras detta. Rörelsen är klar när quantity_done är lika med product_uom_qty.
20. reserved_availability
Typ: Float. Den mängd som har reserverats för denna rörelse. Lager reserveras när rörelsen tilldelas. Detta fält visar hur mycket som är tillgängligt.
21. create_date
Typ: Datetime. Lagrar datum och tid när posten skapades. Hanteras automatiskt av Odoo. Användbart för rapportering och granskning.
22. write_date
Typ: Datetime. Lagrar datum och tid för den senaste ändringen. Också automatiskt hanterad. Hjälper till att spåra när data senast uppdaterades.
23. sekvens
Typ: Heltal. Visningsordning inom en plockning. Används för att sortera rörelser i användargränssnittet. Lägre nummer visas först.
24. prioritet
Typ: Val. Brådskande nivå. Ofta 0 för normal, 1 för brådskande. Används i schemaläggning och planering. Brådskande rörelser kan prioriteras i operationer.
25. beskrivning_plockning
Typ: Char. En beskrivning eller anteckning för rörelsen. Visas på plockdokument. Användbart för särskilda instruktioner eller hanteringsanteckningar.
26. referens
Typ: Char. Intern referens eller kod. Kan användas för extern systemkartläggning eller anpassad spårning.
27. grupp_id
Typ: Many2one (procurement.group). Inköpsgruppen. Grupperar relaterade rörelser från samma inköp (t.ex. en enskild försäljningsorder). Används för planering och kedjning.
28. inköpsmetod
Typ: Val. Tillverka för lager eller tillverka på beställning. Bestämmer om lager tas från befintlig inventering eller utlöses för produktion/inköp.
29. sale_line_id
Typ: Many2one (sale.order.line). Lagt till av Försäljningsmodulen. Kopplar rörelsen till den försäljningsorderlinje som utlöste den. Används för spårbarhet och rapportering.
30. purchase_line_id
Typ: Many2one (purchase.order.line). Lagt till av Inköpsmodulen. Kopplar rörelsen till inköpsorderlinjen. Används vid mottagning av varor från leverantörer.
31. production_id
Typ: Many2one (mrp.production). Lagt till av Tillverkning. Kopplar rörelsen till tillverkningsordern. Används för förbrukning av råmaterial och utmatning av färdiga produkter.
32. active
Typ: Boolean. Mjuk raderingsflagga. När den är False, arkiveras posten och döljs från standardvyer. Poster raderas inte fysiskt.
Hur denna modell används i affärsarbetsflöden
1. Kundleverans
När en försäljningsorder bekräftas skapar Odoo stock.move-poster för varje produktlinje. Varje rörelse har location_id som lagerplats och location_dest_id som kundens plats. Rörelserna grupperas i en plockning (leveransorder). När lagret plockar och skickar, uppdateras quantity_done och rörelsens tillstånd blir klart.
2. Leverantörsmottagning
När en inköpsorder bekräftas skapar Odoo stock.move-poster för inkommande varor. location_id är leverantörens plats, location_dest_id är lagerplatsen. Rörelserna grupperas i en mottagning. När varorna anländer, validerar användaren och quantity_done sätts.
3. Intern överföring
Överföringar mellan lager eller platser skapar stock.move-poster. location_id är källlagret, location_dest_id är destinationen. Används för påfyllning, lagerbalansering eller flerlageroperationer.
4. Tillverkning
Tillverkningsorder skapar två typer av rörelser: inkommande råmaterial (från lager till produktion) och utgående färdiga produkter (från produktion till lager). fältet production_id kopplar dessa rörelser till tillverkningsordern. Rörelsekedjor via move_dest_id kopplar produktionsutgång till nedströmsleveranser.
5. Returer och Skrot
Kundreturer skapar omvända rörelser. Skrotningsoperationer skapar rörelser till en skrotplats. Den samma stock.move-modellen hanterar alla dessa flöden. picking_type_id bestämmer operationstyp och arbetsflöde.
Hur utvecklare utökar denna modell
Utvecklare utökar stock.move med flera mönster. Odoo-modellarv är den huvudsakliga mekanismen.
Modellarv
Använd _inherit = 'stock.move' för att utöka modellen. Lägg till nya fält, åsidosätt metoder eller lägg till begränsningar. Den ärvda modellen i Odoo håller dina ändringar i en separat modul för enkla uppgraderingar.
Lägga till fält
Definiera nya Odoo-fält i din ärvda modell. Använd rätt fälttyp: Char, Many2one, Boolean, Integer, Text, Selection. Tänk på företagsberoende fält för flera företag. För lageröverföringar inkluderar vanliga utvidgningar anpassade spårningsnummer, transportörreferenser eller batchattribut.
Python-utvidgningar
Överskriv _action_done, _action_assign eller _action_cancel för att lägga till logik. Använd super() för att anropa den ursprungliga. Var försiktig med lageruppdateringar och kedjande flyttningar. API-modellen i Odoo exponerar dessa metoder för utvidgning.
Odoo Studio
Odoo Studio låter dig lägga till fält utan kod. Bra för snabba anpassningar som anpassade fält på flyttformulär. För komplex logik eller arbetsflödesändringar är anpassade moduler mer underhållbara.
Bästa praxis
- Se alltid till att location_id och location_dest_id är korrekt inställda. Felaktiga platser kan orsaka felaktiga lager nivåer.
- Använd picking_id för att gruppera relaterade flyttningar. Skapa inte flyttningar utan en picking när de tillhör en överföring.
- När du bygger API-integrationer, använd XML-RPC eller JSON-RPC API. stock.move-modellen är helt exponerad. Karta externa ID:n noggrant.
- För anpassade fält, använd
x_prefix eller ett modulprefix för att undvika konflikter med framtida Odoo-versioner. - Använd move_dest_id och move_orig_ids för spårbarhet. När du skapar kedjade flyttningar programmässigt, ställ in dessa länkar korrekt.
- Överväg quantity_done vs product_uom_qty när du validerar. Delvisa leveranser är tillåtna.
Vanliga misstag
- Skapa flyttningar med felaktiga plats typer. Källa och destination måste vara kompatibla (t.ex. inte båda kundplatser).
- Modifiera product_uom_qty efter att flyttlinjer existerar. Detta kan orsaka lagerinkonsekvenser. Avbryt och återskapa om det behövs.
- Glöm inte att ställa in ursprung. Utan ursprung är det svårt att spåra en flytt tillbaka till sitt källdokument.
- Överskrider _action_done utan att kalla super(). Detta kan bryta inventarieuppdateringar och andra moduler.
- Skapar rörelser direkt utan att gå igenom rätt arbetsflöde (t.ex. stock.picking). Att kringgå plockningen kan bryta reservation och tilldelning.
- Ignorerar move_dest_id när man delar eller slår samman rörelser. Kedjade rörelser kan bli föräldralösa.
Slutsats
Modellen stock.move är central för Odoo-inventariet. Den lagrar varje rörelse av varor från en plats till en annan. Att förstå dess fält och hur moduler utökar den kommer att hjälpa dig att konfigurera, anpassa och integrera Odoo effektivt.
Oavsett om du är en funktionell konsult som kartlägger lagerprocesser eller en utvecklare som bygger anpassade moduler, kommer en solid förståelse av stock.move att spara tid och förhindra fel.
Behöver du hjälp med din Odoo-implementering?
Dasolo hjälper företag att implementera, anpassa och optimera Odoo. Vi specialiserar oss på API-integrationer och Odoo-utveckling. Vårt team har djup erfarenhet av Odoo:s dataarkitektur och modeller som stock.move.
Om du behöver hjälp med din Odoo-implementering, anpassade moduler eller integrationer, är vi här för att hjälpa till. Boka en demo för att diskutera ditt projekt.