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

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

Как получить ссылку в 1С на объект, документ или элемент справочника

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

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

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

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

Получение навигационной ссылки через интерфейс программы

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

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

Полученную ссылку можно вставить в письмо, задачу или сообщение. Коллега, работающий в той же базе, откроет её через «Файл → Открыть ссылку» или вставкой в адресную строку веб-клиента. В другой базе эта ссылка не сработает — она содержит внутренний идентификатор объекта.

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

Как узнать GUID (уникальный идентификатор) объекта

GUID нужен при обмене данными, интеграции с внешними системами и поиске «битых» ссылок. В пользовательском интерфейсе GUID напрямую не показывается — он виден внутри навигационной ссылки после параметра ref=, но в перекодированном виде, поэтому для точного получения используют код или внешние инструменты.

Программно идентификатор получается одной строкой: Строка(СсылкаНаОбъект.УникальныйИдентификатор()). Результат — строка вида «a1b2c3d4-...», которую можно сохранить в дополнительный реквизит, передать в HTTP-запрос или использовать для сопоставления объектов между базами.

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

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

Во встроенном языке ссылка — это самостоятельное значение. Для существующего объекта её получают через свойство Ссылка у объекта: ТекСсылка = ОбъектДокумента.Ссылка;. Если объект ещё не записан, сначала вызовите УстановитьСсылкуНового() или запишите объект.

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

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

bsl
// Навигационная ссылка для пользователя
НавСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);

// GUID для интеграции
GUID = Строка(ДокументСсылка.УникальныйИдентификатор());

// Ссылка по известному GUID
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(GUID));
Если НоваяСсылка.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Объект не найден — ссылка битая");
КонецЕсли;

Получение ссылки на новый, ещё не записанный объект

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

Порядок такой: получите ссылку через Менеджер.ПолучитьСсылку(УникальныйИдентификатор), затем создайте объект методом СоздатьЭлемент() / СоздатьДокумент(), назначьте ссылку через УстановитьСсылкуНового() и заполните реквизиты. Только после Записать() объект появится в базе.

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

Ссылка в запросе и поиск объекта по ссылке

В языке запросов ссылка передаётся как параметр: ГДЕ Таблица.Ссылка = &Ссылка. Это основной способ найти связанные данные — например, все строки табличной части или движения документа. Параметр устанавливается через Запрос.УстановитьПараметр(\"Ссылка\", ДокументСсылка).

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

Признак «битой» ссылки в запросе — значения NULL в полях соединяемой таблицы или строка вида «Объект не найден (123:...)» при выводе ссылки. Такие ссылки появляются после удаления объектов без контроля ссылочной целостности.

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

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

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

Через «Файл → Открыть ссылку» открывается тот же документ

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

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

Ссылка по GUID
Норма

ПолучитьОбъект() возвращает объект с нужными реквизитами

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

Возвращается Неопределено — ссылка битая

Ссылка нового объекта
Норма

После Записать() объект находится запросом по ссылке

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

Запрос по ссылке пуст — объект не был записан

Типичные ошибки и ограничения

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

Вторая группа ошибок — работа со ссылкой вместо объекта. У ссылки доступны только реквизиты, перечисленные в запросе или обращении через точку (каждое такое обращение — отдельное обращение к базе). Для массовой обработки получайте данные запросом, а не перебором Ссылка.Реквизит в цикле.

Третья ошибка — хранение навигационной ссылки как постоянного идентификатора. Формат навигационной ссылки может меняться между версиями платформы, а GUID — нет. Для длительного хранения и интеграций сохраняйте именно GUID.

Типичные ошибки
01
Передача навигационной ссылки в другую базу — там она указывает на другой объект или никуда
02
Обращение к реквизитам через ссылку в цикле — резкое падение производительности из-за запросов к базе на каждой итерации
03
Использование ссылки незаписанного объекта в запросах — пустой результат и ложный вывод об отсутствии данных
04
Хранение навигационной ссылки вместо GUID для интеграции — ссылка может перестать работать после обновления платформы

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

Итог

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

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

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

В толстом или тонком клиенте используйте меню «Файл → Открыть ссылку» и вставьте полученную строку. В веб-клиенте ссылку можно дописать к адресу базы в браузере. Открыть её можно только в той же информационной базе, где она была получена.

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

Да. Кнопка «Получить ссылку» доступна обычному пользователю, если у него есть право просмотра конкретного объекта. Административные права не требуются — достаточно стандартного доступа к документу или справочнику.

Чем навигационная ссылка отличается от GUID?

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

Как найти объект по строке «Объект не найден (123:...)»?

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

Почему ПолучитьСсылку() с GUID возвращает ссылку, а объекта нет?

Метод ПолучитьСсылку() не обращается к базе — он просто конструирует значение ссылки из GUID. Существование объекта нужно проверять отдельно: через ПолучитьОбъект() с проверкой на Неопределено или запросом по ссылке.

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

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