Активный фильтр (текущий срез данных) – это локальная переменная, содержащая текущее значение поля, на котором стоит курсор в выборке по таблице, загруженной в память на локальном рабочем месте. Каждый активный фильтр соответствует определенному полю в таблице (например, дата текущей записи, текущее событие, текущая запись в расписании), системной константе или функции (например, текущая дата, текущий пользователь). Значение активного фильтра обновляется, если произошло смещение позиции курсора. Таким образом, при использовании активных фильтров необходимо учитывать, что их значение будет меняться в зависимости от того, на какой записи таблицы стоит позиционирование в данный момент.
Динамический фильтр создается системой автоматически при открытии какой-либо табличной формы и соответствует полю запроса, на основе которого генерируется данная форма. Динамические фильтры создаются для первичного ключа таблицы, полей типа "ссылка на таблицу" и полей типа "дата".
Создание динамических фильтров происходит в следующих случаях:
1.если открыта некоторая табличная форма из меню МЕДИАЛОГ: например, при открытии списка талонов (меню Услуги / Талоны) появляются динамические фильтры Талоны.Пациент, Талоны.Филиал и другие фильтры, соответствующие полям запроса bill.ini;
2.если на текущую экранную форму вынесен один из объектов Оказанные услуги / Направления / Назначение медикаментов / Размещения, появляются динамические фильтры соответствующие полям запроса, на основе которых генерируется данный объект. Набор динамических фильтров зависит от выбранной вкладки: например, если открыта вкладка Направления, доступны только фильтры, относящиеся к запросу PatDirecEMC.ini. При выходе с экранной формы данные динамические фильтры станут недоступны;
3.если на текущую экранную форму вынесен статистический запрос, становятся доступны фильтры, соответствующие полям этого запроса. В один объект Стат. запрос может быть добавлено несколько запросов: в этом случае в системе будут доступны фильтры текущего запроса.
Значение динамического фильтра равно значению поля в строке, на которой установлен курсор. При смещении позиции курсора значение динамического фильтра обновляется.
Динамическим фильтром может быть любое поле любой таблицы. При использовании динамических фильтров необходимо убедиться, что в нужный момент требуемый динамический фильтр будет существовать (в МЕДИАЛОГ будет открыта требуемая форма).
Просмотр значений активных и динамических фильтров
Для просмотра значений всех активных и динамических фильтров в текущий момент времени нужно нажать клавиши Ctrl+Alt+Home. Вывод значений осуществляется в текстовом документе следующего формата:
Название фильтра [Системное имя фильтра]=Значение
Системное имя активного фильтра имеет префикc AF_. Системное имя динамического фильтра соответствует имени таблицы и поля, значение которого он содержит.
Использование активных и динамических фильтров
Активные и динамические фильтры используются:
·в редакторе формул, вызываемом при задании формулы поля, контролей на таблицы, для вставки формулы в макроподстановку или макет и т.д.;
·в свойствах кнопки Команда Windows;
·в условиях на таблицы и в выражениях запросов (простых, пакетных, локальных), а также в скриптах инициализации запросов; см. разделы:
oВизуальный конструктор запросов (DBKernel.pdf);
oВизуальный конструктор локальных запросов (EMR.pdf);
Создание пользовательских активных фильтров
Активные фильтры делятся на пользовательские и системные. Для таблиц ЭМК (доступных из меню Настройка / Структура базы данных) можно создавать пользовательские активные фильтры по любому полю. Изменение пользователем системных активных фильтров невозможно.
Для создания активного фильтра по некоторому полю, необходимо установить для данного поля признак Акт. фильтр в окне редактирования структуры таблицы.
Пример применения активного фильтра
На титульном листе пациента имеется два поля-ссылки: справочник населенных пунктов и справочник улиц. Справочник улиц имеет ссылочное поле на справочник населенных пунктов.
При обращении пользователя к справочнику улиц в нем автоматически должны отфильтроваться улицы выбранного города.
Для реализации такого фильтра необходимо выполнить следующие настройки:
1)включить активный фильтр по полю Населенный пункт таблицы Пациенты (рис. 5.1);
Рисунок 5.1. Активный фильтр по полю "Населенный пункт"
2)создать статистический запрос для выбора улиц (рис. 5.2); в условиях на строку таблицы "Справочник: улицы России" прописать
ADR_STREET.ADR_GOROD_ID = :AF_TI_PATIENTS.OBLAST_GOROD,
где
ADR_GOROD_ID — ID элемента справочника улиц;
:AF_TI_PATIENTS.OBLAST_GOROD — ранее созданный активный фильтр по полю Населенный пункт;
для вставки в запрос активного фильтра нужно воспользоваться меню Активные фильтры кнопки Добавить поле или подзапрос;
Рисунок 5.2. Запрос для выбора улиц
3)на экранной форме в свойствах поля Улица вместо ссылки на таблицу выбрать созданный запрос (рис. 5.3).
Рисунок 5.3. Поле-ссылка "Улица"