Пустая ссылка в запросе 1с проверка и использование

В статье вы узнаете, как применяется пустая ссылка в запросе 1с. Пустые ссылки можно использовать в различных конструкциях языка запросов:

  • условиях раздела ГДЕ;
  • в качестве значения поля запроса;
  • конструкциях ВЫБОР КОГДА…;
  • конструкциях ЕСТЬNULL;
  • условиях связей таблиц.

Пустая ссылка в условиях запросов 1с

Для использования пустой ссылки ее необходимо передать ее в запрос при помощи параметра. Также можно использовать конструкцию ЗНАЧЕНИЕ.

ЗНАЧЕНИЕ(<ОбъектМетаданных>.ПустаяСсылка)

Здесь ОбъектМетаданных выражение вида:

  • Документ.ИмяДокумента;
  • Справочник.ИмяДокумента и т.д.

Пример 1. При помощи запроса получить верхний уровень иерархии справочника Номенклатура.

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)";

Пример 2. При помощи запроса получить все элементы справочника Номенклатура, кроме тех, у кого нет родителя.

Запрос = Новый Запрос;

ПустаяСсылка = Справочники.Номенклатура.ПустаяСсылка;
Запрос.УстановитьПараметр("ПустаяСсылка", ПустаяСсылка);

Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    НЕ Номенклатура.Родитель = &ПустаяСсылка";

Следует помнить, что в запросе нельзя реализовать проверку сразу на все пустые ссылки. Всегда требуется указывать, пустую ссылку какого справочника, документа вы имеете в виду.

Пустая ссылка в качестве значения поля

Пустая ссылка в запросе 1с может использоваться в качестве значения поля. Как в чистом виде, так и в конструкциях ВЫБОР КОГДА… или ЕСТЬNULL.

Пример 3. Создать пустую временную таблицу ТаблицаНоменклатуры.

Запрос.Текст = 
"ВЫБРАТЬ
|    ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК Номенклатура,
|    0 КАК Цена
|ПОМЕСТИТЬ ТаблицаНоменклатуры
|ГДЕ
|    ЛОЖЬ

Пример 4. При помощи запроса получить список номенклатуры со значениями дополнительного сведения Цвет.

Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    ЕСТЬNULL(Сведения.Значение, 
|             ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)) КАК Цвет
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК Сведения
|        ПО Номенклатура.Ссылка = Сведения.Объект
|            И Сведения.Свойство = &СвойствоЦвет";

Пример 5. В запросе из предыдущего примера использовать конструкцию ВЫБОР КОГДА… вместо ЕСТЬNULL.

Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    ВЫБОР
|        КОГДА НЕ Сведения.Значение ЕСТЬ NULL
|            ТОГДА Сведения.Значение
|        ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)
|    КОНЕЦ КАК Цвет
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК Сведения
|        ПО Номенклатура.Ссылка = Сведения.Объект
|        И Сведения.Свойство = &СвойствоЦвет";

Пустая ссылка в связях запроса 1с

Проверку на пустую ссылку можно использовать и в условиях связи таблиц.

Пример 6. Получить список номенклатуры, а также значения дополнительного сведения Индекс. Индекс выводить только для номенклатуры с заполненным реквизитом СтранаПроисхождения.

Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    Сведения.Значение КАК ПочтовыйИндекс
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК Сведения
|    ПО (Номенклатура.Ссылка = Сведения.Объект
|        И Сведения.Свойство = &СвойствоИндекс
|        И Номенклатура.СтранаПроисхождения 
|               <> ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка))";

Также прочитайте статью о структуре оператора Выбрать, языка запросов: Язык запросов 1с — оператор Выбрать

Добавить комментарий

Ваш адрес email не будет опубликован.