Пустая ссылка в запросе в 1С . Как определить пустую ссылку в запросе

Пустые ссылки в запросах 1С - распространенная проблема разработчиков. В статье мы разберем, что такое пустая ссылка, зачем она нужна и как ее правильно использовать в запросах 1С для повышения эффективности работы.

Понятие пустой ссылки в 1С

Пустая ссылка в 1С - это ссылка на объект (справочник, документ, перечисление), которая не указывает на конкретную запись в этом объекте. Такая ссылка содержит только информацию о типе объекта, но не имеет уникального идентификатора записи.

Различают следующие виды пустых ссылок:

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

Пустые ссылки часто возникают в следующих ситуациях:

  • При создании нового объекта (документа, элемента справочника) до заполнения реквизитов
  • При выполнении соединения таблиц, когда не находится связанная запись
  • При обработке данных с незаполненными реквизитами

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

Зачем нужны пустые ссылки в 1С

Использование пустых ссылок в 1С дает следующие преимущества:

  • Повышает читаемость и оптимизирует код, избавляя от множества проверок на пустоту
  • Позволяет избежать ошибок при обращении к свойствам несуществующих объектов
  • Упрощает сравнение ссылок на равенство или неравенство
  • Дает возможность заменить отсутствующие данные на значения по умолчанию

Рассмотрим подробнее каждое из этих преимуществ.

Проверки на пустоту ссылки типа Если ЗначениеЗаполнено(Ссылка) Тогда... загромождают код и ухудшают его восприятие. Замена ссылки на пустую позволяет этого избежать.

Обращение к свойствам пустой ссылки не вызовет ошибку, в отличие от обращения к свойствам неопределенной переменной.

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

Если Ссылка = Значение(Справочник.ПустаяСсылка) Тогда

А при отсутствии данных пустую ссылку можно заменить на некое значение по умолчанию, например, нулевую дату или пустую строку.

Особенно актуально использование пустых ссылок в запросах 1С. Рассмотрим основные приемы работы с пустыми ссылками в запросах.

Во-первых, пустая ссылка позволяет фильтровать данные по незаполненному реквизиту. Например, отобрать документы, где не указан контрагент:

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

Во-вторых, можно вывести в запросе пустую ссылку, если не найдено связанное значение:

ВЫБРАТЬ Док.Дата, Док.Контрагент ИЗ Документ.ПриходТовара КАК Док ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Конт ПО Док.Контрагент = Конт.Ссылка

В-третьих, пустую ссылку можно подставить вместо NULL при необходимости:

ВЫБРАТЬ Док.Дата, ЕСТЬНУЛЛ(Док.Контрагент, ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) КАК Контрагент ИЗ Документ.ПриходТовара КАК Док

Таким образом, пустые ссылки - это мощный и гибкий инструмент оптимизации запросов 1С.

Способы задания пустой ссылки в 1С

Рассмотрим основные способы задания пустой ссылки в 1С:

Программно через ПустаяСсылка()

В программном коде пустую ссылку можно получить вызовом метода ПустаяСсылка() у нужного объекта:

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

Этот способ удобен при формировании параметров запроса.

Офисный работник за компьютером

В запросе через ЗНАЧЕНИЕ

В тексте запроса пустую ссылку задают через конструкцию ЗНАЧЕНИЕ():

ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

Это наиболее распространенный вариант.

Через параметр запроса

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

ГДЕ Ссылка = &ПустаяСсылка

А затем установить этот параметр перед выполнением запроса.

Палец нажимает клавишу Enter

Особенности задания пустой ссылки в разных версиях 1С

Реализация пустых ссылок имеет некоторые отличия в разных версиях платформы 1С:

В версии 8.3

Доступна функция ПустаяСсылка() для всех ссылочных типов.

В запросах используется ЗНАЧЕНИЕ().

В платформе 8.3 пустые ссылки реализованы максимально полно.

В версии 8.2

Нет функции ПустаяСсылка(), можно только через ЗНАЧЕНИЕ().

Не для всех типов есть поддержка пустых ссылок.

В версии 8.1

Отсутствует единый механизм пустых ссылок.

Используются разные приемы для разных объектов.

Рекомендации по выбору способа задания пустой ссылки

При выборе оптимального способа задания пустой ссылки в 1С рекомендуется:

  • В программном коде использовать ПустаяСсылка()
  • В запросах применять ЗНАЧЕНИЕ() как наиболее универсальный метод
  • Для передачи в параметрах запроса генерировать значение через ПустаяСсылка()
  • Учитывать особенности версии платформы 1С

Придерживаясь этих рекомендаций, можно гибко и эффективно использовать пустые ссылки в 1С для оптимизации решений.

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

Чтобы проверить ссылку на пустоту в запросе 1С, используются специальные операторы и конструкции языка запросов.

Оператор ЕСТЬНУЛЛ

Оператор ЕСТЬНУЛЛ возвращает истину, если выражение имеет значение NULL:

ЕСТЬНУЛЛ(Ссылка)

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

Конструкция НЕ ЕСТЬНУЛЛ

Логическая противоположность оператору ЕСТЬНУЛЛ:

НЕ ЕСТЬНУЛЛ(Ссылка)

Вернет истину, если ссылка не пустая.

Особенности проверки для разных типов

Для чисел и строк проверка аналогичная:

ЕСТЬНУЛЛ(ЧислоИлиСтрока)

Для дат используется сравнение с НачалоДня(1, 1, 1):

Дата = НачалоДня(1, 1, 1)

Проверка через функцию ЕстьНулл()

Функция ЕстьНулл(Значение, Замена) возвращает Замену для NULL:

ЕстьНулл(Ссылка, ПустаяСсылка())

Удобно для замены NULL в выборке.

Использование пустой ссылки в запросе 1С

Рассмотрим типовые примеры использования пустых ссылок непосредственно в запросах 1С.

В условии запроса

Отбор по пустому значению реквизита:

ГДЕ Ссылка = ЗНАЧЕНИЕ(Справочник.ПустаяСсылка)

В полях выборки

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

ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.ПустаяСсылка) КАК ПустаяСсылка

В соединениях и объединениях

Использование в левом соединении, когда нет связанных данных:

ЛЕВОЕ СОЕДИНЕНИЕ Документы КАК Док ПО Док.Контрагент = Контр.Ссылка

Пустые ссылки позволяют гибко управлять выборкой данных в запросах 1С.

Замена NULL на значения по умолчанию

Одно из распространенных применений пустых ссылок в 1С - замена NULL на некое значение по умолчанию.

Пример для числового значения

Для числового поля вместо NULL можно подставить 0:

ВЫБРАТЬ ЕСТЬНУЛЛ(Док.Количество, 0) КАК Количество ИЗ Документ.ПриходТовара КАК Док

Пример для ссылки

Вместо пустой ссылки на контрагента подставить какого-то конкретного:

ВЫБРАТЬ ЕСТЬНУЛЛ(Док.Контрагент, Справочник.Контрагенты.НайтиПоКоду("ОсновнойПоставщик")) КАК Контрагент ИЗ Документ.ПриходТовара КАК Док

Пример для даты

Замена пустой даты на текущую:

ВЫБРАТЬ ЕСТЬНУЛЛ(Док.Дата, ТекущаяДата()) КАК Дата ИЗ Документ.ПриходТовара КАК Док

Подобные приемы позволяют исключить неопределенные NULL из выборки.

Рекомендации по применению пустых ссылок

Используя пустые ссылки в 1C, рекомендуется придерживаться следующих правил:

  • Применять для оптимизации кода и улучшения читаемости
  • Не злоупотреблять, чтобы не снизить понятность логики
  • Добавлять комментарии при неочевидном использовании
  • Учитывать особенности реализации в разных версиях ПО 1С
  • Тестировать запросы с пустыми ссылками на реальных данных

Следуя этим рекомендациям, вы сможете эффективно применять пустые ссылки для улучшения запросов в своих задачах по 1С.

Типичные ошибки при работе с пустыми ссылками в 1С

Рассмотрим наиболее распространенные ошибки при использовании пустых ссылок в 1С и способы их избежать.

Неверное задание пустой ссылки

Например, указание ЗНАЧЕНИЕ() без ссылки на объект или вызов ПустаяСсылка у нессылочного типа.

Ошибки в проверках на пустые значения

Например, НЕ ЕСТЬНУЛЛ вместо ЕСТЬНУЛЛ или наоборот.

Некорректное использование в запросах

Например, фильтрация по пустой ссылке во внутреннем соединении.

Чтобы избежать таких ошибок, следует внимательно проверять код, покрываются ли запросы тестами и проводить регулярный code review.

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.