Ce que tu vas apprendre
Stock par variante
Chaque product.product a ses propres stock.quant.
Un template = 6 colonnes de stock distinctes.
Orderpoints différenciés
Min/max indépendants par variante — bestsellers à 10/30, modèles standards à 5/20, niches sans orderpoint.
Routes MTO ou MTS
Réappro à la commande pour les variantes premium, stock tampon pour les classiques. Une décision par variante.
1. La rupture qui fait revenir Inès dans le bureau de Karim
Karim vient de boucler le devis Cabinet Architecture de l'article précédent — 20 chaises InfoChair Pro réparties en grille, 408 500 DZD HT. Pendant qu'il prépare la confirmation, Inès débarque. Elle vient du parc commercial Bab Ezzouar : trois clients pro repartent les mains vides parce que la Noir / Réglables 4D est en rupture en magasin, alors que la Bleu / Fixes empile 15 chaises au sol qui ne tournent pas.
« On a 6 références dans Odoo », ouvre Inès. « 6 stocks, 6 vélocités, 6 marges. Mais tu en gères combien ? Une, parce que tu raisonnes au niveau du template. Sauf qu'Odoo, lui, sait raisonner au niveau de chaque variante. On va ouvrir l'app Inventaire et regarder ce qui s'y passe vraiment. »
| Variante | Stock disponible | Diagnostic terrain |
|---|---|---|
| Noir / Fixes (variant 44) | 12 | OK confortable |
| Noir / Réglables 4D (variant 45) | 0 | RUPTURE — bestseller |
| Gris anthracite / Fixes (variant 46) | 8 | Modèle moyen |
| Gris anthracite / Réglables 4D (variant 47) | 3 | Niche, peu commandée |
| Bleu marine / Fixes (variant 48) | 15 | Stock haut, rotation lente |
| Bleu marine / Réglables 4D (variant 49) | 6 | Sous le seuil min |
stock.quant— la cellule élémentaire du stock. Quantité par couple (product.product, location). Un quant n'existe que si le stock est non nul.stock.warehouse.orderpoint— la règle de réapprovisionnement. Min, max, déclencheur (manuel ou auto), route, sur une variante précise.stock.route+stock.rule— l'algorithme de réappro. Acheter, fabriquer, MTO (commander à la demande), via un ou plusieurs entrepôts.
2. Les quants — un stock totalement indépendant par variante
Quand tu actives les variantes
sur un template, Odoo crée immédiatement N product.product séparés.
Chacun a sa propre fiche, sa propre référence interne, son propre stock. Le stock
du template est juste une somme calculée, pas une vérité.
Voir les quants par variante
Chemin : Inventaire → Produits → Chaise ergonomique InfoChair Pro, puis bouton smart Variantes en haut. Tu obtiens la liste des 6 variantes avec colonne Disponible. C'est la capture ci-dessus — note le 0,00 en orange sur la Noir/Réglables 4D : Odoo signale visuellement la rupture quand un quant atteint zéro.
Comprendre le contenu d'un quant
Un stock.quant est défini par 3 champs minimum :
product_id— la variante exacte (product.product, pasproduct.template)location_id— l'emplacement physique (ALG/Stock, ALG/Sortie, etc.)quantity— la quantité réelle en stock
Tu peux multiplier les quants : la même variante peut être à la fois sur ALG/Stock, ALG/Réception, ALG/Sortie. Le stock disponible de la variante est la somme de tous ses quants sur les emplacements internes du périmètre.
(product.product, location), pas une ligne par
template. Cela peut faire beaucoup pour les catalogues riches — d'où l'intérêt
d'utiliser les filtres pour ne traiter qu'une variante à la fois.
3. Orderpoints différenciés par PTAV
Un orderpoint, c'est une règle de réapprovisionnement avec deux seuils : quantité min en dessous duquel Odoo déclenche un réappro, et quantité max jusqu'à laquelle il monte. Et la magie de la v19 : tu peux créer un orderpoint sur une variante précise, pas seulement sur le template. Donc 6 stratégies de stock différentes pour 6 variantes du même produit.
Chez InfoSphere — la stratégie variantes Chaise
Karim et Inès posent les seuils avec un raisonnement business :
| Variante | Min | Max | Justification |
|---|---|---|---|
| Noir / Réglables 4D | 10 | 30 | Bestseller — jamais en rupture, stock tampon haut |
| Bleu / Réglables 4D | 8 | 25 | Standard premium, demande régulière |
| Noir / Fixes | 5 | 20 | Modèle d'entrée volume modéré |
| Bleu / Fixes | 5 | 20 | Idem — pas de différence vs Noir/Fixes |
| Gris anthracite / Fixes | — | — | Niche, on ne stocke pas — route MTO seule |
| Gris anthracite / Réglables 4D | — | — | Niche × premium, jamais en stock |
4 orderpoints créés, 2 variantes laissées sans (les Gris anthracite, modèles peu commandés que l'entreprise refuse de stocker — elles seront commandées à la demande via la route MTO décrite à la section 4).
Le formulaire d'un orderpoint
Si tu cliques sur OP/00004 (la Noir / Réglables 4D), tu obtiens une fiche minimaliste mais complète : produit, entrepôt, emplacement de stock, quantité min, quantité max. Optionnellement un multiple (saisir par lots de 5 par exemple) et un déclencheur (manuel ou automatique).
Le calcul `qty_to_order_computed`
Quand le scheduler tourne (par défaut chaque nuit, ou sur déclenchement manuel), Odoo calcule pour chaque orderpoint :
qty_to_order = max(0, max_qty - virtual_available) si
virtual_available < min_qtysinon
qty_to_order = 0
Sur OP/00004 : virtual_available = 0 (rupture totale), donc 0 < 10 (min) → on commande max - virtual = 30 - 0 = 30 unités. Sur OP/00005 (Bleu/4D) : virtual = 6 < 8 (min) → on commande 25 - 6 = 19 unités. Sur OP/00006 (Noir/Fixes) : virtual = 12 > 5 (min) → 0 à commander.
4. Routes différenciées — MTO sur les premiums, MTS sur les classiques
La route indique comment Odoo va réapprovisionner. Trois grandes options en CE :
- Acheter (Buy) — auto-attribuée à tous les produits avec
purchase_ok=True. Génère une demande de prix vers le fournisseur défini sur la fiche. - Réapprovisionner sur commande (MTO) — chaque vente déclenche immédiatement une commande fournisseur, sans attendre le scheduler. Pas de stock tampon.
- Fabriquer — disponible si l'app MRP est installée. Génère un ordre de fabrication.
Et la flexibilité v19 : les routes peuvent être assignées à la variante
(champ route_ids sur product.product), pas seulement au
template. Donc tu peux mixer : Réglables 4D en MTO seul, Fixes en
MTS via Acheter, sur le même template. La doc officielle détaille tous les cas
d'usage dans
le
guide de réapprovisionnement Odoo 19.
Stratégie InfoSphere appliquée
- Bestsellers (Noir/4D, Bleu/4D) : Acheter + orderpoint min/max — stock tampon pour répondre aux pics
- Standards (Noir/Fixes, Bleu/Fixes) : Acheter + orderpoint plus modeste
- Niches (Gris anthracite, deux variantes) : MTO seul — on ne stocke pas, le client attend le délai fournisseur (1 jour chez TechFourniss DZ)
5. Le scheduler génère le PO automatique
Le scheduler de réappro est un cron quotidien qui balaye tous les orderpoints et déclenche les actions nécessaires. Tu peux aussi le forcer manuellement via le menu développeur, ou ligne par ligne via le bouton Commander dans la liste des règles. C'est ce qu'on a vu sur la capture précédente : 2 boutons orange en regard des orderpoints qui réclament action.
Le PO P00017 généré pour InfoSphere
Une fois le réappro déclenché sur OP/00004 (Noir/4D, 30 u) et OP/00005 (Bleu/4D, 19 u), Odoo crée une seule demande de prix (les 2 lignes ont le même fournisseur TechFourniss DZ). Si les fournisseurs étaient différents, on aurait 2 PO distincts.
| Ligne PO | Qté | PU | Sous-total HT | Origine OP |
|---|---|---|---|---|
| Chaise (Noir / Réglables 4D) | 30 | 16 500 | 495 000 | OP/00004 — bestseller en rupture |
| Chaise (Bleu / Réglables 4D) | 19 | 16 500 | 313 500 | OP/00005 — stock faible |
| Total HT | 49 | 808 500 | ||
| TVA 19% | 153 615 | |||
| Total TTC | 962 115 |
Karim n'a plus qu'à Confirmer la commande (un clic), envoyer la demande de prix au fournisseur, et le réappro suit son cours normal. Au prochain passage du scheduler, OP/00004 et OP/00005 verront que la commande est déjà émise (incoming_qty > 0) et ne déclencheront pas un second PO. Pas de double commande.
6. Pièges et bonnes pratiques v19
stock.valuation.layer SUPPRIMÉ en v19 — si tu lis
d'anciens tutos ou si tu migres depuis v17/v18, sache que ce modèle a été remplacé
par les champs value, remaining_qty,
remaining_value directement sur stock.move, plus un
nouveau modèle product.value. La valorisation
de stock est entièrement refondue. Code custom à auditer avant migration.
procurement.group SUPPRIMÉ aussi en v19 — l'API de
scheduling change. La méthode pour forcer le scheduler depuis du code est
self.env['stock.rule'].run_scheduler() (classmethod, plus de
procurement.group à instancier). Les tâches de réappro existantes en custom v17/v18
sont à réécrire.
product_tmpl_id sans préciser de
variante, Odoo l'ignore silencieusement à l'exécution (pas de variante = pas de
stock à surveiller). Vérifie toujours que product_id pointe sur un
product.product spécifique.
qty_multiple SUPPRIMÉ — il a été remplacé
par qty_to_order_computed et qty_to_order_manual. La
colonne Multiple n'apparaît plus que sur certains layouts. Pour saisir des
multiples (par exemple commander par lots de 5), passe par la quantité minimale
fournisseur (product.supplierinfo.min_qty) sur l'onglet
Achats du template.
Bonnes pratiques InfoSphere
- Définis ta segmentation variantes AVANT de poser les seuils. Bestseller / Standard / Niche — 3 catégories de comportement qui dictent les min/max. Pas 6 valeurs uniques par catégorie de couleur.
- Réserve la route MTO aux variantes peu commandées. Au-delà d'1 vente par semaine, le délai fournisseur devient pénalisant. MTS + orderpoint est presque toujours préférable.
- Vérifie les délais fournisseur sur les variantes premium. Si
ton bestseller est en rupture et que le délai est de 7 jours, ton orderpoint
min doit couvrir 7 jours de vente — pas un chiffre arbitraire. Le champ
days_to_ordersur l'orderpoint sert à intégrer ce délai dans le calcul. - Garde les Gris anthracite dans le catalogue mais en MTO. Tu offres le choix au client tout en évitant le coût de stockage. Mieux vaut une vente avec délai qu'une non-vente.
- Laisse le scheduler tourner la nuit. Forcer le run_scheduler manuellement plusieurs fois par jour multiplie les calculs sans bénéfice. Une fois par 24h suffit pour 99% des PME.
À retenir
📦 Stock indépendant par variante
Chaque product.product a ses propres
stock.quant et son stock disponible. Le template ne
contient qu'une somme calculée. 6 variantes = 6 stocks gérés
séparément.
⚙️ Orderpoints différenciés par PTAV
Min/max indépendants par variante. Bestseller à 10/30, standard à 5/20, niche sans orderpoint. Une stratégie de stock par couple (coloris, accoudoirs).
🔀 Routes assignées à la variante
Champ route_ids sur
product.product, pas seulement sur le template. MTO sur
les premiums, MTS sur les classiques, sur le même template Chaise.
🤖 Scheduler factorise les PO
Un seul PO par fournisseur, plusieurs lignes pour plusieurs variantes. Pas de double commande au passage suivant (incoming_qty surveillé). Cron quotidien, déclenchable manuellement.
Saison 9 bouclée
Tu sais maintenant créer des variantes (Partie 1), les vendre 20 d'un coup en grille (Partie 2), et gérer leur stock de manière différenciée. La Saison 10 — Revenue Management commence avec les promotions multicanal déjà publiées, et continue avec les pricelists par segment et la fidélité.
💼 Approfondir — Prospection & Ventes
Autres articles du même domaine :
Suite de la Saison 9 — Configurateur Produit
Articles complémentaires
Sur les mêmes thématiques : #intermediaire#cas-pratique
👥 Ressources humaines · Saison 4
👥 Ressources humaines · Saison 4
🛍 Site web & eCommerce · Saison 5