Глядя на то куда (на какое поле) вы добавляете расширенный фильтр, хочется предостеречь от возможных ошибок и недопонимания вас и других читающих этот пост.
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.
|