Fórmulas e expressões
Calcular um valor, definir uma condição, formatar uma data ou um número, em um campo Fórmula ou em um modelo.
Em um texto de modelo ou em um campo Fórmula, tudo o que está entre chaves é calculado; o restante é impresso tal como está.
Lot {reference}-{serial} → Lot AX-100-000042
Os nomes são escritos em inglês, seja qual for o idioma; as mensagens e a ajuda seguem o idioma da interface.
O essencial
- Um nome sozinho imprime um valor: um campo (
{reference}) ou um elemento do ceelab ({date},{copy},{language}…). - Uma função é escrita com os seus parênteses:
{upper(reference)}. - Uma condição é escrita
if … then … else …, sempre com o seuelse:{if quantity > 100 then "Pallet" else "Box"}. - Um texto é escrito entre aspas retas:
"Box". Um número é escrito com ponto:1.2. - Para imprimir uma chave, duplique-a:
{{e}}.
O campo Fórmula


Um campo Fórmula calcula o seu valor a partir dos outros campos do tipo, mesmo os posicionados mais abaixo. O editor mostra o resultado com os valores de exemplo, o que a fórmula usa e por quem ela é usada, além da lista de campos e de elementos do ceelab para inserir.
Ao salvar, o ceelab verifica tudo: erros de escrita, nomes desconhecidos, cálculos impossíveis ou circulares. A parte em questão fica sublinhada, e Corrigir é oferecido quando a correção é óbvia.
Na impressão, uma fórmula que falha interrompe tudo sem consumir número. Os resultados ficam guardados no histórico: uma reimpressão devolve exatamente o mesmo documento.
O editor de expressões
No campo Fórmula, assim como no laboratório:
- o texto é colorido: campos, funções, textos, números, e nomes desconhecidos em destaque;
- Ctrl+Espaço, ou a digitação de um nome, sugere os campos do tipo com o seu rótulo e o seu valor de exemplo, os elementos do ceelab, as funções e as palavras esperadas naquele ponto; digitar “pes” sugere
weightse o seu rótulo for “Peso”; - ↑ ↓ para escolher, Enter ou Tab para inserir, Esc para fechar;
- dentro de uma função, a ajuda mostra o que escrever naquele ponto, por exemplo os formatos de data;
- passar o mouse sobre um nome mostra o seu rótulo, a sua natureza e o seu valor de exemplo; Funções e elementos abre a ajuda de toda a linguagem.
Exemplos
Tipo de exemplo “Etiqueta de produto”, documento em francês de 7 de outubro de 2026: produto “Vis inox M4”, referência “AX-100”, quantidade 150, embalagem “Carton”, número de série 42 (contador de 6 dígitos), fabricado no mesmo dia.
| Necessidade | Escrita | Resultado |
|---|---|---|
| Embalagem conforme a quantidade | {if quantity > 100 then "Pallet" else "Box"} |
Pallet |
| Quantidade e embalagem | {quantity} · {packaging} |
150 · Carton |
| Número de série com 8 dígitos | N° {pad(serial, 8)} |
N° 00000042 |
| Pacote n de N, só se houver vários | {if copies > 1 then "Colis " + text(copy) + "/" + text(copies) else ""} |
3ª cópia de 12: Colis 3/12 |
| Data no formato de cada idioma | {format_date(manufacturing_date, "short")} |
07/10/2026 (en Oct 7, 2026, de 07.10.2026) |
| Menção conforme o 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 |
| Validade mínima, mês e ano | {format_date(add_days(manufacturing_date, 365), "mm/yyyy")} |
10/2027 |
| Mês por extenso | {format_date(manufacturing_date, "mmmm yyyy")} |
octobre 2026 (de Oktober 2026) |
| Código de lote com data | L{format_date(date, "yymmdd")}-{pad(serial, 4)} |
L261007-0042 |
| Prefixo da referência | {upper(left(reference, 3))} |
AX- |
Com campos adicionados: weight (Número, digitado “12,50”), price (Número, “0.1”), fragile (Sim/Não, desmarcado), lot (Texto opcional, vazio), expiry (Data opcional, vazia).
| Necessidade | Escrita | Resultado |
|---|---|---|
| Peso tal como digitado | Net {weight} kg |
Net 12,50 kg |
| Classe de peso | {if weight > 30 then "Heavy" else if weight > 10 then "Medium" else "Light"} |
Medium |
| Peso acrescido, no máximo 2 casas decimais | {round(weight * 1.2, 2)} |
15 |
| Sempre 2 casas decimais | {decimals(weight * 1.2, 2)} |
15,00 |
| Total | {decimals(price * quantity, 2)} € |
15,00 € |
| Peso unitário (uma divisão é sempre arredondada) | {decimals(weight / quantity, 3)} kg |
0,083 kg |
| Menção de um Sim/Não | {if fragile then "FRAGILE" else ""} |
(nada) |
| Linha opcional | {if lot == "" then "" else "Lot " + lot} |
(nada) |
| Data opcional | {if expiry == empty then "" else "À utiliser avant le " + format_date(expiry, "dd/mm/yyyy")} |
(nada) |
Os cálculos são exatos e o separador decimal segue o idioma do documento: decimals(total, 2) escreve 37,50 em francês.
Ler um dado do ceelab
lookup lê uma informação que o ceelab conhece. Por exemplo, o nome de um tipo de documento a partir da sua chave:
{lookup("document_types", "key", "shipping-label", "name")}
Se a informação não existir, nada é impresso e o ceelab avisa você.
Os erros mais comuns
| Escrito | Como escrever |
|---|---|
{if quantity = 100 then …} |
== para comparar |
{reference | upper} ou {reference.upper()} |
upper(reference) |
{"Lot " + quantity} |
"Lot " + text(quantity) |
{"Lot " & lot} |
+ para juntar |
{if weight > 30 then "Heavy"} |
acrescentar else …: uma expressão sempre tem um valor |
{if weight > 30 alors "a" sinon "b"} |
then e else, em inglês |
{quantity > 100} |
uma condição não é impressa: if quantity > 100 then "Oui" else "Non" |
{total / 3} |
arredondar: 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”} |
aspas retas: "Box" |
in procura um trecho de texto: "E" está “em” "FR BE CH". Para uma lista de valores, escreva country == "FR" or country == "BE" or country == "CH".
Resumo rápido
- Palavras:
if then else and or not in true false empty. - Operadores:
+ - * /(+também junta dois textos);== != < <= > >=;in(texto contido);and,or,not. - Funções:
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,locatione, só nas expressões,language(idioma do documento),app_language(idioma da interface do computador),label_printeredocument_printer(impressoras configuradas). - Padrões de data:
yyyy,yy,mmmm,mm,dd; formatosshort,long,iso. - Vazio:
x == empty; um vazio não entra em cálculos.
Datas: o que ainda não dá para escrever
- Dia sem zero (“7 octobre 2026”):
format_date(date, "long")o escreve em cada idioma. - Texto dentro de um padrão:
"dd de mmmm"é recusado; monteformat_date(date, "dd") + " de " + format_date(date, "mmmm"). - Mês em um idioma diferente do idioma do documento: ainda não é possível; use uma condição sobre
month, ou um segundo tipo de documento no outro idioma.