К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как работает ссылка в 1С

Как устроена ссылка в 1С: ссылочные типы данных, уникальный идентификатор, навигационные ссылки, получение и проверка ссылок, типичные ошибки и FAQ.

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

Термин «ссылка» в 1С используется в трёх разных смыслах, и их часто путают. Первый — ссылочный тип данных (СправочникСсылка, ДокументСсылка), хранящийся в реквизитах объектов. Второй — уникальный идентификатор (GUID), лежащий в основе любой ссылки. Третий — навигационная ссылка вида e1cib/data/..., которую можно скопировать и передать коллеге, чтобы он открыл тот же объект. В материале разобраны все три аспекта и практика работы с ними.

Что такое ссылочный тип данных

Каждый объект ссылочного типа в 1С (справочник, документ, план видов характеристик, план счетов, задача) при создании получает ссылку — внутренний указатель, который не меняется в течение всей жизни объекта. Даже если переименовать контрагента, поменять его ИНН и перенести в другую группу, ссылка останется прежней, и все документы продолжат указывать на него корректно.

В языке 1С ссылка имеет конкретный тип, например СправочникСсылка.Контрагенты или ДокументСсылка.РеализацияТоваровУслуг. Тип определяется метаданными: если реквизит документа объявлен как «СправочникСсылка.Контрагенты», в него нельзя записать ссылку на номенклатуру — платформа выдаст ошибку несоответствия типов.

Важно различать ссылку и объект. Ссылка — это только указатель, лёгкая структура с идентификатором. Объект — полная копия данных, загруженная в память для чтения и изменения. Получение объекта через Ссылка.ПолучитьОбъект() — дорогая операция, поэтому в запросах и циклах работают именно со ссылками, обращаясь к реквизитам «через точку» без загрузки объекта целиком.

Уникальный идентификатор и его роль

Физически ссылка построена на GUID — глобально уникальном идентификаторе. Получить его в коде можно методом Ссылка.УникальныйИдентификатор(), а обратно восстановить ссылку из строки GUID — через Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). Эта пара методов — основа интеграций, обменов и поиска «потерянных» объектов.

GUID одинаков для объекта во всех базах, куда он попал штатным обменом. Именно поэтому при синхронизации «Управления торговлей» и «Бухгалтерии» платформа сопоставляет объекты по идентификаторам, а не по наименованиям или кодам. Если объект создан в двух базах независимо, у него будут разные GUID — и обмен создаст дубль, даже если наименования совпадают.

Навигационная ссылка: как скопировать и открыть объект

Навигационная ссылка — текстовое представление пути к объекту внутри информационной базы, например e1cib/data/Справочник.Контрагенты?ref=.... Её можно получить в пользовательском режиме: открыть объект и выбрать в меню «Ещё» команду «Получить ссылку» либо скопировать через сочетание клавиш, если оно назначено в конкретной конфигурации. Во многих типовых решениях доступна кнопка «Получить ссылку» прямо в форме объекта.

Полученную строку можно отправить коллеге в письме или мессенджере. Получатель вставляет её в диалог «Перейти по ссылке» (обычно доступен через меню «Сервис» или команду «Перейти по ссылке» в панели навигации) — и платформа открывает тот же объект, если база та же и у пользователя есть права на просмотр. Это удобнее, чем объяснять «открой справочник, найди по наименованию», особенно когда одноимённых элементов много.

Как передать ссылку на объект коллеге
  1. 1
    Откройте нужный объект (элемент справочника или документ) в режиме 1С:Предприятие.
  2. 2
    В меню «Ещё» выберите команду «Получить ссылку» или «Копировать навигационную ссылку».
  3. 3
    Отправьте скопированную строку коллеге любым способом.
  4. 4
    Коллега открывает команду «Перейти по ссылке» и вставляет строку.
  5. 5
    Проверьте, что открылся именно тот объект: сверьте наименование и ключевые реквизиты.

Ограничение важно понимать: навигационная ссылка работает только в той информационной базе, где была получена. В копии базы, в базе-приёмнике обмена или после переноса данных другим способом идентификаторы могут не совпасть — и ссылка либо не откроется, либо приведёт к другому объекту. Также ссылка бесполезна, если у получателя нет прав на соответствующий объект.

Работа со ссылками в коде и запросах

В запросах ссылки используются постоянно: сравнение ГДЕ Контрагент = &Контрагент выполняется именно по ссылке, а не по наименованию. Передать ссылку как параметр запроса — стандартная практика. При этом получать реквизиты связанного объекта можно через точку (Документ.Контрагент.ИНН) — платформа сама выполнит левое соединение, хотя при больших выборках лучше соединять таблицы явно.

Проверить, заполнена ли ссылка, помогает функция ЗначениеЗаполнено(Ссылка) или сравнение с пустой ссылкой: Ссылка = Справочники.Контрагенты.ПустаяСсылка(). Проверка «битости» делается иначе: у ссылки на удалённый объект запрос реквизита вернёт NULL, а попытка получить объект вызовет ошибку. Надёжный способ — запросом проверить наличие записи по ссылке.

bsl
Если ЗначениеЗаполнено(СтрокаТовара.Номенклатура) Тогда
    Наименование = СтрокаТовара.Номенклатура.Наименование;
КонецЕсли;

GUID = Ссылка.УникальныйИдентификатор();
НайденнаяСсылка = Справочники.Номенклатура.ПолучитьСсылку(GUID);

Битые ссылки: откуда берутся и что с ними делать

«Битая» ссылка возникает, когда объект физически удалён из базы, а ссылки на него в других объектах остались. В формах и отчётах это выглядит как надпись вида «<Объект не найден> (123:abc...)». Причины — прямое удаление без контроля ссылочной целостности, сбои при обмене, некорректные ручные правки данных или загрузка из внешних источников без проверки.

Штатная защита — пометка на удаление с последующим удалением помеченных объектов: платформа проверяет, есть ли ссылки, и не даёт удалить используемый объект. Проблемы начинаются, когда этот механизм обходят прямым удалением или обработками «чистки» без анализа связей. Восстановить объект по битой ссылке нельзя — данные потеряны; можно либо очистить ссылки, либо создать объект-заглушку с тем же GUID через ПолучитьСсылку и запись нового элемента.

Составные ссылки и ограничения типов

Реквизит может иметь составной тип — например, «Документ.Основание» часто разрешает ссылки на несколько видов документов. Платформа хранит в таком поле и тип, и идентификатор. При работе с составной ссылкой в коде полезно проверять фактический тип через ТипЗнч(Ссылка) или Ссылка.Метаданные(), прежде чем обращаться к специфичным реквизитам.

Ограничение типов защищает данные: если поле объявлено только для контрагентов, записать туда ссылку на договор невозможно. При изменении состава типов в конфигурации платформа при обновлении может потребовать реструктуризацию — данные, не попадающие под новый тип, будут очищены. Это типичный источник потерь при доработках, поэтому сужение составного типа всегда проверяют на копии базы.

Типичные ошибки
01
Сравнение объектов по наименованию вместо ссылки — при совпадающих названиях выбирается не тот элемент.
02
Вызов ПолучитьОбъект() внутри цикла или запроса — резкое падение производительности там, где достаточно работы со ссылкой.
03
Сопоставление объектов при обмене по коду — после перенумерации или в другой базе коды не совпадают, появляются дубли.
04
Передача навигационной ссылки между разными базами — ссылка не открывается или указывает на другой объект.
05
Проверка заполненности ссылки через сравнение с пустой строкой — пустая ссылка не равна пустой строке, проверка не срабатывает.

Проверка результата и диагностика

После операций со ссылками — обмена, загрузки, восстановления — результат проверяют выборочно: открывают несколько объектов через навигационную ссылку, сверяют, что реквизиты соответствуют ожиданиям, и запускают отчёты, где эти объекты участвуют. Для массовой диагностики битых ссылок используют стандартные механизмы тестирования и исправления информационной базы, которые выявляют нарушения ссылочной целостности.

Контрольные точки

Как проверить корректность ссылок

Открытие объекта по навигационной ссылке
Норма

Открывается именно тот объект, реквизиты совпадают

Тревожный признак

Ошибка «объект не найден» или открывается другой элемент

Отображение в формах и отчётах
Норма

Показываются наименования связанных объектов

Тревожный признак

Надписи вида <Объект не найден> с идентификатором

Результат обмена между базами
Норма

Объекты сопоставлены, дублей нет

Тревожный признак

Появились дубли или несопоставленные элементы

Частые вопросы

Чем ссылка отличается от кода элемента справочника?

Код — изменяемый реквизит, который можно перенумеровать или задать вручную; в разных базах один и тот же объект может иметь разные коды. Ссылка основана на GUID, неизменна и уникальна. Для программной идентификации и обменов используют ссылку, код — только для удобства пользователя.

Можно ли открыть объект по навигационной ссылке из другой базы?

Нет. Навигационная ссылка содержит GUID объекта конкретной базы. В другой базе объект с таким GUID либо отсутствует, либо это совершенно другой объект. Для перехода между базами нужны внешние механизмы — например, публикация базы на веб-сервере с передачей параметров или собственные обработки синхронизации.

Как найти все места, где используется элемент справочника?

В режиме 1С:Предприятие в типовых конфигурациях есть команда «Ещё — Найти использование» (или «Ссылки на объект») в форме элемента. Она показывает все документы и реквизиты, где стоит ссылка на этот элемент. Тот же поиск выполняется при удалении помеченных объектов.

Что делать, если в отчёте видно «Объект не найден»?

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

Почему обмен создал дубли контрагентов?

Чаще всего потому, что объекты были созданы независимо в обеих базах и получили разные GUID. Платформа не нашла соответствия по идентификатору и создала новые элементы. Решение — настроить правила поиска по реквизитам (ИНН, КПП) в обмене и устранить уже созданные дубли штатной обработкой объединения, если она есть в конфигурации.

Меняется ли ссылка при переименовании или перемещении объекта?

Нет. Ссылка и GUID остаются прежними при любых изменениях реквизитов, переносе в другую группу и даже изменении кода. Ссылка исчезает только при физическом удалении объекта из базы.

Итог

Что важно запомнить

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