Проблема с фильтром сравнения

Добрый день.
У меня проекты фильтруются по параметрам: CustomerID, DateStart, DueDate (вводятся пользователем). в выборку так же не должны попасть проекты у которых Efirka=true, и StatusID = {B9BC1B4E-B1E1-42CE-A049-19B7CDBCBE00}.
Как то не корректно работают два фильтра: Efirka и Deleted. К сожалению пока не нашел закономерности, но работу могу охарактеризовать так: то работает, то не работает.
блок включения фильтров:
OppDataset.Close ( );
//отсекаем заявки лишних контрагентов
ApplyDatasetFilter ( OppDataset, 'CustomerID', AccountID, true );
OppDataset.SelectQuery.Items ( 0 ).Filters.ItemsByCode ( 'Diapazon' ).IsEnabled = true;
var Params = OppDataset.SelectQuery.Parameters;
SetParameterValue ( Params, 'DateStart', DateStart );
SetParameterValue ( Params, 'DueDate', RealDate );
//отсекаем уже выписаные заявки
ApplyDatasetFilter(OppDataset, 'Efirka', 1, true);
//отсекаем удаленные заявки
ApplyDatasetFilter(OppDataset, 'Deleted', '{B9BC1B4E-B1E1-42CE-A049-19B7CDBCBE00}', true);
OppDataset.Open ( );

вот как эти фильтры выглядят в превью моего запроса:
WHERE
([tbl_Opportunity].[CustomerID] = :CustomerID AND
[tbl_Opportunity].[AddDate] BETWEEN :DateStart AND :DueDate AND
[tbl_Opportunity].[Efirka] > :Efirka AND
[tbl_Opportunity].[StatusID] > :Deleted)

Нравится

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

Очевидно где-то еще фильтр отключается.
Используйте Debugger и Profiler - другого варианта нет :)

Добрый день!

Вполне возможно, что некоторые фильтры отключаются или в самом наборе данных в событии OnBeforeOpen, или в каких либо окнах. Основная рекомендация - Просмотреть обработчики события OnBeforeOpen набора данных, и всех DatasetLink-ов, которые его используют.

Здравствуйте!
Я конечно по вашему совету посмотрю, где могут они отключаться. Но я бы понял если бы они вобще не работали, так ведь первые два фильтра работают исправно, а вторая пара - абы как (причем есть случаи когда они срабатывают правильно, а есть когда они наглухо данные не пропускают.....к сожалению пока не могу проследить закономерность).

Здравствуйте!
Думаю что в полях [tbl_Opportunity].[Efirka] и [tbl_Opportunity].[StatusID] есть NULL значения. А тот фильтр, который у Вас это не учитывает. Соответственно и выборка не та что Вы ожидаете. Как пример фильтры должны быть такими:

...
([tbl_Opportunity].[Efirka] <> :Efirka OR 
[tbl_Opportunity].[Efirka] IS NULL) AND
([tbl_Opportunity].[StatusID] <> :Deleted OR 
[tbl_Opportunity].[StatusID] IS NULL)
...

Осауленко Александр, большое спасибо!

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