Показать сообщение отдельно
Старый 28.02.2013, 21:43   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1789 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Глядя на то куда (на какое поле) вы добавляете расширенный фильтр, хочется предостеречь от возможных ошибок и недопонимания вас и других читающих этот пост.

1) На одно и то же поле таблицы можно устанавливать несколько фильтров (делать addRange на один и тот же fieldNum). В этом случае условия связываются так, как если бы они были перечислены один раз в одном фильтре через запятую. Т.е. грубо говоря связываются через ИЛИ (за исключением отрицаний).

2) Фильтр с расширенным синтаксисом может быть добавлен через любое поле таблицы. Для самого расширенного синтаксиса абсолютно не важно в Range.Value() какого именно поля его добавляют. Значение имеет только содержимое фильтра.

3) 2-ой пункт не отменяет 1-й. Т.е. если забыть о 1-ом пункте, то добавление даже расширенного фильтра на поле, по которому уже был задан ранее фильтр может привести не к запланированному результату.

Мораль. Все расширенные фильтры лучше не разбивать на несколько частей а формировать в один пусть и большой критерий. И добавлять этот критерий лучше через какое-нбудь системное поле (например TableId), что бы исключить его пересечение с пользовательскими фильтрами.


P.S.: А точно для реализации второго критерия необходимо прибегать к расширенному синтаксису? Вот такого критерия strfmt("%1, !%2", wrkgroup, notwrkgroup) не достаточно?

Последний раз редактировалось S.Kuskov; 28.02.2013 в 21:47.
За это сообщение автора поблагодарили: sashanka (1).