Documentation

Formules et expressions

Calculer une valeur, poser une condition, mettre en forme une date ou un nombre, dans un champ Formule ou dans un template.

Dans un texte de template ou dans un champ Formule, tout ce qui est entre accolades est calculé ; le reste est imprimé tel quel.

Lot {reference}-{serial}          →  Lot AX-100-000042

Les noms s’écrivent en anglais, quelle que soit la langue ; les messages et l’aide suivent la langue de l’interface.

L’essentiel

  • Un nom seul imprime une valeur : un champ ({reference}) ou un élément de ceelab ({date}, {copy}, {language}…).
  • Une fonction s’écrit avec ses parenthèses : {upper(reference)}.
  • Une condition s’écrit if … then … else …, toujours avec son else : {if quantity > 100 then "Pallet" else "Box"}.
  • Un texte s’écrit entre guillemets droits : "Box". Un nombre s’écrit avec un point : 1.2.
  • Pour imprimer une accolade, doublez-la : {{ et }}.

Le champ Formule

Champ Formule : expression, résultat sur les valeurs d'exemple, champs utilisés et templates qui l'utilisent.Champ Formule : expression, résultat sur les valeurs d'exemple, champs utilisés et templates qui l'utilisent.

Un champ Formule calcule sa valeur à partir des autres champs du type, même placés plus bas. L’éditeur montre le résultat sur les valeurs d’exemple, ce que la formule utilise et par quoi elle est utilisée, et la liste des champs et des éléments de ceelab à insérer.

À l’enregistrement, ceelab vérifie tout : fautes d’écriture, noms inconnus, calculs impossibles ou qui tournent en rond. La partie en cause est soulignée, et Corriger est proposé quand la correction est évidente.

À l’impression, une formule qui échoue arrête tout sans consommer de numéro. Les résultats sont gardés dans l’historique : une réimpression redonne exactement le même document.

L’éditeur d’expressions

Dans le champ Formule comme dans le laboratoire :

  • le texte est coloré : champs, fonctions, textes, nombres, et noms inconnus en évidence ;
  • Ctrl+Espace, ou la frappe d’un nom, propose les champs du type avec leur libellé et leur valeur d’exemple, les éléments de ceelab, les fonctions et les mots attendus à cet endroit ; taper « poi » propose weight si son libellé est « Poids » ;
  • ↑ ↓ pour choisir, Entrée ou Tab pour insérer, Échap pour fermer ;
  • dans une fonction, l’aide montre ce qu’il faut écrire à cet endroit, par exemple les formats de date ;
  • le survol d’un nom donne son libellé, sa nature et sa valeur d’exemple ; Fonctions et éléments ouvre l’aide de tout le langage.

Exemples

Type d’exemple « Étiquette produit », document en français du 7 octobre 2026 : produit « Vis inox M4 », référence « AX-100 », quantité 150, conditionnement « Carton », numéro de série 42 (compteur sur 6 chiffres), fabriqué le jour même.

Besoin Écriture Résultat
Conditionnement selon la quantité {if quantity > 100 then "Pallet" else "Box"} Pallet
Quantité et conditionnement {quantity} · {packaging} 150 · Carton
Numéro de série sur 8 chiffres N° {pad(serial, 8)} N° 00000042
Colis n sur N, seulement s’il y en a plusieurs {if copies > 1 then "Colis " + text(copy) + "/" + text(copies) else ""} 3ᵉ exemplaire sur 12 : Colis 3/12
Date au format de chaque langue {format_date(manufacturing_date, "short")} 07/10/2026 (en Oct 7, 2026, de 07.10.2026)
Mention selon la langue {if language == "de" then "Mindestens haltbar bis" else if language == "en" then "Best before" else "À consommer de préférence avant"} À consommer de préférence avant
Durabilité minimale, mois et année {format_date(add_days(manufacturing_date, 365), "mm/yyyy")} 10/2027
Mois en toutes lettres {format_date(manufacturing_date, "mmmm yyyy")} octobre 2026 (de Oktober 2026)
Code de lot daté L{format_date(date, "yymmdd")}-{pad(serial, 4)} L261007-0042
Préfixe de la référence {upper(left(reference, 3))} AX-

Avec des champs ajoutés : weight (Nombre, saisi « 12,50 »), price (Nombre, « 0.1 »), fragile (Oui/Non, non coché), lot (Texte facultatif, vide), expiry (Date facultative, vide).

Besoin Écriture Résultat
Poids tel que saisi Net {weight} kg Net 12,50 kg
Classe de poids {if weight > 30 then "Heavy" else if weight > 10 then "Medium" else "Light"} Medium
Poids majoré, 2 décimales au plus {round(weight * 1.2, 2)} 15
Toujours 2 décimales {decimals(weight * 1.2, 2)} 15,00
Total {decimals(price * quantity, 2)} € 15,00 €
Poids unitaire (une division s’arrondit toujours) {decimals(weight / quantity, 3)} kg 0,083 kg
Mention d’un Oui/Non {if fragile then "FRAGILE" else ""} (rien)
Ligne facultative {if lot == "" then "" else "Lot " + lot} (rien)
Date facultative {if expiry == empty then "" else "À utiliser avant le " + format_date(expiry, "dd/mm/yyyy")} (rien)

Les calculs sont exacts et le séparateur décimal suit la langue du document : decimals(total, 2) écrit 37,50 en français.

Lire une donnée de ceelab

lookup lit une information connue de ceelab. Par exemple, le nom d’un type de document à partir de sa clé :

{lookup("document_types", "key", "shipping-label", "name")}

Si l’information n’existe pas, rien n’est imprimé et ceelab vous le signale.

Les erreurs courantes

Écrit À écrire
{if quantity = 100 then …} == pour comparer
{reference | upper} ou {reference.upper()} upper(reference)
{"Lot " + quantity} "Lot " + text(quantity)
{"Lot " & lot} + pour mettre bout à bout
{if weight > 30 then "Heavy"} ajouter else … : une expression a toujours une valeur
{if weight > 30 alors "a" sinon "b"} then et else, en anglais
{quantity > 100} une condition ne s’imprime pas : if quantity > 100 then "Oui" else "Non"
{total / 3} arrondir : round(total / 3, 2)
{round(12,5)} 12.5
{0 < weight < 10} 0 < weight and weight < 10
{format_date(date, "jj/mm/aaaa")} dd/mm/yyyy
{“Box”} guillemets droits : "Box"

in cherche un morceau de texte : "E" est « dans » "FR BE CH". Pour une liste de valeurs, écrivez country == "FR" or country == "BE" or country == "CH".

Aide-mémoire

  • Mots : if then else and or not in true false empty.
  • Opérateurs : + - * / (+ met aussi bout à bout deux textes) ; == != < <= > >= ; in (texte contenu) ; and, or, not.
  • Fonctions : upper, lower, left, right, replace, number, text, round, decimals, pad, format_date, add_days, lookup.
  • Éléments : date, date_long, date_iso, time, year, month, day, copy, copies, document_type, location, et dans les expressions seulement language (langue du document), app_language (langue de l’interface du poste), label_printer et document_printer (imprimantes réglées).
  • Motifs de date : yyyy, yy, mmmm, mm, dd ; formats short, long, iso.
  • Vide : x == empty ; un vide ne se calcule pas.

Dates : ce qui ne s’écrit pas encore

  • Jour sans zéro (« 7 octobre 2026 ») : format_date(date, "long") l’écrit dans chaque langue.
  • Texte dans un motif : "dd de mmmm" est refusé ; assemblez format_date(date, "dd") + " de " + format_date(date, "mmmm").
  • Mois dans une autre langue que celle du document : pas encore possible ; utilisez une condition sur month, ou un second type de document dans l’autre langue.