Как проверить на пустую ссылку в запросе 1с
Перейти к содержимому

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

  • автор:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Бывает необходимо получить в запросе пустую ссылку на какой-то объект или выбрать объекты с незаполненным реквизитом, установив отбор по пустой ссылке. Разберем в статье разные варианты получение и отбора по пустой ссылке, а также способы проверки на заполненность. В этой заметке во всех примерах будет устанавливаться отбор или сравнение на пустую ссылку в справочнике и пустую ссылку в документе.

Отбор по пустой ссылке

Для указания пустой ссылки в запросе можно использовать несколько способов:

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

В примере устанавливаем пустую ссылку с помощью функции запроса УстановитьПараметр.

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

Пустую ссылку можно указать в запросе или в соединении, с помощью команды ЗНАЧЕНИЕ.

Отбор объектов с не заполненными ссылками

Иногда в объекте может быть не пустая ссылка, а не заполненное значение в запросе отобрать их можно, с помощью оператора ЕСТЬ NULL.

Отбор объектов с заполненными значениями. Обратная ситуация и с ней есть особенности. В этом случае нужно использовать оператор “ЕСТЬ НЕ NULL”, а не ставить НЕ в начало условия.

Получение пустого значения в запросе

Получение пустой ссылки в запросе аналогично отбору по пустой ссылке, работает по формуле:

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

В 8.0 ссылки бывают пустыми. Тогда у нее идентификатор равен
00000000-0000-0000-0000-000000000000

У обычной ссылки уникальный идентификатор можно получить так:

Получить пустую ссылку можно методом:

Получить пустую ссылку по значению неизвестного типа можно следующей конструкцией:

Проверить на пустую ссылку можно так:

В запросах для версии 8.0 так:

В запросах для версии 8.1 так:

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

Неопределено <> NULL <> «» <> 0 <> пустая ссылка <> Битая ссылка

У пустой ссылки есть все поля (реквизиты, табличные часть) и к ним можно обращаться. Они будут незаполнены (для чисел — 0, для ссылок — пустые ссылки, для строк переменной длины — «», для строк фиксированной длины — опр. количество пробелов). Табличные части будут иметь 0 строк.

Пустые ссылки можно «разыменовать» (обращаться через точку с свойствам). Следующий фрагмент кода вполне работоспособен:

Т.е. не нужно лишних проверок в программных модулях. Может кому пригодится.

Есть еще такое понятие, как «битая ссылка» (условное название). Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:

Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:

или так (ненадежно):

И последний вариант для проверки в запросах:

Ниже дана программа для удаления записей регистров, у которых регистратор — битая ссылка, т.е. не существует в базе.

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

В языке запросов 1С часто требуется проверить: является ли значение пустой ссылкой.
Пустая ссылка — это такое значение ссылочных объектов, когда оно имеет этот же тип, но само значение не выбрано.

На языке программирования 1С данное значение можно получить через менеджеры объекта.

  • Перечисления.Пол.ПустаяСсылка(),
  • Справочники.Организации.ПустаяСсылка(),
  • ПланыСчетов.Хозрасчетный.ПустаяСсылка(),
  • ПредопредленноеЗначение(«ПланСчетов.Хозрасчетный.ПустаяСсылка»)

Альтернативой сравнению с пустой ссылкой имеется метод Пустая() у значения ссылочного типа:
Например:
булКонтрагентВыбран = ВыбКонтрагент.Пустая();

Как же в запросе 1С сравнить на пустое значение

Для этого у нас есть несколько вариантов в зависимости от требований задачи:

1.Если требуется получить значение пустого типа.

Воспользуемся функцией ЗНАЧЕНИЕ()

Выбрать
ЗНАЧЕНИЕ (Перечисление.Пол.ПустаяСсылка)//Без вопроса в единственном числе

Либо через переданный в запрос параметр:
Выбрать
&ПустойПараметрНужногоТипа

2. Если требуется сравнить со значением не составного типа:

Выбрать
Значение(Перечисление.Пол.ПустаяСсылка)<>Значение(Перечисление.Пол.Мужской) как ЭтоБулевоИстина

Выбрать
Выбор когда &ПустойПараметрНужногоТипа ИЛИ Значение(Перечисление.Пол.Мужской) Тогда Истина Иначе Ложь Конец как ЭтоНеЖенскийПол

3. Если требуется проверка составного значения:

В этом случае значение

  • может быть неопределенного типа (очищено или ни разу не выбрано)
  • пустой ссылкой любого из типов (выбран тип, но не выбрано значение)
  • выбранным значением любого из типов (выбрано значение)

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

//Мы инициализировали массив заполненных значений и сравнили его с пустым

Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.ПустаяСсылка) в (Значение(Перечисление.Пол.Мужской),Значение(Перечисление.Пол.Женский)) ИЛИ Есть NULL Тогда Истина Иначе Ложь конец ЗначениеПустое

//Мы инициализировали массив пустых ссылок и проверили вхождение в него нашего «неизвестного» значения

Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.Мужской) в (Значение(Перечисление.Пол.ПустаяСсылка),Значение(Справочник.Контрагенты.ПустаяСсылка)) Тогда Истина Иначе Ложь конец ЗначениеПустое

Также мы можем передать массив параметром

Выбрать Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.ПустаяСсылка) в (&МассивВсехПустыхСсылок) Тогда Истина Иначе Ложь конец ЗначениеПустое

Как получить значение ЛюбаяСсылка?

Еще про перечисление в запросе 1С.

Не реклама копирует жизнь, а жизнь копирует рекламу.

— Фредерик Бегбедер

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *