Documentation10 min de lecture

Stock : interdire le négatif, organiser les emplacements et le rangement

Par défaut, Odoo **autorise le stock négatif**. Le module OCA `stock_no_negative` (dépôt `stock-logistics-workflow`, version 18.0.1.0.2, licence AGPL-3) inverse ce comportement : toute opération qui ferait passer un produit stockable sous zéro sur un emplacement interne ou de transit est bloquée. Pourquoi Odoo l'autorise, pourquoi l'interdire, et les exceptions à prévoir.

Entrepôt organisé en zones avec emplacements identifiés

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_negative bloque 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

ModuleModèles étendusChampsVersionDépôt
stock_no_negative4418.0.1.0.2stock-logistics-workflow
stock_location_zone1418.0.1.0.0stock-logistics-warehouse
stock_putaway_product_template3118.0.1.0.1stock-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 fauxPasseBloquée
Erreur d'inventairePeut rester indéfinimentSignalée au moment où elle gêne
Valorisation du stockPeut devenir négative, donc fausseCohérente
Pour quiActivité où l'expédition ne doit jamais attendreActivité 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 :

UsageCe que cela permet
Préparations par zoneUn préparateur traite une zone entière, au lieu de traverser l'entrepôt
Stratégies de rangement par aireRanger 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

  1. Structurer d'abord, contrôler ensuite. Marquer les zones avec stock_location_zone donne la carte de l'entrepôt — et c'est ce qui permet ensuite de décider où le négatif peut être toléré.
  2. Activer stock_no_negative sans exception, et observer les blocages pendant une à deux semaines.
  3. Ouvrir les exceptions au cas par cas, chaque blocage réel documentant une situation examinée.
  4. Installer stock_putaway_product_template si 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_negative ne 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_zone ne 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_template est 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

ModuleDépôt OCAVersionLicenceDépend de
stock_no_negativestock-logistics-workflow18.0.1.0.2AGPL-3stock
stock_location_zonestock-logistics-warehouse18.0.1.0.0AGPL-3stock
stock_putaway_product_templatestock-logistics-warehouse18.0.1.0.1AGPL-3stock

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

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.

Documentation OCAStocksLogistique

Partager

Fiches connexes

Relevés bancaires et pièces comptables sur un bureau
Relevé sur une instance Odoo 18 Community, le module OCA `account_reconcile_oca` (dépôt `account-reconcile`, version 18.0.1.1.14, licence AGPL-3) ajoute 2 modèles, 87 champs et 17 vues : il remplace le lettrage limité de la Community par deux écrans dédiés, bancaire et par compte. Ce qu'il ajoute à l'instance, où le trouver, ses quatre cas d'usage et ses limites connues.
Lire la suite
Documentation OCA, Comptabilité
Relevé bancaire et suivi des opérations sur un bureau
Odoo a retiré l'import de relevés bancaires de son édition Community à partir de la version 14 : les 3 modules OCA `account_statement_import_file` (18.0.1.0.3, LGPL-3), `_camt` et `_ofx` le rétablissent, avec la détection des transactions déjà importées. Comment ils s'articulent, ce que CAMT apporte de plus qu'OFX, et le piège du fichier sans IBAN.
Lire la suite
Documentation OCA, Comptabilité