Создание пользовательского фильтра Задача: Для раздела [Контакты] создать пользовательский фильтр вида «Клиенты у которых есть хотя бы одно знаменательное событие c типом [День рождения] в заданный пользователем промежуток времени» Выполнение: 1. В [Администраторе] Terrasoft открыть запрос на выборку [Contacts \ General \ Main Grid \ sq_Contact] Внимание! Перед редактированием сервиса убедитесь, что сервис разрешен для редактирования: Создание фильтра типа [Exists] 2. Создать фильтр типа [Exists] с именем [ContactAnniversary] a. Для создания фильтра необходимо выделить курсором узел фильтров «Where» основной выборки на самом верхнем уровне. Структура выборки: sq_Contact Select ... FROM tbl_Contact ... Where ... Parameters ... b. Правой кнопкой выбрать из меню пункт «Exists Filter» для создания фильтра. Созданный фильтр: Where ... ExistsFilter1 Test Subquery Select FROM WHERE 3. Отключить фильтр по умолчанию (снять галочку с фильтра) 4. Для подзапроса созданного фильтра на группе [From] указать сервис таблицы [tbl_ContactAnniversary] 5. На группе [Select] добавить поле [tbl_ContactAnniversary].[ID]. 6. В фильтре подзапроса создать фильтр сравнения вида [tbl_ContactAnniversary].[ContactID] = [tbl_Contact].[ID] с кодом [ContactID] 7. На этом же уровне создать пользовательский фильтр типа «Дата» 8. Ввести для созданного фильтра код [AnniversaryDate] и заголовок [Дата события] и группу с именем [Зн. события] в которой появится фильтр 9. Для созданного пользовательского фильтра указать в качестве подзапроса [tbl_ContactAnniversary.AnniversaryDate] 10. На этом же уровне создать фильтр пользователя для справочника 11. Ввести для созданного фильтра код [AnniversaryTypeID], заголовок [Тип события] и группу с именем [Зн. события], ввести источник данных для справочника [ds_AnniversaryType], в подзапросе указать [tbl_ContactAnniversary.TypeID] 12. Сохранить запрос на выборку 13. Запустить клиент, зайти в раздел [Контакты] и убедиться в работоспособности фильтра. Создание подзапроса знаменательного события по дате без участия года 14. Для созданного пользовательского фильтра типа «Дата» с кодом [AnniversaryDate] указать в качестве подзапроса вместо [tbl_ContactAnniversary.AnniversaryDate] значение [Test Subquery] (значение находится в самом конце списка). Как только мы укажем значение подзапроса в [Test Subquery] мы увидим подзапрос, который появился под фильтром: 15. Для созданного подзапроса фильтра на группе [From] указать сервис таблицы [tbl_ContactAnniversary] и ввести псевдоним таблицы [tbl_ContactAnniversary2] 16. В созданный подзапрос на группе [Select] добавить колонку с текстом SQL 17. В качестве текста SQL ввести следующий текст: DateAdd(year, DatePart(year, GetDate()) DatePart(year, [tbl_ContactAnniversary2].[AnniversaryDate]), [tbl_ContactAnniversary2].[AnniversaryDate] ) Данная операция необходима для того, чтобы при формировании даты в запросе прибавить к ней количество лет с целью получить дату с тем же числом и месяцем, но с текущим годом. 18. В созданный подзапрос на группе [Where] добавить фильтр сравнения с кодом [ContactAnniversaryID] для сравнения по следующему условию: [tbl_ContactAnniversary].[ID] = [tbl_ContactAnniversary2].[ID] (фильтр должен быть обязательно включен) 19. Сохранить запрос на выборку 20. Запустить клиент, зайти в раздел [Контакты] и убедиться в работоспособности фильтра.