Пустая ссылка в запросе 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С.
Не реклама копирует жизнь, а жизнь копирует рекламу.
— Фредерик Бегбедер