Manual · The book

# Reports & printing

The report editor, form letters, labels — and printing from a list.

## One printing engine

Everything printed goes through reports — the invoice, the form letter, the label sheet, and the quick print from any list. One engine means one look: what the developer designed is what every road prints.

## The editor

A report is bands — page header, group headers, one band per record, a footer that can total. Drag fields in, follow relationships in a path (`customer.town`), place computed values, set the page. The editor works on real records, so what you see is what prints. `reports.openEditor(records, "Name")` opens it from a script.

Bands with their heights down the left, real field paths on the page — and the grouping field, which always sorts first so a group cannot be torn apart.

## A chart on the page

A chart is an object like any other — drop it into a band, tell it what to group by, and it is drawn where it stands. The values are counted by the database, not by loading records: the same arithmetic that feeds a chart on a form. In the editor it draws stand-in data, so you are deciding whether it fits before the first real page is printed.

Bands with a chart among them — grouped by the same field the report groups by, and drawn with stand-in figures until it meets real ones.

## Form letters and labels

A letter is a report over people — one band per record, the address block from their fields, your text between. Labels are a page grid; the example project ships both (a letter to the company and one to the person at it), worth opening and taking apart.

## Two shelves

Reports you ship live inside the application and are read-only for the end user; their own live beside their data in Application Support and survive every update. The report manager shows both, with the padlock on yours — and Duplicate is the one door between the shelves.

Both shelves in one window, and the preview is the report itself — the four buttons live under the list they act on.

## From a script, and from every list

`reports.print("Invoice", [form.record])` prints; every list's Print row action opens the report manager with the shown records — which is why there is no second, lesser “quick table print” to keep in step with the real one.