Praxsuite

Templates and Variables

Vincent Depassier · September 24, 2026

A template is a document with variables in it — placeholders such as {Clients.Name} or {Quotes.Total} that fill in from rows of your tables. Generate turns a template plus the rows you pick into an ordinary document: one quote per client, one contract per deal, written once.

A quote template: variables shown as chips, the Template badge, Preview Values and Generate.

The trap: the preview is not the output. Preview Values formats each value for your screen — Yes/No, 1,234.50, 15%, a date in your locale. The generated document writes the raw value: true/false, 1234.5, 0.15, 2026-09-24. Always generate one real document and read it before you send a hundred.

Making a template

  • New → New Template in the Explorer, or

  • Convert to Template on any document's menu. Convert to Document turns it back.

Templates in the Explorer lists them all. A template cannot be sent for signature itself — you sign the documents generated from it.

Variables

While editing, type /, pick a table, then a column. The editor inserts a token:

Token

Fills in with

{Table.Column}

That column's value on the row you pick for that table

{Table.Relation.Column}

A value from the record linked through a relation column, one level deep

Names are matched ignoring case and spaces, so {Clients.Company Name} and {clients.companyname} are the same variable.

Variables also work inside the settings of a block — a button's label and URL, a link, an image's address, a signature box's signer email and name — so a "View invoice" button can point at a different URL on every generated document.

Column types a variable can read

Short text, long text, email, phone number, number, currency, integer, big integer, decimal, percentage, status, yes/no, date, date and time, period and formula. Relation columns — to another table, to end users, to workspace users or to agents — are followed one level.

How values are written

Column type

Written as

Date

2026-09-24

Date and time

2026-09-24 14:30

Yes/no

true or false

Number, currency, decimal, formula

The number with trailing zeros removed — 1234.5, no thousands separator, no currency symbol

Percentage

The stored fraction — 0.15, not 15%

If you need $1,234.50 or 15% in the document, put the symbol in the template next to the variable, or store the formatted text in a formula column and use that.

Dynamic tables

A dynamic table repeats a row once per related record — the line items of a quote, the people on a project.

  1. Insert a table and write one row using variables from the related table.

  2. Put the cursor in that row and choose Dynamic table (repeating rows).

  3. Pick the Source Table and the Relation Column that links it to the records.

The dynamic table dialog: the source table and the relation column that drives the rows.

When the document is generated, that row is copied once for every linked record. There is no cap on the number of rows.

Generating a document

On the template, Generate opens Generate Instance: a title for the new document and one row picker for each table the template uses.

Generate Instance: pick one row per referenced table, then Generate.

The new document is an ordinary draft, filed in the same folder as the template. It remembers which template and which rows produced it. From the portal you cannot choose another folder; automations and the API can.

A template with no variables still generates — you get a plain copy.

Traps worth knowing

  • Generate uses the saved template. Unsaved edits to the template are not part of what is generated. Save first.

  • The row picker loads the first 50 rows of each table, and its search looks only through those 50. For a large table, generate from an automation instead.

  • Preview Values uses the first row of each table, not a row you choose.

  • A variable that cannot be resolved disappears from the generated document — it does not stay as {Table.Column} and it does not raise an error. A misspelled variable produces a blank.

  • `{Table.Relation.Column}` shows the related record's display name, not that column, unless the relation has a matching one-to-one column. Check the output when you reach through a relation.

  • Renaming a table or a column breaks the variables that use it, including dynamic tables, because variables refer to names. Rename, then fix the template.

  • Deleting a template breaks regeneration. Documents generated from it keep their content, but an automation that regenerates them fails with The template this doc was generated from no longer exists.

  • The help text on some screens still mentions an older {ColumnName} syntax. Use {Table.Column}.

Next