8print : les formules

Modèles > Formules

Les formules permettent de calculer et de renvoyer une valeur, grâce à la fonction “Print” (qui est obligatoire, sinon aucune valeur n’est renvoyée par la formule).

Le langage est du Basic, donc les termes sont en anglais. Pour en savoir plus, vous pouvez consulter la documentation https://documentation.xojo.com/api/code_execution/xojoscript.html#xojoscript

Ajouter une formule

Formules de visibilité

Elles sont en jaune pâle dans la liste des formules

Une formule de visibilité doit renvoyer la valeur “VISIBLE”.

Exemple dans un modèle de devis, formule MtSup1000, Type : Caractères

if [PcvMtHT] > 1000 then
Print "VISIBLE"
end
  • “if” introduit la condition
  • “then” indique que si la condition est vraie, les lignes suivantes seront exécutées jusqu’au “end”
  • “Print” est obligatoire et doit renvoyer une chaine de caractères (ici VISIBLE entre doubles quotes)
  • “end” termine les instructions introduites par le then

Une zone avec cette formule sera visible si le montant net du devis est supérieur à 1000.

Cette formule se retrouve dans la palette de mise en forme de la maquette, dans le menu “Présence” du groupe “Objets”. Vous pouvez l’affecter à n’importe quel(s) objet(s) de la maquette (textes, tracés, images).

Formules de calcul

Elles sont en vert pâle dans la liste des formules

Exemple dans un modèle de devis, formule QteSpec, Type : Montant

dim wd as double
wd = [PlvQteUV] * 2
if wd > 5 then
Print Format([PlvQteUS] * 2, "0")
else
Print Format([PlvQteUS] * 3, "0")
end
  • “dim” permet de définir une variable, ici wd, “as” donne le type de cette variable, ici “double” qui signifie “montant”

  • wd = [PlvQteUV] * 2 : on affecte le double de la quantité en unité de vente à la variable wd

  • if wd > 5 then : test

  • Print Format([PlvQteUS] * 2, “0”) : Print renvoie le double de la quantité en unité de stock, avec un format de nombre qui affiche au moins un chiffre

  • else : si le test est faux

  • Print Format([PlvQteUS] * 3, “0”) : Print renvoie le triple de la quantité en unité de stock, avec un format de nombre qui affiche au moins un chiffre

  • end : fin des instructions suivant le test ci-dessus, qu’il soit vrai ou faux

Exemple : modèle de relance, formule Formul1

Print Format( [SomDeb] - [SomCred], "-###,##0.00")

Cette formule permet d’imprimer la différence des champs SomDeb et SomCred, avec un format de montant qui affiche le signe du résultat, un séparateur de milliers si le montant le nécessite, et deux chiffres après la virgule.

Attention : les formats sont en basic, les séparateurs de milliers doivent être des virgules et le séparateur décimal un point, et l’affichage se fera correctement selon vos réglages utilisateur de 8sens).

Attention : le champ contenant la Formul1 doit être placé en Pied car il fait intervenir des champs qui contiennent des sous totaux.

Le signe somme ∑ peut être utilisé dans une formule, par ex: ∑ [EcrDebit] / [CptCode]

Cette formule calcule le total de la colonne EcrDebit divisé par CptCode, c’est-à-dire le total des débits pour ce compte.

  • EcrDebit et CptCode sont les noms de colonne visibles dans la liste des champs.
  • CptCode est un regroupement du modèle.

L’opérateur ∑ appelle la somme ; si la deuxième partie (/ [CptCode]) est absente, la somme sera totale pour l’impression.

On peut ainsi utiliser une formule dans une autre formule

Exemple de formules dans un modèle de pièce :

  • SomQtePiece : ∑[PlvQteUS]/[PlvCodePcv]
  • SomQteSup10 : if [SomQtePiece] >= 10 then print “visible”

Résultat : en affectant la formule de visibilité SomQteSup10 à une zone, celle-ci n’apparaîtra sur l’impression que si la quantité totale de la pièce est supérieure ou égale à 10.

NB : il n’est pas nécessaire de placer une formule dans une zone pour qu’elle soit calculée, il suffit qu’elle existe dans le modèle.

Affichage de dates

Les formules permettent d’afficher les dates avec tous les formats possibles.

Une date se présente comme ceci : “2014-06-26”

Dim wj, wm, wa As Integer
wj = Val(Right(\[PcvDate\], 2))
wm = Val(Mid(\[PcvDate\], 6, 2))
wa = Val(Left(\[PcvDate\], 4))
Print Format(wa, "0000") + "-" + Format(wm, "00")

Apres avoir déclaré les 3 variables qui vont récupérer jour, mois et année, on découpe la date pour remplir ces variables : le jour est sur 2 caractères à droite, etc

Enfin, le Print va donner comme résultat dans cet exemple : 2014-06

Affichage de nombres et montants

Voici des exemples en basic pour les formats d’affichage :

NB : le . (point) donne toujours le séparateur décimal ; la , (virgule) le séparateur de milliers.

  • #.## pour 1.784 donne 1.78 –> le # affiche le chiffre s’il est présent

  • #.0000 pour 1.3 donne 1.3000 –> le 0 affiche un zero même si pas de chiffre

  • 0000 pour 5 donne 0005

  • #% pour 0.25 donne 25%

  • ###,###.## pour 145678.5 donne 145,678.5

  • -#.## pour -3.7 donne -3.7 –> le – affiche un – si le nombre est négatif, rien si positif

  • +#.## pour 3.7 donne +3.7 –> le + affiche un – si le nombre est négatif, un + si positif

  • #.##;(#.##);\z\e\r\o pour 3.7 donne 3.7

  • #.##;(#.##);\z\e\r\o pour -3.7 donne (3.7)

  • #.##;(#.##);\z\e\r\o pour 0 donne zéro

Quelques exemples

Affichage dans une pièce de vente du montant ligne en TTC, que l’option TTC de l’entête de pièce soit cochée ou non

If [PcvIsTTC] then
print format([PlvMtNet], "-###,###,##0.00")
else
print format([PlvMtNet]*(1+[PlvGTaxTaux]/100), "-###,###,##0.00")
end

Cette base de formule peut être utilisée pour afficher automatiquement les lignes en TTC ou HT quelle que soit l’option cochée. Et permet de ne pas avoir à créer plusieurs modèles.

Il faut penser à cocher la case “Rien si valeur nulle” pour ne pas voir apparaître “0,00” sur les lignes de texte.

Pour le HT cela donne :

If [PcvIsTTC] then
print format([PlvMtNet]/(1+[PlvGTaxTaux]/100), "-###,###,##0.00")
else
print format([PlvMtNet], "-###,###,##0.00")
end

Affichage automatique du libellé “Facture” ou “avoir”

if([PcvMtTotal]>=0) then
print "Facture n° "
else
print "Avoir n° "
end

Placer cette formule dans un champ texte devant le champ “[PcvCode]”. Si le montant total de la facture est supérieur à 0 alors “Facture” est affiché. Dans le cas contraire, “Avoir” est affiché.

Affichage automatique du libellé “Facture” ou “Invoice” selon la langue

if([PcvGLagCode] = "EN") then
print "Invoice"
else
print "Facture n°"
end

Fonctionnement avancé

Dans 8print, vous pouvez utiliser certaines fonctions de realbasic. La formule ci-dessous permet par exemple de supprimer les lettres du champ référence pour ne conserver que les chiffres :

dim wst as string
dim wi as integer
dim test as integer
dim retour as string
wst = [PcvRef]
wi = 0
for wi = 1 to len(wst)
test = asc(mid(wst, wi, 1))
if test >= asc("0") and test <= asc("9") then
retour = retour + mid(wst, wi, 1)
end
next
print retour