Se rendre au contenu

Le modèle stock.move : Comprendre l'architecture des mouvements de stock d'Odoo

Un guide complet sur le modèle central de gestion des mouvements d'inventaire d'Odoo pour les développeurs et les consultants fonctionnels.
10 mars 2026 par
Le modèle stock.move : Comprendre l'architecture des mouvements de stock d'Odoo
Dasolo
| Aucun commentaire pour l'instant

Introduction


Dans Odoo, les modèles définissent comment les données sont structurées et stockées dans la base de données. Chaque élément de données commerciales avec lequel vous travaillez, des commandes de vente aux factures en passant par les mouvements d'inventaire, vit dans un modèle.


Comprendre les modèles Odoo est essentiel tant pour les développeurs que pour les consultants fonctionnels. Les modèles sont la base de l'architecture des données Odoo. Ils définissent les champs, les relations et la logique commerciale.


Cet article se concentre sur l'un des modèles les plus importants d'Odoo : stock.move. Que vous construisiez des modules d'entrepôt personnalisés, intégriez des systèmes externes ou configuriez des flux de travail d'inventaire, vous travaillerez avec ce modèle.

Qu'est-ce que le modèle stock.move


Le modèle stock.move représente un mouvement d'inventaire unique dans Odoo. Il définit le transfert d'un produit d'un emplacement à un autre. Chaque fois que des marchandises quittent une étagère, se déplacent entre des entrepôts ou sont livrées à un client, un enregistrement stock.move est créé.


Ce modèle dans Odoo est utilisé par le module Inventaire (Stock). Les ventes, les achats, la fabrication et le commerce électronique créent tous des enregistrements stock.move lorsqu'ils déclenchent des opérations d'inventaire. Lorsque vous confirmez un bon de livraison, recevez des marchandises d'un fournisseur ou terminez un bon de fabrication, vous créez ou mettez à jour des enregistrements stock.move.


Le modèle est défini dans le module stock. D'autres modules l'étendent par le biais de l'héritage de modèle Odoo. La vente ajoute sale_line_id. L'achat ajoute purchase_line_id. La fabrication ajoute production_id. Chaque module ajoute ce dont il a besoin sans dupliquer la structure de base.

Champs clés dans le modèle


Voici les champs Odoo les plus importants dans le modèle stock.move. Comprendre ceux-ci vous aidera à travailler efficacement avec les mouvements d'inventaire.


1. nom

Type : Char. Ce champ stocke le nom ou la description du mouvement. Il est généralement construit à partir du nom du produit et de la quantité. Affiché dans de nombreuses vues Odoo et est l'identifiant principal pour le mouvement dans les listes.


2. product_id

Type : Many2one (product.product). Le produit en cours de déplacement. C'est un champ requis. Chaque mouvement de stock doit référencer un produit. Odoo utilise cela pour suivre les quantités et appliquer les règles d'inventaire.


3. product_uom

Type : Many2one (uom.uom). L'unité de mesure pour la quantité. Requis. Correspond généralement à l'UoM par défaut du produit. Odoo valide que les quantités sont exprimées dans cette unité.


4. product_uom_qty

Type : Float. La quantité à déplacer dans l'unité de mesure du produit. C'est la quantité demandée. Lorsque le mouvement est effectué, quantity_done est la quantité réelle traitée.


5. quantité

Type : Flottant. Un champ calculé ou d'affichage qui montre la quantité. Souvent utilisé dans les vues pour un affichage convivial. Peut être le même que product_uom_qty ou une valeur convertie.


6. location_id

Type : Many2one (stock.location). L'emplacement source. D'où provient le produit. Requis. Pour les mouvements sortants, il s'agit de l'emplacement de stock. Pour les mouvements entrants, cela peut être un emplacement fournisseur ou de production.


7. location_dest_id

Type : Many2one (stock.location). L'emplacement de destination. Où va le produit. Requis. Pour les mouvements entrants, il s'agit de l'emplacement de stock. Pour les mouvements sortants, cela peut être un emplacement client ou de rebut.


8. picking_id

Type : Many2one (stock.picking). Le document de transfert ou de picking qui regroupe ce mouvement. Un bon de livraison, un reçu ou un transfert interne. Les mouvements sont regroupés par picking pour les opérations utilisateur.


9. picking_type_id

Type : Many2one (stock.picking.type). Le type d'opération. Définit s'il s'agit d'une livraison sortante, d'un reçu entrant ou d'un transfert interne. Pilote le flux de travail et les emplacements par défaut.


10. état

Type : Sélection. Le statut actuel du mouvement. Valeurs : brouillon, en attente, confirmé, assigné, terminé, annulé. Brouillon n'est pas encore confirmé. Assigné signifie que le stock est réservé. Terminé signifie que le mouvement est complet.


11. date

Type: Datetime. La date prévue pour le déménagement. Utilisé pour la planification et l'organisation. Odoo utilise cela pour prioriser les transferts et planifier les opérations.


12. date_deadline

Type: Datetime. La date limite pour le déménagement. Pour les livraisons aux clients, il s'agit souvent de la date de livraison promise. Utilisé dans les calculs d'urgence.


13. origin

Type: Char. Référence au document d'origine. Par exemple, un numéro de commande client (SO), un numéro de commande d'achat (PO) ou un numéro d'ordre de fabrication (MO). Aide à retracer le déménagement jusqu'à sa source.


14. move_dest_id

Type: Many2one (stock.move). Le déménagement de destination dans une chaîne. Lorsqu'un déménagement alimente un autre (par exemple, la production alimente une livraison), cela les relie. Utilisé pour la chaîne de déménagement et la propagation.


15. move_orig_ids

Type: One2many (stock.move). Les déménagements d'origine. L'inverse de move_dest_id. Liste les déménagements qui alimentent celui-ci. Utilisé pour la traçabilité.


16. move_line_ids

Type: One2many (stock.move.line). Les lignes de déménagement. Détail du déménagement avec des informations sur les lots, les numéros de série ou les emplacements. Lorsque vous réservez ou traitez des stocks, des lignes de déménagement sont créées.


17. partner_id

Type : Many2one (res.partner). Le partenaire associé au mouvement. Pour les livraisons clients, le client. Pour les réceptions fournisseurs, le fournisseur. Utilisé pour l'adresse et le reporting.


18. company_id

Type : Many2one (res.company). Dans les configurations multi-entreprises, cela indique à quelle entreprise Odoo le mouvement appartient. Affecte la visibilité des enregistrements et les règles inter-entreprises.


19. quantity_done

Type : Float. La quantité qui a été traitée ou réalisée. Lorsque l'utilisateur sélectionne ou reçoit, cela est mis à jour. Le mouvement est terminé lorsque quantity_done est égal à product_uom_qty.


20. reserved_availability

Type : Float. La quantité qui a été réservée pour ce mouvement. Le stock est réservé lorsque le mouvement est assigné. Ce champ montre combien est disponible.


21. create_date

Type : Datetime. Stocke la date et l'heure auxquelles l'enregistrement a été créé. Géré automatiquement par Odoo. Utile pour le reporting et l'audit.


22. write_date

Type : Datetime. Stocke la date et l'heure de la dernière modification. Également géré automatiquement. Aide à suivre quand les données ont été mises à jour pour la dernière fois.


23. séquence

Type : Entier. Ordre d'affichage au sein d'un picking. Utilisé pour trier les mouvements dans l'interface utilisateur. Les numéros inférieurs apparaissent en premier.


24. priorité

Type : Sélection. Niveau d'urgence. Souvent 0 pour normal, 1 pour urgent. Utilisé dans la planification et l'organisation. Les mouvements urgents peuvent être priorisés dans les opérations.


25. description_picking

Type : Char. Une description ou une note pour le mouvement. Affichée sur les documents de picking. Utile pour des instructions spéciales ou des notes de manipulation.


26. référence

Type : Char. Référence ou code interne. Peut être utilisé pour le mapping avec des systèmes externes ou pour un suivi personnalisé.


27. group_id

Type : Many2one (procurement.group). Le groupe d'approvisionnement. Regroupe les mouvements liés à la même approvisionnement (par exemple, un seul bon de commande). Utilisé pour la planification et la chaîne.


28. méthode_d'approvisionnement

Type : Sélection. Faire pour stock ou faire sur commande. Détermine si le stock est pris dans l'inventaire existant ou déclenché pour la production/l'approvisionnement.


29. sale_line_id

Type : Many2one (sale.order.line). Ajouté par le module Vente. Lie le mouvement à la ligne de commande de vente qui l'a déclenché. Utilisé pour la traçabilité et le reporting.


30. purchase_line_id

Type : Many2one (purchase.order.line). Ajouté par le module Achat. Lie le mouvement à la ligne de commande d'achat. Utilisé lors de la réception des marchandises des fournisseurs.


31. production_id

Type : Many2one (mrp.production). Ajouté par la Fabrication. Lie le mouvement à l'ordre de fabrication. Utilisé pour la consommation de matières premières et la sortie de produits finis.


32. actif

Type : Booléen. Drapeau de suppression douce. Lorsque Faux, l'enregistrement est archivé et caché des vues par défaut. Les enregistrements ne sont pas physiquement supprimés.

Comment ce modèle est utilisé dans les flux de travail commerciaux


1. Livraison Client

Lorsqu'une commande de vente est confirmée, Odoo crée des enregistrements stock.move pour chaque ligne de produit. Chaque mouvement a location_id comme emplacement de stock et location_dest_id comme emplacement client. Les mouvements sont regroupés dans un picking (commande de livraison). Lorsque l'entrepôt prélève et expédie, quantity_done est mis à jour et l'état du mouvement devient terminé.


2. Réception Fournisseur

Lorsqu'une commande d'achat est confirmée, Odoo crée des enregistrements stock.move pour les marchandises entrantes. location_id est l'emplacement du fournisseur, location_dest_id est l'emplacement de stock. Les mouvements sont regroupés dans une réception. Lorsque les marchandises arrivent, l'utilisateur valide et quantity_done est défini.


3. Transfert interne

Les transferts entre entrepôts ou emplacements créent des enregistrements stock.move. location_id est l'entrepôt source, location_dest_id est la destination. Utilisé pour le réapprovisionnement, le rééquilibrage des stocks ou les opérations multi-entrepôts.


4. Fabrication

Les ordres de fabrication créent deux types de mouvements : les matières premières entrantes (du stock à la production) et les produits finis sortants (de la production au stock). Le champ production_id lie ces mouvements à l'ordre de fabrication. La chaîne de mouvements via move_dest_id connecte la production aux livraisons en aval.


5. Retours et déchets

Les retours clients créent des mouvements inverses. Les opérations de déchets créent des mouvements vers un emplacement de déchets. Le même modèle stock.move gère tous ces flux. Le picking_type_id détermine le type d'opération et le flux de travail.

Comment les développeurs étendent ce modèle


Les développeurs étendent stock.move en utilisant plusieurs modèles. L'héritage de modèle Odoo est le principal mécanisme.


Héritage de modèle

Utilisez _inherit = 'stock.move' pour étendre le modèle. Ajoutez de nouveaux champs, remplacez des méthodes ou ajoutez des contraintes. Le modèle hérité dans Odoo conserve vos modifications dans un module séparé pour des mises à jour faciles.


Ajout de champs

Définissez de nouveaux champs Odoo dans votre modèle hérité. Utilisez le bon type de champ : Char, Many2one, Boolean, Integer, Text, Selection. Considérez les champs dépendants de l'entreprise pour les multi-entreprises. Pour les mouvements de stock, les extensions courantes incluent des numéros de suivi personnalisés, des références de transporteur ou des attributs de lot.


Extensions Python

Surchargez _action_done, _action_assign ou _action_cancel pour ajouter de la logique. Utilisez super() pour appeler l'original. Faites attention aux mises à jour d'inventaire et à la chaîne de mouvements. Le modèle API dans Odoo expose ces méthodes pour extension.


Odoo Studio

Odoo Studio vous permet d'ajouter des champs sans code. Idéal pour des personnalisations rapides comme des champs personnalisés sur les formulaires de mouvement. Pour une logique complexe ou des changements de flux de travail, les modules personnalisés sont plus maintenables.

Meilleures pratiques


  • Toujours définir correctement location_id et location_dest_id. Des emplacements incorrects peuvent entraîner des niveaux d'inventaire erronés.
  • Utilisez le picking_id pour regrouper les mouvements liés. Ne créez pas de mouvements sans picking lorsqu'ils appartiennent à un transfert.
  • Lors de la création d'intégrations API, utilisez l'API XML-RPC ou JSON-RPC. Le modèle stock.move est entièrement exposé. Mappez les ID externes avec soin.
  • Pour les champs personnalisés, utilisez le préfixe x_ ou un préfixe de module pour éviter les conflits avec les futures versions d'Odoo.
  • Utilisez move_dest_id et move_orig_ids pour la traçabilité. Lors de la création de mouvements chaînés par programme, définissez ces liens correctement.
  • Considérez quantity_done par rapport à product_uom_qty lors de la validation. Les livraisons partielles sont autorisées.

Erreurs courantes


  • Création de mouvements avec des types d'emplacement incorrects. La source et la destination doivent être compatibles (par exemple, pas deux emplacements clients).
  • Modification de product_uom_qty après l'existence des lignes de mouvement. Cela peut entraîner des incohérences d'inventaire. Annulez et recréez si nécessaire.
  • Oublier de définir l'origine. Sans origine, il est difficile de retracer un mouvement jusqu'à son document source.
  • Surcharge de _action_done sans appeler super(). Cela peut perturber les mises à jour d'inventaire et d'autres modules.
  • Création de mouvements directement sans passer par le flux de travail approprié (par exemple, stock.picking). Contourner le picking peut perturber la réservation et l'attribution.
  • Ignorer move_dest_id lors de la séparation ou de la fusion des mouvements. Les mouvements en chaîne peuvent devenir orphelins.

Conclusion


Le modèle stock.move est central pour l'inventaire Odoo. Il stocke chaque mouvement de biens d'un emplacement à un autre. Comprendre ses champs et comment les modules l'étendent vous aidera à configurer, personnaliser et intégrer Odoo efficacement.


Que vous soyez un consultant fonctionnel cartographiant les processus d'entrepôt ou un développeur construisant des modules personnalisés, une bonne compréhension de stock.move vous fera gagner du temps et évitera des erreurs.

Besoin d'aide avec votre implémentation Odoo ?


Dasolo aide les entreprises à mettre en œuvre, personnaliser et optimiser Odoo. Nous nous spécialisons dans les intégrations API et le développement Odoo. Notre équipe a une grande expérience de l'architecture des données Odoo et de modèles comme stock.move.


Si vous avez besoin d'aide pour votre mise en œuvre Odoo, vos modules personnalisés ou vos intégrations, nous sommes là pour vous aider. Réservez une démo pour discuter de votre projet.

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