|
![]() |
#1 |
Участник
|
Глядя на то куда (на какое поле) вы добавляете расширенный фильтр, хочется предостеречь от возможных ошибок и недопонимания вас и других читающих этот пост.
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). |
![]() |
#2 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Глядя на то куда (на какое поле) вы добавляете расширенный фильтр, хочется предостеречь от возможных ошибок и недопонимания вас и других читающих этот пост.
1) На одно и то же поле таблицы можно устанавливать несколько фильтров (делать addRange на один и тот же fieldNum). В этом случае условия связываются так, как если бы они были перечислены один раз в одном фильтре через запятую. Т.е. грубо говоря связываются через ИЛИ (за исключением отрицаний). 2) Фильтр с расширенным синтаксисом может быть добавлен через любое поле таблицы. Для самого расширенного синтаксиса абсолютно не важно в Range.Value() какого именно поля его добавляют. Значение имеет только содержимое фильтра. 3) 2-ой пункт не отменяет 1-й. Т.е. если забыть о 1-ом пункте, то добавление даже расширенного фильтра на поле, по которому уже был задан ранее фильтр может привести не к запланированному результату. Мораль. Все расширенные фильтры лучше не разбивать на несколько частей а формировать в один пусть и большой критерий. И добавлять этот критерий лучше через какое-нбудь системное поле (например TableId), что бы исключить его пересечение с пользовательскими фильтрами. P.S.: А точно для реализации второго критерия необходимо прибегать к расширенному синтаксису? Вот такого критерия strfmt("%1, !%2", wrkgroup, notwrkgroup) не достаточно? 1)Про то, что на одно и то же поле таблицы можно устанавливать несколько фильтров и что они связываются по ИЛИ знала, а вот перечисление через запятую лично для меня это новость. 2) До этого дошла практическим путем 3) Запомню на будущее. Действительно, расширенный синтаксис излишен в данном случае, для второго критерия. P.S. strfmt("%1, !%2", wrkgroup, notwrkgroup) это круто ^___^ |
|
![]() |
#3 |
Участник
|
Тогда следующая ссылка для вас будет полезной
![]() |
|