Перейти к основному содержимому
Версия: 7.0

Brief: формы

Структура формы

Форма — универсальный элемент, описывающий, какие объекты и какие свойства для них читаются. Объявляется инструкцией FORM и состоит из блоков:

  • OBJECTS — объекты формы с классами; объекты в одних скобках образуют группу объектов, наборы которой являются их декартовым произведением;
  • PROPERTIES — свойства и действия, которым передаются объекты формы;
  • FILTERS — свойства-условия: остаются наборы объектов со значением не NULL;
  • ORDERS — сортировка наборов объектов;
  • FILTERGROUP — фильтры, из которых пользователь выбирает один активный;
  • TREE — несколько групп объектов, показываемых одной таблицей-деревом.
FORM orders
OBJECTS o = Order
PROPERTIES(o) date, number
OBJECTS d = OrderDetail
PROPERTIES(d) nameSku, quantity
FILTERS order(d) = o
;

Аналогия: запрос SELECT сразу по нескольким наборам строк, каждый со своей выборкой. Подробно — структура формы.

Интерактивное представление

В интерактивном представлении пользователь работает с открытой формой: выбирает текущие объекты, меняет первичные свойства, вызывает действия. Данные читаются по мере необходимости, изменения сразу видны. Группа объектов показывается таблицей или панелью, и только группы, перечисленные в блоке TREE, объединяются в одно дерево; фильтры и сортировки пользователь может добавлять сам.

Свойство отображается ровно в одной группе объектов — своей группе отображения, по умолчанию последней из тех, чьи объекты ему переданы. Свойство, у которого группы отображения нет вовсе, — например, свойство без параметров — попадает в PANEL верхнего уровня формы, а в представлении TOOLBAR — в TOOLBARBOX.

Какое представление используется, задается не в форме, а в операторе ее открытия, поэтому одна форма обслуживает их все. Расположение компонентов на экране задает дизайн формы, см. Brief: дизайн форм.

Печатное представление

Печатное представление — одно из двух статичных: все данные читаются на момент открытия, обратной связи нет. Группы объектов выстраиваются в иерархию: свойства родительской группы выводятся по разу на каждый её собственный набор объектов, под ним идут соответствующие наборы дочерней, и затем всё повторяется для следующего набора. Файл получается из этого, только если задан формат; без него отчет отрисовывается интерактивно — показывается пользователю, уходит на принтер или доставляется сообщением. Группы объектов выстраиваются в иерархию — свойства родительской группы выводятся один раз, дочерней — для всех ее наборов объектов.

На выходе PDF, DOC, DOCX, XLS, XLSX, HTML, RTF: предпросмотр, печать на принтере или файл. Макет описывает дизайн отчета — файл-шаблон .jrxml, который ищется по каноническому имени формы; если шаблон не найден, платформа строит дизайн автоматически по структуре формы (Brief: отчеты).

Структурированное представление

Структурированное представление — второе статичное после печатного: оно читает все данные на момент открытия формы и берет иерархию ее групп объектов — свойства родительской группы по разу на каждый ЕЕ СОБСТВЕННЫЙ набор объектов, а под ним вложены соответствующие наборы дочерней, — но записанная как данные, а не как страница — JSON, XML, CSV, DBF, XLS, XLSX, TABLE.

Форма задает и структуру, в которую данные записываются, и структуру, из которой они читаются. При чтении форматы те же, только для Excel ключевое слово одно, XLS, и оно принимает файлы и .xls, и .xlsx. Что это означает для каждого направления — в Brief: экспорт данных и Brief: импорт данных.

Открытие формы (SHOW, DIALOG, PRINT, EXPORT)

Оператор открытия формы создает действие, которое открывает форму в выбранном представлении.

ОператорПредставлениеНазначение
SHOWинтерактивноепоказать форму пользователю
DIALOGинтерактивноето же плюс возврат текущего значения объекта как введенного значения
PRINTпечатноеотчет: предпросмотр, печать или файл
EXPORTструктурированноевыгрузка данных формы в файл

Оператор IMPORT форму не открывает: он разбирает файл и пишет значения в свойства формы так, чтобы обратная выгрузка этой формы воспроизвела исходный файл (импорт формы).

selectSku (OrderDetail d) { DIALOG skus OBJECTS s INPUT DO sku(d) <- s; }
printOrder (Order o) { PRINT printOrder OBJECTS o = o XLSX TO orderFile; }

Передача объектов и режим открытия

Блок OBJECTS оператора открытия передает форме значения объектов: в интерактивном представлении переданное значение становится текущим объектом, в статичном — добавляется фильтр на равенство ему. По умолчанию NULL среди передаваемых значений отменяет действие; ключевое слово NULL после значения это разрешает, а для объекта DIALOG, помеченного INPUT или CHANGE, разрешено автоматически.

У SHOW и DIALOG дополнительно задается расположение формы — FLOAT, DOCKED, EMBEDDED, POPUP, IN. У SHOW есть опция WAIT / NOWAIT; у DIALOG такой опции нет, и он выполняется синхронно всякий раз, когда его результат используется — блоком DO / ELSE или обратной записью CHANGE.

Подробно — Открытие формы. Форма открывается также выбором пункта навигатора, см. Brief: навигатор.