14.04.2010, 12:40 | #1 |
Участник
|
Отличия операторов ! и != в фильтрах
Про существование оператора != я знал и раньше. Но честно говоря думал, что это всёго лишь альтернативная форма записи всем известного !. Но сегодня обнаружил одно существенное отличие между этими формами записи. Оказывается при использовании одновременно нескольких критериев (запись через запятую), != присоединяется к условию через ИЛИ, а не через И, как при использовании !. Возможно для кого-то это не новость, но по крайней мере в фундаментальном http://axapta.mazzy.ru/lib/search/ я нашёл только вот это:
Цитата:
(запятая) это символ, позволяющий объединить несколько критериев. Причем, если после запятой идет ! (восклицательный знак - отрицание), то запятая интерепретируется как логическое "И" (по смыслу получается "кроме"), а если нет отрицания - то как логическое "ИЛИ".
P.S.: Прошу прощения, если открыл америку |
|
|
За это сообщение автора поблагодарили: donMigel (1), Logger (4), lev (4), konopello (1), AraraT® (1), Gustav (5), Atar (1), alex55 (1), hated8 (1), nix0root (1). |
14.04.2010, 12:55 | #2 |
Участник
|
Забавно... Спасибо возмёмс на вооружение...
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
14.04.2010, 15:08 | #3 |
Moderator
|
Имеется предостережение с вариацией на тему той же цитаты:
Критерии запроса: ловушка перечисления через запятую P.S. Ну, и имеем ВАЖНОЕ дополнение к моему примеру: Цитата:
Сообщение от Gustav
...для таблицы, содержащей числовое поле (ЧП) и 100 строк со значением этого ЧП от 1 до 100, я написал такой критерий:
PHP код:
Желаемого результата удалось достичь после перестановки компонентов критерия: PHP код:
PHP код:
PHP код:
Последний раз редактировалось Gustav; 14.04.2010 в 16:58. |
|
|
За это сообщение автора поблагодарили: Logger (3), konopello (1), Atar (1), S.Kuskov (2), Cathome (1). |
14.04.2010, 17:59 | #4 |
Участник
|
До кучи. Все мы знаем, что фильтр не понимает операторы >= и <=. Вместо них нужно использовать опреатор .. (две точки) для задания диапазона (возможно открытого). Но помимо этого, оказывается, эти операторы можно заменить на !< и !>. Запятая перед этими операторами также как и перед != будет интерпретироваться как ИЛИ
Последний раз редактировалось S.Kuskov; 14.04.2010 в 18:34. |
|
15.04.2010, 04:09 | #5 |
Участник
|
Как так не понимает? Очень даже замечательно понимает!
X++: >=15 а вот с отрицанием: X++: !16,>=15 !=16,>=15 если переставить в конец: X++: >=15,!16 >=15,!=16 X++: !>15,17 17,!>15 Ax 4.0 sp2 |
|
15.04.2010, 08:41 | #6 |
Участник
|
|
|
15.04.2010, 09:46 | #7 |
Axapta
|
|
|
15.04.2010, 11:01 | #8 |
Участник
|
Подтверждаю про 3.0...
__________________
_____________________________________________-- Axapta 3.0 SP4 KR1 Build #10 for EE Ищу работу! |
|
16.04.2010, 02:56 | #9 |
Участник
|
|
|
16.04.2010, 12:19 | #10 |
Участник
|
Может я не в тему, ну раз уж заговорили о фильтрах, то может кто подскажет как:?
Например делая в РЛС фильтр вида: X++: (InventLocationFrom='Склад1')||(InventLocationFrom='Склад2')||(InventLocationTo='Склад1') ?
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
16.04.2010, 12:46 | #11 |
Ищущий знания...
|
Цитата:
Сообщение от hated8
Может я не в тему, ну раз уж заговорили о фильтрах, то может кто подскажет как:?
Например делая в РЛС фильтр вида: X++: (InventLocationFrom='Склад1')||(InventLocationFrom='Склад2')||(InventLocationTo='Склад1') ? просто в запросе на таблицу, для нужного поля напишите критерий "Склад*".
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
16.04.2010, 13:06 | #12 |
Участник
|
К сожелению при использовании расширенного синтаксиса так сделать не получится
http://www.axaptapedia.com/index.php...ultiple_tables Цитата:
Limitations
There are two major limitations to the Query Expressions syntax. The first is the loss of support for wildcards and comma-separated range values, and the second is the inability to reference array fields such as dimensions... |
|
|
За это сообщение автора поблагодарили: hated8 (1). |
16.04.2010, 13:13 | #13 |
Участник
|
Very very very плохо((
Как быть если необходимо перечислить кучу складов, например штук 20...? Ведь длина поля всего 1К символов...
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
16.04.2010, 13:17 | #14 |
Ищущий знания...
|
хм.. не знал...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
16.04.2010, 13:59 | #15 |
Участник
|
Цитата:
X++: (InventLocationFrom like 'Склад*')||(InventLocationTo=='Склад1')
__________________
Axapta v.3.0 sp5 kr2 |
|
16.04.2010, 14:05 | #16 |
Участник
|
|
|
16.04.2010, 14:05 | #17 |
Участник
|
Цитата:
Если не ошибаюсь, поддержка like появилась в версии AX2009
__________________
Sergey Nefedov |
|
16.04.2010, 14:11 | #18 |
Участник
|
Версия, в которой работаю - в моей подписи.
Что такое расширенный фильтр, вроде, понимаю PS Вот что на сервер улетает с таки запросом X++: ((INVENTLOCATIONID LIKE ? ESCAPE '\' ) OR (TOINVENTLOCATIONID=?)) Проверил на чистой 3.0 SP3 без KR-ов. В ней, действительно, нельзя указать like - ругается на круглую скобку
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 16.04.2010 в 14:25. |
|
16.04.2010, 15:08 | #19 |
Участник
|
У вас случаем не Oracle. "Загадочное исцеление" уже встречалось на форуме.Запрос по таблице параметров.
Похоже, что не ошибаетесь. В том же документе http://www.axaptapedia.com/index.php...ultiple_tables только чуть выше Цитата:
Using wildcards and comma-separated range values
Again, the previous example here was using standard syntax, not the special syntax using expressions. It's not possible to modify the above examples to work with wildcards. The above statement applies to AX versions < 5.0 AX 5.0 introduced solution to wildcards - while you still cannot directly use wildcards in ranges, now it supports the 'LIKE' keyword. (AccountNum LIKE "*AA*" || Name LIKE "*AA*") |
|
16.04.2010, 15:09 | #20 |
Участник
|
Нда... забавно...
Ведь в литературе по sql пишут: Цитата:
Escape-символ не может быть символом "\" (обратная косая черта) и, вообще говоря, должен представлять собой символ, никогда не появляющийся в упоминаемом столбце как информационный символ
четвёрка посылает: ((A.INVENTLOCATIONIDFROM=N'Склад%') OR (A.INVENTLOCATIONIDTO=N'Склад%'))) так что впролёте(
__________________
Что сломалось не знаем, но уже немного подчинили... Последний раз редактировалось hated8; 16.04.2010 в 15:18. |
|
Теги |
поиск, условия поиска, фильтр |
|
|