Se rendre au contenu

Le modèle stock.move : Comprendre l’architecture des mouvements dans Odoo

Guide complet sur le modèle central de mouvement de stock d’Odoo — pour développeurs et consultants fonctionnels
10 mars 2026 par
Le modèle stock.move : Comprendre l’architecture des mouvements dans Odoo
Dasolo
| Aucun commentaire pour l'instant

Introduction


Dans Odoo, chaque élément métier — commande, facture, mouvement de stock — est enregistré dans un modèle. Ces modèles déterminent la structure des données, les relations entre elles et la façon dont tout est stocké en base.


Savoir manier les modèles Odoo est indispensable, que vous soyez consultant fonctionnel ou développeur. Ce sont eux qui organisent la logique métier : champs, relations, contrôles et comportements qui pilotent l’application.


Ici, nous nous concentrons sur un modèle central pour la logistique : stock.move. Que vous configuriez un entrepôt, développiez des modules sur-mesure ou synchronisiez un ERP externe, vous rencontrerez nécessairement ce modèle.

Qu’est-ce que le modèle stock.move ?


Le modèle stock.move matérialise un déplacement de marchandise : un produit qui quitte un emplacement pour en rejoindre un autre. Chaque sortie, réception, transfert interne ou livraison client génère normalement un enregistrement de type stock.move.


Le module Inventaire utilise massivement stock.move. Les ventes, achats, fabrication et e‑commerce créent ces mouvements quand ils déclenchent des opérations physiques. Valider une livraison, enregistrer une réception ou clôturer une fabrication revient à créer ou mettre à jour des stock.move.


Le modèle est défini dans le module stock et enrichi par héritage depuis d’autres modules. Par exemple, le module Vente ajoute le lien vers la ligne de commande, Achats ajoute la ligne fournisseur, et Fabrication lie la production. Chaque extension complète la structure sans la dupliquer.

Champs clés du modèle


Voici les champs les plus utiles de stock.move. Les maîtriser facilite la lecture des mouvements et le développement de règles d’inventaire cohérentes.


1. name

Type : Char. Libellé du mouvement — souvent construit à partir du produit et de la quantité. Visible dans les vues et listes, il sert d’identifiant lisible pour l’utilisateur.


2. product_id

Type : Many2one (product.product). Le produit concerné par le mouvement. Champ obligatoire : sans produit, le mouvement n’a pas de sens pour le stock ni pour les règles d’évaluation.


3. product_uom

Type : Many2one (uom.uom). L’unité de mesure utilisée pour la quantité. Obligatoire ; généralement calée sur l’unité par défaut du produit pour éviter les erreurs de conversion.


4. product_uom_qty

Type : Float. Quantité demandée dans l’unité du produit — c’est la quantité attendue. À la clôture, quantity_done reflétera la quantité réellement traitée.


5. quantity

Type : Float. Champ d’affichage/computé montrant la quantité. Selon les vues, il peut être identique à product_uom_qty ou présenter une valeur convertie pour l’interface.


6. location_id

Type : Many2one (stock.location). Emplacement source — d’où proviennent les articles. Obligatoire : pour une sortie, ce sera l’emplacement stock ; pour une réception, potentiellement l’emplacement fournisseur/production.


7. location_dest_id

Type : Many2one (stock.location). Emplacement de destination — où vont les articles. Obligatoire : pour une entrée, c’est le stock ; pour une sortie, cela peut être un emplacement client ou rebuts.


8. picking_id

Type : Many2one (stock.picking). Le document de transfert (bon de livraison, réception ou transfert interne) qui regroupe les mouvements. Les pickings facilitent les opérations utilisateurs et la gestion des réservations.


9. picking_type_id

Type : Many2one (stock.picking.type). Le type d’opération : livraison, réception ou transfert interne. Il pilote les emplacements par défaut et le comportement du workflow.


10. state

Type : Selection. Statut actuel du mouvement (draft, waiting, confirmed, assigned, done, cancelled). Par exemple, assigned signifie que la réserve a été effectuée ; done signifie que le traitement est terminé.


11. date

Type : Datetime. Date planifiée pour le mouvement. Utilisée en planification et priorisation des opérations logistiques.


12. date_deadline

Type : Datetime. Date butoir du mouvement, souvent la date de livraison promise pour les clients, utile pour calculer l’urgence.


13. origin

Type : Char. Référence au document source (numéro de commande, d’achat ou d’ordre de fabrication). Utile pour retracer l’origine dans les rapports et audits.


14. move_dest_id

Type : Many2one (stock.move). Lien vers le mouvement suivant dans une chaîne. Par exemple, la sortie de production qui alimente une livraison finale.


15. move_orig_ids

Type : One2many (stock.move). Ensemble des mouvements préalables qui alimentent celui-ci — inverse de move_dest_id pour tracer la chaîne d’événements.


16. move_line_ids

Type : One2many (stock.move.line). Détail fin du mouvement : numéros de lot/série, emplacements réels, quantités par ligne. Les move lines sont créées lors des réservations et des opérations de picking.


17. partner_id

Type : Many2one (res.partner). Le partenaire lié au mouvement : client pour les livraisons, fournisseur pour les réceptions. Utile pour adresses et reporting.


18. company_id

Type : Many2one (res.company). Dans un contexte multi‑sociétés, indique à quelle société appartient le mouvement — impacte visibilité et règles inter‑sociétés.


19. quantity_done

Type : Float. Quantité effectivement traitée par l’utilisateur au moment du picking ou de la réception. Le mouvement passe en done quand quantity_done atteint product_uom_qty.


20. reserved_availability

Type : Float. Quantité réservée pour le mouvement. Elle reflète l’état des réserves lorsque le mouvement est assigné.


21. create_date

Type : Datetime. Date/heure de création de l’enregistrement, gérée automatiquement, utile pour reporting et audit.


22. write_date

Type : Datetime. Date/heure de la dernière modification, également gérée automatiquement.


23. sequence

Type : Integer. Ordre d’affichage au sein d’un picking. Permet de trier les mouvements pour l’interface utilisateur.


24. priority

Type : Selection. Niveau d’urgence (souvent normal ou urgent). Influence la planification et l’ordre d’exécution des mouvements.


25. description_picking

Type : Char. Note ou consigne affichée sur le picking — pratique pour instructions particulières de manutention.


26. reference

Type : Char. Référence interne libre, souvent utilisée pour le mapping avec des systèmes externes ou pour un suivi personnalisé.


27. group_id

Type : Many2one (procurement.group). Regroupe les mouvements issus d’un même approvisionnement ou d’une même commande pour faciliter le planning.


28. procure_method

Type : Selection. Méthode d’approvisionnement : « make to stock » ou « make to order ». Détermine si l’on doit prendre du stock existant ou lancer une production/achat.


29. sale_line_id

Type : Many2one (sale.order.line). Ajouté par le module Vente : lien vers la ligne de commande qui a généré le mouvement, utile pour traçabilité et rapportage commercial.


30. purchase_line_id

Type : Many2one (purchase.order.line). Ajouté par Achats : relie le mouvement à la ligne d’achat lors des réceptions fournisseur.


31. production_id

Type : Many2one (mrp.production). Ajouté par Fabrication : relie les mouvements aux ordres de fabrication pour la consommation des composants ou la sortie des produits finis.


32. active

Type : Boolean. Flag d’archivage : false signifie enregistré mais masqué par défaut (soft delete). Utile pour conserver l’historique sans polluer les vues courantes.

Utilisation du modèle dans les processus métiers


1. Livraison client

Quand une commande client est confirmée, Odoo génère un stock.move par ligne produit. L’emplacement source est le stock, la destination le lieu client. Les mouvements sont regroupés dans un picking ; au pick/ship la quantity_done est renseignée et l’état passe en done.


2. Réception fournisseur

À la confirmation d’un bon d’achat, Odoo crée des stock.move entrants. L’emplacement source représente le fournisseur, la destination le stock. Les réceptions sont validées et la quantité effectivement reçue est enregistrée.


3. Transfert interne

Les transferts entre emplacements ou entre entrepôts donnent lieu à des stock.move. Ils servent au rééquilibrage, au réapprovisionnement interne ou à la gestion multi‑sites.


4. Fabrication

Un ordre de fabrication crée des mouvements d’entrée pour les composants et des mouvements de sortie pour le produit fini. Le champ production_id relie ces mouvements à l’OF ; move chaining connecte la sortie de production aux livraisons ultérieures.


5. Retours et rebuts

Les retours clients sont traités par des mouvements inverses ; les rebuts envoient la marchandise vers un emplacement « scrap ». Le type d’opération (picking_type_id) guide le comportement de ces flux.

Comment les développeurs étendent ce modèle


Les développeurs étendent stock.move selon plusieurs patterns, l’héritage de modèle étant le principal levier.


Héritage de modèle

Déclarez _inherit = 'stock.move' pour ajouter des champs, modifier des méthodes ou ajouter des contraintes. L’héritage permet d’isoler vos évolutions dans un module afin de simplifier la maintenance et les mises à jour.


Ajout de champs

Dans votre modèle hérité, déclarez les nouveaux champs avec le type adapté (Char, Many2one, Boolean, Integer, Text, Selection…). Pour des environnements multi‑sociétés, envisagez des champs dépendants de la société. Exemples courants : numéro de suivi personnalisé, référence transporteur, attributs de lot.


Extensions Python

Surchargez des méthodes clés comme _action_done, _action_assign ou _action_cancel pour injecter de la logique métier. Appelez super() pour préserver le comportement standard. Restez prudent : les opérations sur le stock et la chaînage des mouvements sont sensibles et impactent l’intégrité des données.


Odoo Studio

Odoo Studio permet d’ajouter des champs sans code — pratique pour des adaptations rapides. Pour des règles métier complexes ou des intégrations durables, privilégiez toutefois un module technique bien documenté.

Bonnes pratiques


  • Toujours renseigner correctement location_id et location_dest_id : des emplacements incorrects fausseront les quantités en stock.
  • Utilisez picking_id pour regrouper les mouvements appartenant au même transfert. Créer des mouvements isolés sans picking peut perturber les réservations et le suivi.
  • Pour les intégrations API, préférez XML‑RPC ou JSON‑RPC. Le modèle stock.move est accessible ; mappez soigneusement les identifiants externes pour éviter les doublons.
  • Prévoyez un préfixe pour vos champs personnalisés (par ex. x_ ou le préfixe du module) afin d’éviter les collisions avec de futures versions d’Odoo.
  • Lorsque vous créez des mouvements en chaîne, liez correctement move_dest_id et move_orig_ids pour conserver la traçabilité entre opérations.
  • Tenez compte de la différence entre product_uom_qty (demandé) et quantity_done (réel). Les livraisons partielles sont courantes et doivent être gérées proprement.

Erreurs fréquentes


  • Créer des mouvements avec des types d’emplacements incompatibles. Par exemple, relier deux emplacements clients entre eux est incorrect et cassera la logique d’inventaire.
  • Modifier product_uom_qty après la création de move lines existantes peut entraîner des incohérences : mieux vaut annuler et recréer le mouvement si nécessaire.
  • Omettre le champ origin complique la traçabilité : sans référence source, retrouver la commande ou l’ordre lié devient laborieux.
  • Surcharger _action_done sans appeler super() peut empêcher les mises à jour d’inventaire normales et casser d’autres modules dépendants.
  • Créer des mouvements directement sans respecter le workflow (par exemple sans passer par stock.picking) risque de contourner les réservations et de provoquer des ruptures dans le processus.
  • Négliger les liens move_dest_id lors du fractionnement ou de la fusion de mouvements : la chaîne peut se retrouver orpheline et compliquer le suivi.

Conclusion


Le stock.move est le pivot de l’inventaire Odoo : il consigne chaque déplacement d’articles entre emplacements. Maîtriser ses champs et ses extensions évite erreurs de stock et facilite les intégrations.


Qu’on travaille côté fonctionnel pour modéliser l’entrepôt ou côté technique pour créer des modules, une bonne connaissance de stock.move permet de gagner du temps et d’éviter des erreurs coûteuses.

Besoin d’aide pour votre implémentation Odoo ?


Dasolo accompagne les entreprises dans l’implémentation, la personnalisation et l’optimisation d’Odoo. Nous apportons une expertise forte sur les intégrations API et la structure des modèles comme stock.move.


Besoin d’un coup de main pour votre projet Odoo, un module sur‑mesure ou une intégration ? Nous pouvons vous accompagner. Réservez une démonstration pour discuter de votre projet.

Le modèle stock.move : Comprendre l’architecture des mouvements dans Odoo
Dasolo 10 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.