Documentation10 min de lecture

DDMRP dans Odoo : piloter le stock par tampons, pas par prévisions

Le module OCA `ddmrp` (dépôt `ddmrp`, version 18.0.1.10.2, licence LGPL-3) implémente la méthode **Demand Driven MRP** dans Odoo : des **tampons de stock** dimensionnés par profil, une **consommation moyenne journalière** calculée selon une méthode paramétrable, et huit dépendances externes dont un calendrier d'entrepôt. Dix-huit autres modules traitent les ajustements, les avertissements, l'historique et les limites de capacité.

Stock organisé par niveaux dans un entrepôt

Le calcul de besoins classique part des prévisions : on estime la demande, on en déduit les approvisionnements, et l'on se trompe. DDMRP part de l'inverse — on place des tampons de stock aux bons endroits, et on les réapprovisionne sur consommation réelle.

Dix-neuf modules communautaires portent cette méthode dans Odoo. C'est le projet industriel le plus abouti du catalogue, et terminent le dépôt ddmrp.

Résumé

Le module central crée les tampons de stock avec leurs profils, leurs facteurs de délai et de variabilité, et une méthode de calcul de la consommation moyenne journalière paramétrable. Il déclare huit dépendances externes, dont le calcul de besoins multiniveau, les estimations de demande et un calendrier d'entrepôt.

Quatre modules traitent les ajustements : des facteurs d'ajustement par période — la saisonnalité —, un assistant matriciel pour les saisir en deux dimensions, l'exclusion de certains mouvements du calcul de consommation, et son extension aux ventes.

Cinq modules traitent l'exploitation : l'exécution du calcul en travaux de fond, les avertissements de configuration sur les tampons et leur exécution en travaux de fond, une conversation sur les tampons, et l'historique des tampons.

Cinq modules enfin traitent les compléments : les jours de couverture, les conditionnements, le remplacement de produit avec son outil assisté et sa colle, et le masquage de l'état de stock sur les achats.

Quatre modules traitent les contraintes et l'analyse : une limite de capacité de stockage jamais dépassée, une route forcée au réapprovisionnement, l'accès à l'analyse des ventes depuis un tampon, et un rapport d'indice de flux des pièces.

L'essentiel

  • Des tampons de stock à zones, dimensionnés par profil.
  • Une consommation moyenne journalière calculée par méthode paramétrable.
  • Des ajustements par période : la saisonnalité, en matrice.
  • Des mouvements exclus du calcul de consommation.
  • Des avertissements de configuration sur les tampons.
  • Une limite de capacité de stockage jamais dépassée.
  • L'historique des tampons, pour voir évoluer le dimensionnement.
  • Huit dépendances externes pour le seul module central.

Ce que ces modules ajoutent à l'instance

FamilleModulesNombre
Socleddmrp1
Ajustementsddmrp_adjustment, ddmrp_adjustment_matrix, ddmrp_exclude_moves_adu_calc, ddmrp_exclude_moves_adu_calc_sales4
Exploitationddmrp_cron_actions_as_job, ddmrp_warning, ddmrp_warning_as_job, ddmrp_chatter, ddmrp_history5
Complémentsddmrp_coverage_days, ddmrp_packaging, ddmrp_product_replace, ddmrp_packaging_product_replace, ddmrp_purchase_hide_onhand_status5
Contraintes et analysestock_buffer_capacity_limit, stock_buffer_route, stock_buffer_sales_analysis, ddmrp_report_part_flow_index4

Les menus : Inventaire ▸ Produits ▸ Stock Buffers, Inventaire ▸ Configuration ▸ DDMRP avec ses six référentiels — profils de tampon, facteurs de délai et de variabilité, méthode de calcul de la consommation, exécution, outil de remplacement —, Inventaire ▸ Plannification de la Demande ▸ Buffer Adjustments et Create Buffer Adjustments, Inventaire ▸ Analyse ▸ DDMRP Historique de Buffer, DDMRP Warnings et Parts Plan Flow Index, Achats ▸ Commandes ▸ PO lines On-Hand Status.

Pourquoi des tampons plutôt que des prévisions

Le calcul de besoins classique amplifie l'erreur : une prévision fausse à un niveau se propage à tous les niveaux inférieurs, et l'on commande des composants pour des produits qui ne se vendront pas. DDMRP coupe cette propagation en plaçant des tampons qui absorbent la variation.

ddmrp (version 18.0.1.10.2) crée les tampons de stock : un point de découplage dans la chaîne, dimensionné en zones — rouge, jaune, verte — selon un profil de tampon, un facteur de délai et un facteur de variabilité.

Le dimensionnement repose sur la consommation moyenne journalière, calculée selon une méthode paramétrable : moyenne glissante sur le passé, estimation à venir, ou combinaison. Référentiel sous Inventaire ▸ Configuration ▸ DDMRP ▸ Méthode de calcul de la CMJ.

Le module déclare huit dépendances externes : le calcul de besoins multiniveau, les estimations de demande, les sous-emplacements, les quantités en unité produit, un calendrier d'entrepôt, l'exclusion mutuelle d'actions planifiées, les achats, et un widget de graphique.

Le calendrier d'entrepôt dans les dépendances n'est pas anodin : un tampon se réapprovisionne en jours ouvrés, pas en jours calendaires. Un délai de cinq jours sur un pont de mai n'est pas un délai de cinq jours.

Les estimations de demande et le calcul multiniveau sont traités dans le calcul de besoins multiniveau.

Les ajustements : la saisonnalité

ddmrp_adjustment (version 18.0.2.0.0) permet d'appliquer des facteurs d'ajustement aux tampons par période, en s'appuyant sur les plages de dates. Menu sous Inventaire ▸ Plannification de la Demande ▸ Buffer Adjustments.

ddmrp_adjustment_matrix ajoute un assistant matriciel en deux dimensions pour les saisir — produits en lignes, périodes en colonnes.

L'assistant matriciel est ce qui rend l'ajustement praticable : saisir un facteur par produit et par mois dans un formulaire représente des centaines d'ouvertures d'écran. En matrice, c'est un tableau qu'on remplit.

Deux modules traitent l'inverse — ce qu'il faut exclure du calcul :

  • ddmrp_exclude_moves_adu_calc définit des règles d'exclusion de mouvements du calcul de consommation moyenne.
  • ddmrp_exclude_moves_adu_calc_sales (version 18.0.2.0.0) l'étend aux ventes.

L'exclusion est indispensable : une commande exceptionnelle, un transfert interne ou un rebut comptés comme de la consommation font gonfler tous les tampons du produit pour des mois.

Exploiter la méthode

ddmrp_warning ajoute des avertissements de configuration sur les tampons, avec un référentiel de définitions d'avertissement et un écran de consultation sous Inventaire ▸ Analyse ▸ DDMRP Warnings.

Les avertissements de configuration sont le module décisif d'un projet DDMRP : un tampon mal paramétré ne produit pas d'erreur, il produit un mauvais dimensionnement — invisible jusqu'à la rupture ou au surstock. Les détecter automatiquement est la seule approche tenable sur plusieurs centaines de tampons.

  • ddmrp_cron_actions_as_job exécute le calcul des tampons en travaux de fond, et ddmrp_warning_as_job fait de même pour les avertissements.
  • ddmrp_chatter ajoute une conversation et des activités sur les tampons — le dimensionnement se discute, et la trace de la décision compte.
  • ddmrp_history (version 18.0.1.2.0) stocke l'historique des tampons, consultable sous Inventaire ▸ Analyse ▸ DDMRP Historique de Buffer.

L'historique est la condition de l'amélioration : voir comment un tampon a évolué, et le confronter aux ruptures constatées, est la seule façon de régler la méthode.

Compléments, contraintes et analyse

  • ddmrp_coverage_days implémente les jours de couverture — l'autre façon de lire un tampon : non pas en quantité, mais en durée.
  • ddmrp_packaging intègre les conditionnements : un tampon se réapprovisionne par cartons ou par palettes, pas à l'unité.
  • ddmrp_product_replace fournit un outil assisté de remplacement de produit, avec son menu en configuration ; ddmrp_packaging_product_replace est la colle entre les deux précédents.
  • ddmrp_purchase_hide_onhand_status remplace l'affichage de l'état de stock sur les achats par un bouton.

Le remplacement de produit est un cas de fin de vie : une référence est remplacée par une autre, et le tampon de la nouvelle doit hériter de l'historique de consommation de l'ancienne — sinon il démarre à zéro et provoque une rupture.

Les contraintes physiques

  • stock_buffer_capacity_limit garantit que les limites de stockage ne sont jamais dépassées : un tampon ne peut pas demander plus que ce que l'emplacement peut recevoir.
  • stock_buffer_route permet de forcer une route au réapprovisionnement depuis un tampon.
  • stock_buffer_sales_analysis donne accès à l'analyse des ventes depuis un tampon.
  • ddmrp_report_part_flow_index fournit un rapport d'indice de flux des pièces, avec son référentiel de groupes de flux.

La limite de capacité est le garde-fou qui manque le plus souvent : la méthode calcule une zone verte optimale sans savoir que l'emplacement ne contient que douze palettes. Le résultat est un ordre d'approvisionnement qu'on ne peut pas stocker.

Limites connues

  • Huit dépendances externes pour le seul module central : DDMRP est un projet lourd, comparable à Shopfloor en coût d'installation et de maintenance.
  • La méthode précède l'outil : DDMRP suppose d'avoir identifié les points de découplage de sa chaîne. Installer les modules sans ce travail produit des tampons partout, ce qui est l'inverse de la méthode.
  • Le calcul de consommation moyenne journalière est le paramètre critique : sa méthode, sa période et ses exclusions déterminent tout le dimensionnement.
  • Les exclusions de mouvements sont indispensables : sans elles, une commande exceptionnelle fait gonfler les tampons pour des mois.
  • Les avertissements de configuration sont à installer dès le départ : un tampon mal paramétré ne produit pas d'erreur, il produit un mauvais dimensionnement invisible.
  • Le calcul en travaux de fond exige une infrastructure de travailleurs surveillée : sur plusieurs centaines de tampons, le calcul synchrone n'est pas tenable.
  • ddmrp_adjustment_matrix dépend d'un widget de matrice (web_widget_x2many_2d_matrix), seul module AGPL-3 du dépôt.
  • La limite de capacité suppose les capacités de stockage renseignées : sans elles, elle ne contraint rien.

Identité technique

Les dix-neuf modules viennent du dépôt OCA ddmrp, branche 18.0 — dont tous les modules sont désormais documentés ici. Dix-huit sont en LGPL-3, ddmrp_adjustment_matrix est en AGPL-3. Les dépendances externes du module central : mrp_multi_level, stock_demand_estimate, stock_location_is_sublocation, stock_move_quantity_product_uom, stock_warehouse_calendar, base_cron_exclusion, purchase_stock et web_widget_bokeh_chart. Puis date_range pour les ajustements, queue_job pour les travaux de fond, sale et sales_team pour l'analyse.

Voir aussi le calcul de besoins multiniveau et routage, valorisation et rebut du stock.

Questions fréquentes

Qu'est-ce que DDMRP apporte par rapport au calcul de besoins classique ?

Le calcul classique part des prévisions et amplifie l'erreur : une prévision fausse à un niveau se propage à tous les niveaux inférieurs. DDMRP coupe cette propagation en plaçant des tampons de stock aux points de découplage, réapprovisionnés sur consommation réelle. Le module ddmrp les dimensionne par zones selon un profil.

Peut-on tenir compte de la saisonnalité dans les tampons ?

Oui : ddmrp_adjustment applique des facteurs par période, et ddmrp_adjustment_matrix les fait saisir dans une matrice produits × périodes. Sans la matrice, saisir un facteur par produit et par mois représente des centaines d'ouvertures d'écran — l'ajustement est alors abandonné.

Pourquoi exclure certains mouvements du calcul ?

Parce qu'une commande exceptionnelle, un transfert interne ou un rebut comptés comme de la consommation font gonfler tous les tampons du produit pour des mois. ddmrp_exclude_moves_adu_calc définit les règles d'exclusion, et son extension les applique aux ventes.

Comment détecter un tampon mal paramétré ?

Avec ddmrp_warning, qui ajoute des avertissements de configuration et leur référentiel de définitions. C'est le module décisif : un tampon mal paramétré ne produit pas d'erreur, il produit un mauvais dimensionnement — invisible jusqu'à la rupture ou au surstock. Sur plusieurs centaines de tampons, la détection automatique est la seule approche tenable.

DDMRP peut-il demander plus de stock que l'entrepôt ne peut en contenir ?

Oui, et c'est le garde-fou qui manque le plus souvent — la méthode calcule une zone verte optimale sans connaître la capacité physique. stock_buffer_capacity_limit garantit que les limites de stockage ne sont jamais dépassées, à condition que ces capacités soient renseignées.

Se faire accompagner

DDMRP est une méthode avant d'être un logiciel : elle suppose d'avoir identifié les points de découplage de sa chaîne — là où un tampon absorbe la variation plutôt que de la transmettre. Installer les dix-neuf modules sans ce travail produit des tampons partout, c'est-à-dire exactement ce que la méthode cherche à éviter.

Nous commençons donc par cartographier la chaîne et par trancher la méthode de calcul de consommation avec ses exclusions, avant d'installer quoi que ce soit. Puis les avertissements de configuration, dès le premier tampon. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

Le calcul de besoins classique part des prévisions et amplifie l'erreur. DDMRP place des tampons aux points de découplage et les réapprovisionne sur consommation réelle. Dix-neuf modules portent la méthode — mais la méthode précède l'outil. Parlons de votre chaîne d'approvisionnement.

Documentation OCALogistiqueProduction

Partager

Fiches connexes

Baies de serveurs dans une salle machine
Le module OCA `queue_job` (dépôt `queue`, version 18.0.3.4.1, licence LGPL-3) ajoute à Odoo une **file de travaux de fond** avec ses canaux, ses fonctions et ses tâches, sous le menu **File d'attente des tâches** : c'est la brique dont dépendent plus de quarante modules communautaires, et la première à surveiller en exploitation. Vingt-six autres modules traitent les composants, la configuration hors base, l'impression serveur et l'IoT.
Lire la suite
Documentation OCA, Exploitation
Câbles réseau branchés sur un commutateur
Le module OCA `endpoint` (dépôt `web-api`, version 18.0.1.1.4, licence LGPL-3) permet de **déclarer un point d'entrée HTTP depuis l'interface**, sous **Paramètres ▸ Technique ▸ Endpoints** : une adresse, une méthode, un traitement — sans écrire de module. Vingt-trois autres modules traitent le cache, les imports par sessions, les échanges de factures et l'agenda.
Lire la suite
Documentation OCA, Intégration