Разработка в 1С 8.0
29361359

Страна


 

1С: Бухгалтерия 7.7  

35  

Россия  

1С: Аспект 7.7  

45  

Россия  

Программы  

 

 

1С: Торговля и Склад 7.7  

140  

Россия  



Windows XP  

140  

США  


 

1С: Бухгалтерия 7.7  

35  

Россия  

1С: Аспект 7.7  

45  

Россия  

1С: Торговля и Склад 7.7  

140  

Россия  

1С: Бухгалтерия 7.7  

35  

Россия  

В реальных задачах крайне рекомендуется уточнять у пользователей условия на такого рода неравенства, потому что пользователь

часто имеет в виду «меньше или равно», а не «строго меньше».

Возможно, в данном запросе товары с ценой 1000 тоже подойдут, тогда знак «<» надо заменить на «<=».

При указании нескольких логических сомножителей И, ИЛИ, НЕ целесообразно расставлять скобки, чтобы правильно определить порядок выполнения логических операций и повысить наглядность запроса.

Например, следующие два запроса могут привести к неожиданным для программиста результатам, потому что оператор И имеет больший приоритет, чем ИЛИ (а оператор НЕ имеет еще больший приоритет, чем И):

 

ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена,

СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США"

И ЗакупочнаяЦена < 1000

В результате мы получим следующие записи:




Клавиатура Apple Pro Keyboards  

50  

США  

Лазерный принтер Minolta-QMS  

361  

США  

Лазерный принтер HP LaserJet 2200  

720  

США  

Монитор 19" Hitachi CM715ET  

300  

Россия  

Ноутбук Rover Computers Explorer  

1326  

Россия  

Этот запрос будет интерпретирован системой как «Выбрать все товары из страны Россия, независимо от цены, а также товары

из страны США, которые дешевле 1000». Т.е. условие по цене будет проверяться только для товаров из США, а товары из России будут включены в запрос при любой цене.

Вероятно, программист имел в виду совсем другое: «Выбрать товары из России и США, которые дешевле 1000», что реализовано

вторым запросом. Условие по цене будет проверяться для всех товаров, независимо от страны-производителя:

 

ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена,

СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ (СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США")

И ЗакупочнаяЦена < 1000




 

Клавиатура Apple Pro Keyboards  

50  

США  

Лазерный принтер Minolta-QMS  

361  

США  

Лазерный принтер HP LaserJet 2200  

720  

США  

Монитор 19" Hitachi CM715ET  

300  

Россия  




Программное обеспечение  

 

Услуги  

 

Клавиатуры  

 

Принтеры  

 

Мониторы  

Обратите внимание, что в результате запроса присутствуют только группы справочника, так как для них поле Страна имеет NULL-значение (вообще не указывается). В результат запроса не попали товары, у которых строковое поле СтранаПроисхождения имеет значение «» (пустая строка). Как уже было сказано выше, ни ноль, ни пустая строка, ни пробел не являются NULL-значением.

Чтобы выбрать товары, у которых не указана страна (строковое поле), нужно применить обычное сравнение на пустую строку:

 

ВЫБРАТЬ Наименование, СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения = ""




Доставка  

 

Инсталляция ПО  

 

Консультации по настройке ОС Windows  

 

Монитор 15" LG Studioworks 575N  

 

Если стоит задача выбрать элементы с неуказанным реквизитом, имеющим ссылочный тип, тогда следует поступать по-другому. Например, требуется выбрать все товары с незаполненным полем ОсновнойПоставщик, которое является ссылкой на справочник Контрагенты.

Предлагается следующая схема для решения этой задачи:

 

Запрос = Новый Запрос("

|ВЫБРАТЬ Наименование, ОсновнойПоставщик

|ИЗ Справочник.Номенклатура

|ГДЕ ОсновнойПоставщик = &ПустойКонтрагент ");

Запрос.УстановитьПараметр("ПустойКонтрагент", 

Справочники.Контрагенты.ПустаяСсылка());  

Результат = Запрос.Выполнить();

В условии запроса используется параметр ПустойКонтрагент. Этот параметр до выполнения запроса получает значение пустой ссылки на справочник Контрагенты. Для этого используется метод ПустаяСсылка объекта СправочникМенеджер.

Результат приведенного выше запроса будет следующий:



Содержание раздела