SmartExpressions : Différence entre versions
(36 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 90 : | Ligne 90 : | ||
<li> 1 - Date à traiter (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")</li> | <li> 1 - Date à traiter (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")</li> | ||
<li> 2 - Un nombre entier (positif ou négatif) </li> | <li> 2 - Un nombre entier (positif ou négatif) </li> | ||
− | <li> 3 - L'unité sous forme d'une chaîne de caractères parmi : "year"; "month"; "day"; "hour"; "minute"; "second"</li> | + | <li> 3 - L'unité sous forme d'une chaîne de caractères parmi : "year"; "month"; "day"; "hour"; "minute"; "second". <br/> |
+ | + Unité spéciale pour la France et ses territoires : "jour_ouvrable", "jour_ouvré", "jour_franc", "mois_franc" (tenant compte des jours fériés Français) <br/> | ||
+ | + Mais aussi l'unité particulière `month_quant` qui correspond à une règle administrative courante dîtes de "mois de même quantième". On parle par exemple d'un délais de 3 mois au même quantième. Cela signifie que l'on avance de 3 mois et que le jour de destination doit être le même que celui de départ (Ex: 15 Mars + 3 mois = 15 juin). Néanmoins, cette unité prend aussi en compte le fait que si la date de destination n'existe pas (ex: 31 Aout + 1 mois), alors on renvoie le dernier jour du mois de destination (= ici le 30 Septembre). | ||
+ | |||
+ | </li> | ||
+ | <li> 4 - '''''(facultatif)''''' La zone géographique qui doit être utilisée pour calculer les jours fériés (utile uniquement pour le calcul des jours spéciaux tel que ''jour_ouvré'' etc.). À choisir parmi : ''Métropole, Alsace-Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle-Calédonie, La Réunion, | ||
+ | Polynésie Française, Saint-Barthélémy, Saint-Martin, Wallis-et-Futuna, Saint-Pierre-et-Miquelon''. | ||
+ | </li> | ||
</ul> | </ul> | ||
Ligne 101 : | Ligne 108 : | ||
Ou avec une valeur négative, pour soustraire 3 ans par exemple : | Ou avec une valeur négative, pour soustraire 3 ans par exemple : | ||
<p> ▷ <code>date_sum(DATE_SIGNATURE, -3, "year")</code> => renvoie <code>12/05/2017</code> </p> | <p> ▷ <code>date_sum(DATE_SIGNATURE, -3, "year")</code> => renvoie <code>12/05/2017</code> </p> | ||
+ | </div> | ||
+ | |||
+ | <div> | ||
+ | Avec un calcul de jour ouvré (ajout de 4 jours ouvrés à la date de signature en tenant compte des jours fériés de l'Alsace-Moselle) : | ||
+ | <p> ▷ <code>date_sum(DATE_SIGNATURE, 4, "jour_ouvré", "Alsace-Moselle")</code> => renvoie <code>18/05/2017</code> (car il saute le week-end) </p> | ||
+ | </div> | ||
+ | |||
+ | </div> | ||
+ | |||
+ | <div style="margin-left: 30px"> | ||
+ | <p><b style="color: #777;">Pour aller plus loin :</b></p> | ||
+ | <div>Dans les exemples précédents, la seule variable était ''DATE_SIGNATURE'' (avec pour valeur ''12/05/2020''). Cependant, comme dans toute SmartExpression, les valeurs statiques (nombre, chaîne…) peuvent toujours être substituées par une valeur variable. Pour l'exemple, on aurait très bien pu utiliser deux autres variables et les utiliser dans le <code>date_sum(…)</code>. Par exemple, avec <code>AJOUT_NUM</code> qui vaudrait 3 (issue d'un champ numérique), et la variable <code>AJOUT_UNITÉ</code> qui vaudrait <code>day</code> (issue d'un champ de choix par exemple), : | ||
+ | <p> ▷ <code>date_sum(DATE_SIGNATURE, AJOUT_NUM, AJOUT_UNITÉ)</code> => renvoie <code>15/05/2020</code> </p> | ||
</div> | </div> | ||
</div> | </div> | ||
Ligne 125 : | Ligne 145 : | ||
# Fonction : <code>date_diff</code> | # Fonction : <code>date_diff</code> | ||
# Nombre de paramètres : <code>3</code> | # Nombre de paramètres : <code>3</code> | ||
− | + | <ul style="margin-left:50px"> | |
+ | <li> 1 - Date de départ (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")</li> | ||
+ | <li> 2 - Date de fin (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")</li> | ||
+ | <li> 3 - L'unité dans laquelle renvoyer la différence entre les deux dates. L'unité est fournie sous la forme d'une chaîne de caractères parmi : "year"; "month"; "day"; "hour"; "minute"; "second". <br/> | ||
+ | + Unité spéciale pour la France et ses territoires : "jour_ouvrable", "jour_ouvré" <br/> | ||
+ | </li> | ||
+ | <li> 4 - '''''(facultatif)''''' La zone géographique qui doit être utilisée pour calculer les jours fériés (utile uniquement pour le calcul des jours spéciaux tel que ''jour_ouvré'' etc.). À choisir parmi : ''Métropole (par défaut), Alsace-Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle-Calédonie, La Réunion, | ||
+ | Polynésie Française, Saint-Barthélémy, Saint-Martin, Wallis-et-Futuna, Saint-Pierre-et-Miquelon''. | ||
+ | </li> | ||
+ | </ul> | ||
Renvoie un nombre (valeur absolue) correspondant à la différence, entre la Date de début et la Date de fin, dans l'unité spécifiée. | Renvoie un nombre (valeur absolue) correspondant à la différence, entre la Date de début et la Date de fin, dans l'unité spécifiée. | ||
+ | Notez que la date de fin n'est généralement pas inclue dans la comptage de la différence. | ||
+ | |||
<div style="margin-left: 30px"> | <div style="margin-left: 30px"> | ||
<p><b style="color: #777;">Par exemple :</b></p> | <p><b style="color: #777;">Par exemple :</b></p> | ||
Ligne 133 : | Ligne 164 : | ||
<p> ▷ <code>date_diff(DATE_SIGNATURE,"20-09-2004","year")</code> => renvoie <code>15</code> car 15 années se sont écoulées <br/> | <p> ▷ <code>date_diff(DATE_SIGNATURE,"20-09-2004","year")</code> => renvoie <code>15</code> car 15 années se sont écoulées <br/> | ||
▷ <code>date_diff("20-09-2004",DATE_SIGNATURE, "year")</code> => renvoie aussi <code>15</code> (la valeur est absolue, peu importe l'ordre des dates) <br/> | ▷ <code>date_diff("20-09-2004",DATE_SIGNATURE, "year")</code> => renvoie aussi <code>15</code> (la valeur est absolue, peu importe l'ordre des dates) <br/> | ||
− | ▷ <code>date_diff("20-09-2004",DATE_SIGNATURE, "day")</code> => renvoie <code>5732</code> (le nombre total de jour entre les deux dates) | + | ▷ <code>date_diff("20-09-2004",DATE_SIGNATURE, "day")</code> => renvoie <code>5732</code> (le nombre total de jour entre les deux dates) <br/> |
+ | ▷ <code>date_diff("01-05-2020","31-05-2020", "day")</code> => renvoie <code>30</code> (le nombre total de jour entre le 01 et le 31 Mai, le 31 Mai n'étant pas inclu). <br/> | ||
+ | ▷ <code>date_diff("01-05-2020","31-05-2020", "jour_ouvré")</code> => renvoie <code>18</code> (le nombre de jours ouvrés entre le 01 et le 31 Mai 2020). <br/> | ||
+ | ▷ <code>date_diff("01-05-2020","31-05-2020", "jour_ouvré", "Martinique")</code> => renvoie <code>17</code> (le nombre de jours ouvrés entre le 01 et le 31 Mai 2020 en Martinique, car contrairement à la Métropole, le 22 Mai est aussi férié). <br/> | ||
+ | |||
</p> | </p> | ||
</div> | </div> | ||
Ligne 165 : | Ligne 200 : | ||
<p>Par exemple : <code>date_month(DATE_SIGNATURE)</code></p> | <p>Par exemple : <code>date_month(DATE_SIGNATURE)</code></p> | ||
+ | |||
+ | ===== Connaître le jour de la semaine ===== | ||
+ | |||
+ | # Fonction : <code>date_weekday</code> , renvoie la valeur numérique du jour de la semaine (1 pour lundi, 7 pour dimanche). | ||
+ | |||
+ | # Nombre de paramètres : <code>1</code> | ||
+ | # Paramètres attendus : Une date | ||
+ | |||
+ | <p>Par exemple : <code>date_weekday(DATE_SIGNATURE)</code> => Renvoie 1 pour lundi, 2 pour mardi…, 6 pour samedi, 7 pour dimanche</p> | ||
+ | |||
+ | ===== Savoir si le jour est ouvrable, ouvré, ou férié ===== | ||
+ | |||
+ | # Fonction : <code>day_is</code> , renvoie un booléen (VRAI ou FAUX) si la date est du type demandé. | ||
+ | |||
+ | # Paramètres attendus : <code>2</code> ou <code>3</code> | ||
+ | <ul style="margin-left:50px"> | ||
+ | <li> 1 - La date questionnée (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")</li> | ||
+ | <li> 2 - Le type de jour demandée parmi : <code>weekend</code>, <code>ouvré</code>, <code>ouvrable</code>, <code>férié</code></li> | ||
+ | <li> 3 - '''''(facultatif)''''' La zone géographique qui doit être utilisée pour calculer les jours fériés (utile uniquement pour le calcul des jours spéciaux tel que ''jour_ouvré'' etc.). À choisir parmi : ''Métropole (par défaut), Alsace-Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle-Calédonie, La Réunion, | ||
+ | Polynésie Française, Saint-Barthélémy, Saint-Martin, Wallis-et-Futuna, Saint-Pierre-et-Miquelon''. | ||
+ | </li> | ||
+ | </ul> | ||
+ | |||
+ | <div style="margin-left: 30px"> | ||
+ | <p><b style="color: #777;">Par exemple :</b></p> | ||
+ | <p> ▷ <code>day_is("25-12-2021", "férié")</code> => renvoie <code>TRUE</code> car le jour de Noël est férié<br/> | ||
+ | ▷ <code>day_is("26-12-2021", "férié")</code> => renvoie <code>FALSE</code><br/> | ||
+ | ▷ <code>day_is("26-12-2021", "weekend")</code> => renvoie <code>TRUE</code> car ce jour est un dimanche.<br/> | ||
+ | ▷ <code>day_is("23-12-2021", "ouvré")</code> => renvoie <code>TRUE</code> car ce jour est un jeudi, non-férié.<br/> | ||
+ | ▷ <code>day_is("22-05-2021", "ouvré")</code> => renvoie <code>TRUE</code> car ce jour est un vendredi, non-férié (en Métropole du moins).<br/> | ||
+ | ▷ <code>day_is("22-05-2021", "ouvré", "Martinique")</code> => renvoie <code>FALSE</code> car ce jour est férié en Martinique contrairement à la Métropole.<br/> | ||
+ | </p> | ||
+ | </div> | ||
===== changer le format d'une date ===== | ===== changer le format d'une date ===== | ||
Ligne 180 : | Ligne 248 : | ||
''Introduction : notez bien que les traitements sur les nombres peuvent être effectués aussi bien sur des variables que sur d'autres dynvars'' | ''Introduction : notez bien que les traitements sur les nombres peuvent être effectués aussi bien sur des variables que sur d'autres dynvars'' | ||
− | ===== | + | |
+ | ===== Arrondir un nombre en choisissant le nombre de chiffres souhaités après la virgule ===== | ||
# Fonction : <code>round</code> | # Fonction : <code>round</code> | ||
Ligne 187 : | Ligne 256 : | ||
''La fonction enregistre le premier nombre, puis l'arrondit en fonction du deuxième paramètre'' | ''La fonction enregistre le premier nombre, puis l'arrondit en fonction du deuxième paramètre'' | ||
− | La méthode utilisée est celle de l'arrondi | + | <p>La méthode utilisée est celle de l'arrondi [https://fr.wikipedia.org/wiki/Arrondi_(math%C3%A9matiques)#Arrondi_au_plus_proche_ou_arrondi_arithm%C3%A9tique arithmétique].</p> |
<p>Par exemple :</p> | <p>Par exemple :</p> | ||
Ligne 193 : | Ligne 262 : | ||
<code>round(PRIX_ACHAT, 3)</code> | <code>round(PRIX_ACHAT, 3)</code> | ||
− | ===== | + | |
+ | |||
+ | ===== Arrondir un nombre entier à l'entier inférieur ===== | ||
# Fonction : <code>floor</code> | # Fonction : <code>floor</code> | ||
Ligne 205 : | Ligne 276 : | ||
<code>floor(PRIX_ACHAT)</code> | <code>floor(PRIX_ACHAT)</code> | ||
− | ===== | + | |
+ | |||
+ | ===== Arrondir un nombre entier à l'entier supérieur ===== | ||
# Fonction : <code>ceil</code> | # Fonction : <code>ceil</code> | ||
Ligne 216 : | Ligne 289 : | ||
<p>Pour arrondir un prix d'achat à l'entier supérieur</p> | <p>Pour arrondir un prix d'achat à l'entier supérieur</p> | ||
<code>ceil(PRIX_ACHAT)</code> | <code>ceil(PRIX_ACHAT)</code> | ||
+ | |||
+ | |||
+ | |||
+ | ===== Tronquer le nombre de décimale (sans arrondir) ===== | ||
+ | |||
+ | # Fonction : <code>truncate</code> | ||
+ | # Nombre de paramètres : <code>1</code> | ||
+ | # Paramètres attendus : Deux nombres. Le premier est la valeur à tronquer (ex: 3.1415) et le second est le nombre de décimale à garder après la virgule (Ex: 2). | ||
+ | |||
+ | ''La fonction va tronquer les décimales au nombre de décimales indiqué dans le second paramètre.'' | ||
+ | |||
+ | <p>Par exemple :<br/> | ||
+ | Avec PRIX_ACHAT qui est issu d'un calcul et vaut 1.336666, alors <code>truncate(PRIX_ACHAT, 2)</code> vaudra <code>1.33</code>. | ||
+ | </p> | ||
+ | |||
+ | |||
+ | ===== Valeur absolue ===== | ||
+ | |||
+ | # Fonction : <code>abs</code> | ||
+ | # Nombre de paramètres : <code>1</code> | ||
+ | # Paramètres attendus : le nombre (positif ou négatif) à convertir en valeur absolue. | ||
+ | |||
+ | ''La fonction va permettre de ramener les nombres négatifs à leur valeur positive (nombre absolu).'' | ||
+ | |||
+ | <p>Par exemple :<br/> | ||
+ | Avec une variable VARIATION qui est issu d'un calcul et qui vaut -6.34, alors <code>abs(VARIATION)</code> vaudra <code>6.34</code>. | ||
+ | </p> | ||
+ | |||
+ | |||
+ | ===== Minimum ou Maximum ===== | ||
+ | |||
+ | # Fonction : <code>max</code> ou <code>min</code> | ||
+ | # Nombre de paramètres : <code>2</code> | ||
+ | # Paramètres attendus : les deux nombres à comparer. | ||
+ | |||
+ | ''La fonction va permettre de renvoyer la valeur maximale (ou minimale) entre le paramètre 1 et 2.'' | ||
+ | |||
+ | <p>Par exemple :<br/> | ||
+ | : - <code>max(-6, 55)</code> vaut <code>55</code>. | ||
+ | : - <code>max(100, 8)</code> vaut <code>100</code>. | ||
+ | : - <code>min(100, 8)</code> vaut <code>8</code>. | ||
+ | : - <code>min(-99, 300)</code> vaut <code>-99</code>. | ||
+ | </p> | ||
+ | |||
+ | |||
+ | |||
+ | ===== Formater un nombre en chaîne de caractère ===== | ||
+ | |||
+ | # Fonction : <code>numFormat</code> | ||
+ | # Nombre de paramètres : <code>4</code> mais seulement le 1er est obligatoire. | ||
+ | # Paramètres : | ||
+ | ## - (numérique) le nombre à formater (obligatoire) | ||
+ | ## - (numérique) le nombre de décimales à forcer (par défaut, le nombre de décimale d'origine) | ||
+ | ## - (string) le caractère pour le séparateur des milliers (ex: <code>","</code> ou <code>" "</code>, ou <code>""</code> etc.). Par défaut: <code>" "</code>. | ||
+ | ## - (string) le caractère pour le séparateur de l'entier/décimale (ex: <code>"."</code> ou <code>","</code> etc.). Par défaut: <code>","</code> | ||
+ | |||
+ | |||
+ | ''La fonction va permettre de formater un nombre, par exemple pour faire apparaitre des séparateurs de milliers, ou personnaliser les décimales etc.''<br/> | ||
+ | ''Le fonctionnement est très similaire au traitement <code>:num-format</code> des SmartDocs.'' | ||
+ | |||
+ | |||
+ | Par exemple : | ||
+ | : - <code>numFormat(1003.1415, 2)</code> vaut <code>1 003,14</code>. | ||
+ | : - <code>numFormat(8133003.1415, 0)</code> vaut <code>8 133 003</code>. | ||
+ | : - <code>numFormat(3500)</code> vaut <code>3 500</code>. | ||
+ | : - <code>numFormat(3500.999)</code> vaut <code>3 500,999</code>. | ||
+ | : - <code>numFormat(3000.50, 4, ',', '.')</code> vaut <code>3,500.5000</code>. | ||
==== Fonctions sur les Chaînes de caractères ==== | ==== Fonctions sur les Chaînes de caractères ==== | ||
− | |||
− | # Fonction : <code> | + | ===== Compter le nombre de caractères d'une chaîne ===== |
− | # Nombre de paramètres : <code> | + | |
− | # Paramètres attendus : Une Chaîne de caractères ([[DataStore|string]]) | + | # Fonction : <code>stringLength</code> |
+ | # Nombre de paramètres : <code>1</code> | ||
+ | # Paramètres attendus : Une Chaîne de caractères ([[DataStore|string]]). | ||
− | <p>'' | + | <p>''Renvoie le nombre de caractère de la chaîne.''<br/> |
− | <p> | + | :: Exemple : <code>stringLength('Hercule !')</code> renvoie <code>9</code> ''(entier numérique)''. </p> |
+ | :: <p>Les espaces ou les sauts de lignes comptent aussi pour 1 caractère, même s'ils apparaissent en début ou en fin de la chaîne.</p> | ||
+ | :: <p>Spécial : si la valeur passée en paramètre est une valeur numérique, la fonction renverra le nombre de "digit" de ce nomnre. <br/>Ex : Avec <code>CODE_POSTAL</code> qui vaut <code>34700</code> (entier numérique), alors <code>stringLength(CODE_POSTAL)</code> renvoie <code>5</code>. </p> | ||
+ | :: <p>Si par contre la valeur passée en paramètre est d'un autre type (exemple : une liste, un booléen), ces types n'étant pas pris en charge, la fonction renverra systématiquement <code>0</code>.</p> | ||
− | |||
− | |||
===== Trouver si une chaîne de caractères commence par une autre chaîne de caractères ===== | ===== Trouver si une chaîne de caractères commence par une autre chaîne de caractères ===== | ||
Ligne 248 : | Ligne 390 : | ||
<p>''La première chaîne de caractères est la chaîne dans laquelle rechercher, la deuxième chaîne de caractère est la chaîne à rechercher''</p> | <p>''La première chaîne de caractères est la chaîne dans laquelle rechercher, la deuxième chaîne de caractère est la chaîne à rechercher''</p> | ||
<p>''La Dynvar paramétrée avec cette fonction vaudra TRUE si la chaîne du premier paramètre se finit par la chaîne du second paramètre''</p> | <p>''La Dynvar paramétrée avec cette fonction vaudra TRUE si la chaîne du premier paramètre se finit par la chaîne du second paramètre''</p> | ||
+ | |||
+ | |||
+ | ===== Un élément en contient-il un autre ? ===== | ||
+ | |||
+ | # Fonction : <code>contains</code> | ||
+ | # Nombre de paramètres : <code>2</code> | ||
+ | # Paramètres attendus : | ||
+ | ::::1er paramètre : une Chaine A ([[DataStore|string]]) ou une Liste ([[DataStore|list]]) | ||
+ | ::::Paramètre 2 : une chaîne B ([[DataStore|string]]) | ||
+ | |||
+ | <p>Si le 1er paramètre est une chaîne : renvoie VRAI si la chaîne A contient la chaîne B.</p> | ||
+ | <p>Si le 1er paramètre est une liste : renvoie VRAI si la liste contient la valeur B correspondante à la chaîne B.</p> | ||
+ | <p>Si le 1er paramètre est <code>null</code> ou d'un autre format non-attendu (booléen, nombre…) : la fonction renverra <code>null</code> par défaut.</p> | ||
+ | |||
+ | <div style="margin-left: 30px"> | ||
+ | <p><b style="color: #777;">Exemple :</b></p> | ||
+ | <p>Soit une chaîne NUM_FACTURE correspondant à un numéro de facture tel que : '2020F01'. <br/> | ||
+ | Et soit une Liste HOBBIES correspondants à 3 choix : <code>["sport", "cinema", "music"]</code> (saisis par exemple via un champ de choix multiple). | ||
+ | <p> ▷ <code>contains(NUM_FACTURE,"F")</code> => renvoie <code>VRAI</code> car la chaine "2020F01" contient la chaine "F" <br/> | ||
+ | ▷ <code>contains(NUM_FACTURE,"2020F")</code> => renvoie <code>VRAI</code> car la chaine "2020F01" contient aussi la chaine "2020F" <br/> | ||
+ | ▷ <code>contains(NUM_FACTURE,"20 Euros")</code> => renvoie <code>FALSE</code> car la chaine "2020F01" ne contient pas "20 Euros" <br/> | ||
+ | ▷ <code>contains(HOBBIES,"cinema")</code> => renvoie <code>VRAI</code> et c'est d'ailleurs le 2ème élément <br/> | ||
+ | ▷ <code>contains(HOBBIES,"cine")</code> => renvoie <code>FALSE</code> car aucun élément est exactement nommé "cine" parmi ceux de la liste <br/> | ||
+ | </p> | ||
+ | </div> | ||
===== Tronquer une chaîne de caractères ===== | ===== Tronquer une chaîne de caractères ===== | ||
Ligne 271 : | Ligne 438 : | ||
<p>La Dynvar ainsi paramétrée vaudra "rcule"</p> | <p>La Dynvar ainsi paramétrée vaudra "rcule"</p> | ||
− | ==== Fonctions sur les | + | ===== Connaître la position d'une sous-chaîne ===== |
+ | |||
+ | # Fonction : <code>stringPos</code> | ||
+ | # Nombre de paramètres : 2 obligatoires, et un dernier facultatif.</code> | ||
+ | # Paramètres attendus : | ||
+ | ## La chaîne de caractères dans laquelle rechercher. (Ex: <code>"Maison d'été"</code>) | ||
+ | ## La chaîne de caractères (ou simplement le caractère) à rechercher (Ex: la lettre <code>"n"</code>) | ||
+ | ## (Optionnel) un nombre entier correspondant à la position de début de recherche. S'il est omis, zéro sera utilisé. Une position négative compte à partir de la fin de la chaîne de caractères n°1. | ||
+ | |||
+ | Notez que le premier caractère est comptabilisé comme à la position n°0. | ||
+ | |||
+ | Ex: <code>stringPos("Maison d'été", "n")</code> va retourner 5 car la lettre <code>n</code> se trouve à la 5ème position de la chaîne fournie (la lettre <code>M</code> étant comptée comme la position n°0) | ||
+ | |||
+ | Ex: <code>stringPos("Maison d'été", "été")</code> va retourner 9 car le terme <code>été</code> se trouve à la 9ème position de la chaîne fournie. | ||
+ | |||
+ | Ex: <code>stringPos("Blablabla", "a", 3)</code> va retourner 5 car, si on omet les 3 premiers caractères, la prochaine lettre <code>a</code> se trouve à la 5ème position de la chaîne fournie. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Tronquer la chaîne avec tout ce qui est "avant" une sous-chaîne ===== | ||
+ | |||
+ | # Fonction : <code>stringBefore</code> | ||
+ | # Nombre de paramètres : 1 obligatoire, 1 facultatif.</code> | ||
+ | # Paramètres attendus : | ||
+ | ## La chaîne de caractères dans laquelle rechercher. | ||
+ | ## (Optionnel) La chaîne de caractères (ou simplement le caractère) à partir duquel il faut tronquer. Si rien n'est précisé, le caractère <code>,</code> sera utilisé. | ||
+ | |||
+ | Ex: <code>stringBefore("Maison d'été", " ")</code> va retourner <code>Maison</code> car on lui demande de ne retourner que ce qui est avant l'espace. | ||
+ | |||
+ | Ex: <code>stringBefore("Damien, Jean, Paul")</code> va retourner <code>Damien</code> car on lui demande de ne retourner que ce qui est avant la virgule (la virgule étant la valeur par défaut du second paramètre quand il n'est pas précisé). | ||
+ | |||
+ | |||
+ | ===== Tronquer la chaîne avec tout ce qui est "après" une sous-chaîne ===== | ||
+ | |||
+ | # Fonction : <code>stringAfter</code> | ||
+ | # Nombre de paramètres : 1 obligatoire, 1 facultatif.</code> | ||
+ | # Paramètres attendus : | ||
+ | ## La chaîne de caractères dans laquelle rechercher. | ||
+ | ## (Optionnel) La chaîne de caractères (ou simplement le caractère) jusqu'auquel il faut tronquer. Si rien n'est précisé, le caractère <code>,</code> sera utilisé. | ||
+ | |||
+ | Ex: <code>stringAfter("Maison d'été", " ")</code> va retourner <code>d'été</code> car on lui demande de ne retourner que ce qui est après l'espace. | ||
+ | |||
+ | Ex: <code>stringAfter("Damien, Jean, Paul")</code> va retourner <code> Jean, Paul</code> car on lui demande de ne retourner que ce qui est après la virgule (la virgule étant la valeur par défaut du second paramètre quand il n'est pas précisé). | ||
+ | |||
+ | |||
+ | ===== Rechercher et remplacer dans une chaîne ===== | ||
+ | |||
+ | # Fonction : <code>stringReplace</code> | ||
+ | # Nombre de paramètres : 2 obligatoires, 1 facultatif.</code> | ||
+ | # Paramètres attendus : | ||
+ | ## La chaîne de caractères dans laquelle rechercher et remplacer ; | ||
+ | ## La chaîne de caractères de remplacement (celle qui sera "insérée") ; | ||
+ | ## (Optionnel) La chaîne de caractères qui sera recherchée (celle qui sera remplacée). Par défaut, si rien n'est précisé, ce sont des sauts de ligne (<code>\n</code>) qui seront recherchés. | ||
+ | |||
+ | Ex: <code>stringReplace("Damien", "F", "D")</code> va retourner <code>Famien</code> car on lui demande de remplacer <code>D</code> par <code>F</code> dans la chaîne <code>Damien</code>. | ||
+ | |||
+ | Ex: par exemple une variable ADDRESS qui contient une adresse postale sur plusieurs lignes, <code>stringReplace(ADDRESS, ", ")</code> va permettre de la renvoyer sur une seule et même ligne (séparée par des virgules). Le troisième paramètre n'est pas précisé car par défaut, ce sont des sauts de ligne qui sont recherchés et remplacés. | ||
+ | |||
+ | A l'inverse, pour remplacer des virgules par des sauts de ligne, il faudra écrire l'expression de cette façon : <code>stringReplace(ADDRESS, "\n", ",")</code>. | ||
+ | |||
+ | ==== Fonctions sur des listes ==== | ||
+ | |||
+ | ===== Obtenir la valeur d'un élément d'une liste à partir d'une clé ===== | ||
+ | |||
+ | # Fonction : <code>get_value</code> | ||
+ | # Nombre de paramètres : <code>2 ou 3</code> | ||
+ | # Paramètres attendus : | ||
+ | ## - Une variable de type [[DataStore|List]] ; | ||
+ | ## - La clé à cibler ; | ||
+ | ## - Dans le cas d'une liste "structurée" (issue d'un [[Repeaters|Repeater]] par exemple), on peut préciser le nom de la sous-variable à renvoyer. | ||
+ | |||
+ | ::'''Cas pratique''' | ||
+ | ::<p>Cas d'une liste EMPLOYES, utilisée dans un Repeater, dont chaque élément défini 3 sous-variables: <code>EMPLOYES.NOM</code>, <code>EMPLOYES.DATE_ENTREE</code>, <code>EMPLOYES.SALAIRE</code>. <br/> | ||
+ | ::::Ceci étant, l'utilisateur a renseigner dans un formulaire 2 fiches correspondante à EMPLOYES. Elles ont respectivement les clés '_abc123' et '_xyz987' : | ||
+ | </p> | ||
+ | <pre> | ||
+ | [ | ||
+ | '_abc123' => [ 'NOM': 'Jean', 'DATE_ENTREE': '13-08-2020', 'SALAIRE': 32000.00 , | ||
+ | '_xyz987' => [ 'NOM': 'Sylvie', 'DATE_ENTREE': '11-12-2019', 'SALAIRE': 39500.00 | ||
+ | ] | ||
+ | </pre> | ||
+ | |||
+ | ::'''Usage''' | ||
+ | <p> | ||
+ | ::::- <code>get_value(EMPLOYES, '_abc123', 'NOM')</code> => va renvoyer "Jean" <br/> | ||
+ | ::::- <code>get_value(EMPLOYES, '_xyz987', 'SALAIRE')</code> => va renvoyer <code>39500.0</code> | ||
+ | </p> | ||
+ | |||
+ | <p> | ||
+ | ::Mais là où cette fonction prend tout son intérêt, c'est quand le second paramètre est dynamique, c'est à dire qu'il est fourni au travers d'une variable.<br/> | ||
+ | ::Prenons par exemple, une variable "MEILLEUR_EMPLOYE", qui serait utilisée dans un formulaire avec un champ "choice-list", et qui prendra pour valeur la clé correspondante au meilleur employé de l'entreprise (= c'est à dire '_abc123' ou '_xyz987' dans notre exemple). | ||
+ | <br/> | ||
+ | ::::- <code>get_value(EMPLOYES, MEILLEUR_EMPLOYE, 'SALAIRE')</code> => va renvoyer le salaire du meilleur employé selon le choix effectué.<br/> | ||
+ | </p> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Obtenir la valeur d'un élément d'une liste à partir de son index ===== | ||
+ | |||
+ | # Fonction : <code>get_value_by_index</code> | ||
+ | # Nombre de paramètres : <code>2</code> | ||
+ | # Paramètres attendus : | ||
+ | ## - Une variable de type [[DataStore|List]] ; | ||
+ | ## - L'index de l'élément à retourner (1,2,3…) | ||
+ | |||
+ | |||
+ | :: Cette fonction est similaire au <code>get_value</code> mais en utilisant l'index de l'élément au lieu de sa clé. | ||
+ | :: Le paramètre `index` peut être fourni au travers d'une variable ou directement "en dur". | ||
+ | |||
+ | :::: '''''Exemple sans variable''''' : <code>get_value_by_index(EMPLOYES, 3)</code> | ||
+ | :::: '''''Exemple avec variable''''' : <code>get_value_by_index(EMPLOYES, INDEX_MEILLEUR_EMPLOYE)</code> | ||
+ | |||
+ | |||
+ | :: Notez que dans le cas d'une liste structuré, l'élément retourné sera lui même une liste avec des sous-variables. Il faudra donc parfois combiner cette fonction avec un `get_value` : | ||
+ | :: '''''Exemple''''' : Obtenir le <code>NOM</code> du 3ème employé de la liste <code>EMPLOYES</code> : <code>get_value( get_value_by_index(EMPLOYES, 3), 'NOM')</code> | ||
+ | |||
+ | ===== Savoir si une liste contient ou pas une certaine clé ===== | ||
+ | |||
+ | # Fonction : <code>has_key</code> | ||
+ | # Nombre de paramètres : <code>2</code> | ||
+ | # Paramètres attendus : | ||
+ | ## - Une variable de type [[DataStore|List]] ; | ||
+ | ## - La clé à rechercher ; | ||
+ | |||
+ | '''Usage''' | ||
+ | <p> | ||
+ | - <code>has_key(EMPLOYES_CDI, '_abc123')</code> => va renvoyer TRUE si la liste EMPLOYES_CDI contient bien la clé '_abc123' | ||
+ | </p> | ||
+ | |||
+ | <p> | ||
+ | Tout comme pour la fonction <code>get_value</code> cette fonction prend tout son intérêt quand le second paramètre est dynamique, c'est à dire qu'il est fourni au travers d'une variable.<br/> | ||
+ | Prenons par exemple, une variable "MEILLEUR_EMPLOYE", qui serait utilisée dans un formulaire avec un champ "choice-list", et qui prendra pour valeur la clé correspondante au meilleur employé de l'entreprise (= c'est à dire '_abc123' ou '_xyz987' dans notre exemple).<br/> | ||
+ | S'il on veut savoir si cet employé fait parti de la liste de ceux qui sont en CDI, on pourrait faire : <br/> | ||
+ | - <code>has_key(EMPLOYES_CDI, MEILLEUR_EMPLOYE)</code> => va renvoyer TRUE si la clé renseignée dans <code>MEILLEUR_EMPLOYE</code> se trouve bien dans la liste <code>EMPLOYES_CDI</code>. | ||
+ | </p> | ||
+ | |||
+ | |||
+ | |||
+ | ===== Assigner un nouveau couple clé-valeur dans une liste ===== | ||
+ | |||
+ | # Fonction : <code>set_in_struct</code> | ||
+ | # Nombre de paramètres : <code>3</code> | ||
+ | # Paramètres attendus : | ||
+ | ## - Une variable de type [[DataStore|List]] ; | ||
+ | ## - La clé à créer ou mettre à jour (string); | ||
+ | ## - La valeur a assigner ; | ||
+ | |||
+ | |||
+ | '''Usage''' | ||
+ | <p> | ||
+ | - <code>set_in_struct(PRODUITS, CODE_PRODUIT, PRIX)</code> => va renvoyer la liste PRODUITS avec la nouvelle valeur assignée. | ||
+ | </p> | ||
+ | |||
+ | '''Explication''' | ||
+ | <p> | ||
+ | Dans l'exemple ci-dessous, nous avons imaginé une liste PRODUITS qui serait de la forme : | ||
+ | <pre>[ '_abc123' => 12.50, '_xyz985' => 89.99 ]</pre> | ||
+ | - <code>CODE_PRODUIT</code> est une variable "string", par exemple "_bcd456" ; <br/> | ||
+ | - <code>PRIX</code> est une variable "numerique", par exemple <code>13.50</code> ; <br/> | ||
+ | <br/> | ||
+ | Ceci étant, l'instruction ci-dessus, va retourner une liste de la forme : | ||
+ | <pre>[ | ||
+ | '_abc123' => 12.50, | ||
+ | '_xyz985' => 89.99, | ||
+ | '_bcd456' => 13.50, | ||
+ | ]</pre> | ||
− | ===== Additionner les répétitions d'une sous-variable d' | + | |
+ | ===== Additionner les répétitions d'une sous-variable d'une liste structurée ===== | ||
# Fonction : <code>list_sum</code> | # Fonction : <code>list_sum</code> | ||
# Nombre de paramètres : <code>2</code> | # Nombre de paramètres : <code>2</code> | ||
− | # Paramètres attendus : Une variable de type [[DataStore|List]] utilisée | + | # Paramètres attendus : |
+ | ## - Une variable de type [[DataStore|List]] (utilisée par exemple dans un [[Repeaters|Repeater]]) ; | ||
+ | ## - Le nom de la sous-variable qui devra être additionnée ; | ||
'''Contexte''' | '''Contexte''' | ||
− | <p>Il est parfois nécessaire d'additionner les différentes répétitions d'une même sous-variable | + | <p>Il est parfois nécessaire d'additionner les différentes répétitions d'une même sous-variable.</p> |
<p>Par exemple, dans cette situation :</p> | <p>Par exemple, dans cette situation :</p> | ||
[[Fichier:List sum chemises.png|400px|vignette|néant|Une sous-variable répétée demande ici le prix d'une chemise. Comment faire pour obtenir la somme des prix de toutes les chemises ?]] | [[Fichier:List sum chemises.png|400px|vignette|néant|Une sous-variable répétée demande ici le prix d'une chemise. Comment faire pour obtenir la somme des prix de toutes les chemises ?]] | ||
Ligne 287 : | Ligne 623 : | ||
<p>Le paramétrage prend la forme suivante :</p> | <p>Le paramétrage prend la forme suivante :</p> | ||
<p><code>list_sum(VARIABLE_LISTE,"SOUS_VARIABLE")</code></p> | <p><code>list_sum(VARIABLE_LISTE,"SOUS_VARIABLE")</code></p> | ||
− | <p>Pour obtenir le prix de toutes les Chemises dans l'exemple ci-dessus, il faudra paramétrer une [[Dynvars|Dynvar]] dont la formule sera <code>list_sum(CHEMISES,"prix")</p> | + | <p>Pour obtenir le prix de toutes les Chemises dans l'exemple ci-dessus, il faudra paramétrer une [[Dynvars|Dynvar]] dont la formule sera <code>list_sum(CHEMISES,"prix")</code></p> |
+ | |||
+ | |||
+ | ===== Obtenir une copie filtrée d'une liste à partir d'une série de clés ===== | ||
+ | |||
+ | # Fonction : <code>filter_by_keys</code> | ||
+ | # Nombre de paramètres : <code>2</code> | ||
+ | # Paramètres attendus : | ||
+ | ## - Une liste avec des clés et des valeurs (ex: <code>ASSOCIES</code>); | ||
+ | ## - Une liste de clés ; | ||
+ | ::'''Exemple de paramétrage :''' | ||
+ | ::<p>Pour obtenir une copie de la liste des associés mais avec uniquement ceux qui ont été cochés comme "présents" :</p> | ||
+ | ::<p><code>filter_by_keys(ASSOCIES, ASSOCIES_PRESENTS)</code></p> | ||
+ | |||
+ | ===== Montrer et organiser les valeurs d'une liste (à rerédiger plus parfaitement) ===== | ||
+ | |||
+ | # Fonction : <code>join</code> | ||
+ | # Nombre de paramètres : <code>5</code> | ||
+ | # Paramètres attendus : | ||
+ | ## - Une variable de liste (paramètre obligatoire) ; | ||
+ | ## - Séparateur (facultatif) ; | ||
+ | ## - Dernier séparateur (facultatif) ; | ||
+ | ## - Préfixe (facultatif) ; | ||
+ | ## - Suffixe (facultatif) | ||
+ | |||
+ | ::'''Exemple de paramétrage :''' | ||
+ | <p>Il est possible de combiner "join" avec la fonction "filter_by_keys".</p> | ||
+ | <p>Par ex : join( filter_by_keys(FILIALES_DISPLAY, CONV.TRESO_FILIALES_PARTICIPANTES) , "", "", "\t - ", " ; \n")</p> | ||
+ | |||
+ | ==== Fonctions autres ==== | ||
+ | |||
+ | ===== Vérifier si une variable est "vide" ===== | ||
+ | |||
+ | # Fonction : <code>is_empty</code> | ||
+ | # Nombre de paramètres : <code>1</code> | ||
+ | # Paramètres attendus : Une variable de n'importe quel type | ||
+ | # Exemple : <code>is_empty(MY_VAR) == true</code> | ||
+ | |||
+ | <p>Pour savoir si une variable ne possède aucun valeur, il est préférable de tester cela avec la fonction <code>is_empty</code>.</p> | ||
+ | <p>La fonction renverra VRAI pour n'importe quelle variable vide : '' (chaîne vide), liste vide …</p> | ||
+ | <p>Par contre, la fonction renverra FALSE si une valeur est présente, même si cette valeur est un 0 ou le booléen "false" (c'est d'ailleurs pour cela qu'il est préférable d'utiliser <code>`is_empty(MY_VAR)`</code> au lieu de, par exemple, <code>`MY_VAR = null`</code>.</p> | ||
+ | |||
+ | ===== Vérifier si une variable est "non vide" ===== | ||
+ | |||
+ | # Fonction : <code>is_set</code> | ||
+ | # Nombre de paramètres : <code>1</code> | ||
+ | # Paramètres attendus : Une variable de n'importe quel type | ||
+ | # Exemple : <code>is_set(MY_VAR) == true</code> | ||
+ | |||
+ | <p>A l'inverse de la fonction <code>is_empty</code>, la fonction <code>is_set</code> permet de savoir si une variable possède une valeur.</p> | ||
+ | <p>La fonction renverra VRAI pour n'importe quelle variable non-vide : "une chaîne", un nombre tel que 12.45 ou même 0 (zéro), une liste non-vide etc. |
Version actuelle datée du 7 avril 2025 à 08:56
Cette page est en cours de construction
Sommaire
- 1 Introduction
- 2 Paramétrage
- 2.1 Bases de la syntaxe
- 2.2 Les fonctions
- 2.2.1 Principes
- 2.2.1.1 Fonctions sur les Dates
- 2.2.1.1.1 Opération sur une date
- 2.2.1.1.2 savoir si une date est avant une autre date
- 2.2.1.1.3 calcul de la différence entre deux dates
- 2.2.1.1.4 renvoyer automatiquement la date du jour
- 2.2.1.1.5 trouver automatiquement l'âge d'un individu
- 2.2.1.1.6 isoler le jour, le mois, l'année d'une date
- 2.2.1.1.7 Connaître le jour de la semaine
- 2.2.1.1.8 Savoir si le jour est ouvrable, ouvré, ou férié
- 2.2.1.1.9 changer le format d'une date
- 2.2.1.2 Fonctions sur les Nombres
- 2.2.1.2.1 Arrondir un nombre en choisissant le nombre de chiffres souhaités après la virgule
- 2.2.1.2.2 Arrondir un nombre entier à l'entier inférieur
- 2.2.1.2.3 Arrondir un nombre entier à l'entier supérieur
- 2.2.1.2.4 Tronquer le nombre de décimale (sans arrondir)
- 2.2.1.2.5 Valeur absolue
- 2.2.1.2.6 Minimum ou Maximum
- 2.2.1.2.7 Formater un nombre en chaîne de caractère
- 2.2.1.3 Fonctions sur les Chaînes de caractères
- 2.2.1.3.1 Compter le nombre de caractères d'une chaîne
- 2.2.1.3.2 Trouver si une chaîne de caractères commence par une autre chaîne de caractères
- 2.2.1.3.3 Trouver si une chaîne de caractères se finit par une autre chaîne de caractères
- 2.2.1.3.4 Un élément en contient-il un autre ?
- 2.2.1.3.5 Tronquer une chaîne de caractères
- 2.2.1.3.6 Connaître la position d'une sous-chaîne
- 2.2.1.3.7 Tronquer la chaîne avec tout ce qui est "avant" une sous-chaîne
- 2.2.1.3.8 Tronquer la chaîne avec tout ce qui est "après" une sous-chaîne
- 2.2.1.3.9 Rechercher et remplacer dans une chaîne
- 2.2.1.4 Fonctions sur des listes
- 2.2.1.4.1 Obtenir la valeur d'un élément d'une liste à partir d'une clé
- 2.2.1.4.2 Obtenir la valeur d'un élément d'une liste à partir de son index
- 2.2.1.4.3 Savoir si une liste contient ou pas une certaine clé
- 2.2.1.4.4 Assigner un nouveau couple clé-valeur dans une liste
- 2.2.1.4.5 Additionner les répétitions d'une sous-variable d'une liste structurée
- 2.2.1.4.6 Obtenir une copie filtrée d'une liste à partir d'une série de clés
- 2.2.1.4.7 Montrer et organiser les valeurs d'une liste (à rerédiger plus parfaitement)
- 2.2.1.5 Fonctions autres
- 2.2.1.1 Fonctions sur les Dates
- 2.2.1 Principes
Introduction
On désigne par "SmartExpressions" la syntaxe permettant de paramétrer les Dynvars et les Visible If.
Paramétrage
Pour mémoire : la syntaxe est basée sur PHP : https://www.php.net/manual/fr/funcref.php
Bases de la syntaxe
Cette page est encore en cours de construction
Principes
La syntaxe SmartExpressions permet d'effectuer des enchaînements logiques de type SI ... ALORS
afin de déterminer des règles d'applications, ainsi que des calculs mathématiques
?
: Alors
:
: Sinon
or, and
: OU, ET
~
: Concaténation (entre plusieurs chaînes de caractères)
*
+
-
/
=
!=
: opérateurs mathématiques
Illustration
Ici la SmartExpression utilisée signifie :
Si la variable TYPE_SOCIETE
est égale à "Entreprise unipersonnelle à responsabilité limitée" OU si la variable TYPE_SOCIETE
est égale à "Société à responsabilité limitée" OU si la variable TYPE_SOCIETE
est égale à "Société civile", ALORS la Dynvar ACTIONS_PARTS
devra valoir "parts sociales", sinon SI si la variable TYPE_SOCIETE
est égale à "Société par actions simplifiée" OU si la variable TYPE_SOCIETE
est égale à "Société par actions simplifiée unipersonnelle", alors la la Dynvar ACTIONS_PARTS
devra valoir "actions"
Décomposition @LEO TODO
Exemples d'application
Opérations mathématiques
Les Dynvars peuvent servir à effectuer des opérations mathématiques, en utilisant les opérateurs basiques, comme par exemple :
Il est possible d'effectuer des opérations mathématiques entre plusieurs variables, et aussi entre plusieurs Dynvars.
Liste des opérateurs mathématiques pouvant être utilisés : *
+
-
/
Factorisation du raisonnement
Factorisation simple
On peut aussi prévoir qu'une Dynvar prenne pour valeur TRUE
ou FALSE
en fonction de la valeur d'autres variables
Par exemple :
Cette formule signifie : la Dynvar nommée FISCALITE_FR
vaudra TRUE
si NATIONALITE_ACHETEUR
ou NATIONALITE_VENDEUR
est égal à "france"
Il sera donc possible d'utiliser la Dynvar FISCALITE_FR
dans des Visible Ifs, ou même dans les formules d'autres Dynvars.
Pour utiliser la dynvar FISCALITE_FR
, on utilisera donc la SmartExpression suivante : FISCALITE_FR = true
ou FISCALITE_FR = false
Factorisation et chaînes de caractères
Dans l'exemple ci-dessus, la SmartExpression signifie : "Si la variable SOCIETE_RESULTAT
est supérieure à 0, Alors la Dynvar BENEFICE_PERTE
doit valoir "bénéfice", sinon si la variable SOCIETE_RESULTAT
est inférieure à 0, Alors la Dynvar BENEFICE_PERTE
doit valoir "perte".
Dynvars et chaînes de caractères
Une Dynvar peut avoir pour formule plusieurs chaînes de caractères, par exemple pour reconstruire un nom complet ou une phrase en utilisant plusieurs variables.
Les fonctions
Principes
Une fonction prend toujours la forme suivante : MA_FONCTION( xxx )
Une fonction est donc toujours composée de trois éléments :
MA_FONCTION
: on commence toujours par nommer la fonction souhaitée.
( )
: ces parenthèses dites "d'exécution" peuvent contenir plusieurs paramètres, séparés chacun par une virgule. Chaque fonction pourra avoir plus ou moins de paramètres.
xxx
: les paramètres de la fonction. Ce sont les paramètres qui vont permettre à la fonction de s'exécuter.
Fonctions sur les Dates
Opération sur une date
Cette fonction permet de réaliser des opérations (somme et soustraction) sur une date. C'est à dire que pour une date donnée, la fonction permet d'obtenir une date antérieur ou postérieure de N jours / années / heures (etc.). Cette fonction est utile pour calculer une date d'échéance (ex : "3 mois après la date de signature…"), ou parler d'une date en fonction d'une autre (Ex : "12 jours avant la date…").
- Nom de la fonction :
date_sum
- Nombre de paramètres :
3
- 1 - Date à traiter (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")
- 2 - Un nombre entier (positif ou négatif)
- 3 - L'unité sous forme d'une chaîne de caractères parmi : "year"; "month"; "day"; "hour"; "minute"; "second".
+ Unité spéciale pour la France et ses territoires : "jour_ouvrable", "jour_ouvré", "jour_franc", "mois_franc" (tenant compte des jours fériés Français)
+ Mais aussi l'unité particulière `month_quant` qui correspond à une règle administrative courante dîtes de "mois de même quantième". On parle par exemple d'un délais de 3 mois au même quantième. Cela signifie que l'on avance de 3 mois et que le jour de destination doit être le même que celui de départ (Ex: 15 Mars + 3 mois = 15 juin). Néanmoins, cette unité prend aussi en compte le fait que si la date de destination n'existe pas (ex: 31 Aout + 1 mois), alors on renvoie le dernier jour du mois de destination (= ici le 30 Septembre). - 4 - (facultatif) La zone géographique qui doit être utilisée pour calculer les jours fériés (utile uniquement pour le calcul des jours spéciaux tel que jour_ouvré etc.). À choisir parmi : Métropole, Alsace-Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle-Calédonie, La Réunion, Polynésie Française, Saint-Barthélémy, Saint-Martin, Wallis-et-Futuna, Saint-Pierre-et-Miquelon.
Par exemple :
▷ date_sum(DATE_SIGNATURE, 3, "day")
=> renvoie 15/05/2020
Ou avec une valeur négative, pour soustraire 3 ans par exemple :
▷ date_sum(DATE_SIGNATURE, -3, "year")
=> renvoie 12/05/2017
Avec un calcul de jour ouvré (ajout de 4 jours ouvrés à la date de signature en tenant compte des jours fériés de l'Alsace-Moselle) :
▷ date_sum(DATE_SIGNATURE, 4, "jour_ouvré", "Alsace-Moselle")
=> renvoie 18/05/2017
(car il saute le week-end)
Pour aller plus loin :
date_sum(…)
. Par exemple, avec AJOUT_NUM
qui vaudrait 3 (issue d'un champ numérique), et la variable AJOUT_UNITÉ
qui vaudrait day
(issue d'un champ de choix par exemple), :
▷ date_sum(DATE_SIGNATURE, AJOUT_NUM, AJOUT_UNITÉ)
=> renvoie 15/05/2020
savoir si une date est avant une autre date
- Fonction :
date_before
- Nombre de paramètres :
2
- Paramètres attendus :
Date 1
,Date 2
Renvoie VRAI si la Date 1 est antérieure à la Date 2. Renvoie FAUX sinon.
Notez que la Date 1 ou la Date 2 peuvent provenir d'une variable complétée par la valeur d'un champ "date-input" d'un SmartForm, ou correspondre à une date fixe fournie sous la forme d'une chaîne de caractère au format j-m-A
(la précision peut aller jusqu'à la seconde : j-m-A h:m:s
)
Par exemple :
Soit une date de signature (DATE_SIGNATURE) ayant pour valeur le 12/05/2020, et l'on veut vérifier que la signature soit antérieure à la date du 1er Janvier 2020 :
▷ date_before(DATE_SIGNATURE,"01-01-2020")
=> renvoie FAUX
▷ Alors que date_before(DATE_SIGNATURE,"01-01-2021")
=> renvoie VRAI
calcul de la différence entre deux dates
- Fonction :
date_diff
- Nombre de paramètres :
3
- 1 - Date de départ (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")
- 2 - Date de fin (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")
- 3 - L'unité dans laquelle renvoyer la différence entre les deux dates. L'unité est fournie sous la forme d'une chaîne de caractères parmi : "year"; "month"; "day"; "hour"; "minute"; "second".
+ Unité spéciale pour la France et ses territoires : "jour_ouvrable", "jour_ouvré"
- 4 - (facultatif) La zone géographique qui doit être utilisée pour calculer les jours fériés (utile uniquement pour le calcul des jours spéciaux tel que jour_ouvré etc.). À choisir parmi : Métropole (par défaut), Alsace-Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle-Calédonie, La Réunion, Polynésie Française, Saint-Barthélémy, Saint-Martin, Wallis-et-Futuna, Saint-Pierre-et-Miquelon.
Renvoie un nombre (valeur absolue) correspondant à la différence, entre la Date de début et la Date de fin, dans l'unité spécifiée. Notez que la date de fin n'est généralement pas inclue dans la comptage de la différence.
Par exemple :
Soit une date de signature (DATE_SIGNATURE) ayant pour valeur le 31/05/2020, et l'on veut savoir combien d'années de différence entre les 2 dates :
▷ date_diff(DATE_SIGNATURE,"20-09-2004","year")
=> renvoie 15
car 15 années se sont écoulées
▷ date_diff("20-09-2004",DATE_SIGNATURE, "year")
=> renvoie aussi 15
(la valeur est absolue, peu importe l'ordre des dates)
▷ date_diff("20-09-2004",DATE_SIGNATURE, "day")
=> renvoie 5732
(le nombre total de jour entre les deux dates)
▷ date_diff("01-05-2020","31-05-2020", "day")
=> renvoie 30
(le nombre total de jour entre le 01 et le 31 Mai, le 31 Mai n'étant pas inclu).
▷ date_diff("01-05-2020","31-05-2020", "jour_ouvré")
=> renvoie 18
(le nombre de jours ouvrés entre le 01 et le 31 Mai 2020).
▷ date_diff("01-05-2020","31-05-2020", "jour_ouvré", "Martinique")
=> renvoie 17
(le nombre de jours ouvrés entre le 01 et le 31 Mai 2020 en Martinique, car contrairement à la Métropole, le 22 Mai est aussi férié).
renvoyer automatiquement la date du jour
Spécificité : fonction unaire, ne possède pas de paramètres
- Fonction :
now()
- Nombre de paramètres :
0
- Paramètres attendus : N/A
Par exemple :
trouver automatiquement l'âge d'un individu
- Fonction :
years_old
- Nombre de paramètres :
1
- Paramètres attendus : Une date
Par exemple :
years_old(DATE_NAISSANCE)
isoler le jour, le mois, l'année d'une date
- Fonction :
date_day
date_month
date_year
- Nombre de paramètres :
1
- Paramètres attendus : Une date
Par exemple : date_month(DATE_SIGNATURE)
Connaître le jour de la semaine
- Fonction :
date_weekday
, renvoie la valeur numérique du jour de la semaine (1 pour lundi, 7 pour dimanche).
- Nombre de paramètres :
1
- Paramètres attendus : Une date
Par exemple : date_weekday(DATE_SIGNATURE)
=> Renvoie 1 pour lundi, 2 pour mardi…, 6 pour samedi, 7 pour dimanche
Savoir si le jour est ouvrable, ouvré, ou férié
- Fonction :
day_is
, renvoie un booléen (VRAI ou FAUX) si la date est du type demandé.
- Paramètres attendus :
2
ou3
- 1 - La date questionnée (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")
- 2 - Le type de jour demandée parmi :
weekend
,ouvré
,ouvrable
,férié
- 3 - (facultatif) La zone géographique qui doit être utilisée pour calculer les jours fériés (utile uniquement pour le calcul des jours spéciaux tel que jour_ouvré etc.). À choisir parmi : Métropole (par défaut), Alsace-Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle-Calédonie, La Réunion, Polynésie Française, Saint-Barthélémy, Saint-Martin, Wallis-et-Futuna, Saint-Pierre-et-Miquelon.
Par exemple :
▷ day_is("25-12-2021", "férié")
=> renvoie TRUE
car le jour de Noël est férié
▷ day_is("26-12-2021", "férié")
=> renvoie FALSE
▷ day_is("26-12-2021", "weekend")
=> renvoie TRUE
car ce jour est un dimanche.
▷ day_is("23-12-2021", "ouvré")
=> renvoie TRUE
car ce jour est un jeudi, non-férié.
▷ day_is("22-05-2021", "ouvré")
=> renvoie TRUE
car ce jour est un vendredi, non-férié (en Métropole du moins).
▷ day_is("22-05-2021", "ouvré", "Martinique")
=> renvoie FALSE
car ce jour est férié en Martinique contrairement à la Métropole.
changer le format d'une date
- Fonction :
date_format
- Nombre de paramètres :
2
- Paramètres attendus : Une date, Un format de date
Par exemple :
Passer d'une date complète à un format jour/mois
date_format(DATE_NAISSANCE, "d/m")
Fonctions sur les Nombres
Introduction : notez bien que les traitements sur les nombres peuvent être effectués aussi bien sur des variables que sur d'autres dynvars
Arrondir un nombre en choisissant le nombre de chiffres souhaités après la virgule
- Fonction :
round
- Nombre de paramètres :
2
- Paramètres attendus : Un nombre, Un autre nombre
La fonction enregistre le premier nombre, puis l'arrondit en fonction du deuxième paramètre
La méthode utilisée est celle de l'arrondi arithmétique.
Par exemple :
Pour arrondir un prix d'achat à 3 chiffres après la virgule
round(PRIX_ACHAT, 3)
Arrondir un nombre entier à l'entier inférieur
- Fonction :
floor
- Nombre de paramètres :
1
- Paramètres attendus : Un nombre
La fonction attend un nombre et lui retire ses décimales en arrondissant à l'entier inférieur
Par exemple :
Pour arrondir un prix d'achat à l'entier inférieur
floor(PRIX_ACHAT)
Arrondir un nombre entier à l'entier supérieur
- Fonction :
ceil
- Nombre de paramètres :
1
- Paramètres attendus : Un nombre
La fonction attend un nombre et lui retire ses décimales en arrondissant à l'entier supérieur
Par exemple :
Pour arrondir un prix d'achat à l'entier supérieur
ceil(PRIX_ACHAT)
Tronquer le nombre de décimale (sans arrondir)
- Fonction :
truncate
- Nombre de paramètres :
1
- Paramètres attendus : Deux nombres. Le premier est la valeur à tronquer (ex: 3.1415) et le second est le nombre de décimale à garder après la virgule (Ex: 2).
La fonction va tronquer les décimales au nombre de décimales indiqué dans le second paramètre.
Par exemple :
Avec PRIX_ACHAT qui est issu d'un calcul et vaut 1.336666, alors truncate(PRIX_ACHAT, 2)
vaudra 1.33
.
Valeur absolue
- Fonction :
abs
- Nombre de paramètres :
1
- Paramètres attendus : le nombre (positif ou négatif) à convertir en valeur absolue.
La fonction va permettre de ramener les nombres négatifs à leur valeur positive (nombre absolu).
Par exemple :
Avec une variable VARIATION qui est issu d'un calcul et qui vaut -6.34, alors abs(VARIATION)
vaudra 6.34
.
Minimum ou Maximum
- Fonction :
max
oumin
- Nombre de paramètres :
2
- Paramètres attendus : les deux nombres à comparer.
La fonction va permettre de renvoyer la valeur maximale (ou minimale) entre le paramètre 1 et 2.
Par exemple :
- -
max(-6, 55)
vaut55
. - -
max(100, 8)
vaut100
. - -
min(100, 8)
vaut8
. - -
min(-99, 300)
vaut-99
.
Formater un nombre en chaîne de caractère
- Fonction :
numFormat
- Nombre de paramètres :
4
mais seulement le 1er est obligatoire. - Paramètres :
- - (numérique) le nombre à formater (obligatoire)
- - (numérique) le nombre de décimales à forcer (par défaut, le nombre de décimale d'origine)
- - (string) le caractère pour le séparateur des milliers (ex:
","
ou" "
, ou""
etc.). Par défaut:" "
. - - (string) le caractère pour le séparateur de l'entier/décimale (ex:
"."
ou","
etc.). Par défaut:","
La fonction va permettre de formater un nombre, par exemple pour faire apparaitre des séparateurs de milliers, ou personnaliser les décimales etc.
Le fonctionnement est très similaire au traitement :num-format
des SmartDocs.
Par exemple :
- -
numFormat(1003.1415, 2)
vaut1 003,14
. - -
numFormat(8133003.1415, 0)
vaut8 133 003
. - -
numFormat(3500)
vaut3 500
. - -
numFormat(3500.999)
vaut3 500,999
. - -
numFormat(3000.50, 4, ',', '.')
vaut3,500.5000
.
Fonctions sur les Chaînes de caractères
Compter le nombre de caractères d'une chaîne
- Fonction :
stringLength
- Nombre de paramètres :
1
- Paramètres attendus : Une Chaîne de caractères (string).
Renvoie le nombre de caractère de la chaîne.
- Exemple :
stringLength('Hercule !')
renvoie9
(entier numérique). Les espaces ou les sauts de lignes comptent aussi pour 1 caractère, même s'ils apparaissent en début ou en fin de la chaîne.
Spécial : si la valeur passée en paramètre est une valeur numérique, la fonction renverra le nombre de "digit" de ce nomnre.
Ex : AvecCODE_POSTAL
qui vaut34700
(entier numérique), alorsstringLength(CODE_POSTAL)
renvoie5
.Si par contre la valeur passée en paramètre est d'un autre type (exemple : une liste, un booléen), ces types n'étant pas pris en charge, la fonction renverra systématiquement
0
.
- Exemple :
Trouver si une chaîne de caractères commence par une autre chaîne de caractères
- Fonction :
begins_with
- Nombre de paramètres :
2
- Paramètres attendus : Une Chaîne de caractères (string), une autre Chaîne de caractères
La première chaîne de caractères est la chaîne dans laquelle rechercher, la deuxième chaîne de caractère est la chaîne à rechercher
La Dynvar paramétrée avec cette fonction vaudra TRUE si la chaîne du premier paramètre commence par la chaîne du second paramètre
Trouver si une chaîne de caractères se finit par une autre chaîne de caractères
- Fonction :
ends_with
- Nombre de paramètres :
2
- Paramètres attendus : Une Chaîne de caractères (string), une autre Chaîne de caractères
La première chaîne de caractères est la chaîne dans laquelle rechercher, la deuxième chaîne de caractère est la chaîne à rechercher
La Dynvar paramétrée avec cette fonction vaudra TRUE si la chaîne du premier paramètre se finit par la chaîne du second paramètre
Un élément en contient-il un autre ?
- Fonction :
contains
- Nombre de paramètres :
2
- Paramètres attendus :
Si le 1er paramètre est une chaîne : renvoie VRAI si la chaîne A contient la chaîne B.
Si le 1er paramètre est une liste : renvoie VRAI si la liste contient la valeur B correspondante à la chaîne B.
Si le 1er paramètre est null
ou d'un autre format non-attendu (booléen, nombre…) : la fonction renverra null
par défaut.
Exemple :
Soit une chaîne NUM_FACTURE correspondant à un numéro de facture tel que : '2020F01'.
Et soit une Liste HOBBIES correspondants à 3 choix : ["sport", "cinema", "music"]
(saisis par exemple via un champ de choix multiple).
▷ contains(NUM_FACTURE,"F")
=> renvoie VRAI
car la chaine "2020F01" contient la chaine "F"
▷ contains(NUM_FACTURE,"2020F")
=> renvoie VRAI
car la chaine "2020F01" contient aussi la chaine "2020F"
▷ contains(NUM_FACTURE,"20 Euros")
=> renvoie FALSE
car la chaine "2020F01" ne contient pas "20 Euros"
▷ contains(HOBBIES,"cinema")
=> renvoie VRAI
et c'est d'ailleurs le 2ème élément
▷ contains(HOBBIES,"cine")
=> renvoie FALSE
car aucun élément est exactement nommé "cine" parmi ceux de la liste
Tronquer une chaîne de caractères
- Fonction :
substring
- Nombre de paramètres :
3
- Paramètres attendus : Une Chaîne de caractères (string), le nombre à partir duquel la fonction doit tronquer, le nombre de caractères à prendre en compte après la troncation
À noter : le troisième paramètre est facultatif. S'il n'est pas présent, la fonction renverra tous les caractères situés après la troncation
Par exemple :
Pour une dynvar paramétrée de la manière suivante : substring(DENOMINATION, 2, 3)
;
Si la variable DENOMINATION vaut "Hercule";
La Dynvar ainsi paramétrée vaudra "rcu"
Ou encore :
Pour une dynvar paramétrée de la manière suivante : substring(DENOMINATION, 0, 4)
;
Si la variable DENOMINATION vaut "Hercule";
La Dynvar ainsi paramétrée vaudra "Herc"
Ou enfin :
Pour une dynvar paramétrée de la manière suivante : substring(DENOMINATION, 2)
;
Si la variable DENOMINATION vaut "Hercule";
La Dynvar ainsi paramétrée vaudra "rcule"
Connaître la position d'une sous-chaîne
- Fonction :
stringPos
- Nombre de paramètres : 2 obligatoires, et un dernier facultatif.
- Paramètres attendus :
- La chaîne de caractères dans laquelle rechercher. (Ex:
"Maison d'été"
) - La chaîne de caractères (ou simplement le caractère) à rechercher (Ex: la lettre
"n"
) - (Optionnel) un nombre entier correspondant à la position de début de recherche. S'il est omis, zéro sera utilisé. Une position négative compte à partir de la fin de la chaîne de caractères n°1.
- La chaîne de caractères dans laquelle rechercher. (Ex:
Notez que le premier caractère est comptabilisé comme à la position n°0.
Ex: stringPos("Maison d'été", "n")
va retourner 5 car la lettre n
se trouve à la 5ème position de la chaîne fournie (la lettre M
étant comptée comme la position n°0)
Ex: stringPos("Maison d'été", "été")
va retourner 9 car le terme été
se trouve à la 9ème position de la chaîne fournie.
Ex: stringPos("Blablabla", "a", 3)
va retourner 5 car, si on omet les 3 premiers caractères, la prochaine lettre a
se trouve à la 5ème position de la chaîne fournie.
Tronquer la chaîne avec tout ce qui est "avant" une sous-chaîne
- Fonction :
stringBefore
- Nombre de paramètres : 1 obligatoire, 1 facultatif.
- Paramètres attendus :
- La chaîne de caractères dans laquelle rechercher.
- (Optionnel) La chaîne de caractères (ou simplement le caractère) à partir duquel il faut tronquer. Si rien n'est précisé, le caractère
,
sera utilisé.
Ex: stringBefore("Maison d'été", " ")
va retourner Maison
car on lui demande de ne retourner que ce qui est avant l'espace.
Ex: stringBefore("Damien, Jean, Paul")
va retourner Damien
car on lui demande de ne retourner que ce qui est avant la virgule (la virgule étant la valeur par défaut du second paramètre quand il n'est pas précisé).
Tronquer la chaîne avec tout ce qui est "après" une sous-chaîne
- Fonction :
stringAfter
- Nombre de paramètres : 1 obligatoire, 1 facultatif.
- Paramètres attendus :
- La chaîne de caractères dans laquelle rechercher.
- (Optionnel) La chaîne de caractères (ou simplement le caractère) jusqu'auquel il faut tronquer. Si rien n'est précisé, le caractère
,
sera utilisé.
Ex: stringAfter("Maison d'été", " ")
va retourner d'été
car on lui demande de ne retourner que ce qui est après l'espace.
Ex: stringAfter("Damien, Jean, Paul")
va retourner Jean, Paul
car on lui demande de ne retourner que ce qui est après la virgule (la virgule étant la valeur par défaut du second paramètre quand il n'est pas précisé).
Rechercher et remplacer dans une chaîne
- Fonction :
stringReplace
- Nombre de paramètres : 2 obligatoires, 1 facultatif.
- Paramètres attendus :
- La chaîne de caractères dans laquelle rechercher et remplacer ;
- La chaîne de caractères de remplacement (celle qui sera "insérée") ;
- (Optionnel) La chaîne de caractères qui sera recherchée (celle qui sera remplacée). Par défaut, si rien n'est précisé, ce sont des sauts de ligne (
\n
) qui seront recherchés.
Ex: stringReplace("Damien", "F", "D")
va retourner Famien
car on lui demande de remplacer D
par F
dans la chaîne Damien
.
Ex: par exemple une variable ADDRESS qui contient une adresse postale sur plusieurs lignes, stringReplace(ADDRESS, ", ")
va permettre de la renvoyer sur une seule et même ligne (séparée par des virgules). Le troisième paramètre n'est pas précisé car par défaut, ce sont des sauts de ligne qui sont recherchés et remplacés.
A l'inverse, pour remplacer des virgules par des sauts de ligne, il faudra écrire l'expression de cette façon : stringReplace(ADDRESS, "\n", ",")
.
Fonctions sur des listes
Obtenir la valeur d'un élément d'une liste à partir d'une clé
- Fonction :
get_value
- Nombre de paramètres :
2 ou 3
- Paramètres attendus :
- Cas pratique
Cas d'une liste EMPLOYES, utilisée dans un Repeater, dont chaque élément défini 3 sous-variables:
EMPLOYES.NOM
,EMPLOYES.DATE_ENTREE
,EMPLOYES.SALAIRE
.
- Ceci étant, l'utilisateur a renseigner dans un formulaire 2 fiches correspondante à EMPLOYES. Elles ont respectivement les clés '_abc123' et '_xyz987' :
[ '_abc123' => [ 'NOM': 'Jean', 'DATE_ENTREE': '13-08-2020', 'SALAIRE': 32000.00 , '_xyz987' => [ 'NOM': 'Sylvie', 'DATE_ENTREE': '11-12-2019', 'SALAIRE': 39500.00 ]
- Usage
- -
get_value(EMPLOYES, '_abc123', 'NOM')
=> va renvoyer "Jean" - -
get_value(EMPLOYES, '_xyz987', 'SALAIRE')
=> va renvoyer39500.0
- -
- Mais là où cette fonction prend tout son intérêt, c'est quand le second paramètre est dynamique, c'est à dire qu'il est fourni au travers d'une variable.
- Prenons par exemple, une variable "MEILLEUR_EMPLOYE", qui serait utilisée dans un formulaire avec un champ "choice-list", et qui prendra pour valeur la clé correspondante au meilleur employé de l'entreprise (= c'est à dire '_abc123' ou '_xyz987' dans notre exemple).
- Mais là où cette fonction prend tout son intérêt, c'est quand le second paramètre est dynamique, c'est à dire qu'il est fourni au travers d'une variable.
- -
get_value(EMPLOYES, MEILLEUR_EMPLOYE, 'SALAIRE')
=> va renvoyer le salaire du meilleur employé selon le choix effectué.
- -
Obtenir la valeur d'un élément d'une liste à partir de son index
- Fonction :
get_value_by_index
- Nombre de paramètres :
2
- Paramètres attendus :
- - Une variable de type List ;
- - L'index de l'élément à retourner (1,2,3…)
- Cette fonction est similaire au
get_value
mais en utilisant l'index de l'élément au lieu de sa clé. - Le paramètre `index` peut être fourni au travers d'une variable ou directement "en dur".
- Cette fonction est similaire au
- Exemple sans variable :
get_value_by_index(EMPLOYES, 3)
- Exemple avec variable :
get_value_by_index(EMPLOYES, INDEX_MEILLEUR_EMPLOYE)
- Exemple sans variable :
- Notez que dans le cas d'une liste structuré, l'élément retourné sera lui même une liste avec des sous-variables. Il faudra donc parfois combiner cette fonction avec un `get_value` :
- Exemple : Obtenir le
NOM
du 3ème employé de la listeEMPLOYES
:get_value( get_value_by_index(EMPLOYES, 3), 'NOM')
Savoir si une liste contient ou pas une certaine clé
- Fonction :
has_key
- Nombre de paramètres :
2
- Paramètres attendus :
- - Une variable de type List ;
- - La clé à rechercher ;
Usage
- has_key(EMPLOYES_CDI, '_abc123')
=> va renvoyer TRUE si la liste EMPLOYES_CDI contient bien la clé '_abc123'
Tout comme pour la fonction get_value
cette fonction prend tout son intérêt quand le second paramètre est dynamique, c'est à dire qu'il est fourni au travers d'une variable.
Prenons par exemple, une variable "MEILLEUR_EMPLOYE", qui serait utilisée dans un formulaire avec un champ "choice-list", et qui prendra pour valeur la clé correspondante au meilleur employé de l'entreprise (= c'est à dire '_abc123' ou '_xyz987' dans notre exemple).
S'il on veut savoir si cet employé fait parti de la liste de ceux qui sont en CDI, on pourrait faire :
- has_key(EMPLOYES_CDI, MEILLEUR_EMPLOYE)
=> va renvoyer TRUE si la clé renseignée dans MEILLEUR_EMPLOYE
se trouve bien dans la liste EMPLOYES_CDI
.
Assigner un nouveau couple clé-valeur dans une liste
- Fonction :
set_in_struct
- Nombre de paramètres :
3
- Paramètres attendus :
- - Une variable de type List ;
- - La clé à créer ou mettre à jour (string);
- - La valeur a assigner ;
Usage
- set_in_struct(PRODUITS, CODE_PRODUIT, PRIX)
=> va renvoyer la liste PRODUITS avec la nouvelle valeur assignée.
Explication
Dans l'exemple ci-dessous, nous avons imaginé une liste PRODUITS qui serait de la forme :
[ '_abc123' => 12.50, '_xyz985' => 89.99 ]
- CODE_PRODUIT
est une variable "string", par exemple "_bcd456" ;
- PRIX
est une variable "numerique", par exemple 13.50
;
Ceci étant, l'instruction ci-dessus, va retourner une liste de la forme :
[ '_abc123' => 12.50, '_xyz985' => 89.99, '_bcd456' => 13.50, ]
Additionner les répétitions d'une sous-variable d'une liste structurée
- Fonction :
list_sum
- Nombre de paramètres :
2
- Paramètres attendus :
Contexte
Il est parfois nécessaire d'additionner les différentes répétitions d'une même sous-variable.
Par exemple, dans cette situation :
Paramétrage
Le paramétrage prend la forme suivante :
list_sum(VARIABLE_LISTE,"SOUS_VARIABLE")
Pour obtenir le prix de toutes les Chemises dans l'exemple ci-dessus, il faudra paramétrer une Dynvar dont la formule sera list_sum(CHEMISES,"prix")
Obtenir une copie filtrée d'une liste à partir d'une série de clés
- Fonction :
filter_by_keys
- Nombre de paramètres :
2
- Paramètres attendus :
- - Une liste avec des clés et des valeurs (ex:
ASSOCIES
); - - Une liste de clés ;
- - Une liste avec des clés et des valeurs (ex:
- Exemple de paramétrage :
Pour obtenir une copie de la liste des associés mais avec uniquement ceux qui ont été cochés comme "présents" :
filter_by_keys(ASSOCIES, ASSOCIES_PRESENTS)
Montrer et organiser les valeurs d'une liste (à rerédiger plus parfaitement)
- Fonction :
join
- Nombre de paramètres :
5
- Paramètres attendus :
- - Une variable de liste (paramètre obligatoire) ;
- - Séparateur (facultatif) ;
- - Dernier séparateur (facultatif) ;
- - Préfixe (facultatif) ;
- - Suffixe (facultatif)
- Exemple de paramétrage :
Il est possible de combiner "join" avec la fonction "filter_by_keys".
Par ex : join( filter_by_keys(FILIALES_DISPLAY, CONV.TRESO_FILIALES_PARTICIPANTES) , "", "", "\t - ", " ; \n")
Fonctions autres
Vérifier si une variable est "vide"
- Fonction :
is_empty
- Nombre de paramètres :
1
- Paramètres attendus : Une variable de n'importe quel type
- Exemple :
is_empty(MY_VAR) == true
Pour savoir si une variable ne possède aucun valeur, il est préférable de tester cela avec la fonction is_empty
.
La fonction renverra VRAI pour n'importe quelle variable vide : (chaîne vide), liste vide …
Par contre, la fonction renverra FALSE si une valeur est présente, même si cette valeur est un 0 ou le booléen "false" (c'est d'ailleurs pour cela qu'il est préférable d'utiliser `is_empty(MY_VAR)`
au lieu de, par exemple, `MY_VAR = null`
.
Vérifier si une variable est "non vide"
- Fonction :
is_set
- Nombre de paramètres :
1
- Paramètres attendus : Une variable de n'importe quel type
- Exemple :
is_set(MY_VAR) == true
A l'inverse de la fonction is_empty
, la fonction is_set
permet de savoir si une variable possède une valeur.
La fonction renverra VRAI pour n'importe quelle variable non-vide : "une chaîne", un nombre tel que 12.45 ou même 0 (zéro), une liste non-vide etc.