МЕТОД FLTSTRUCT КЛАССОВ МЕТАСХЕМЫ

Процедура метода fltstruct описывает структуру фильтра для браузера на основе navigate.cqr, вызываемого по F6. Входным параметром данной процедуры является код класса. За формирования самого фильтра отвечает процедура flt-file.p.

Рассмотрим применяемую в АБС Бисквит модель фильтра браузера. Он состоит из атрибутов объединенных в разделы. Разделы фильтра представляются в левой части формы фильтра, а входящие в них атрибуты в правой ее части. Фильтрация объектов браузера осуществляется за счет динамического изменения запроса согласно установленным в фильтре значениям.

filterstr1.jpg

Все атрибуты и их значения заносятся во временную таблицу 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.