<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ted75</id>
	<title>Dolibarr ERP CRM Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ted75"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php/Special:Contributions/Ted75"/>
	<updated>2026-10-27T08:51:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63717</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63717"/>
		<updated>2025-07-09T21:32:11Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Exemples de formules fonctionnelles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Module_Dynamic_Prices]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module permet d&#039;avoir un prix de produit qui se calcule dynamiquement au moment de l&#039;ajout du produit dans un un document (devis, commande, facture,).&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
Par contre, ce module étant au statut expérimental, pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=1&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :&lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*&#039;&#039;&#039;1 = stable + experimental&#039;&#039;&#039;&lt;br /&gt;
*2 = stable + experimental + development&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Le calcul doit commencer par un price=, cependant ne rien indiquer fonctionne aussi. &lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
&lt;br /&gt;
price = #global_coefvente# * #cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Opérateurs==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Fonctionne dans :&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
!Caractère&lt;br /&gt;
!Rôle&lt;br /&gt;
!Editeur d&#039;expression de prix&lt;br /&gt;
!Attributs supplémentaires&lt;br /&gt;
!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|price =&lt;br /&gt;
|A toujours placer au début de l&#039;expression (correspond à la variable calculée).&lt;br /&gt;
En alternative, ne rien indiquer fonctionne aussi.&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|price = #supplier_min_price#&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;supplier_min_price#&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;#&#039;&#039;&#039;nomvar&#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
|Pour signaler une variable où nomvar est le nom de la variable dans le code (à placer au début et à la fin du nom de variable sans espace)&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
|Addition&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 + 2&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Soustraction&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 - 2&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|Multiplication&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 * 2&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|Division&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 / 2&lt;br /&gt;
|-&lt;br /&gt;
|( )&lt;br /&gt;
|Parenthèses à utiliser pour la priorité entre multiplication et addition.&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|(2+3)*2&lt;br /&gt;
|-&lt;br /&gt;
|( )&lt;br /&gt;
|Parenthèses à utiliser autour d&#039;une condition pour la délimiter si elle est imbriquée dans une autre condition.&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|($object-&amp;gt;weight &amp;gt; 0 ? 20 : 0 ) &amp;gt; 0 ? &#039;jaune&#039; : &#039;rouge&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;$&#039;&#039;&#039;nomtable&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;nomvar&lt;br /&gt;
|A utiliser si la variable nomvar est dans une table nomtable du code pouvant être appelée (ex : Attributs supplémentaires du module Produits)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|$object-&amp;gt;weight&lt;br /&gt;
|-&lt;br /&gt;
|;&lt;br /&gt;
|Pour séparer les expressions s&#039;il y en a plusieurs dans la même formule&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A + B&lt;br /&gt;
|&amp;quot;OU&amp;quot; logique (la condition A ou la condition B ou les deux doivent être vrais)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|isset($object-&amp;gt;weight) &amp;amp;&amp;amp; $object-&amp;gt;weight &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|A &amp;amp;&amp;amp; B&lt;br /&gt;
|&amp;quot;ET&amp;quot; logique (les conditions A et B doivent être vraies)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A == B&lt;br /&gt;
|Egalité logique (A doit être égal à B pour valider la condition)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A &amp;gt; B&lt;br /&gt;
|A doit être strictement plus grand que B&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A &amp;lt; B&lt;br /&gt;
|A doit être strictement plus petit que B&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|X ? Y : Z&lt;br /&gt;
|Equivaut respectivement au &amp;quot;then&amp;quot; et au &amp;quot;else&amp;quot; de l&#039;expression &amp;quot;if X then Y else Z&amp;quot;.&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|$object-&amp;gt;weight &amp;gt; 0 ? 20 : 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Fonctions==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Fonction&lt;br /&gt;
!Rôle&lt;br /&gt;
!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|X ? Y : Z&lt;br /&gt;
|If X Then Y Else Z : si la condition X est satisfaite, appliquer Y, sinon appliquer Z.&lt;br /&gt;
|weight &amp;gt; 0 ? 2 * weight : 0 (si le poids est supérieur à zéro, renvoyer deux fois le poids, sinon renvoyer zéro).&lt;br /&gt;
|-&lt;br /&gt;
|isset(X)&lt;br /&gt;
|Vérifie si la variable X a une valeur définie.&lt;br /&gt;
|Si Poids = &amp;quot;&amp;quot; et Volume = 500 mL, le poids n&#039;a pas de valeur définie -&amp;gt; isset(Poids) = 0.&lt;br /&gt;
|-&lt;br /&gt;
|round(X,2)&lt;br /&gt;
|Arrondit la variable X à 2 chiffres après la virgule.&lt;br /&gt;
|round(2.564,2) = 2.56&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications&lt;br /&gt;
|PRIX CALCULES DYN.&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_quantity#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Qté achat minimum&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Taux TVA (pour ce produit/fournisseur)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Taux de taxe par défaut&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#weight#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Poids&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax1_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 1&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax2_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 2&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables en erreur==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#price_min#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Prix min&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#length#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Longueur&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#surface#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Surface&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Modifier prix par défaut -&amp;gt; Editeur d&#039;expression de prix&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Modifier prix par défaut -&amp;gt; Editeur d&#039;expression de prix&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Modifier prix par défaut -&amp;gt; Editeur d&#039;expression de prix&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|isset($object-&amp;gt;weight) &amp;amp;&amp;amp; $object-&amp;gt;weight &amp;gt; 0 ?&lt;br /&gt;
round($object-&amp;gt;price_ttc / ($object-&amp;gt;weight_units == &#039;-3&#039; ? $object-&amp;gt;weight / 1000 : $object-&amp;gt;weight), 2) :&lt;br /&gt;
&lt;br /&gt;
(isset($object-&amp;gt;volume) &amp;amp;&amp;amp; $object-&amp;gt;volume &amp;gt; 0 ?&lt;br /&gt;
&lt;br /&gt;
round($object-&amp;gt;price_ttc / ($object-&amp;gt;volume_units == &#039;0&#039; ? $object-&amp;gt;volume / 1000 : $object-&amp;gt;volume), 2) :&lt;br /&gt;
&lt;br /&gt;
0)&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRODUITS&lt;br /&gt;
|Attributs supplémentaires&lt;br /&gt;
|Nouvel attribut&lt;br /&gt;
|Cette formule calcule le Prix au kg ou au L du produit. Elle permet de gérer si le produit est solide (au poids) ou liquide (au volume), gère aussi si l’unité est g (-3) ou kg (0), ou bien millilitre (0) ou litre (98), et fait un arrondi à 2 chiffres après la virgule.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63683</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63683"/>
		<updated>2025-07-08T18:08:39Z</updated>

		<summary type="html">&lt;p&gt;Ted75: Ajout des opérateurs et fonctions connus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Le calcul doit commencer par un price=, cependant ne rien indiquer fonctionne aussi. &lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
&lt;br /&gt;
price = #global_coefvente# * #cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Opérateurs==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Fonctionne dans : &lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
!Caractère&lt;br /&gt;
!Rôle&lt;br /&gt;
!Editeur d&#039;expression de prix&lt;br /&gt;
!Attributs supplémentaires&lt;br /&gt;
!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|price =&lt;br /&gt;
|A toujours placer au début de l&#039;expression (correspond à la variable calculée).&lt;br /&gt;
En alternative, ne rien indiquer fonctionne aussi.&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|price = #supplier_min_price#&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;supplier_min_price#&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;#&#039;&#039;&#039;nomvar&#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
|Pour signaler une variable où nomvar est le nom de la variable dans le code (à placer au début et à la fin du nom de variable sans espace)&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
|Addition&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 + 2&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Soustraction&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 - 2&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|Multiplication&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 * 2&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|Division&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|3 / 2&lt;br /&gt;
|-&lt;br /&gt;
|( )&lt;br /&gt;
|Parenthèses à utiliser pour la priorité entre multiplication et addition. &lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|(2+3)*2&lt;br /&gt;
|-&lt;br /&gt;
|( )&lt;br /&gt;
|Parenthèses à utiliser autour d&#039;une condition pour la délimiter si elle est imbriquée dans une autre condition. &lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|($object-&amp;gt;weight &amp;gt; 0 ? 20 : 0 ) &amp;gt; 0 ? &#039;jaune&#039; : &#039;rouge&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;$&#039;&#039;&#039;nomtable&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;nomvar&lt;br /&gt;
|A utiliser si la variable nomvar est dans une table nomtable du code pouvant être appelée (ex : Attributs supplémentaires du module Produits)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|$object-&amp;gt;weight&lt;br /&gt;
|-&lt;br /&gt;
|;&lt;br /&gt;
|Pour séparer les expressions s&#039;il y en a plusieurs dans la même formule&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A + B&lt;br /&gt;
|&amp;quot;OU&amp;quot; logique (la condition A ou la condition B ou les deux doivent être vrais)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|isset($object-&amp;gt;weight) &amp;amp;&amp;amp; $object-&amp;gt;weight &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|A &amp;amp;&amp;amp; B&lt;br /&gt;
|&amp;quot;ET&amp;quot; logique (les conditions A et B doivent être vraies)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A == B&lt;br /&gt;
|Egalité logique (A doit être égal à B pour valider la condition)&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A &amp;gt; B&lt;br /&gt;
|A doit être strictement plus grand que B&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A &amp;lt; B&lt;br /&gt;
|A doit être strictement plus petit que B&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|X ? Y : Z&lt;br /&gt;
|Equivaut respectivement au &amp;quot;then&amp;quot; et au &amp;quot;else&amp;quot; de l&#039;expression &amp;quot;if X then Y else Z&amp;quot;. &lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|$object-&amp;gt;weight &amp;gt; 0 ? 20 : 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Fonction&lt;br /&gt;
!Rôle&lt;br /&gt;
!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|X ? Y : Z&lt;br /&gt;
|If X Then Y Else Z : si la condition X est satisfaite, appliquer Y, sinon appliquer Z. &lt;br /&gt;
|weight &amp;gt; 0 ? 2 * weight : 0 (si le poids est supérieur à zéro, renvoyer deux fois le poids, sinon renvoyer zéro). &lt;br /&gt;
|-&lt;br /&gt;
|isset(X)&lt;br /&gt;
|Vérifie si la variable X a une valeur définie.&lt;br /&gt;
|Si Poids = &amp;quot;&amp;quot; et Volume = 500 mL, le poids n&#039;a pas de valeur définie -&amp;gt; isset(Poids) = 0. &lt;br /&gt;
|-&lt;br /&gt;
|round(X,2)&lt;br /&gt;
|Arrondit la variable X à 2 chiffres après la virgule. &lt;br /&gt;
|round(2.564,2) = 2.56&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications&lt;br /&gt;
|PRIX CALCULES DYN.&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_quantity#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Qté achat minimum&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Taux TVA (pour ce produit/fournisseur)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Taux de taxe par défaut&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#weight#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Poids&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax1_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 1&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax2_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 2&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables en erreur==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#price_min#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Prix min&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#length#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Longueur&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#surface#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Surface&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Modifier prix par défaut -&amp;gt; Editeur d&#039;expression de prix&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Modifier prix par défaut -&amp;gt; Editeur d&#039;expression de prix&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produits -&amp;gt; Liste -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Modifier prix par défaut -&amp;gt; Editeur d&#039;expression de prix&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|isset($object-&amp;gt;weight) &amp;amp;&amp;amp; $object-&amp;gt;weight &amp;gt; 0 ?&lt;br /&gt;
round($object-&amp;gt;price_ttc / ($object-&amp;gt;weight_units == &#039;-3&#039; ? $object-&amp;gt;weight / 1000 : $object-&amp;gt;weight), 2) :&lt;br /&gt;
&lt;br /&gt;
(isset($object-&amp;gt;volume) &amp;amp;&amp;amp; $object-&amp;gt;volume &amp;gt; 0 ?&lt;br /&gt;
&lt;br /&gt;
round($object-&amp;gt;price_ttc / ($object-&amp;gt;volume_units == &#039;0&#039; ? $object-&amp;gt;volume / 1000 : $object-&amp;gt;volume), 2) :&lt;br /&gt;
&lt;br /&gt;
0)&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRODUITS&lt;br /&gt;
|Attributs supplémentaires&lt;br /&gt;
|Nouvel attribut&lt;br /&gt;
|Cette formule calcule le Prix au kg ou au L du produit. Elle permet de gérer si le produit est solide (au poids) ou liquide (au volume), gère aussi si l’unité est g (-3) ou kg (0), ou bien millilitre (0) ou litre (98), et fait un arrondi à 2 chiffre après la virgule.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63682</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63682"/>
		<updated>2025-07-08T16:43:37Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Exemples de formules fonctionnelles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Le calcul doit commencer par un price=, cependant ne rien indiquer fonctionne aussi. &lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
&lt;br /&gt;
price = #global_coefvente# * #cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Règles syntaxiques==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Caractère&lt;br /&gt;
!Rôle&lt;br /&gt;
|-&lt;br /&gt;
|price =&lt;br /&gt;
|A toujours placer au début de l&#039;expression (correspond à la variable calculée).&lt;br /&gt;
En alternative, ne rien indiquer fonctionne aussi. &lt;br /&gt;
|-&lt;br /&gt;
|#&lt;br /&gt;
|Pour signaler une variable (à placer au début et à la fin du nom de variable sans espace)&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|Multiplication&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|Division&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
|Addition&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Soustraction&lt;br /&gt;
|-&lt;br /&gt;
|;&lt;br /&gt;
|Pour séparer les expressions s&#039;il y en a plusieurs dans la même formule&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications&lt;br /&gt;
|PRIX CALCULES DYN.&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_quantity#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Qté achat minimum&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Taux TVA (pour ce produit/fournisseur)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Taux de taxe par défaut&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#weight#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Poids&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax1_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 1&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax2_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 2&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables en erreur==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#price_min#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Prix min&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#length#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Longueur&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#surface#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Surface&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63681</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63681"/>
		<updated>2025-07-08T16:42:34Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Utilisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Le calcul doit commencer par un price=, cependant ne rien indiquer fonctionne aussi. &lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
&lt;br /&gt;
price = #global_coefvente# * #cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Règles syntaxiques==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Caractère&lt;br /&gt;
!Rôle&lt;br /&gt;
|-&lt;br /&gt;
|price =&lt;br /&gt;
|A toujours placer au début de l&#039;expression (correspond à la variable calculée).&lt;br /&gt;
En alternative, ne rien indiquer fonctionne aussi. &lt;br /&gt;
|-&lt;br /&gt;
|#&lt;br /&gt;
|Pour signaler une variable (à placer au début et à la fin du nom de variable sans espace)&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|Multiplication&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|Division&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
|Addition&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Soustraction&lt;br /&gt;
|-&lt;br /&gt;
|;&lt;br /&gt;
|Pour séparer les expressions s&#039;il y en a plusieurs dans la même formule&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications&lt;br /&gt;
|PRIX CALCULES DYN.&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_quantity#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Qté achat minimum&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Taux TVA (pour ce produit/fournisseur)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Taux de taxe par défaut&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#weight#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Poids&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax1_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 1&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax2_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 2&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables en erreur==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#price_min#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Prix min&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#length#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Longueur&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#surface#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Surface&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63680</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63680"/>
		<updated>2025-07-08T16:41:24Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Règles syntaxiques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Règles syntaxiques==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Caractère&lt;br /&gt;
!Rôle&lt;br /&gt;
|-&lt;br /&gt;
|price =&lt;br /&gt;
|A toujours placer au début de l&#039;expression (correspond à la variable calculée).&lt;br /&gt;
En alternative, ne rien indiquer fonctionne aussi. &lt;br /&gt;
|-&lt;br /&gt;
|#&lt;br /&gt;
|Pour signaler une variable (à placer au début et à la fin du nom de variable sans espace)&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|Multiplication&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|Division&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
|Addition&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Soustraction&lt;br /&gt;
|-&lt;br /&gt;
|;&lt;br /&gt;
|Pour séparer les expressions s&#039;il y en a plusieurs dans la même formule&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications&lt;br /&gt;
|PRIX CALCULES DYN.&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_quantity#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Qté achat minimum&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Taux TVA (pour ce produit/fournisseur)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Taux de taxe par défaut&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#weight#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Poids&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax1_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 1&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax2_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 2&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables en erreur==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#price_min#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Prix min&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#length#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Longueur&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#surface#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Surface&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63679</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63679"/>
		<updated>2025-07-08T16:33:52Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Liste des variables utilisables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Règles syntaxiques==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Caractère&lt;br /&gt;
!Rôle&lt;br /&gt;
|-&lt;br /&gt;
|price =&lt;br /&gt;
|A toujours placer au début de l&#039;expression (correspond à la variable calculée).&lt;br /&gt;
|-&lt;br /&gt;
|#&lt;br /&gt;
|Pour signaler une variable (à placer au début et à la fin du nom de variable sans espace)&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|Multiplication&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|Division&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
|Addition&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Soustraction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications&lt;br /&gt;
|PRIX CALCULES DYN.&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_quantity#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Qté achat minimum&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Taux TVA (pour ce produit/fournisseur)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Taux de taxe par défaut&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#weight#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Poids&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax1_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 1&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax2_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 2&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables en erreur==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#price_min#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Prix min&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#length#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Longueur&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#surface#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Surface&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63678</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63678"/>
		<updated>2025-07-08T16:31:55Z</updated>

		<summary type="html">&lt;p&gt;Ted75: Ajout de variables utilisables et précision des variables en erreur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
== Règles syntaxiques ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Caractère&lt;br /&gt;
!Rôle&lt;br /&gt;
|-&lt;br /&gt;
|price =&lt;br /&gt;
|A toujours placer au début de l&#039;expression (correspond à la variable calculée). &lt;br /&gt;
|-&lt;br /&gt;
|#&lt;br /&gt;
|Pour signaler une variable (à placer au début et à la fin du nom de variable sans espace)&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|Multiplication&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|Division&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
|Addition&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Soustraction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications&lt;br /&gt;
|PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_quantity#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Qté achat minimum&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Taux TVA (pour ce produit/fournisseur)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#weight#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Poids&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#tva_tx#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Taux de taxe par défaut&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax1_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 1&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#localtax2_tx#&lt;br /&gt;
|Factures -&amp;gt; Factures fournisseur -&amp;gt; Liste -&amp;gt; choisir une facture&lt;br /&gt;
|Facture fournisseur&lt;br /&gt;
|Montant TVA calculé dans le Mode 2&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Liste des variables en erreur ==&lt;br /&gt;
Ne pas hésiter à compléter la liste.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Chemin IHM correspondant&lt;br /&gt;
!Onglet IHM correspondant&lt;br /&gt;
!Champ IHM correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix d&#039;achat&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#length#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Longueur&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#surface#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Produit&lt;br /&gt;
|Surface&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#price_min#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de vente&lt;br /&gt;
|Prix min&lt;br /&gt;
|Erreur inconnue &#039;24&#039; en v20.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63677</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63677"/>
		<updated>2025-07-08T16:02:37Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Onglet correspondant&lt;br /&gt;
!Champ correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien&lt;br /&gt;
*le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas. &lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d&#039;achat change, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63676</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63676"/>
		<updated>2025-07-08T16:01:02Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Exemples de formules fonctionnelles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Onglet correspondant&lt;br /&gt;
!Champ correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price =  #cost_price# * #global_coefvente#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien.&lt;br /&gt;
*le prix de vente TTC &#039;&#039;&#039;ne se recalcule pas&#039;&#039;&#039; dans la liste des produits, ni dans les commandes en cours, ni dans les nouvelles commandes.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, &#039;&#039;&#039;sur chaque produit dont le prix d&#039;achat change&#039;&#039;&#039;, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63675</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63675"/>
		<updated>2025-07-08T15:59:23Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Exemples de formules fonctionnelles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Onglet correspondant&lt;br /&gt;
!Champ correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coeff1#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price# * #global_coeff1#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #global_coefvente# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v20.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
*le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien.&lt;br /&gt;
*le prix de vente TTC &#039;&#039;&#039;ne se recalcule pas&#039;&#039;&#039; dans la liste des produits, ni dans les commandes en cours, ni dans les nouvelles commandes.&lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, &#039;&#039;&#039;sur chaque produit dont le prix d&#039;achat change&#039;&#039;&#039;, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63674</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63674"/>
		<updated>2025-07-08T15:55:14Z</updated>

		<summary type="html">&lt;p&gt;Ted75: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Onglet correspondant&lt;br /&gt;
!Champ correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coeff1#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #global_coefvente# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
* le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien.  &lt;br /&gt;
* le prix de vente TTC &#039;&#039;&#039;ne se recalcule pas&#039;&#039;&#039; dans la liste des produits, ni dans les commandes en cours, ni dans les nouvelles commandes.  &lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, &#039;&#039;&#039;sur chaque produit dont le prix d&#039;achat change&#039;&#039;&#039;, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63673</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63673"/>
		<updated>2025-07-08T15:53:49Z</updated>

		<summary type="html">&lt;p&gt;Ted75: /* Exemples de formules fonctionnelles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Onglet correspondant&lt;br /&gt;
!Champ correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Limitation importante&#039;&#039;&#039; : lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
- le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien.  &lt;br /&gt;
&lt;br /&gt;
- cependant, le prix de vente TTC &#039;&#039;&#039;ne se recalcule pas&#039;&#039;&#039; dans la liste des produits, ni dans les commandes en cours, ni dans les nouvelles commandes.  &lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, &#039;&#039;&#039;sur chaque produit dont le prix d&#039;achat change&#039;&#039;&#039;, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coeff1#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #global_coefvente# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63672</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63672"/>
		<updated>2025-07-08T15:53:28Z</updated>

		<summary type="html">&lt;p&gt;Ted75: Précision d&amp;#039;une limitation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental. Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers :  &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
*-1 = stable + deprecated&lt;br /&gt;
*0 = stable only (default)&lt;br /&gt;
*1 = stable + experimental&lt;br /&gt;
*&#039;&#039;&#039;2 = stable + experimental + development&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
==Liste des variables utilisables==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Onglet correspondant&lt;br /&gt;
!Champ correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exemples de formules fonctionnelles==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Limitation importante&#039;&#039;&#039; : lorsque le prix d&#039;achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :  &lt;br /&gt;
&lt;br /&gt;
- le prix de vente TTC dans l&#039;onglet Prix de vente du produit se recalcule bien.  &lt;br /&gt;
&lt;br /&gt;
- cependant, le prix de vente TTC &#039;&#039;&#039;ne se recalcule pas&#039;&#039;&#039; dans la liste des produits, ni dans les commandes en cours, ni dans les nouvelles commandes.  &lt;br /&gt;
&lt;br /&gt;
Pour provoquer le recalcul, il faut manuellement, &#039;&#039;&#039;sur chaque produit&#039;&#039;&#039;, aller dans Prix de vente -&amp;gt; Modifier prix par défaut -&amp;gt; cliquer sur Enregistrer sans rien changer.  &lt;br /&gt;
&lt;br /&gt;
Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.  &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coeff1#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #global_coefvente# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA.&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63671</id>
		<title>Module Prix dynamiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Prix_dynamiques&amp;diff=63671"/>
		<updated>2025-07-08T15:34:36Z</updated>

		<summary type="html">&lt;p&gt;Ted75: Ajout des noms de variables dans le code et de quelques exemples fonctionnels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Mahnwesen --&amp;gt;&lt;br /&gt;
[[en:Mahnwesen]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Prix Dynamiques]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Prix Dynamiques|&lt;br /&gt;
num=2200|&lt;br /&gt;
devdoc=[[Module Prix Dynamiques (développeur)]]|&lt;br /&gt;
userdoc=Cette page|}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ce module est expérimental.  &lt;br /&gt;
&lt;br /&gt;
Pour pouvoir l&#039;utiliser, il est nécessaire d&#039;activer &#039;&#039;&#039;MAIN_FEATURES_LEVEL=2&#039;&#039;&#039; dans Accueil -&amp;gt; Configuration -&amp;gt; Divers : &lt;br /&gt;
&lt;br /&gt;
Level of features to show: &lt;br /&gt;
&lt;br /&gt;
* -1 = stable + deprecated&lt;br /&gt;
* 0 = stable only (default)&lt;br /&gt;
* 1 = stable + experimental&lt;br /&gt;
* 2 = stable + experimental + development&lt;br /&gt;
&lt;br /&gt;
Attention, des bugs peuvent être présents.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Reconnaissons-le, c&#039;est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu&#039;il peut faire des choses très particulières...&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est le  cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).&lt;br /&gt;
&lt;br /&gt;
Mais comment qu&#039;on fait ? Il faut déjà accéder à l&#039;éditeur d&#039;expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l&#039;onglet &amp;quot;prix de vente&amp;quot; et demander à modifier le prix par défaut, on a alors le bouton &amp;quot;Editeur d&#039;expression de prix&amp;quot; tant attendu.&lt;br /&gt;
&lt;br /&gt;
On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit &#039;Nouveau&#039;, on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).&lt;br /&gt;
&lt;br /&gt;
Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d&#039;intérêt qui sont les champs de l&#039;objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...&lt;br /&gt;
&lt;br /&gt;
Mais en gros le calcul doit finir par un price=&lt;br /&gt;
&lt;br /&gt;
Exemple, indexer le prix de vente sur le coût de revient :&lt;br /&gt;
price=#global_coefvente#*#cost_price#&lt;br /&gt;
&lt;br /&gt;
où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l&#039;onglet prix d&#039;achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s&#039;il commence par global_ où il se réfère à un paramètre configuré pour le module.&lt;br /&gt;
&lt;br /&gt;
Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.&lt;br /&gt;
&lt;br /&gt;
== Liste des variables utilisables ==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom de la variable dans le code&lt;br /&gt;
!Onglet correspondant&lt;br /&gt;
!Champ correspondant&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|#global_NOMVARIABLE#&lt;br /&gt;
|Accueil -&amp;gt; Configuration -&amp;gt; Modules/Applications -&amp;gt; PRIX CALCULES DYNAMIQUEMENT&lt;br /&gt;
|Variable globale NOMVARIABLE&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. &lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#supplier_min_price_with_discount#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix quantité min. * ( 1 - Remise pour cette qté. )&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#pmp#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix moyen pondéré (PMP)&lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|#cost_price#&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Produits | Services -&amp;gt; Produit -&amp;gt; choisir le produit -&amp;gt; Prix d&#039;achat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Prix de revient&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Exemples de formules fonctionnelles ==&lt;br /&gt;
Ne pas hésiter à compléter la liste. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante&#039;&#039;&#039; &#039;&#039;&#039;1&#039;&#039;&#039; : pour le calcul d&#039;un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note importante 2&#039;&#039;&#039; : la liste des produits ne s&#039;actualise pas avec le prix de vente TTC calculé automatiquement par la formule. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Formule&lt;br /&gt;
!Usage&lt;br /&gt;
!Testé dans la version Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
|price = #supplier_min_price_with_discount# * #global_coeff1#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix d&#039;achat HT, de la remise produit, de la marge globale et de la TVA. &lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #global_coefvente# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA. &lt;br /&gt;
|v19.0.2&lt;br /&gt;
|-&lt;br /&gt;
|price = #pmp# * #cost_price#&lt;br /&gt;
|Calcul du prix de vente TTC à partir du prix moyen pondéré, de la marge globale et de la TVA. &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ToComplete}}&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:Accueil_-_Configuration_-_Divers.png&amp;diff=63670</id>
		<title>File:Accueil - Configuration - Divers.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:Accueil_-_Configuration_-_Divers.png&amp;diff=63670"/>
		<updated>2025-07-08T15:02:29Z</updated>

		<summary type="html">&lt;p&gt;Ted75: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Accueil - Configuration - Divers&lt;/div&gt;</summary>
		<author><name>Ted75</name></author>
	</entry>
</feed>