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

Блоки фильтров и сортировок

Блоки фильтров и сортировок инструкции FORM - добавление фильтров и сортировок в структуру формы, а также групп фильтров и пользовательских фильтров в интерактивное представление формы.

Блок фиксированных фильтров

Синтаксис

FILTERS expression1 [filterType1], ..., expressionN [filterTypeN]

Опции filterType могут указываться после каждого выражения. Поддерживается следующий набор опций:

USER | FIXED

Описание

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

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

Фильтр по добавляемому на форму свойству можно также задать опцией FILTER в блоке свойств и действий.

Параметры

  • expression1, ..., expressionN

    Список выражений - фильтров.

  • filterType1, ..., filterTypeN

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

  • USER | FIXED

    Ключевые слова, определяющие тип фильтра: FIXED - фиксированный фильтр (по умолчанию); USER - пользовательский фильтр. Свойство должно быть предварительно добавлено на форму.

Примеры

CLASS Stock;
name = DATA ISTRING[100] (Stock);
region = DATA Region (Stock);

CLASS Group;
name = DATA ISTRING[100] (Group);

group = DATA Group(Sku);
nameGroup (Sku s) = name(group(s));

active = DATA BOOLEAN (Sku);

onStock = DATA NUMERIC[10,2] (Stock, Sku);

FORM onStock 'Остатки' // создаем форму, в которой можно смотреть остатки по товарам
OBJECTS r = Region PANEL // добавляем объект регион
// добавляем свойство имя региона, при нажатии на который пользователь сможет его выбирать
PROPERTIES name(r) SELECTOR

OBJECTS st = Stock // добавляем объект склады
PROPERTIES name(st) READONLY // добавляем имя склада
FILTERS region(st) == r // добавляем фильтр, чтобы показывались только склады выбранного региона

OBJECTS s = Sku // добавляем товары
// добавляем наименование группы товаров, присваивая ему groupName в качестве имени свойства на форме,
// а также наименование и остаток по товару
PROPERTIES READONLY groupName = nameGroup(s), name(s), onStock(st, s)
FILTERS active(s) // включаем, чтобы показывались только активные товары
;

Блок группы фильтров

Синтаксис

[EXTEND] FILTERGROUP groupName [nullType]
FILTER caption1 expression1 [binding1 ... bindingK] [DEFAULT]
...
FILTER captionN expressionN [binding1 ... bindingK] [DEFAULT]

Где каждая привязка binding имеет следующий синтаксис:

[bindingType] bindingLiteral [showType]

Описание

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

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

Параметры

  • groupName

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

  • nullType

    Наличие в группе фильтра (Все), который позволяет не применять ни один из фильтров. Одно из:

    • NULL - фильтр (Все) добавляется в группу (значение по умолчанию)
    • NONULL - фильтр (Все) не добавляется в группу, при этом при объявлении группы первый фильтр становится выбранным по умолчанию (если опция DEFAULT не указывает другой)
  • caption1, ..., captionN

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

  • expression1, ..., expressionN

    Выражения, описывающие фильтры.

  • binding1 ... bindingK

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

    • bindingType

      Вид привязки. Задается одним из ключевых слов:

      • KEY - сочетание клавиш (значение по умолчанию)
      • MOUSE - событие мыши
    • bindingLiteral

      Строковый литерал, задающий привязку. Для сочетания клавиш принцип задания аналогичен способу задания параметра в методе Java-класса Keystroke.getKeystroke(String). Формат строки и дополнительные опции аналогичны опциям CHANGEKEY и CHANGEMOUSE в опциях действий.

    • showType

      Указание, показывать ли привязку в заголовке фильтра в пользовательском интерфейсе. Задается одним из ключевых слов:

      • SHOW - показывать (значение по умолчанию)
      • HIDE - не показывать
  • DEFAULT

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

Примеры

active = DATA BOOLEAN (Stock);

EXTEND FORM onStock // расширяем ранее созданную форму с остатками
// создаем группу фильтров с одним фильтрам, которая будет показываться в виде флажка,
// по которому пользователь сможет включать/отключать фильтр
FILTERGROUP stockActive
// добавляем отбор по только активным складам, который будет применяться по нажатию клавиши F11
FILTER 'Активные' active(st) 'F11'
// создаем новую группу фильтров, в которой пользователь сможет выбирать один из фильтров
// при помощи выпадающего списка
FILTERGROUP skuAvailability
// добавляем отбор, который будет показывать только товары на остатках, выбираться по клавише F10
// и будет автоматически выбран при открытии формы
FILTER 'Есть на остатках' onStock(st, s) 'F10' DEFAULT
;

// ...

EXTEND FORM onStock
EXTEND FILTERGROUP skuAvailability
FILTER 'Отрицательные остатки' onStock(st, s) < 0 'F9' // добавляем отбор по выражению
;

Блок сортировок

Синтаксис

ORDERS [FIRST] expression1 [orderType1] [DESC], ..., expressionN [orderTypeN] [DESC]

Опции orderType могут указываться после каждого выражения. Поддерживается следующий набор опций:

USER | FIXED

Описание

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

Сортировку по добавляемому на форму свойству можно также задать опцией ORDER в блоке свойств и действий.

Параметры

  • FIRST

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

  • expression1, ..., expressionN

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

  • orderType1, ..., orderTypeN

    Опции сортировки для соответствующего выражения.

  • DESC

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

  • USER | FIXED

    Ключевые слова, определяющие тип сортировки: USER — пользовательская сортировка (по умолчанию для имен свойств на форме), которую можно переопределять из интерфейса. Свойство должно быть предварительно добавлено на форму. FIXED — фиксированная сортировка, которая задаётся только в коде формы (по умолчанию для остальных выражений).

Примеры

EXTEND FORM onStock // расширяем ранее созданную форму с остатками
ORDERS name(s) // включаем сортировку по наименования склада в списке складов
// Включаем сортировку по возрастанию имени группы, а внутри по убыванию остатка на складе.
// Следует отметить, что в качестве свойства указывается имя свойства на форме groupName,
// а не просто имя свойства nameGroupSku
ORDERS groupName, onStock(st, s) DESC
// Включаем фиксированную сортировку, которая не заменяется пользовательской
ORDERS name(s) FIXED
;