Применение фильтров
Фильтры позволяют отфильтровать в таблице или в отчете записи, удовлетворяющие определенным условиям. В программе имеется два вида фильтров:
1) В любом окне, содержащем какую либо таблицу, работает «Быстрый фильтр». При помощи «Быстрого фильтра» можно отфильтровать все записи, которые содержат заданную подстроку в любом из строковых полей таблицы. Вызывается «Быстрый фильтр» при помощи комбинации клавиш <Ctrl+Shift+F> (раскладка клавиатуры должны быть латинской). При этом появляется окно, в котором в поле «Искать» нужно ввести искомую подстроку и нажать кнопку [Включить фильтр]. После окончания поиска важно не забыть отключить фильтр: <Ctrl+Shift+F> и затем кнопка [Отключить].
2) Настраиваемый фильтр, который вызывается нажатием на кнопку [Выбрать фильтр], расположенную справа от поля «Фильтр» в верхней части окна. После нажатия этой кнопки появляется окно «Фильтры» со списком заранее написанных фильтров, относящихся к данной таблице (окну). Нажатие на кнопку [Выбрать] в окне «Фильтры» включает выбранный фильтр. При этом название фильтра видно в поле «Фильтр» в верхней части окна. Если записей в таблице очень много, то сразу после включения фильтра может быть достаточно долгий период ожидания - пока программа просмотрит все записи и отфильтрует из них записи, удовлетворяющие условию фильтра. Те же самые фильтры используются также и при печати различных отчетов и списков, что очень сильно повышает полезность отчетов. Особенно если применять фильтры совместно с указанием периода (с… по…) и других ограничений (автомобиль, клиент, операция и т.п.).
Окно Фильтры предназначено для редактирования и выбора настраиваемых фильтров. Фильтры могут добавляться в программу самими пользователями по мере необходимости. Окно "Фильтры" показывает только фильтры, относящиеся к той таблице, из которой оно было вызвано.
- Кнопка выбора фильтра
Добавление, изменение и удаление записей в списке фильтров производится при помощи следующих кнопок, расположенных в верхней части окна:
- Добавить новую запись о фильтре
- Изменить (открыть) существующую запись
- Удалить запись о фильтре
- Создать новую запись на основе существующей (копировать старую запись в новую)
- Кнопки для упорядочивания (перемещения) записей в списке фильтров.
- Экспорт списка фильтров в таблицу Excel
Окно формы записи о фильтре:
- Таблица - Название таблицы, для которой будет применяться данный фильтр. Это поле заполняется автоматически и его изменить нельзя
- Название фильтра - Название фильтра, по которому фильтр будет выбираться конечным пользователем
- Выражение - Выражение фильтра на языке Clarion. После вычисления выражение должно принимать значение "Истина" или "Ложь". Если выражение принимает значение "Истина" (не равно нулю), то условие фильтра считается выполненным и запись будет показана в таблице или в отчете. В выражениях можно применять имена полей таблиц базы данных и операторы и функции языка Clarion.
- Кнопка [Проверить выражение] - Проверка выражения фильтра на отсутствие синтаксических ошибок.
Для облегчения написания выражений фильтров в правой части окна имеется ряд кнопок для выбора и вставки в выражение операторов, функций и полей файлов базы данных. При помощи кнопки "Данные" можно вызвать окно "Описание таблиц", в котором можно выбрать поле базы данных. Возможен и другой вариант: можно выбрать поле из таблицы со списком полей, расположенной в правой части окна, при помощи кнопки [Выбрать].
При помощи кнопки [Функции] вызывается окно "Выбор функции", в котором можно посмотреть краткое описание и выбрать функцию языка Clarion:
Операторы языка можно вставлять в выражение фильтра "вручную" либо при помощи кнопок группы "Операторы", расположенных в окне "Фильтр" над полем выражения фильтра. Приоритет логических операторов ("and", "or", "not") ниже чем у арифметических операторов ("+", "-", "*", "/"), причем у оператора "логическое ИЛИ" ("or") приоритет ниже чем у оператора "логическое И" ("and"). Если вы не уверены в каком порядке будут выполняться операторы, рекомендуем для явного задания порядка выполнения широко применять скобки "(" и ")".
Чтобы правильно писать фильтры нужно знать обозначения полей базы данных программы. Эти обозначения видны, если подвести курсор мышки к любому полю в окнах программы. Например, в окне «Договор проката» поле «Дней» имеет обозначение tt1:Days. Также нужно хотя бы немного знать язык (операторы, функции) и иметь "математический" склад мышления. Поэтому, часто, пользователям программы самостоятельно писать фильтры трудно... Если вам нужны какие-либо новые фильтры, то проще всего сделать их с нашей помощью. Для этого нужно как можно точнее сформулировать, что именно нужно от фильтра. При этом нужно иметь в виду, что фильтр можно сделать ТОЛЬКО на основе значений тех полей, которые есть в данной таблице (Договора, Кассовая книга, Клиенты, Автомобили и т.п.). Поэтому далеко не любую задачу можно решить при помощи фильтров.
Ниже приведены некоторые полезные фильтры для основных таблиц программы. Вы можете самостоятельно добавить эти фильтры в программу, если в вашем экземпляре программы нет нужного фильтра, либо можете модифицировать некоторые фильтры под ваши задачи.
Некоторые полезные фильтры для таблицы "Автомобили":
Фильтр "Просрочен ГТО":
car:SpisFlag=0 and car:SrokGTO<>0 and car:SrokGTO < today()
то есть: автомобиль не списан, указан срок ГТО и этот срок меньше сегодняшней даты.
Фильтр "До окончания срока КАСКО осталось меньше 10 дней":
car:SpisFlag=0 and car:EDateKASKO<>0 and car:EDateKASKO < today()+10
Фильтр "Меньше 30 дней до окончания ОСАГО":
car:SpisFlag=0 and car:EDateOSAGO<>0 and car:EDateOSAGO < today()+10
Фильтр "Меньше 500 км до очередного ТО":
car:ProbegTO>0 and car:Probeg > (car:ProbegTO-500)
Чтобы этот фильтр работал, нужно чтобы в записи о Модели автомобиля были заполнены поля «ТО1» - «ТО12». А также нужно делать в окне "Ремонты" записи о выполненных ТО с указанием номера ТО.
Фильтр "Пробег меньше 5000 км": car:Probeg < 5000
"Просроченные автомобили":
car:DateVozvr>0 and (car:DateVozvr<today() or car:DateVozvr=today() and car:TimeVozvr<clock())
"Занятые автомобили": car:DocNumber<>0 and car:SpisFlag=0
"Свободные": car:DocNumber=0 and car:SpisFlag=0
"Возврат сегодня": car:DateVozvr>0 and car:DateVozvr=today()
"Возврат вчера": car:DateVozvr>0 and car:DateVozvr=today()-1
"Возврат завтра": car:DateVozvr>0 and car:DateVozvr=today()+1
Фильтры для окна "Кассовая книга"
Услуга "Перенос багажа": instring('перенос багажа', lower(pla:Note),1,1)<>0
Операция "Оплата залога": pla:ZatID=2
Операции "Оплата за прокат" и "Доплата за прокат": pla:ZatID=1 or pla:ZatID=5
"Дополнительные платежи": pla:ZatID=7
"Только операции с залогом": pla:ZatID=2 or pla:ZatID=3
"Все кроме операций с залогом": ~(pla:ZatID=2 or pla:ZatID=3)
"Оплата наличными": pla:PlatType[1:1] = 'Н'
"Оплата безнал": pla:PlatType[1:1] = 'Б'
Фильтры для таблицы "Клиенты"
"День рождения в ближайшие 7 дней":
date(month(cli:RogDate),day(cli:RogDate),year(today()))>=today() and date(month(cli:RogDate),day(cli:RogDate),year(today())) < today()+7
"День рожденья сегодня":
date(month(cli:RogDate),day(cli:RogDate),year(today()))=today()
"Сумма платежей больше 10000 руб, но скидка равна 0":
cli:SumPlat>10000 and cli:Skidka=0
"Сумма платежей больше 20000 руб, но скидка меньше 5%":
cli:SumPlat>20000 and cli:Skidka < 5
"Черный список": cli:BlackListFlag
"Призы": instring('приз', lower(cli:Note),1,1)>0
(Проверяет наличие слова "приз" в поле "Примечание" клиента)
День рожденья в ближайшие 7 дней:
date(month(cli:RogDate),day(cli:RogDate),year(today()))>=today() and date(month(cli:RogDate),day(cli:RogDate),year(today()))<today()+7
Новые клиенты, за последние 2 недели:
cli:FirstDate >= date( today()-14 )
"Старые" клиенты, заключившие новый договор за последние 2 недели:
cli:FirstDate<>0 and cli:FirstDate < date( today()-14 ) and cli:LastDate >= date( today()-14 )