Passa al contenuto

Modello stock.move: Come funziona l’architettura degli Inventory di Odoo

Guida completa al modello centrale di movimentazione magazzino di Odoo per sviluppatori e consulenti funzionali
10 marzo 2026 di
Modello stock.move: Come funziona l’architettura degli Inventory di Odoo
Dasolo
| Ancora nessun commento

Introduzione


In Odoo i modelli definiscono la struttura dei dati in archivio: ogni informazione gestionale — ordini, fatture, movimenti di magazzino — viene rappresentata come record in un modello specifico.


Capire come funzionano i modelli è fondamentale sia per chi configura i processi aziendali sia per chi sviluppa: sono la base dell'architettura dati, disciplinano campi, relazioni e la logica di business.


Qui analizziamo uno dei modelli più usati in Odoo: stock.move. Se lavori su logistica, integrazioni esterne o personalizzazioni del magazzino, lo incontrerai spesso.

Cos'è il modello stock.move


Il modello stock.move descrive un singolo spostamento di merce: registra il trasferimento di un prodotto da una ubicazione a un'altra. Ogni prelievo, trasferimento interno o consegna genera uno o più record di questo tipo.


Il modello è centrale nel modulo Magazzino. Operazioni provenienti da Vendite, Acquisti, Produzione e e‑commerce creano e aggiornano stock.move quando scatenano movimenti fisici o contabili di merce.


Stock.move è definito nel modulo stock e viene esteso da altri moduli tramite ereditarietà: il modulo Vendite aggiunge il legame con la riga d'ordine, Acquisti aggiunge il riferimento alla riga di ordine fornitore, Produzione collega l'ordine di lavoro. Ogni modulo arricchisce il modello senza duplicarne il cuore.

Campi chiave del modello


Di seguito trovi i campi principali del modello stock.move: conoscerli ti aiuta a leggere, filtrare e manipolare correttamente i movimenti di magazzino.


1. name

Tipo: Char. Etichetta descrittiva del movimento, spesso costruita da nome prodotto e quantità. È il campo che gli utenti vedono nelle liste e nelle stampe per identificare il movimento.


2. product_id

Tipo: Many2one (product.product). Il prodotto coinvolto nel movimento. Campo obbligatorio: senza prodotto non si può tracciare quantità né applicare regole di magazzino.


3. product_uom

Tipo: Many2one (uom.uom). L'unità di misura per le quantità. Di solito coincide con l'UoM di default del prodotto e serve a validare i valori inseriti.


4. product_uom_qty

Tipo: Float. La quantità prevista da movimentare nell'unità scelta. Rappresenta la domanda; il valore effettivo lavorato è invece registrato in quantity_done.


5. quantity

Tipo: Float. Campo di sola consultazione o calcolato per mostrare la quantità in modo leggibile: può coincidere con product_uom_qty o essere una conversione.


6. location_id

Tipo: Many2one (stock.location). Ubicazione di partenza del prodotto. Necessario: per uscite sarà il magazzino, per entrate può essere il fornitore o la linea di produzione.


7. location_dest_id

Tipo: Many2one (stock.location). Destinazione del prodotto. Per ricevimenti è il magazzino, per uscite può essere l'indirizzo del cliente o l'area di scarto.


8. picking_id

Tipo: Many2one (stock.picking). Documento di trasporto che raggruppa i movimenti (consegna, ricezione, trasferimento interno). Lavorare sui picking semplifica le operazioni utente.


9. picking_type_id

Tipo: Many2one (stock.picking.type). Il tipo di operazione: uscita, entrata o trasferimento interno. Questo imposta flussi, ubicazioni di default e regole operative.


10. state

Tipo: Selection. Stato corrente del movimento: draft, waiting, confirmed, assigned, done, cancelled. Indica se è solo pianificato, riservato, completato o annullato.


11. date

Tipo: Datetime. Data programmata del movimento, utile per pianificare priorità e organizzare i prelievi.


12. date_deadline

Tipo: Datetime. Data limite o promessa di consegna, impiegata per calcolare urgenze e rispetto dei SLA.


13. origin

Tipo: Char. Riferimento al documento di origine (es. numero ordine vendita, ordine d'acquisto o produzione). Serve per la tracciabilità.


14. move_dest_id

Tipo: Many2one (stock.move). Collegamento al movimento di destinazione in una catena di spostamenti: utile quando l'output di una fase alimenta la successiva.


15. move_orig_ids

Tipo: One2many (stock.move). Insieme dei movimenti di origine che alimentano questo movimento, l'inverso di move_dest_id, usato per seguire le dipendenze.


16. move_line_ids

Tipo: One2many (stock.move.line). Le righe di movimento che dettagliano lotti, numeri di serie, quantità per ubicazione: vengono create durante la riserva e la gestione del picking.


17. partner_id

Tipo: Many2one (res.partner). Il cliente o fornitore collegato al movimento: utile per indirizzi, documenti e reportistica commerciale.


18. company_id

Tipo: Many2one (res.company). In scenari multi‑azienda identifica a quale società appartiene il movimento, condizionando visibilità e regole intercompany.


19. quantity_done

Tipo: Float. Quantità effettivamente movimentata e registrata dall'operatore. Il movimento si considera 'done' quando quantity_done coincide con product_uom_qty.


20. reserved_availability

Tipo: Float. Quantità riservata per quel movimento: indica quanto stock è già allocato a fronte della richiesta.


21. create_date

Tipo: Datetime. Data e ora di creazione del record, gestita automaticamente, utile per audit e analisi temporali.


22. write_date

Tipo: Datetime. Data e ora dell'ultima modifica, anch'essa generata dal sistema per tracciare aggiornamenti.


23. sequence

Tipo: Integer. Ordine di visualizzazione all'interno di un picking: valori più bassi vengono mostrati per primi.


24. priority

Tipo: Selection. Livello di priorità/urgenza del movimento; può influenzare la pianificazione e la gestione dei prelievi.


25. description_picking

Tipo: Char. Nota visibile sul documento di trasporto per istruzioni speciali o dettagli operativi.


26. reference

Tipo: Char. Riferimento interno o codice usato per integrazioni esterne o tracciabilità personalizzata.


27. group_id

Tipo: Many2one (procurement.group). Raggruppa movimenti collegati alla stessa attività di approvvigionamento o vendita per strategie di pianificazione.


28. procure_method

Tipo: Selection. Strategia di approvvigionamento: make_to_stock o make_to_order, determina se si preleva da giacenza o si avvia una produzione/approvvigionamento.


29. sale_line_id

Tipo: Many2one (sale.order.line). Campo aggiunto dal modulo Vendite che lega il movimento alla riga d'ordine di vendita per tracciabilità.


30. purchase_line_id

Tipo: Many2one (purchase.order.line). Campo aggiunto dal modulo Acquisti per legare il movimento alla riga d'ordine fornitore alla ricezione.


31. production_id

Tipo: Many2one (mrp.production). Collegamento all'ordine di produzione: usato per consumi di materie prime e output di prodotto finito.


32. active

Tipo: Boolean. Flag di archiviazione: se False il record è nascosto nelle viste di default ma non viene eliminato fisicamente.

Come si usa questo modello nei processi aziendali


1. Consegne a cliente

Alla conferma di un ordine di vendita Odoo genera movimenti per ciascuna riga: la location di origine è il magazzino, la destinazione è il luogo del cliente. I movimenti sono raggruppati in un picking; quando il magazziniere completa il prelievo aggiorna quantity_done e lo stato passa a done.


2. Ricezioni da fornitore

Alla conferma di un ordine d'acquisto vengono creati movimenti in ingresso: la sorgente può essere il fornitore, la destinazione è il magazzino. Il tutto si consolida in un documento di ricezione che viene validato al ricevimento merce.


3. Trasferimenti interni

Spostamenti tra ubicazioni o depositi generano movimenti con origine e destinazione specifiche: si usano per ribilanciare stock, trasferimenti tra siti o attività di reintegro.


4. Produzione

Gli ordini di produzione generano movimenti per i componenti (uscita da magazzino verso produzione) e per i prodotti finiti (entrata da produzione a magazzino). Il campo production_id mantiene il legame e la catena di movimenti collega output e consegne successive.


5. Resi e scarti

I resi cliente producono movimenti inversi, mentre le operazioni di scarto spostano merce verso una ubicazione di scarto. Tutte le situazioni sono gestite dallo stesso modello: picking_type_id stabilisce il flusso operativo.

Come gli sviluppatori estendono questo modello


Gli sviluppatori ampliano stock.move con diversi approcci, usando principalmente i meccanismi di ereditarietà dei modelli Odoo.


Ereditarietà del modello

Si usa _inherit = 'stock.move' per estendere il modello: si aggiungono campi, si ridefiniscono metodi o si aggiungono vincoli. Mantenere le estensioni in moduli separati facilita gli aggiornamenti.


Aggiunta di campi

Nell'erede si definiscono nuovi campi con i tipi corretti (Char, Many2one, Boolean, Integer, Text, Selection). Valuta campi dipendenti dalla company in scenari multi‑azienda. Tipiche estensioni per movimenti includono numeri di tracking personalizzati, riferimenti vettore o attributi di lotto.


Estensioni in Python

Sovrascrivi metodi come _action_done, _action_assign o _action_cancel per inserire logiche custom; ricorda di richiamare super() per preservare il comportamento di base. Attenzione alle implicazioni su aggiornamenti inventariali e concatenamento dei movimenti.


Odoo Studio

Odoo Studio permette di aggiungere campi senza codice, utile per personalizzazioni rapide sul form. Per logiche complesse o workflow estesi, preferisci moduli personalizzati per maggiore controllo e manutenibilità.

Buone pratiche


  • Imposta sempre correttamente location_id e location_dest_id: ubicazioni sbagliate si traducono in giacenze errate e discrepanze di magazzino.
  • Raggruppa i movimenti con picking_id quando appartengono allo stesso trasferimento: creare movimenti isolati senza picking può complicare operazioni e riserve.
  • Per integrazioni usa le API XML‑RPC o JSON‑RPC esposte da Odoo: stock.move è accessibile, quindi mappa con cura gli ID esterni e gestisci i riferimenti univoci.
  • Per i campi personalizzati usa il prefisso x_ o un prefisso legato al modulo per evitare collisioni con campi nativi in aggiornamenti futuri.
  • Usa move_dest_id e move_orig_ids per mantenere la tracciabilità: quando crei movimenti concatenati via script, imposta correttamente questi campi.
  • Ricorda la differenza tra quantity_done e product_uom_qty: sono ammessi prelievi parziali, quindi gestisci validazioni e aggiornamenti in base al comportamento voluto.

Errori comuni


  • Creare movimenti con tipi di ubicazione non compatibili: ad esempio origine e destinazione entrambe clienti o entrambe interne può generare errori logici.
  • Modificare product_uom_qty dopo che esistono move_line può causare incongruenze sulle quantità: meglio annullare e ricreare il movimento se necessario.
  • Dimenticare di impostare origin rende difficile risalire al documento sorgente e complica audit e reportistica.
  • Sovrascrivere _action_done senza invocare super() può interrompere aggiornamenti inventariali e rompere l'integrazione con altri moduli.
  • Creare movimenti bypassando il workflow (per esempio senza passare dal picking) può compromettere il meccanismo di riserva e assegnazione dello stock.
  • Ignorare move_dest_id quando si dividono o uniscono movimenti rischia di lasciare movimenti orfani e rompere la catena logica.

Conclusione


Il modello stock.move è il nucleo della gestione inventariale in Odoo: registra ogni spostamento di merce tra ubicazioni. Conoscere i suoi campi e i modi in cui viene esteso è indispensabile per configurare, personalizzare e integrare correttamente il sistema.


Che tu sia un consulente funzionale che mappa processi di magazzino o uno sviluppatore che costruisce estensioni, una solida comprensione di stock.move riduce tempi di implementazione ed errori operativi.

Serve aiuto per la tua implementazione Odoo?


Dasolo supporta le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo. Ci occupiamo di integrazioni API e sviluppo, con esperienza profonda nell'architettura dati e modelli come stock.move.


Se ti serve supporto su implementazioni Odoo, moduli custom o integrazioni, possiamo aiutarti. Prenota una demo per parlare del tuo progetto.

Modello stock.move: Come funziona l’architettura degli Inventory di Odoo
Dasolo 10 marzo 2026
Condividi articolo
Accedi per lasciare un commento