МЕТОД FLTSTRUCT КЛАССОВ МЕТАСХЕМЫ
Процедура метода fltstruct описывает структуру фильтра для браузера на основе navigate.cqr, вызываемого по F6. Входным параметром данной процедуры является код класса. За формирования самого фильтра отвечает процедура flt-file.p.
Рассмотрим применяемую в АБС Бисквит модель фильтра браузера. Он состоит из атрибутов объединенных в разделы. Разделы фильтра представляются в левой части формы фильтра, а входящие в них атрибуты в правой ее части. Фильтрация объектов браузера осуществляется за счет динамического изменения запроса согласно установленным в фильтре значениям.
Все атрибуты и их значения заносятся во временную таблицу flt-attr описанную в flt-file.i. При вызове браузера в browseld.p, формируется пустой фильтр процедурой emptyflt.p, создающей единственный раздел содержащий все поля таблицы класса.
Для описания структуры фильтра применяются следующие инклюд-файлы:
- flt-file.i - объявление временной таблицы фильтра flt-attr;
- flt-file.beg - начало обработки (входные параметры);
- flt-file.add - описание разделов фильтра;
- flt-file.atr - переопределение атрибутов фильтра;
- emptyfld.atr - сброс полей фильтра (1,2,3, и т.д.) на символ пробел, пример: {emptyfld.atr 1};
- flt-file.end - завершающие обработки.
Общая структура процедуры метода должна выглядеть следующим образом:
{flt-file.beg}
{flt-file.add}
...
{flt-file.atr}
...
{emptyfld.atr}
...
{flt-file.end}
RETURN.
ОПИСАНИЕ РАЗДЕЛОВ ФИЛЬТРА (FLT-FILE.ADD)
Каждый раздел имеет свой порядковый номер, наименование и набор атрибутов входящих в него. Раздел и входящие в него атрибуты должны быть связаны с одной таблицей БД. Таблицы могут быть только из числа используемых при построении запроса ({navigate.cqr &nav-buf-list = <список имен всех буферов, которые могут участвовать в запросе>}).
Формирование разделов фильтра осуществляется с помощью инклюд-файла flt-file.add, которому передаются следующие аргументы:
- &cat - порядковый номер (обязательный);
- &tablef - имя таблицы (обязательный);
- &classf - код класса;
- &include - список полей (кодов атрибутов фильтра) раздела (обязательный);
- &helpt - подсказка раздела;
- &labelt - наименование раздела, по умолчанию - наименование таблицы;
- &hiddenf - не показывать поле;
- &sensitivef - не позволять редактировать поле;
- &sortf - поля (атрибуты) для сортировки;
- &double - парные атрибуты;
Каждому атрибуту фильтра определяется набор свойств, часть которых аналогична набору свойств полей таблицы БД, такие как label (метка), help (подсказка), format (формат данных) и т.д.
Код атрибута должен быть уникальным. Как правило код атрибута фильтра указывается равным наименованию поля в таблице БД раздела к которому он относится. При этом код атрибута фильтра автоматически связывается с этим полем БД, принимая его свойства.
В flt-file.add зарезервированы коды для дополнительных реквизитов поля начинающиеся "sc-" (код реквизита) и "sv-" (значение реквизита).
Атрибуты указанные в &double создаются парными, так например, в случае &double = "'open-date'" в таблице flt-attr будет создано два кода атрибута open-date1 и open-date2.
ПЕРЕОПРЕДЕЛЕНИЕ АТРИБУТОВ ФИЛЬТРА (FLT-FILE.ATR)
С помощью инклюд-файла flt-file.atr возможно переопределение свойств созданных атрибутов в таблице flt-attr.
Такая необходимость возникает в основном тогда, когда в разделе был указан код атрибута фильтра отличный от существующих полей в таблице раздела, и тем самым он не был связан с полем таблицы БД, или же просто необходимо переопределить свойства унаследованные от поля таблицы БД.
В аргументе &xcode данному инклюд-файлу необходимо передать код атрибута фильтра, свойства которого необходимо переопределить, а так же указать &asgn = yes. Далее с помощью соответствующих аргументов согласно представленной ниже таблице передаются новые значения записываемые в соответствующие им поля таблицы flt-attr.
Аргумент | Поле в таблице flt-attr | Описание |
&asgn | - | |
&xcode | - | изменяемый код атрибута фильтра |
&a-code | attr-code | перезаписываемый код атрибута фильтра |
&a-category | attr-category | код фрейма |
&a-class | attr-class | класс метасхемы |
&a-table | attr-table | имя таблицы БД с которой связан атрибут |
&a-basic | attr-basic | поле таблицы БД |
&a-basic-signs | attr-basic-signs | имя доп. реквизита |
&a-label | attr-label | метка атрибута |
&a-help | attr-help | подсказка атрибута |
&a-format | attr-format | формат ввода-вывода данных атрибута |
&a-datatype | attr-datatype | тип данных в форме фильтра |
&a-base-datatype |
attr-base-datatype | тип данных поля в БД |
&a-code-value | attr-code-value | значение атрибута |
&a-initial | attr-initial | начальное значение атрибута |
&a-list | attr-list | список допустимых значений атрибута |
&a-multi | attr-multi | yes - возможен список значение в поле attr-code-value; no - не допустим список значений |
&a-order | attr-order | порядковый номер отображения во фрейме |
&a-sensitive | attr-sensitive | изменяемый ли атрибут |
&a-hidden | attr-hidden | скрытый атрибут |
&a-procename | attr-procename | имя процедуры вызываемой но нажатию F1 на атрибуте |
&a-param | attr-param | параметры процедуры |
&a-paramtype | attr-paramtype | типы параметров процедуры |
&a-view-as | attr-view-as | view-as объект отображения атрибута в форме фильтра |
&a-val-labels | attr-val-labels | метки значений в radio-set |
&a-op | attr-op | оператор сравнения: =,can-do,>=,<= |
&a-op | attr-op-initial | начальный оператор сравнения |
&a-op-update | attr-op-update | допустимо ли изменение пользователем оператора сравнения |
&a-sort | attr-sort | может принимать участие в сортировке: yes - может; no - не может. |
&a-sort-order | attr-sort-order | порядок сортировки. |
&a-sort-desc | attr-sort-desc | тип сортировки, desc или asc. |
&a-signs-pos | attr-signs-pos-usr | жестко задаваемое место буфера signs при фильтрации по доп. реквизитам: no - перед соответствующей таблицей; yes - после соответствующей таблицей. |
ПРИМЕР
{flt-file.beg}
{flt-file.add
&cat = 1
&tablef = "'loan'"
&labelt = "'Пакеты услуг'"
&include = "'1,cont-type,doc-ref,2,cust-cat,cust-id,class-code'"
&sortf = "'contract,doc-ref,cust-cat,icust-id'"
&hiddenf = "'class-code'"
}
{flt-file.add
&cat = 2
&tablef = "'loan'"
&labelt = "'Даты'"
&include = "'open-date,3,end-date,4,close-date'"
&double = "'open-date,end-date,close-date'"
&sortf = "'end-date'"
}
{flt-file.add
&cat = 3
&tablef = "'loan'"
&labelt = "'Доп. реквизиты'"
&include = "'sc-1,sv-1'"
}
{flt-file.atr
&asgn = yes
&xcode = "'cust-id'"
&a-label = "'Номер клиента:'"
&a-help = "'Номер клиента (F1 - выбор)'"
&a-datatype = "'CHARACTER'"
&a-procename = "'browseld'"
&a-param = "'person,,,,4'"
&a-initial = "'*'"
}
{flt-file.atr
&asgn = yes
&xcode = "'open-date1'"
&a-label = "'Открыт С:'"
&a-help = "'Дата Открытия (С)'"
&a-format = "'99/99/9999'"
&a-initial = "''"
}
{flt-file.atr
&asgn = yes
&xcode = "'open-date2'"
&a-label = "'По:'"
&a-help = "'Дата Открытия (По)'"
&a-format = "'99/99/9999'"
&a-initial = "''"
}
{flt-file.atr
&asgn = yes
&xcode = "'end-date1'"
&a-label = "'Кончается С:'"
&a-help = "'Дата окончания (С)'"
&a-format = "'99/99/9999'"
&a-initial = "''"
}
{flt-file.atr
&asgn = yes
&xcode = "'end-date2'"
&a-label = "'По:'"
&a-help = "'Дата окончания (По)'"
&a-format = "'99/99/9999'"
&a-initial = "''"
}
{flt-file.atr
&asgn = yes
&xcode = "'close-date1'"
&a-label = "'Закрыт С:'"
&a-help = "'Дата закрытия (С)'"
&a-format = "'99/99/9999'"
&a-initial = "''"
}
{flt-file.atr
&asgn = yes
&xcode = "'close-date2'"
&a-label = "'По:'"
&a-help = "'Дата закрытия (По)'"
&a-format = "'99/99/9999'"
&a-initial = "''"
}
{emptyfld.atr 1}
{emptyfld.atr 2}
{emptyfld.atr 3}
{emptyfld.atr 4}
{flt-file.end}
RETURN.
Как вы могли заметить, в описании разделов в примере указаны загадочные атрибуты в виде цифр 1, 2, 3 и т.д. Эти атрибуты применяются для вставки отступа в экранной форме. Для каждого из них в конце процедуры метода необходимо включить инклюд-файл emptyfld.atr.