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 transferts d'inventaire en passant par les opérations d'entrepôt, 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 de l'application Inventaire : stock.picking. Que vous construisiez des modules d'entrepôt personnalisés, intégriez des systèmes externes ou configuriez des flux de travail, vous travaillerez avec ce modèle.
Qu'est-ce que le modèle stock.picking
Le modèle stock.picking représente les transferts dans Odoo. C'est l'endroit central où les opérations d'entrepôt sont suivies. Chaque enregistrement de picking représente un transfert unique de marchandises d'un emplacement à un autre.
Ce modèle dans Odoo est utilisé dans le module Inventaire. Les réceptions, les livraisons et les transferts internes créent tous des enregistrements stock.picking. Lorsque vous confirmez une commande de livraison d'une vente, recevez des marchandises d'un achat ou déplacez des stocks entre entrepôts, vous créez ou mettez à jour un enregistrement stock.picking.
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 des champs liés à la livraison. L'achat ajoute des flux de travail de réception. La fabrication ajoute des mouvements de production. Chaque module ajoute ce dont il a besoin sans dupliquer la structure de base.
Le modèle stock.picking hérite de mail.thread et mail.activity.mixin. Cela signifie que vous pouvez suivre les changements, ajouter des messages de discussion et planifier des activités sur les transferts directement.
Champs clés dans le modèle
Voici les champs Odoo les plus importants dans le modèle stock.picking. Comprendre ceux-ci vous aidera à travailler efficacement avec les transferts et les opérations d'entrepôt.
1. nom
Type : Char. Ce champ stocke la référence du transfert. Il est généralement auto-généré à partir d'une séquence (par exemple, WH/OUT/00001). Il est affiché dans l'en-tête des formulaires de transfert et est l'identifiant principal pour le picking.
2. origine
Type : Char. La référence du document source. Pour une livraison, cela pourrait être le nom de la commande de vente. Pour une réception, la commande d'achat. Cela aide à retracer l'origine du transfert.
3. état
Type : Sélection. Le statut du transfert. Valeurs : Brouillon, En attente d'une autre opération, En attente, Prêt, Fait, Annulé. Chaque état détermine quelles actions sont disponibles. Odoo calcule cela à partir des mouvements de stock associés.
4. picking_type_id
Type: Many2one (stock.picking.type). Le type d'opération. Définit s'il s'agit d'une réception, d'une livraison ou d'un transfert interne. Requis. Chaque type de picking a des emplacements source et destination par défaut.
5. move_ids
Type: One2many (stock.move). Les mouvements de stock. Chaque ligne représente un produit et une quantité à déplacer. C'est le cœur du transfert. Toute la logique de réservation et de disponibilité fonctionne sur ces mouvements.
6. move_line_ids
Type: One2many (stock.move.line). Les opérations détaillées. Lorsque vous avez un suivi par lot ou par numéro de série, ces lignes stockent les lots et emplacements spécifiques. Utilisé pour le picking, le packing et la validation.
7. location_id
Type: Many2one (stock.location). L'emplacement source. D'où les produits sont prélevés. Requis. Pour les livraisons, il s'agit généralement de l'emplacement de stock. Pour les réceptions, l'emplacement du fournisseur.
8. location_dest_id
Type: Many2one (stock.location). L'emplacement de destination. Où les produits sont déplacés. Requis. Pour les livraisons, il s'agit généralement de l'emplacement du client. Pour les réceptions, l'emplacement de stock.
9. partner_id
Type: Many2one (res.partner). Le contact. Pour les livraisons, le client. Pour les réceptions, le fournisseur. Utilisé pour l'adresse sur les documents et pour l'intégration des transporteurs.
10. scheduled_date
Type: Date/Heure. Quand le transfert est prévu pour être traité. Utilisé pour la planification et la priorisation. Le définir manuellement fixe la date attendue pour tous les mouvements de stock.
11. date_limite
Type: Date/Heure. La date limite. Provient souvent de la commande de vente ou de la commande d'achat. Utilisé pour signaler les transferts en retard et pour les dates promises aux clients.
12. date_fait
Type: Date/Heure. Quand le transfert a été validé ou annulé. En lecture seule. Défini automatiquement lorsque le prélèvement est effectué.
13. priorité
Type: Sélection. Le niveau de priorité. Les produits sont réservés en premier pour les transferts avec une priorité plus élevée. Utilisé pour les commandes urgentes.
14. type_de_mouvement
Type: Sélection. La politique d'expédition. Valeurs : Dès que possible (livraison partielle autorisée) ou Lorsque tous les produits sont prêts (tout ou rien). Affecte le moment où le prélèvement peut être traité.
15. utilisateur_id
Type: Many2one (res.users). L'utilisateur responsable. Utilisé pour l'attribution et le suivi de la charge de travail. Défaut sur l'utilisateur actuel lors de la création.
16. entreprise_id
Type: Many2one (res.company). L'entreprise. Lié au type de picking. Dans les configurations multi-entreprises, cela détermine quelle entreprise possède le transfert.
17. group_id
Type: Many2one (procurement.group). Le groupe d'approvisionnement. Lie les mouvements connexes ensemble. Utilisé lorsque plusieurs pickings proviennent de la même commande.
18. backorder_id
Type: Many2one (stock.picking). Lorsqu'un transfert est partiellement validé, une commande de retour est créée pour le reste. Ce champ est lié au picking original.
19. backorder_ids
Type: One2many (stock.picking). Les commandes de retour créées à partir de ce picking. Utilisé lorsque vous validez partiellement et devez traiter le reste plus tard.
20. return_id
Type: Many2one (stock.picking). Si ce picking a été créé comme un retour, cela renvoie au picking original. Utilisé pour les flux de travail de retour.
21. note
Type: Html. Notes internes. Visibles aux utilisateurs d'entrepôt. Peut inclure des instructions spéciales ou des exigences de manipulation.
22. signature
Type: Image. La signature capturée lorsque la livraison est validée. Utilisée comme preuve de livraison. Stockée en tant que pièce jointe.
23. est_signé
Type: Booléen. Calculé à partir de la signature. Indique si la livraison a été signée.
24. id_propriétaire
Type: Many2one (res.partner). Le propriétaire à assigner lors de la validation. Utilisé pour les envois ou lorsque les produits appartiennent à un tiers.
25. ids_niveaux_colis
Type: One2many (stock.package_level). Niveaux de colis lors de l'utilisation de mettre dans le colis. Regroupe les lignes de mouvement en colis pour l'expédition.
26. date_creation
Type: Datetime. Quand l'enregistrement a été créé. Géré automatiquement par Odoo. Hérité du modèle de base.
27. date_modification
Type: Datetime. Quand l'enregistrement a été modifié pour la dernière fois. Géré automatiquement. Hérité du modèle de base.
28. actif
Type : Booléen. Indicateur de suppression douce. Lorsque Faux, l'enregistrement est archivé. Hérité du modèle de base.
Comment ce modèle est utilisé dans les flux de travail commerciaux
1. Ventes et Livraison
Lorsqu'une commande de vente est confirmée, Odoo crée un bon de livraison (stock.picking). Le bon de livraison est lié à la commande de vente via l'origine. Le personnel d'entrepôt prépare et emballe, puis valide. L'état passe de brouillon à prêt à fait.
2. Achats et Réception
Lorsqu'une commande d'achat est confirmée, Odoo crée une réception entrante. Le bon de livraison reçoit des produits de l'emplacement du fournisseur vers le stock. Le partner_id est le fournisseur. La validation met à jour les quantités d'inventaire.
3. Transferts Internes
Le déplacement de stock entre entrepôts ou emplacements crée des bons de livraison internes. Le picking_type_id a le code 'interne'. L'emplacement et la destination sont tous deux des emplacements de stock internes.
4. Retours et Commandes en Attente
Lorsqu'une vente est retournée, un bon de retour est créé. Le return_id est lié à la livraison originale. Lorsqu'une livraison est partiellement validée, backorder_ids contient le travail restant.
5. Fabrication et Production
Les ordres de fabrication créent des bons de livraison pour les matières premières (consommation) et les produits finis (production). Le modèle stock.picking est étendu par le module mrp pour ces flux.
Comment les développeurs étendent ce modèle
Les développeurs étendent stock.picking 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.picking' pour étendre le modèle. Ajoutez de nouveaux champs, remplacez des méthodes ou ajoutez des contraintes. Le modèle hérité dans Odoo garde 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 le multi-entreprise.
Extensions Python
Remplacez button_validate, action_assign, ou _create_backorder pour ajouter de la logique. Utilisez super() pour appeler l'original. Faites attention aux transitions d'état et à la création de mouvements.
Odoo Studio
Odoo Studio vous permet d'ajouter des champs sans code. Bon pour des personnalisations rapides comme des étiquettes personnalisées ou des notes supplémentaires. Pour une logique complexe ou une intégration de transporteur, des modules personnalisés sont plus maintenables.
Meilleures pratiques
- Assurez-vous toujours de définir le picking_type_id lors de la création manuelle de pickings. Cela détermine les emplacements par défaut et le comportement.
- Utilisez le champ d'origine pour retracer le document source. Cela aide à la génération de rapports et au débogage.
- Lors de la création d'intégrations API, le modèle stock.picking est entièrement exposé via l'API Odoo. Créez des mouvements via la relation move_ids. Ne créez pas de pickings sans mouvements.
- Utilisez scheduled_date pour la planification. Cela affecte la réservation et la priorisation.
- 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.
Erreurs courantes
- Créer des pickings sans définir picking_type_id. Cela peut entraîner des emplacements par défaut incorrects.
- Modifier move_ids après confirmation sans comprendre la machine d'état. Les transitions d'état peuvent être complexes.
- Oublier de définir partner_id pour les livraisons. Les transporteurs et les documents ont besoin du contact.
- Surcharger button_validate sans appeler super(). Cela peut casser la création de commandes en attente et d'autres modules.
- Supposer que move_ids et move_line_ids sont toujours synchronisés. Les lignes de mouvement sont créées lorsque vous réservez ou lorsque vous utilisez des opérations détaillées.
Conclusion
Le modèle stock.picking est central pour l'inventaire Odoo. Il stocke les transferts, les livraisons et les réceptions. 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 maîtrise de stock.picking vous fera gagner du temps et évitera des erreurs.
Prêt à optimiser votre entrepôt 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 des modèles comme stock.picking.
Si vous avez besoin d'aide pour votre mise en œuvre Odoo, des modules d'entrepôt personnalisés ou des intégrations, nous sommes là pour vous aider. Réservez une démo pour discuter de votre projet.