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

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

Как получить ссылку на объект 1С

Как получить ссылку на объект 1С: ПолучитьСсылку(), навигационная ссылка, работа с GUID, поиск по уникальному идентификатору. Примеры кода и типичные ошибки.

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

Частая путаница возникает из-за того, что словом «ссылка» называют три разные вещи: ссылочное значение встроенного языка (тип СправочникСсылка, ДокументСсылка), уникальный идентификатор GUID и навигационную ссылку вида e1cib/data/..., которую можно отправить коллеге в сообщении. Ниже разобраны все три сценария с примерами кода и ограничениями.

Что такое ссылка в 1С и чем она отличается от объекта

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

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

Получение ссылки из запроса и выборки

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Товары.Ссылка КАК Ссылка

|ИЗ

| Справочник.Товары КАК Товары

|ГДЕ

| Товары.Код = &Код";

Запрос.УстановитьПараметр("Код", "000000123");

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда

ТоварСсылка = Выборка.Ссылка;

КонецЕсли;

Аналогично работает метод НайтиПоКоду(), НайтиПоНаименованию() и НайтиПоРеквизиту() у менеджера справочника — все они возвращают ссылку, а не объект. Если ничего не найдено, возвращается пустая ссылка, которую проверяют функцией ЗначениеЗаполнено() или сравнением с Справочники.Товары.ПустаяСсылка().

Получение ссылки по уникальному идентификатору (GUID)

Когда ссылка хранится во внешней системе или в текстовом поле как GUID, её восстанавливают методом ПолучитьСсылку() менеджера объекта:

ИдСтрокой = "b2e0c8f1-3a4d-4e5b-9c6a-1f2d3e4b5a6c";

Ид = Новый УникальныйИдентификатор(ИдСтрокой);

ТоварСсылка = Справочники.Товары.ПолучитьСсылку(Ид);

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

Обратная задача — получить GUID из ссылки — решается свойством УникальныйИдентификатор(): СтрокаГУИД = XMLСтрока(ТоварСсылка.УникальныйИдентификатор()). Это нужно для интеграций, где внешняя система идентифицирует объекты по GUID.

Как получить навигационную ссылку для пользователя

Навигационная ссылка позволяет открыть объект в клиенте 1С по строке. Её получают функцией ПолучитьНавигационнуюСсылку():

НавСсылка = ПолучитьНавигационнуюСсылку(ТоварСсылка);

// Результат: e1cib/data/Справочник.Товары?ref=b2e0...

В тонком и веб-клиенте пользователь может получить навигационную ссылку самостоятельно: в форме объекта через меню «Ещё» → «Получить ссылку» либо сочетанием клавиш (в большинстве версий платформы — Ctrl+F11, зависит от режима). Скопированную строку можно вставить в письмо или мессенджер — получатель откроет её через «Файл» → «Перейти по ссылке» или диалог добавления в избранное.

Как поделиться ссылкой на объект
  1. 1
    Откройте нужный объект в клиенте 1С
  2. 2
    Нажмите «Ещё» → «Получить ссылку» или сочетание клавиш
  3. 3
    Скопируйте строку e1cib/data/... в буфер обмена
  4. 4
    Отправьте коллеге; он откроет её через «Перейти по ссылке»
  5. 5
    Проверьте, что у получателя есть права на этот объект

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

Ссылка на новый объект до записи

Иногда ссылка нужна до того, как объект записан: например, чтобы заранее заполнить реквизит-владелец у подчинённых данных. Для этого используют ПолучитьСсылку() без параметров и метод УстановитьСсылкуНового():

НовыйТовар = Справочники.Товары.СоздатьЭлемент();

НоваяСсылка = Справочники.Товары.ПолучитьСсылку();

НовыйТовар.УстановитьСсылкуНового(НоваяСсылка);

НовыйТовар.Наименование = "Новая позиция";

НовыйТовар.Записать();

// Теперь НоваяСсылка указывает на записанный объект

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

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

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

После получения ссылки полезно убедиться, что она корректна. Минимальный набор проверок: ссылка не пустая, объект существует в базе, тип соответствует ожидаемому. Тип проверяют функцией ТипЗнч() или сравнением с Тип("СправочникСсылка.Товары").

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

Как проверить результат

Значение ссылки
Норма

ЗначениеЗаполнено(Ссылка) = Истина

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

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

Существование объекта
Норма

Запрос по ссылке возвращает строку

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

Запрос пуст — ссылка битая

Тип значения
Норма

ТипЗнч совпадает с ожидаемым ссылочным типом

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

Строка или УникальныйИдентификатор вместо ссылки

Навигационная ссылка
Норма

Открывается объект в клиенте 1С

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

Ошибка «объект не найден» или нет прав

Если навигационная ссылка не открывается у коллеги, чаще всего причина в правах доступа или в том, что он работает в другой базе. Если ссылка в коде «пустая», хотя объект в интерфейсе виден, проверьте отбор в запросе: регистр кода, лишние пробелы в наименовании, отбор по владельцу или пометку удаления.

FAQ

Чем ссылка отличается от GUID в 1С?

GUID — это только 16-байтовый идентификатор без информации о типе. Ссылка содержит и GUID, и тип объекта, поэтому платформа знает, в какой таблице искать данные. Из ссылки GUID извлекается свойством УникальныйИдентификатор(), обратно ссылка восстанавливается через менеджер конкретного типа объекта.

Можно ли получить ссылку, не обращаясь к базе данных?

Да, если известен GUID: метод ПолучитьСсылку(Ид) формирует значение без чтения данных. Но такая ссылка не гарантирует существование объекта — проверку нужно делать отдельно перед использованием в записях.

Почему НайтиПоНаименованию() вернул не тот элемент?

Наименование не уникально: в справочнике может быть несколько элементов с одинаковым текстом, и метод вернёт первый попавшийся. Для точного поиска используйте код, GUID или запрос с дополнительными условиями по реквизитам.

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

Если база опубликована на веб-сервере, к строке e1cib добавляется адрес публикации, и ссылка открывается в веб-клиенте. Точный формат зависит от настроек публикации; в файловой базе без веб-сервера навигационные ссылки работают только внутри клиентского приложения.

Что делать, если в реквизите оказалась битая ссылка?

Сначала найдите такие записи запросом с соединением, где основная таблица не находит пару. Затем либо восстановите объект по GUID (если есть источник), либо очистите реквизит. Массовую чистку выполняйте на копии базы и с учётом того, что битые ссылки могут участвовать в движениях документов.

Итог

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

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