Le coût d'un service dans une nomenclature est 3 600 fois trop élevé

Un service de 10 minutes sur un poste à 30 €/h devrait coûter 5 €, et la ligne de la nomenclature affiche 18 000 €. Une cause reproduite : le libellé court de l'heure dans le dictionnaire des unités.

Versions concernées
Dolibarr 20 à 24 · testé en 20.0.4 et 24.0.1 · même code en 24.0.2 et dans la branche de développement
Ce qui a été vérifié
Testé le 4 octobre 2026 sur des instances 20.0.4 et 24.0.1 : poste à 30 €/h, service de 10 minutes ; ligne à 5,10 € et total à 5,00 € avec le dictionnaire d'origine ; ligne à 18 000,00 € et total toujours à 5,00 € dès que le libellé court de l'heure devient « hr » ; 5,10 € une fois « h » remis, par l'écran du dictionnaire. Écran de la nomenclature (bom/tpl/objectline_view.tpl.php) et conversion des unités (core/class/cunits.class.php) relus dans le code officiel de 20.0.4 à 24.0.2 et dans la branche de développement.

Dans une nomenclature (module BOM), vous ajoutez un service : 10 minutes sur un poste de travail qui coûte 30 € de l’heure. Le coût attendu est de 5 €. La ligne affiche 18 000 €. Pourtant, le coût total de fabrication de la nomenclature est juste.

18 000, c’est 600 × 30 : les 10 minutes ont été comptées en secondes au lieu d’être converties en heures.

La cause que nous avons reproduite

Pour convertir la durée d’une ligne en heures, l’écran de la nomenclature cherche l’unité « heure » dans le dictionnaire des unités par son libellé court, qui doit être h. S’il ne la trouve pas, il ne convertit rien : la durée reste en secondes, puis elle est multipliée par le taux horaire.

Le coût total, lui, est calculé par un autre chemin, qui ne dépend pas de ce libellé. C’est pour cela que le total reste juste alors que la ligne est fausse.

À vérifier

  1. Allez dans AccueilConfigurationDictionnairesUnités de mesure.
  2. Repérez la ligne de l’heure (code H, type time).
  3. Son libellé court doit être h. Si quelqu’un l’a changé, par exemple en hr, remettez h.

La ligne de la nomenclature affiche alors le bon montant.

Si le libellé est déjà h et que le montant reste faux, la cause est ailleurs : cette note décrit la seule cause que nous avons reproduite, pas la seule possible.

Pourquoi 5,10 € et pas 5 €

Une fois la conversion faite, vous verrez sans doute 5,10 € et non 5 €. La conversion des unités arrondit le résultat à deux décimales : 10 minutes deviennent 0,17 heure, et 0,17 × 30 = 5,10. Cet écart ne touche que l’affichage de la ligne : le total affiche 5,00 €.

Comment cela a été vérifié

  • Sur des instances 20.0.4 et 24.0.1 de test, avec un poste à 30 €/h et un service de 10 minutes : ligne à 5,10 € et total à 5,00 € avec le dictionnaire d’origine ; ligne à exactement 18 000,00 € et total toujours à 5,00 € avec le libellé court passé à hr ; de nouveau 5,10 € une fois h remis par l’écran du dictionnaire.
  • Dans le code officiel, l’écran de la ligne cherche l’heure par son libellé court de la 20.0.4 à la 24.0.2, et toujours dans la branche de développement.

Si vos coûts de fabrication restent faux

Si les coûts de vos nomenclatures ou de vos ordres de fabrication ne correspondent pas à ce que vous attendez, le diagnostic à 90 € consiste à reprendre un cas avec vous pendant une heure, puis à vous remettre par écrit la cause et ce que coûterait la correction.

DolibarrnomenclatureBOMcoûtserviceposte de travailunités de mesure