AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2010, 14:06   #1  
flov_imported is offline
flov_imported
Участник
 
42 / 10 (1) +
Регистрация: 05.06.2010
вот часть кода
Код:
     recSalesPersonPurchaser.RESET;
     recSalesPersonPurchaser.SETFILTER(Code,'A1|A2|A3');
     recSalesPersonPurchaser.SETFILTER(Code,'A5');

     recSalesPersonPurchaser.FINDFIRST;
но почему-то вместо пустого множества, он мне выдает
результаты по последнему фильтру.
что делать???
Старый 04.10.2010, 14:28   #2  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Внимательно читайте хелп по используемым функциям!

"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  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
recSalesPersonPurchaser.FILTERGROUP(2);
recSalesPersonPurchaser.SETFILTER(Code,'A1|A2|A3');
recSalesPersonPurchaser.FILTERGROUP(0);
recSalesPersonPurchaser.SETFILTER(Code,'A5');
Старый 04.10.2010, 15:04   #4  
GGNAME is offline
GGNAME
Участник
 
67 / 10 (1) +
Регистрация: 21.02.2010
Надо стараться избегать таких фильтров, конструкцию от Sancho можно не всегда использовать.
Старый 04.10.2010, 15:30   #5  
flov_imported is offline
flov_imported
Участник
 
42 / 10 (1) +
Регистрация: 05.06.2010
И как же быть???

как-то странно получается
в одних случаях и без FILTERGROUP
два фильтра прописывал и срабатывало, а сейчас никак!!!

а в чем подвох FILTERGROUP почему его не всегда можно использовать?
Старый 04.10.2010, 15:58   #6  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от GGNAME Посмотреть сообщение
Надо стараться избегать таких фильтров, конструкцию от Sancho можно не всегда использовать.
Конструкцию Санчо можно использовать во всех случаях, когда этого требует задача )) В коде морально-этических норм нет.
Можно было бы склеить подстроки фильтра, но зачем, если их можно разложить по фильтр группам и запрос выдаст пересекающиеся записи?
Старый 04.10.2010, 16:00   #7  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от flov Посмотреть сообщение
в одних случаях и без FILTERGROUP
два фильтра прописывал и срабатывало, а сейчас никак!!!
Если аналогично примеру, приведенному в стартовом посте, то вряд ли. Либо пример в студию.
Вторая строка (неважно SETRANGE или SETFILTER) перетрет наложенный до этого фильтр.
Старый 04.10.2010, 16:17   #8  
GGNAME is offline
GGNAME
Участник
 
67 / 10 (1) +
Регистрация: 21.02.2010
А если код пишется в форме, где уже использовался FILTERGROUP для задания прав доступа пользователю? Как в этом случае себя поведёт система?
Старый 04.10.2010, 16:24   #9  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Цитата:
Сообщение от GGNAME Посмотреть сообщение
Надо стараться избегать таких фильтров, конструкцию от Sancho можно не всегда использовать.
если моя конструкция где-то слетит (а это может случиться), то вместо цифры 2 можно использовать цифру 3 или 4 и снова все будет работать.

интересно другое, как без этой конструкции сделать такую задачку:
допустим, в настройке разрешено менять цены в товарах: Т00001..Т02357|Т12547..Т54102, а почему бы нет?
как узнать, в товаре Т35481 можно ли изменить цену? программным образом, конечно же
Старый 04.10.2010, 16:59   #10  
GGNAME is offline
GGNAME
Участник
 
67 / 10 (1) +
Регистрация: 21.02.2010
У меня была идея написать функцию, которая бы умела разбирать и собирать фильтры, и соответственно проверять, входит то или иное значение в него. Руки всё не доходят, но это реально и работать будет шустро.
Старый 04.10.2010, 17:14   #11  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от GGNAME Посмотреть сообщение
У меня была идея написать функцию, которая бы умела разбирать и собирать фильтры, и соответственно проверять, входит то или иное значение в него. Руки всё не доходят, но это реально и работать будет шустро.
В принципе такую функцию и стоило бы написать с использованием фильтр групп. Диапазон их от 0 до 255. Навижен использует от 0 до 5 (пятый судя по справке 3,6 может использоваться в будущем, но пока не используется). Так что от 6 до 255 смело можем юзать и система ни на что не напорется. А так элегантный и простой способ наложить два (и более) СОВЕРШЕННО РАЗНЫХ фильтра на одно и то же поле. На программную склейку и обработку переданных фильтров уйдет на порядки больше времени. И не факт, что будет работать корректно для всех фильтров.
Старый 04.10.2010, 17:22   #12  
GGNAME is offline
GGNAME
Участник
 
67 / 10 (1) +
Регистрация: 21.02.2010
А мне нравятся сложные задачи. Главное учесть все используемые символы в фильтрах. Ошибки конечно не исключены, согласен.

Объясните как с помощью FILTERGROUP вы решите эту задачу
Цитата:
интересно другое, как без этой конструкции сделать такую задачку:
допустим, в настройке разрешено менять цены в товарах: Т00001..Т02357|Т12547..Т54102, а почему бы нет?
как узнать, в товаре Т35481 можно ли изменить цену? программным образом, конечно же
Старый 04.10.2010, 17:27   #13  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от 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
  'товар подходит под фильтр из настройки'
Если Item No. является первичным ключом таблицы тогда можно иначе:

Код:
Rec.SETFILTER("Item No.", 'Т00001..Т02357|Т12547..Т54102');
Rec."Item No." := 'Т35481';
IF Rec.FIND THEN
  'товар подходит под фильтр из настройки'
Старый 04.10.2010, 17:33   #14  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Цитата:
Сообщение от 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  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
я долго писал
Старый 04.10.2010, 17:35   #16  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Sancho Посмотреть сообщение
я долго писал
Просто у меня 10пальцевый и более 200 символов в минуту ) И на англ и на рус.
Старый 04.10.2010, 17:37   #17  
flov_imported is offline
flov_imported
Участник
 
42 / 10 (1) +
Регистрация: 05.06.2010
наверное, я имел ввиду, когда фильтры накладываются
на разные поля.
а в данном случае на одно.
сделал немного кривым способом
ввел текстовую переменную
a := '('+FORMAT('A1|A2|A3')+')&'+FORMAT('A5')

и подставил
rec.SETFILTER(Code,a);
Старый 04.10.2010, 17:37   #18  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
ну вот.
начали пальцами меряться...
Старый 04.10.2010, 17:39   #19  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
1. а зачем format?
2. а какой в итоге получится фильтр? такой? (A1|A2|A3)&A5

тоже работать будет, но, имхо, менее наглядно
Старый 04.10.2010, 23:10   #20  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от flov Посмотреть сообщение
a := '('+FORMAT('A1|A2|A3')+')&'+FORMAT('A5')
и подставил
rec.SETFILTER(Code,a);
Пишется так

Код:
rec.SETFILTER(Code, '%1&%2', 'A1|A2|A3', 'A5');
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:01.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.