04.10.2010, 14:06 | #1 |
Участник
|
вот часть кода
Код: recSalesPersonPurchaser.RESET; recSalesPersonPurchaser.SETFILTER(Code,'A1|A2|A3'); recSalesPersonPurchaser.SETFILTER(Code,'A5'); recSalesPersonPurchaser.FINDFIRST; результаты по последнему фильтру. что делать??? |
|
04.10.2010, 14:28 | #2 |
Участник
|
Внимательно читайте хелп по используемым функциям!
"Comments If the function is called with a field for which a filter already exists, the system will remove that filter before it sets the new one " |
|
04.10.2010, 14:32 | #3 |
Administrator
|
recSalesPersonPurchaser.FILTERGROUP(2);
recSalesPersonPurchaser.SETFILTER(Code,'A1|A2|A3'); recSalesPersonPurchaser.FILTERGROUP(0); recSalesPersonPurchaser.SETFILTER(Code,'A5'); |
|
04.10.2010, 15:04 | #4 |
Участник
|
Надо стараться избегать таких фильтров, конструкцию от Sancho можно не всегда использовать.
|
|
04.10.2010, 15:30 | #5 |
Участник
|
И как же быть???
как-то странно получается в одних случаях и без FILTERGROUP два фильтра прописывал и срабатывало, а сейчас никак!!! а в чем подвох FILTERGROUP почему его не всегда можно использовать? |
|
04.10.2010, 15:58 | #6 |
Участник
|
Цитата:
Можно было бы склеить подстроки фильтра, но зачем, если их можно разложить по фильтр группам и запрос выдаст пересекающиеся записи? |
|
04.10.2010, 16:00 | #7 |
Участник
|
|
|
04.10.2010, 16:17 | #8 |
Участник
|
А если код пишется в форме, где уже использовался FILTERGROUP для задания прав доступа пользователю? Как в этом случае себя поведёт система?
|
|
04.10.2010, 16:24 | #9 |
Administrator
|
Цитата:
интересно другое, как без этой конструкции сделать такую задачку: допустим, в настройке разрешено менять цены в товарах: Т00001..Т02357|Т12547..Т54102, а почему бы нет? как узнать, в товаре Т35481 можно ли изменить цену? программным образом, конечно же |
|
04.10.2010, 16:59 | #10 |
Участник
|
У меня была идея написать функцию, которая бы умела разбирать и собирать фильтры, и соответственно проверять, входит то или иное значение в него. Руки всё не доходят, но это реально и работать будет шустро.
|
|
04.10.2010, 17:14 | #11 |
Участник
|
В принципе такую функцию и стоило бы написать с использованием фильтр групп. Диапазон их от 0 до 255. Навижен использует от 0 до 5 (пятый судя по справке 3,6 может использоваться в будущем, но пока не используется). Так что от 6 до 255 смело можем юзать и система ни на что не напорется. А так элегантный и простой способ наложить два (и более) СОВЕРШЕННО РАЗНЫХ фильтра на одно и то же поле. На программную склейку и обработку переданных фильтров уйдет на порядки больше времени. И не факт, что будет работать корректно для всех фильтров.
|
|
04.10.2010, 17:22 | #12 |
Участник
|
А мне нравятся сложные задачи. Главное учесть все используемые символы в фильтрах. Ошибки конечно не исключены, согласен.
Объясните как с помощью FILTERGROUP вы решите эту задачу Цитата:
интересно другое, как без этой конструкции сделать такую задачку:
допустим, в настройке разрешено менять цены в товарах: Т00001..Т02357|Т12547..Т54102, а почему бы нет? как узнать, в товаре Т35481 можно ли изменить цену? программным образом, конечно же |
|
04.10.2010, 17:27 | #13 |
Участник
|
Цитата:
Сообщение от GGNAME
А мне нравятся сложные задачи. Главное учесть все используемые символы в фильтрах. Ошибки конечно не исключены, согласен.
Объясните как с помощью FILTERGROUP вы решите эту задачу Цитата:
интересно другое, как без этой конструкции сделать такую задачку:
допустим, в настройке разрешено менять цены в товарах: Т00001..Т02357|Т12547..Т54102, а почему бы нет? как узнать, в товаре Т35481 можно ли изменить цену? программным образом, конечно же Код: Rec.FILTERGROUP(10); Rec.SETFILTER("Item No.", 'Т00001..Т02357|Т12547..Т54102'); Rec.FILTERGROUP(0); Rec.SETRANGE("Item No.", 'Т35481'); IF NOT Rec.ISEMPTY() THEN 'товар подходит под фильтр из настройки' Код: Rec.SETFILTER("Item No.", 'Т00001..Т02357|Т12547..Т54102'); Rec."Item No." := 'Т35481'; IF Rec.FIND THEN 'товар подходит под фильтр из настройки' |
|
04.10.2010, 17:33 | #14 |
Administrator
|
Цитата:
Сообщение от GGNAME
Объясните как с помощью FILTERGROUP вы решите эту задачу
Цитата:
интересно другое, как без этой конструкции сделать такую задачку:
допустим, в настройке разрешено менять цены в товарах: Т00001..Т02357|Т12547..Т54102, а почему бы нет? как узнать, в товаре Т35481 можно ли изменить цену? программным образом, конечно же Unit Price - On Validate настройка.гет() Item.FILTERGEROUP(18{например}); Item.SETFILTER("No.",настройка.фильтр_по_товарам_где_можно_менять_цены); Item.FILTERGEROUP(0); Item.SETRANGE("No.",Rec."No."); IF Item.Isempty THEN ERROR('Пшел нафик!\Низзя этому товару цены менять!\Убей себя.'); |
|
04.10.2010, 17:34 | #15 |
Administrator
|
я долго писал
|
|
04.10.2010, 17:35 | #16 |
Участник
|
|
|
04.10.2010, 17:37 | #17 |
Участник
|
наверное, я имел ввиду, когда фильтры накладываются
на разные поля. а в данном случае на одно. сделал немного кривым способом ввел текстовую переменную a := '('+FORMAT('A1|A2|A3')+')&'+FORMAT('A5') и подставил rec.SETFILTER(Code,a); |
|
04.10.2010, 17:37 | #18 |
Administrator
|
ну вот.
начали пальцами меряться... |
|
04.10.2010, 17:39 | #19 |
Administrator
|
1. а зачем format?
2. а какой в итоге получится фильтр? такой? (A1|A2|A3)&A5 тоже работать будет, но, имхо, менее наглядно |
|
04.10.2010, 23:10 | #20 |
Участник
|
|
|