Не включается SQFilter для реестра

Добрый день. У меня возникла следующая проблема :
в задача БП вызывается карточка реестра, для неё почему-то не применяется SQFilter. На событии OnPrepare вызывается функция Initialize, в которой я получаю сервис окна, дизэйблю ненужные мне кнопки и применяю
функцию ApplyWorkspaceFilter(WorkspaceWindow, FilterDPValue), в которой WorkspaceWindow - это соответственно нужное мне окно реестра, а FilterDPValue - строка фильта. К примеру FilterDPValue = ds_Account|и CompanyTaskBeginDate =:!SQFilter. При загрузке окна данный фильтр не применяется. Может кто-нибудь подскажет, в чем тут проблема?

Нравится

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

Могу посоветовать использовать ApplyDatasetFilter. А Dataset получить из датасетлинка реестра (dlData.Dataset).

p.s
Не забывайте про обновление реестра после применения фильтров.

ApplyDatasetFilter мне не подойдет, так как мне нужно включить Exists Filter, в который не передается никаких значений. Я пробовала просто использовать функцию EnableSelectQueryFilters, после неё я обновляю реестр, но всё равно фильтр не включается.

Скажите, пожалуйста, какая у Вас версия и какой реестр Вы пытаетесь отфильтровать.

Есть предположение, что это может быть связанно с функционалом воркспейсов. На датасетлинке воркспейсов есть событие BeforeOpen - в нем сначала отключаются все фильтры, а потом по очереди включаются (по дате, по контакту и т.д)

Версия 3.2.0.17. Реестр зависит от настройки карточки БП, то есть фильтроваться должен по сути любой реестр. Причем он не включает только SQFilter. То есть для строки фильтра ds_Storage|и AccountID =:{3D589C02-297A-4FDC-9353-F5D740B76409}!Lookup|и StorageTypeID =:{69648172-F44D-4F40-B7C8-C362325D820D}!Lookup|и ContainsActualOfferings =:!SQFilter он применяет первых 2 условия и всё.

Раз уж Вы добрались до датасета раздела, то кладите в атрибуты датасета какой-то признак с уникальным именем (а-ля IsFilterByMyBP)и параметры фильтрации. В scr_BaseWorkspace в ApplyStandardWorkspaceFilter дописываем что-то типа

if (BaseWorkspace.GridDataset.Attributes('IsFilterByMyBP')){
    //наложить свой фильтр
    BaseWorkspace.GridDataset.Attributes('IsFilterByMyBP') = false;
}

Огромное спасибо, всё получилось, только я атрибуты добавляла не к датасету, а к окну.

На здоровье. А, в окно даже как-то логичнее.

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