Взаимодействие со встроенными фильтрами |
Если пользователь, настраивая (создавая) условие фильтра, нажмет клавишу F3 при выборе значения поля, можно вызвать для выбора значения прикладной интерфейс, диалог или окно.
Правила создания и использования встроенных фильтров изложены в документе "Система "Галактика ERP". Основы использования".
При настройке встроенного фильтра пользователь может выбрать значение поля по клавише F3. При этом издается событие cmFilterPick, которое можно обработать в интерфейсе, из которого был вызван фильтр. Определить поле, значение которого выбирается, можно с помощью функции Target. Сравнение производится так:
if Target = #<поле или Таблица.поле> then { обработка };
Текущее значение выбираемого поля передается из фильтра в интерфейс через переменную filterPickVar : string и может быть использовано для позиционирования в интерфейсе выбора. Значение поля, подставляемое в условия фильтрации, возвращается также в переменной filterPickVar.
После обработки события cmFilterPick необходимо вызвать функцию Stop, которая блокирует обработку события по умолчанию.
В примере приведен фрагмент интерфейса, в котором предусмотрено использование поля Abonents.officeNo во встроенном фильтре. Пользователь находит значение этого поля по имени абонента (поле Abonents.name). Для поиска значения используется окно выбора window1, которое состоит из единственного browser'а на поле Abonents.name. Выбранная запись становится текущей. Значение поля officeNo текущей записи возвращается в фильтр.
cmFilterPick : if Target = #Abonents.officeNo then { var aOfficeNo : integer; aOfficeNo := integer(filterPickVar); var aResult : integer; aResult := modifier getFirst Abonents where ((aOfficeNo == Abonents.officeNo)); if aResult <> tsOk then aResult := modifier getFirst Abonents; if RunWindowModal (window1) <> cmCancel then filterPickVar := String(Abonents.officeNo); Stop; }