Фильтры
Разработка

Фильтр Контактов по типу Контрагентов

Нужно создать пользовательский фильтр для раздела Контактов по произвольному значению поля Тип справочника Контрагентов.
Проблема в том, что в Справочнике tbl_AccountType нет поля AccountID и поэтому нельзя напрямую его сравнить с tbl_Contact.AccountID.
Вероятно нужно строить фильтр через tbl_Account.

Пожалуйста, помогите построить такой фильтр.

Нравится

16 комментариев

1. в контактах есть пользовательский фильтр AccountGroup
по аналогии сделайте AccountType
заменив tbl_AccountInGroup на tbl_Account и
в AccountGroupID
AccountGroupID -> AccountTypeID
ds_AccountGroup ->ds_AccountType
tbl_AccountInGroup.GroupID -> tbl_Account.AccountTypeID
Группа контрагентов -> Тип контрагента

Добрый день!
В карточке Продукт к договору добавлены поля типа Справочник. Подскажите как реализовать пользовательский фильтр в разделе Контрагенты по этим полям?

"Fishi" написал:В карточке Продукт к договору добавлены поля типа Справочник. Подскажите как реализовать пользовательский фильтр в разделе Контрагенты по этим полям?

Добрый день.

Уточните, пожалуйста, задачу. Поля связаны с договором или продуктом? Фильтрация должна происходить для контрагента из карточки договора, или имеется в виду что-либо другое? Заранее спасибо.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Поля (типа справочник) связаны с Продуктом в Договоре.
Фильтрация должна происходить в модуле фильтрации раздела Контрагенты по значениям справочных полей.
Спасибо!

В таком случае посмотрите пример в прикреплённом архиве. Вам нужно создать фильтр типа Exists в сервисе sq_Account с основной таблицей tbl_OfferingInContract и присоединённой к ней tbl_Contract as tbl_Contract2 (одна таблица с названием tbl_Contract в запросе уже есть). Выбирать нужно поле tbl_OfferingInContract.ID. В блоке WHERE обязательно один фильтр сравнения ContractCustomerID, который выглядит так:

tbl_Contract2.CustomerID = tbl_Account.ID

Остальные фильтры - в зависимости от полей в таблице tbl_OfferingInContract. Скриншот сделан на примере поля OfferingPriceID, другие поля Вы можете сделать по аналогии.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Сделал по инструкции, но в результате применения фильтра не отображает ни одной записи. В чём может быть причина?

Причин может быть две: либо не хватает данных для фильтра, поэтому он возвращает пустое значение, либо фильтр построен не совсем верно для решения Вашей задачи. Выложите, пожалуйста, сервис sq_Account из Вашей конфигурации для анализа.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Данные кжется все есть..Возможно построение фильтра..
Вот сервис sq_Account

Вы не выложили сервис :)

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Забыл...:confused:
Прикрепил файл, теперь нормально.

Мне кажется, в запросе не совсем корректно указано соединение таблиц tbl_OfferingInContract и tbl_Contract. Должно быть так:

from tbl_OfferingInContract
left outer join tbl_Contract as tbl_Contract2
on tbl_Contract2.ID = tbl_OfferingInContract.ContractID

Проверьте, пожалуйста.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Теперь всё работает.
Просто указывал

ON tbl_Contract2.OfferingID = tbl_OfferingInContract.ID

что и вызывало проблему.
Большое спасибо!

"Запевалов Денис Владимирович" написал:

Нужно создать пользовательский фильтр для раздела Контактов по произвольному значению поля Тип справочника Контрагентов.

Проблема в том, что в Справочнике tbl_AccountType нет поля AccountID и поэтому нельзя напрямую его сравнить с tbl_Contact.AccountID.

Вероятно нужно строить фильтр через tbl_Account.

Пожалуйста, помогите построить такой фильтр.

Подписаться на обновления этого материала

Стоит задача: отфильтровать все контакты по типу контрагента и добавить столбец: тип контрагента, тип клиента в раздел контакты. Сделал все, как написано выше, все равно не работает! Версия 3.2.1.4 X15. Помогите, пожалуйста, составить фильтр. Заранее спасибо.

Здравствуйте Андрей
Проверил на вашей версии рекомендации выше, под бинарными файлами 3.2.1.60 проблем не возникло.
а) "отфильтровать все контакты по типу контрагента"
В sq_Contact создаем Exist Filter называем его AccountType
1
В нем в From указываем таблицу tbl_Account ставим для нее псевдоним tbl_AccountForType
2
Добавляем основную колонку ID с таблицы tbl_AccountForType
3
После чего добавляем CompareFilter, назывем его AccountType, устанавливаем связь как на скриншоте ниже
4
Дальше, добавляем LookUp User Filter, устанавливаем группу для отображения, справочник для лукап поля (ds_AccountType), и название, в подзапросе укажите tbl_AccountForType.AccountTypeID и код (AccountTypeLookUp)
5
Заметьте, что по умолчанию Exists фильтр должен быть отключен, а все внутренние в нем фильтры включены
6
В клиенте данный функционал выглядит следующим образом
7
б) Для того что бы вынести доп. поля с Контрагентов, необходимо подключить к tbl_Account в sq_Contact таблицу tbl_AccountType
8
После чего в сам sq_Contact добавить колонку AccountTypeName с tbl_AccountType
9
После этого в датасет ds_Contact и в сервис окна, после чего его можно будет вынести для отображения в разделе

Сам сервис запроса и скриншоты в более лучшем расширении во вложении

Большое Спасибо!

Показать все комментарии