Fórmulas y expresiones
Calcular un valor, plantear una condición, dar formato a una fecha o a un número, en un campo Fórmula o en una plantilla.
En un texto de plantilla o en un campo Fórmula, todo lo que está entre llaves se calcula; el resto se imprime tal cual.
Lot {reference}-{serial} → Lot AX-100-000042
Los nombres se escriben en inglés, sea cual sea el idioma; los mensajes y la ayuda siguen el idioma de la interfaz.
Lo esencial
- Un nombre solo imprime un valor: un campo (
{reference}) o un elemento de ceelab ({date},{copy},{language}…). - Una función se escribe con sus paréntesis:
{upper(reference)}. - Una condición se escribe
if … then … else …, siempre con suelse:{if quantity > 100 then "Pallet" else "Box"}. - Un texto se escribe entre comillas rectas:
"Box". Un número se escribe con punto:1.2. - Para imprimir una llave, duplíquela:
{{y}}.
El campo Fórmula


Un campo Fórmula calcula su valor a partir de los demás campos del tipo, aunque estén situados más abajo. El editor muestra el resultado con los valores de ejemplo, lo que la fórmula usa y por qué es usada, y la lista de campos y elementos de ceelab que se pueden insertar.
Al guardar, ceelab lo comprueba todo: errores de escritura, nombres desconocidos, cálculos imposibles o circulares. La parte afectada se subraya y se propone Corregir cuando la corrección es evidente.
Al imprimir, una fórmula que falla lo detiene todo sin consumir ningún número. Los resultados se guardan en el historial: una reimpresión devuelve exactamente el mismo documento.
El editor de expresiones
Tanto en el campo Fórmula como en el laboratorio:
- el texto aparece coloreado: campos, funciones, textos, números, y los nombres desconocidos resaltados;
- Ctrl+Espacio, o escribir un nombre, propone los campos del tipo con su nombre y su valor de ejemplo, los elementos de ceelab, las funciones y las palabras esperadas en ese lugar; escribir «pes» propone
weightsi su nombre es «Peso»; - ↑ ↓ para elegir, Intro o Tab para insertar, Esc para cerrar;
- dentro de una función, la ayuda muestra lo que hay que escribir en ese lugar, por ejemplo los formatos de fecha;
- al pasar el cursor sobre una variable se ven su nombre, su naturaleza y su valor de ejemplo; Funciones y elementos abre la ayuda de todo el lenguaje.
Ejemplos
Tipo de ejemplo «Etiqueta de producto», documento en francés del 7 de octubre de 2026: producto «Vis inox M4», referencia «AX-100», cantidad 150, embalaje «Carton», número de serie 42 (contador de 6 cifras), fabricado ese mismo día.
| Necesidad | Escritura | Resultado |
|---|---|---|
| Embalaje según la cantidad | {if quantity > 100 then "Pallet" else "Box"} |
Pallet |
| Cantidad y embalaje | {quantity} · {packaging} |
150 · Carton |
| Número de serie con 8 cifras | N° {pad(serial, 8)} |
N° 00000042 |
| Bulto n de N, solo si hay varios | {if copies > 1 then "Colis " + text(copy) + "/" + text(copies) else ""} |
3.er ejemplar de 12: Colis 3/12 |
| Fecha con el formato de cada idioma | {format_date(manufacturing_date, "short")} |
07/10/2026 (en Oct 7, 2026, de 07.10.2026) |
| Mención según el idioma | {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 |
| Fecha de consumo preferente, mes y año | {format_date(add_days(manufacturing_date, 365), "mm/yyyy")} |
10/2027 |
| Mes en letras | {format_date(manufacturing_date, "mmmm yyyy")} |
octobre 2026 (de Oktober 2026) |
| Código de lote con fecha | L{format_date(date, "yymmdd")}-{pad(serial, 4)} |
L261007-0042 |
| Prefijo de la referencia | {upper(left(reference, 3))} |
AX- |
Con campos añadidos: weight (Número, introducido «12,50»), price (Número, «0.1»), fragile (Sí/No, sin marcar), lot (Texto opcional, vacío), expiry (Fecha opcional, vacía).
| Necesidad | Escritura | Resultado |
|---|---|---|
| Peso tal como se introdujo | Net {weight} kg |
Net 12,50 kg |
| Clase de peso | {if weight > 30 then "Heavy" else if weight > 10 then "Medium" else "Light"} |
Medium |
| Peso aumentado, 2 decimales como máximo | {round(weight * 1.2, 2)} |
15 |
| Siempre 2 decimales | {decimals(weight * 1.2, 2)} |
15,00 |
| Total | {decimals(price * quantity, 2)} € |
15,00 € |
| Peso unitario (una división siempre se redondea) | {decimals(weight / quantity, 3)} kg |
0,083 kg |
| Mención según un campo Sí/No | {if fragile then "FRAGILE" else ""} |
(nada) |
| Línea opcional | {if lot == "" then "" else "Lot " + lot} |
(nada) |
| Fecha opcional | {if expiry == empty then "" else "À utiliser avant le " + format_date(expiry, "dd/mm/yyyy")} |
(nada) |
Los cálculos son exactos y el separador decimal sigue el idioma del documento: decimals(total, 2) escribe 37,50 en francés.
Leer un dato de ceelab
lookup lee un dato que ceelab conoce. Por ejemplo, el nombre de un tipo de documento a partir de su clave:
{lookup("document_types", "key", "shipping-label", "name")}
Si el dato no existe, no se imprime nada y ceelab se lo indica.
Los errores habituales
| Escrito | Lo correcto |
|---|---|
{if quantity = 100 then …} |
== para comparar |
{reference | upper} o {reference.upper()} |
upper(reference) |
{"Lot " + quantity} |
"Lot " + text(quantity) |
{"Lot " & lot} |
+ para unir textos |
{if weight > 30 then "Heavy"} |
añadir else …: una expresión siempre tiene un valor |
{if weight > 30 alors "a" sinon "b"} |
then y else, en inglés |
{quantity > 100} |
una condición no se imprime: if quantity > 100 then "Oui" else "Non" |
{total / 3} |
redondear: 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”} |
comillas rectas: "Box" |
in busca un fragmento de texto: "E" está «en» "FR BE CH". Para una lista de valores, escriba country == "FR" or country == "BE" or country == "CH".
Resumen
- Palabras:
if then else and or not in true false empty. - Operadores:
+ - * /(+también une dos textos);== != < <= > >=;in(texto contenido);and,or,not. - Funciones:
upper,lower,left,right,replace,number,text,round,decimals,pad,format_date,add_days,lookup. - Elementos:
date,date_long,date_iso,time,year,month,day,copy,copies,document_type,locationy, solo en las expresiones,language(idioma del documento),app_language(idioma de la interfaz del equipo),label_printerydocument_printer(impresoras configuradas). - Patrones de fecha:
yyyy,yy,mmmm,mm,dd; formatosshort,long,iso. - Vacío:
x == empty; con un vacío no se puede calcular.
Fechas: lo que todavía no se puede escribir
- Día sin cero («7 octobre 2026»):
format_date(date, "long")lo escribe en cada idioma. - Texto dentro de un patrón:
"dd de mmmm"se rechaza; compongaformat_date(date, "dd") + " de " + format_date(date, "mmmm"). - Mes en un idioma distinto del del documento: todavía no es posible; use una condición sobre
montho un segundo tipo de documento en el otro idioma.