04.12.2008, 16:02 | #27 |
Moderator
|
Критерии запроса: ловушка перечисления через запятую
Я был не очень силен при работе с отрицаниями (!...) в критериях запроса, так как до недавнего времени их практически не использовал. И хотя мне казалось, что там не должно быть ничего сложного, при первой же близкой встрече с ними я попал в ловушку.
Я представлял себе, чисто визуально, бубня что-то школьное типа "от перестановки мест слагаемых...", что запятая есть разделитель списка в строке критериев и далее, как ты их не перечисли, результат будет один и тот же. Поэтому для таблицы, содержащей числовое поле (ЧП) и 100 строк со значением этого ЧП от 1 до 100, я написал такой критерий: PHP код:
Желаемого результата удалось достичь после перестановки компонентов критерия: PHP код:
Цитата:
«3. , (запятая) это символ, позволяющий объединить несколько критериев. Причем, если после запятой идет ! (восклицательный знак - отрицание), то запятая интерепретируется как логическое "И" (по смыслу получается "кроме"), а если нет отрицания - то как логическое "ИЛИ".»
PHP код:
В хелпе же всё гораздо туманнее. Про запятую написано: "...соответствует нескольким критериям. Введите все критерии, разделив их запятыми." (я и вводил так!). И далее: "Например, "A..D, !C" находит "A", "B" и "D". Справедливости ради надо отметить, что, тем не менее, пример A..D,!C удачен (возможно, сам того не ведая ), так как сначала указан диапазон, а затем исключение. Возможно, так и надо сформулировать правило для конечного пользователя: если для поля указывается несколько критериев через запятую, то критерии отрицания (исключения) следует указывать в конце строки после всех "неотрицательных" критериев. Ну, и на сладкое – курьез из ДевГайда (по меню хелп-файла: Creating Queries => Query Basic => Organization of queries; или из MSDN: http://msdn.microsoft.com/en-us/library/bb278121.aspx) с критерием, нашему новоиспеченому правилу не соответствующим: Цитата:
Ranges
A number of ranges can be defined for each data source. Each range is defined through the Value property. The Value property is a string that describes conditions to be met by the records in the data source. For example, if restrictions are required on which AccountNumbers the query should retrieve, the range defined would be: "..5000, 5012 .. 5014, 5500, !6500, 6000.." This line tell the system to retrieve: * records with AccountNumbers less than or equal to 5000 * records in the range from 5012 to 5014, the record with the AccountNumber equal to 5500, * records with AccountNumbers above 6000, except for the record with the AccountNumber equal to 6500 P.S. Интересно, что данный топик из DevGuide перед публикацией на msdn явно подвергался правке: например, заметно переработана таблица спецсимволов, используемых при построении критериев, а перед таблицей - фраза, которой очень не хватает в хелпе и которую я познавал по частям в разное время и из разных источников: Цитата:
Range expressions on different fields are combined by using the AND expression.
Range expressions on the same field are combined by using the OR expression. P.S. 14.04.2010. Имеется важная дополнительная информация в теме: Отличия операторов ! и != в фильтрах. Последний раз редактировалось Gustav; 14.04.2010 в 17:04. |
|
|
За это сообщение автора поблагодарили: Dron AKA andy (2), Berty Wooster (1), donMigel (1), Logger (4), alex55 (1). |
Теги |
excel, rls, полезное, blog, axapta |
|
|