sozdanie_polzovatelskogo_filtra

advertisement
Создание пользовательского фильтра
Задача:
Для раздела [Контакты] создать пользовательский фильтр вида «Клиенты у которых есть
хотя бы одно знаменательное событие 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. Запустить клиент, зайти в раздел [Контакты] и убедиться в работоспособности фильтра.
Download