В реальных задачах крайне рекомендуется уточнять у пользователей условия на такого рода неравенства, потому что пользователь
часто имеет в виду «меньше или равно», а не «строго меньше».
Возможно, в данном запросе товары с ценой 1000 тоже подойдут, тогда знак «<» надо заменить на «<=».
При указании нескольких логических сомножителей И, ИЛИ, НЕ целесообразно расставлять скобки, чтобы правильно определить порядок выполнения логических операций и повысить наглядность запроса.
Например, следующие два запроса могут привести к неожиданным для программиста результатам, потому что оператор И имеет больший приоритет, чем ИЛИ (а оператор НЕ имеет еще больший приоритет, чем И):
ВЫБРАТЬ Наименование,
ЗакупочнаяЦена КАК Цена,
СтранаПроисхождения КАК Страна
ИЗ Справочник.Номенклатура
ГДЕ СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США"
И ЗакупочнаяЦена < 1000
В результате мы получим следующие записи:
Этот запрос будет интерпретирован системой как «Выбрать все товары из страны Россия, независимо от цены, а также товары
из страны США, которые дешевле 1000». Т.е. условие по цене будет проверяться только для товаров из США, а товары из России будут включены в запрос при любой цене.
Вероятно, программист имел в виду совсем другое: «Выбрать товары из России и США, которые дешевле 1000», что реализовано
вторым запросом. Условие по цене будет проверяться для всех товаров, независимо от страны-производителя:
ВЫБРАТЬ Наименование,
ЗакупочнаяЦена КАК Цена,
СтранаПроисхождения КАК Страна
ИЗ Справочник.Номенклатура
ГДЕ (СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США")
И ЗакупочнаяЦена < 1000
Чтобы выбрать товары, у которых не указана страна (строковое поле), нужно применить обычное сравнение на пустую строку:
ВЫБРАТЬ Наименование, СтранаПроисхождения КАК Страна
ИЗ Справочник.Номенклатура
ГДЕ СтранаПроисхождения = ""
Если стоит задача выбрать элементы с неуказанным реквизитом, имеющим ссылочный тип, тогда следует поступать по-другому. Например, требуется выбрать все товары с незаполненным полем ОсновнойПоставщик, которое является ссылкой на справочник Контрагенты.
Предлагается следующая схема для решения этой задачи:
Запрос = Новый Запрос("
|ВЫБРАТЬ Наименование, ОсновнойПоставщик
|ИЗ Справочник.Номенклатура
|ГДЕ ОсновнойПоставщик = &ПустойКонтрагент ");
Запрос.УстановитьПараметр("ПустойКонтрагент",
Справочники.Контрагенты.ПустаяСсылка()); |
В условии запроса используется параметр ПустойКонтрагент. Этот параметр до выполнения запроса получает значение пустой ссылки на справочник Контрагенты. Для этого используется метод ПустаяСсылка объекта СправочникМенеджер.
Результат приведенного выше запроса будет следующий: