Le stock négatif est l'un des choix de conception les plus discutés d'Odoo, et il a une bonne raison d'être : ne jamais bloquer une expédition parce que le niveau enregistré est faux. Le prix de cette souplesse est qu'une erreur d'inventaire peut ne jamais être corrigée.
Trois modules communautaires permettent de reprendre la main : interdire le négatif avec des exceptions, et structurer l'entrepôt en zones pour que les règles de rangement et les préparations suivent une logique physique.
Résumé
stock_no_negative inverse le comportement par défaut d'Odoo : une opération qui ferait descendre un produit stockable sous zéro, sur un emplacement interne ou de transit, est refusée. Des exceptions explicites restent possibles au niveau du produit, de sa catégorie ou de l'emplacement — c'est ce qui rend le module utilisable sans tout bloquer.
Les deux autres structurent l'entrepôt. stock_location_zone marque certains emplacements comme zones, puis calcule pour chacun sa zone, son aire et son type (Zone / Aire / Casier / Stock principal / Autre) — de quoi organiser les préparations par zone et les rangements par aire. stock_putaway_product_template permet une règle de rangement au niveau du modèle de produit plutôt que de chaque variante.
L'essentiel
- Odoo autorise le stock négatif par défaut — c'est un choix, pas un oubli : il évite de bloquer une expédition sur un niveau erroné.
stock_no_negativebloque le négatif sur les emplacements internes et de transit, avec exceptions par produit, catégorie ou emplacement.stock_location_zone: une case « zone » sur l'emplacement, puis zone, aire et type d'emplacement calculés automatiquement.stock_putaway_product_template: un seul champ, et une règle de rangement valable pour toutes les variantes d'un modèle.- Les trois ne créent aucun modèle : ce sont des contrôles et des classifications, pas des fonctionnalités.
Ce que ces modules ajoutent à l'instance
| Module | Modèles étendus | Champs | Version | Dépôt |
|---|---|---|---|---|
stock_no_negative | 4 | 4 | 18.0.1.0.2 | stock-logistics-workflow |
stock_location_zone | 1 | 4 | 18.0.1.0.0 | stock-logistics-warehouse |
stock_putaway_product_template | 3 | 1 | 18.0.1.0.1 | stock-logistics-warehouse |
Trois modules, neuf champs au total, aucun menu, aucun modèle créé. C'est la signature d'une famille de contrôles : ils changent des comportements, ils n'ajoutent pas d'écrans.
Le stock négatif : pourquoi Odoo l'autorise
Avant d'interdire quelque chose, il vaut la peine de comprendre pourquoi c'est permis. La description du module l'énonce avec une honnêteté rare :
Odoo autorise le stock négatif par défaut — utile pour ne jamais bloquer une expédition même si le niveau de stock enregistré est faux, mais au risque que l'erreur d'inventaire ne soit jamais corrigée.
Les deux positions se défendent, et le choix dépend de votre réalité :
| Négatif autorisé (par défaut) | Négatif interdit (stock_no_negative) | |
|---|---|---|
| Expédition sur stock faux | Passe | Bloquée |
| Erreur d'inventaire | Peut rester indéfiniment | Signalée au moment où elle gêne |
| Valorisation du stock | Peut devenir négative, donc fausse | Cohérente |
| Pour qui | Activité où l'expédition ne doit jamais attendre | Activité où la justesse du stock compte |
La troisième ligne est celle qui tranche pour la plupart de nos clients : un stock négatif produit une valorisation négative, donc un bilan faux. C'est une raison comptable, pas logistique.
Les exceptions, qui rendent le module utilisable
Interdire sans exception serait inapplicable. Le module en prévoit trois niveaux, et c'est ce qui en fait un outil et non un mur :
- Par produit : un article particulier peut rester autorisé au négatif.
- Par catégorie de produit : toute une famille.
- Par emplacement : un emplacement de production ou de consommation, par exemple.
La bonne séquence de mise en service : activer le blocage, laisser les exceptions vides, et les ouvrir au fur et à mesure des blocages réels. Chaque exception accordée documente alors une situation que vous avez examinée — au lieu d'une liste décidée à l'avance et jamais relue.
stock_location_zone : structurer l'entrepôt
Un entrepôt a une logique physique : des zones, des aires, des casiers. Odoo a une arborescence d'emplacements, mais rien ne dit lequel est une zone et lequel est un casier — donc rien ne permet d'organiser les opérations à cette maille.
Le module ajoute une case à cocher pour marquer un emplacement comme zone, puis calcule automatiquement pour chaque emplacement :
- sa zone de rattachement,
- son aire de rattachement,
- et un type d'emplacement : Zone, Aire, Casier, Stock principal, ou Autre.
Les deux usages que cela débloque, et que le dépôt cite :
| Usage | Ce que cela permet |
|---|---|
| Préparations par zone | Un préparateur traite une zone entière, au lieu de traverser l'entrepôt |
| Stratégies de rangement par aire | Ranger une réception dans l'aire appropriée, pas dans un casier arbitraire |
Le premier est le gain le plus mesurable en entrepôt : le temps de déplacement d'un préparateur est le poste le plus important de son temps de travail, et il se réduit en regroupant par zone.
C'est aussi ce qui donne tout son sens à la préparation par lots — voir les préparations : lots, retours et liens facture.
stock_putaway_product_template : un champ, une duplication évitée
Un seul champ ajouté, et un problème qui coûte des heures dès qu'on gère des variantes.
Nativement, une règle de rangement se définit au niveau d'une variante précise (product.product) ou d'une catégorie de produit. Pas au niveau du modèle.
Conséquence : un tee-shirt en 5 tailles et 4 couleurs, c'est 20 variantes — donc 20 règles de rangement identiques à créer et à maintenir. Si la règle change, il faut les modifier une par une.
Le module permet de définir la règle au niveau du modèle de produit (product.template), valable pour toutes ses variantes. C'est un exemple parfait de module OCA : trivial techniquement, décisif en exploitation.
Quand il ne sert à rien : si vos produits n'ont pas de variantes, ou si vos règles de rangement sont définies par catégorie. C'est un module de niche, et sa niche est précise — le textile, la chaussure, les pièces déclinées en dimensions.
La séquence de mise en service
- Structurer d'abord, contrôler ensuite. Marquer les zones avec
stock_location_zonedonne la carte de l'entrepôt — et c'est ce qui permet ensuite de décider où le négatif peut être toléré. - Activer
stock_no_negativesans exception, et observer les blocages pendant une à deux semaines. - Ouvrir les exceptions au cas par cas, chaque blocage réel documentant une situation examinée.
- Installer
stock_putaway_product_templatesi et seulement si vous gérez des variantes.
L'étape 2 est celle qui demande du courage et qui apporte le plus : les blocages des premiers jours révèlent exactement où votre stock est faux. C'est désagréable, et c'est l'information que personne n'avait.
Un préalable à ne pas oublier : la méthode de valorisation et les unités de mesure se décident avant tout mouvement. Voir la gestion des stocks et de la traçabilité.
Limites connues
Les dépôts ne répertorient pas de défaut sur ces trois modules. Quatre limites d'usage, en revanche, déterminent leur effet réel.
stock_no_negativene corrige pas votre stock : il révèle qu'il est faux, en bloquant. La correction reste un travail d'inventaire.- Le blocage porte sur les emplacements internes et de transit : il ne concerne pas les emplacements virtuels de production, de consommation ou d'inventaire.
stock_location_zonene réorganise rien : il classe. Les préparations par zone et les rangements par aire supposent de configurer ensuite les opérations en conséquence.stock_putaway_product_templateest un module de niche : sans variantes, il n'a pas d'objet.
La première est la plus importante à annoncer avant la mise en service. Un dirigeant qui installe le blocage en attendant que le stock devienne juste sera déçu : il devient visiblement faux, ce qui est le premier pas et pas le dernier.
Identité technique
| Module | Dépôt OCA | Version | Licence | Dépend de |
|---|---|---|---|---|
stock_no_negative | stock-logistics-workflow | 18.0.1.0.2 | AGPL-3 | stock |
stock_location_zone | stock-logistics-warehouse | 18.0.1.0.0 | AGPL-3 | stock |
stock_putaway_product_template | stock-logistics-warehouse | 18.0.1.0.1 | AGPL-3 | stock |
Les dépôts stock-logistics-* comptent environ 200 modules documentés au total. Ces trois figurent dans nos packs négoce, industrie et retail, au-delà du socle commun.
Questions fréquentes
Pourquoi Odoo autorise-t-il le stock négatif ?
C'est un choix assumé : ne jamais bloquer une expédition parce que le niveau de stock enregistré est faux. Le prix de cette souplesse, que la description du module énonce clairement, est qu'une erreur d'inventaire peut ne jamais être corrigée — et qu'un stock négatif produit une valorisation négative, donc un bilan inexact.
Peut-on interdire le négatif sans tout bloquer ?
Oui, et c'est ce qui rend stock_no_negative utilisable : des exceptions explicites se déclarent au niveau du produit, de sa catégorie ou de l'emplacement. La bonne méthode est de démarrer sans exception et de les ouvrir au fur et à mesure des blocages réels.
Le blocage va-t-il rendre mon stock juste ?
Non : il le rendra visiblement faux. Le module révèle les écarts en bloquant les opérations concernées ; la correction reste un travail d'inventaire. C'est le premier pas, et il faut l'annoncer comme tel avant la mise en service.
À quoi servent les zones d'emplacement ?
À deux choses que le dépôt cite : organiser les préparations par zone — un préparateur traite une zone entière au lieu de traverser l'entrepôt, et le temps de déplacement est son premier poste de temps — et les stratégies de rangement par aire. Le module classe les emplacements, il ne réorganise pas les opérations.
Quand stock_putaway_product_template est-il utile ?
Quand vous gérez des produits à variantes. Nativement, une règle de rangement se définit par variante ou par catégorie : un modèle en 5 tailles et 4 couleurs demande 20 règles identiques. Ce module en permet une seule, au niveau du modèle. Sans variantes, il n'a pas d'objet.
Se faire accompagner
La décision d'interdire le stock négatif est comptable avant d'être logistique — un stock négatif fausse la valorisation, donc le bilan. Mais sa mise en service est délicate : activée sans méthode, elle bloque des expéditions le premier jour et l'équipe demande à revenir en arrière.
Nous la déployons dans l'ordre inverse de l'intuition : structurer les zones d'abord, activer le blocage sans exception ensuite, puis ouvrir les exceptions au vu des blocages réels — chaque exception documentant une situation examinée. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
- La gestion des stocks et de la traçabilité dans Odoo
- Les préparations : lots, retours et liens facture
- Grossiste, négoce et distribution avec Odoo
En résumé
Odoo autorise le stock négatif par choix, pour ne jamais bloquer une expédition. stock_no_negative inverse ce choix, avec des exceptions par produit, catégorie ou emplacement. Les deux autres structurent l'entrepôt en zones et évitent de dupliquer une règle de rangement sur vingt variantes. Parlons de votre entrepôt.