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

Обновлено: 06.07.2024

При выборке данных из базы данных 1С:Предприятие при помощи запросов мы сталкиваемся с моментами, когда не получаем никаких данных – в выборе необходимое значение приравнивается к “NULL”.

Почему мы получаем такое значение? Всего лишь потому, что при соединении нескольких таблиц базы данных 1С:Предприятие, в присоединяемой таблице не было данных по необходимой нам связи. Или при объединении нескольких запросов при помощи конструкций «Объединить» или «Объединить все» не найдено соответствие полей.

Чтобы не было таких ситуаций необходимо ввести в пользовательскую привычку исправлять такие моменты. Однако если уж случилось, ситуацию нужно исправлять post factum. В сегодняшнем случае рассмотрим, как работать с пустой ссылкой в запросе 1С.

В запросе 1С пустая ссылка может использоваться в любой части запроса: поле, условие.

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

1. Напрямую в запросе программы;

2. Через параметр запроса 1С 8.3.

1. Обращение к пустой ссылке напрямую в запросе

В первом случае в нужном нам месте мы пишем процедуру «Значение(Справочник.Номенклатура.ПустаяСсылка)». Для примера я использовал справочник Номенклатура, но таким же образом можно использовать любой объект ссылочного типа. Прошу обратить внимание, что в запросе, когда мы обращаемся к справочнику Номенклатура или документу, мы пишем «Справочник» или «Документ» в единственном числе.

Большинство разработчиков (да и я сам) склоняются именно к такому способу обозначения пустой ссылки в запросе.

2. Обращение к пустой ссылке через параметр запроса 1С 8.3

Для обращения через параметр запроса необходимо добавить в условие или поле параметр «&ВашПараметрПустойСсылки», а в наименовании параметра – Ваше наименование. При выполнении запроса необходимо добавить установку этого параметра. Иначе запрос не сможет быть выполнен и будет выдаваться ошибка.

Например, мы связываем две таблицы, в одной из которых у нас есть поле ссылочного типа – получаем “NULL”. Есть 2 способа обхода этого.

Первый способ – при помощи конструкции ЕСТЬNULL(НашеЗначение,НовоеЗначение). В «НашеЗначение» записываем то поле, которое мы будем получать из второй таблицы, и, если будет выполняться условие функции, значение автоматически будет получено из второго элемента функции.

Второй способ несколько проще технически, однако кода потребуется больше. Это конструкция «ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ». Плюс этой процедуры заключается в том, что можно прописать строгие правила выполнения установки значения пустой ссылки.

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



В открывшемся окне в поле «Объект» через три точки выберем объект, по которому нужен анализ.


К примеру, нужно проверить, в каких документах вносились изменения тем или иным пользователем. Для этого в поле «Объект» выберем «Пользователь»:

Получите понятные самоучители по 1С бесплатно:


Открывается дополнительное окно, в котором указаны все пользователи данной программы. Выберем «Белкина Анна Григорьевна»:


По кнопке «Найти ссылки» программа выдает все справочники, документы, регистры, в которых записан выбранный нами пользователь.


Дополнительно есть возможность в полученных ссылках найти тот или иной документ, к примеру, «Начисление зарплаты», по кнопке «Найти».


В результате получим.


Т.е. в нашем случае под пользователем «Белкина Анна Григорьевна» был создан только один документ начисления зарплаты. Такая информация может понадобиться руководству для контроля за сотрудниками.

Также обработка будет полезна и в других случаях. Например, при дублировании номенклатуры (для удаления ненужного элемента) или поиска мест использования помеченных на удаление элементов справочников (для исправления учетных данных в базе).

При выборке данных из базы данных 1С:Предприятие при помощи запросов мы сталкиваемся с моментами, когда не получаем никаких данных – в выборе необходимое значение приравнивается к “NULL”.

Почему мы получаем такое значение? Всего лишь потому, что при соединении нескольких таблиц базы данных 1С:Предприятие, в присоединяемой таблице не было данных по необходимой нам связи. Или при объединении нескольких запросов при помощи конструкций «Объединить» или «Объединить все» не найдено соответствие полей.

Чтобы не было таких ситуаций необходимо ввести в пользовательскую привычку исправлять такие моменты. Однако если уж случилось, ситуацию нужно исправлять post factum. В сегодняшнем случае рассмотрим, как работать с пустой ссылкой в запросе 1С.

В запросе 1С пустая ссылка может использоваться в любой части запроса: поле, условие.

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

1. Напрямую в запросе программы;

2. Через параметр запроса 1С 8.3.

1. Обращение к пустой ссылке напрямую в запросе

В первом случае в нужном нам месте мы пишем процедуру «Значение(Справочник.Номенклатура.ПустаяСсылка)». Для примера я использовал справочник Номенклатура, но таким же образом можно использовать любой объект ссылочного типа. Прошу обратить внимание, что в запросе, когда мы обращаемся к справочнику Номенклатура или документу, мы пишем «Справочник» или «Документ» в единственном числе.

Большинство разработчиков (да и я сам) склоняются именно к такому способу обозначения пустой ссылки в запросе.

2. Обращение к пустой ссылке через параметр запроса 1С 8.3

Для обращения через параметр запроса необходимо добавить в условие или поле параметр «&ВашПараметрПустойСсылки», а в наименовании параметра – Ваше наименование. При выполнении запроса необходимо добавить установку этого параметра. Иначе запрос не сможет быть выполнен и будет выдаваться ошибка.

Например, мы связываем две таблицы, в одной из которых у нас есть поле ссылочного типа – получаем “NULL”. Есть 2 способа обхода этого.

Первый способ – при помощи конструкции ЕСТЬNULL(НашеЗначение,НовоеЗначение). В «НашеЗначение» записываем то поле, которое мы будем получать из второй таблицы, и, если будет выполняться условие функции, значение автоматически будет получено из второго элемента функции.

Второй способ несколько проще технически, однако кода потребуется больше. Это конструкция «ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ». Плюс этой процедуры заключается в том, что можно прописать строгие правила выполнения установки значения пустой ссылки.

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


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

ПродажаУслуг.Покупатель.Наименование КАК ПокупательНаименование ,

Разыменование поля в запросе

При этом будет выполнено неявное левое соединение с основной таблицей справочника Контрагенты. То есть запрос выше аналогичен такому запросу:

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты

При этом если в документе не будет заполнен покупатель, то в полях ПокупательНаименование и ПокупательКод будет NULL.

ЕСТЬ NULL в запросе

С помощью оператора ЕСТЬ NULL можно проверить является ли значение NULL:

ПродажаУслуг.Покупатель.Наименование КАК ПокупательНаименование ,

Если покупатель в документе не заполнен, то запрос вернет следующий результат:

ЕСТЬ NULL в запросе

ЕСТЬ NULL можно использовать в условии:

Для проверки, что значение не равно NULL можно использовать ЕСТЬ НЕ NULL или НЕ ЕСТЬ NULL:

Функция ЕСТЬNULL в запросе

Например, в следующем запросе:

ЕСТЬNULL ( ПродажаУслуг.Покупатель.Код , "Поле равно NULL" ) КАК Код

В поле Код будет код покупателя, если покупатель заполнен в документе:

ЕСТЬNULL в запросе

ЕСТЬNULL в запросе

Битые ссылки в запросе

В заключении стоит отметить, что два значения NULL в запросе не будут равны друг другу. Сравнение с NULL в запросе всегда возвращает Ложь. NULL может быть получен при обращении к реквизитам группы справочника, у которых в настройках указано, что они используются только для элементов.

Читайте также: