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

Инструкция FORM

Инструкция FORM - создание формы.

Синтаксис

FORM name [caption] formOptions
formBlock1
...
formBlockN
;

После указания имени и заголовка формы в произвольном порядке указываются опции формы formOptions:

imageSetting
LOCALASYNC

После опций формы описываются в произвольном порядке блоки формы formBlock1 ... formBlockN:

[EXTEND] FORMS formItem1, ..., formItemN
OBJECTS ...
TREE ...
PROPERTIES ...
FILTERS ...
[EXTEND] FILTERGROUP ...
ORDERS ...
PIVOT ...
[EVENTS] ...
HINTNOUPDATE LIST propertyId1, ..., propertyIdN
HINTTABLE LIST propertyId1, ..., propertyIdN
REPORT propertyExpression
REPORTS reportPath1, ..., reportPathN
FORMEXTID extID
EDIT className OBJECT objectName
LIST className OBJECT objectName
CUSTOMS apiItem1, ..., apiItemN

Где каждый formItem имеет следующий синтаксис:

[alias =] formName [(mappingBlock1 ... mappingBlockM)]

Где каждый mappingBlock имеет следующий синтаксис:

mappingType [newName1 = oldName1, ..., newNameK = oldNameK]

Где каждый reportPath имеет один из следующих синтаксисов:

TOP propertyExpression
groupObjectName propertyExpression

Где каждый apiItem имеет следующий синтаксис:

[apiName =] [ACTION] propertyId

Описание

Инструкция FORM объявляет новую форму и добавляет ее в текущий модуль. Кроме того эта инструкция позволяет описать структуру формы, а также ее статичное и частично интерактивное (за исключением дизайна формы) представление. В начале инструкции задаются имя и заголовки, затем указываются опции формы, а затем объявление содержит произвольное количество блоков, описывающих структуру формы. Их можно использовать в любом порядке, при условии, что каждый блок объявляется позже блоков, элементы которых он использует. Каждый блок может использоваться произвольное количество раз.

Параметры

Опции формы (formOptions)

  • imageSetting

    Настройка иконки формы. Эта опция позволяет настроить отображение иконки вручную. Может иметь один из двух видов:

    • IMAGE [imageLiteral]

      Указание иконки формы. Если imageLiteral не указывается, то происходит переключение в режим автоматической установки иконки.

      • imageLiteral

        Строковый литерал, значение которого определяет иконку.

    • NOIMAGE

      Ключевое слово, указывающее на то, что иконка формы должна отсутствовать.

  • LOCALASYNC

    Ключевое слово, указывающее на то, что обработки локальных событий будут выполняться после отображения изменений на форме.

Блоки формы (formBlock1 ... formBlockN)

  • [EXTEND] FORMS formItem1, ..., formItemN

    Встраивает в форму содержимое перечисленных ранее объявленных форм: их объекты, группы объектов и деревья, свойства и действия, фильтры и группы фильтров, сортировки, события, хинты (HINTNOUPDATE, HINTTABLE), а также дизайн. Встроенные элементы сохраняют свои имена, и к ним можно обращаться в последующих блоках этой формы, а также в инструкциях EXTEND FORM и DESIGN так же, как к объявленным явно.

    Без ключевого слова EXTEND все элементы встраиваемой формы добавляются как новые, а ее дизайн добавляется отдельным блоком в контейнер OBJECTS дизайна по умолчанию текущей формы. Контейнеры дизайна по умолчанию встраиваемой формы при этом получают имена с суффиксом (FORM f), где f - это alias, а если он не задан - имя встраиваемой формы; к таким контейнерам можно обращаться в инструкции DESIGN (например BOX(FORM f)).

    С ключевым словом EXTEND элементы встраиваемой формы, для которых на текущей форме уже есть элементы с такими же именами, не добавляются как новые, а отождествляются с ними: содержимое и настройки элемента встраиваемой формы переносятся на существующий элемент, а ссылки на него из остальных встраиваемых элементов переадресуются. Сопоставление по именам выполняется для объектов, свойств и действий, групп фильтров и контейнеров дизайна; автоматически создаваемые элементы (например, контейнеры группы объектов) следуют за элементами, которым они принадлежат. Дизайн при этом сливается с дизайном текущей формы.

    • alias

      Имя, которое используется вместо имени встраиваемой формы в суффиксе имен контейнеров ее дизайна (в частности, позволяет различать контейнеры при встраивании одной и той же формы несколько раз). Простой идентификатор. Учитывается только без ключевого слова EXTEND.

    • formName

      Имя встраиваемой формы. Составной идентификатор.

    • mappingType

      Тип сопоставляемых элементов в блоке сопоставления mappingBlock. Задается одним из ключевых слов:

      • OBJECTS - объекты
      • PROPERTIES - свойства и действия на форме
      • FILTERGROUPS - группы фильтров
      • DESIGN - компоненты дизайна

      С ключевым словом EXTEND элементы типов, для которых блок сопоставления не задан, сопоставляются автоматически по совпадению имен; явно заданный блок отключает автоматическое сопоставление для элементов своего типа.

    • newName1 = oldName1, ..., newNameK = oldNameK

      Список пар сопоставления; имена задаются простыми идентификаторами. oldName - имя элемента на встраиваемой форме, newName - имя на текущей форме. Если элемент с именем newName на текущей форме уже существует, элемент встраиваемой формы отождествляется с ним, иначе - встраивается под именем newName.

  • OBJECTS ...

    Добавляет объекты на форму. Синтаксис блока объектов.

  • TREE ...

    Добавляет дерево объектов на форму. Синтаксис блока дерева объектов.

  • PROPERTIES ...

    Добавляет свойства и действия на форму. Синтаксис блока свойств и действий.

  • FILTERS ...

    Добавляет фиксированные фильтры на форму. Синтаксис блока фиксированных фильтров.

  • [EXTEND] FILTERGROUP ...

    Добавляет группу фильтров на форму либо расширяет существующую. Синтаксис блока группы фильтров.

  • ORDERS ...

    Добавляет сортировки на форму. Синтаксис блока сортировок.

  • PIVOT ...

    Устанавливает начальные настройки вида представления сводная таблица. Синтаксис блока сводных таблиц.

  • [EVENTS] ...

    Устанавливает действия, выполняемые при определенных событиях. Синтаксис блока событий.

  • HINTNOUPDATE LIST propertyId1, ..., propertyIdN

    Помечает, что закэшированные значения перечисленных свойств не должны обновляться при изменениях в сессии этой формы.

  • HINTTABLE LIST propertyId1, ..., propertyIdN

    Помечает, что изменения перечисленных свойств при чтении данных этой формой должны материализовываться во временную таблицу. Список задается так же, как в блоке HINTNOUPDATE.

  • FORMEXTID extID

    Указание имени, которое будет использоваться для экспорта / импорта этой формы. Используется только в структурированном представлении.

    • extId

      Строковый литерал.

  • REPORT propertyExpression

    Указание свойства, значение которого будет использовано в качестве имени файла отчета для пустой группы. В качестве параметров можно использовать имена уже объявленных объектов на форме. Предполагается, что значения этих объектов будут переданы при открытии формы в печатном представлении (если этого не будет сделано, они будут считаться равными NULL).

  • REPORTS reportPath1, ..., reportPathN

    Указание свойств, значения которых будут использоваться в качестве имен файлов отчета для групп объектов формы. Вместо ключевого слова REPORTS можно использовать его синоним REPORTFILES.

    • TOP

      Ключевое слово, при указании которого свойство задается для пустой группы. Полностью аналогично блоку REPORT.

    • groupObjectName

      Имя группы объектов, для которой задается свойство. Задается простым идентификатором. Группа объектов при этом помечается как отдельный отчет. Полностью аналогично опции SUBREPORT блока объектов.

    • propertyExpression

      Выражение.

  • EDIT className OBJECT objectName

    Устанавливает текущую форму в качестве формы редактирования объектов указанного класса.

  • LIST className OBJECT objectName

    Устанавливает текущую форму в качестве формы выбора объекта указанного класса.

    • className

      Имя пользовательского класса, для выбора объекта которого будет вызываться описываемая форма. Задается составным идентификатором.

    • objectName

      Имя объекта формы, текущее значение которого будет использоваться в качестве выбираемого объекта. Задается простым идентификатором.

  • CUSTOMS apiItem1, ..., apiItemN

    Задает список свойств и действий, которые разрешено вызывать из клиентского JavaScript-кода формы независимо от общих настроек доступа к API (настройка enableAPI, аннотация @@api). Каждый элемент доступен под именем apiName, а если оно не задано - под собственным именем свойства (действия) без пространства имен. Имена элементов должны быть уникальны в пределах формы.

    • apiName

      Имя, под которым свойство (действие) будет доступно в клиентском коде. Простой идентификатор.

    • ACTION

      Ключевое слово. Если задано, то считается, что в propertyId задается действие. Если не задано, первоначально считается, что задается свойство, и только если оно не найдено - действие.

    • propertyId

      Идентификатор свойства или действия.

Примеры

CLASS Document;

// объявляем форму Документы
FORM documents 'Документы'
// Добавляем один объект класса Document, по этому имени объект будет доступен в операторах
// DESIGN, SHOW, EXPORT, DIALOG и др.
OBJECTS d = Document

// ... добавляем свойства и фильтры на форму

// помечаем что данная форма должна использоваться, когда необходимо выбрать документ,
// при этом объект d должен использоваться как возвращаемое значение
LIST Document OBJECT d
;

CLASS Item;

// объявляем форму Товар
FORM item 'Товар'
// добавляем объект класса Item и помечаем, что он должен отображаться в панель
// (то есть видимо только одно значение)
OBJECTS i = Item PANEL

// ... добавляем свойства и фильтры на форму

// помечаем что данная форма должна использоваться, когда необходимо добавлять или редактировать товар
EDIT Item OBJECT i
;

// объявляем форму со списком Товаров
FORM items 'Товары'
OBJECTS i = Item

// ... добавляем свойства и фильтры на форму

// добавляем кнопки, которые будут создавать и редактировать товар, используя форму item
PROPERTIES(i) NEWSESSION NEW, EDIT
;

CLASS Invoice;
CLASS InvoiceDetail;

// объявляем форму печати инвойса
FORM printInvoice
OBJECTS i = Invoice // добавляем объект класса инвойс, для которого будет идти печать

// ... добавляем свойства и фильтры на форму
;

// разбиваем определение формы на две инструкции (вторую инструкцию можно перенести в другой модуль)
EXTEND FORM printInvoice
// добавляем строки инвойса, каждая из которых будет использоваться в отчете в качестве детализации
OBJECTS d = InvoiceDetail

// ... добавляем свойства и фильтры на форму

// задаем файл отчета для группы объектов d, помечая ее как отдельный отчет
REPORTS d 'printInvoiceDetail.jrxml'
;
// объявляем действие , при выполнении которого будет открываться форма печати инвойса
print (Invoice invoice) { PRINT printInvoice OBJECTS i = invoice; }
CLASS Customer;
name = DATA ISTRING[100] (Customer);

FORM customers 'Покупатели'
OBJECTS c = Customer
PROPERTIES(c) name
;

// встраиваем список покупателей в другую форму
FORM customerBoard 'Покупатели и заказы'
FORMS cust = customers
;

// объявляем расширенную копию формы customers
FORM customersExt 'Покупатели (расширенная)'
EXTEND FORMS customers
// объект c унаследован от формы customers
PROPERTIES(c) NEWSESSION NEW, DELETE
;