Разработка и Конфигурация · 9 мин
Как получить ссылку в 1С на объект, документ или элемент справочника
Как получить ссылку на объект в 1С: навигационная ссылка в интерфейсе, GUID, методы ПолучитьСсылку и ПолучитьНавигационнуюСсылку, типовые ошибки и примеры кода.
Под «ссылкой в 1С» обычно понимают три разные вещи: навигационную ссылку для открытия объекта в программе, уникальный идентификатор (GUID) для обмена данными и программную ссылку как значение типа «Ссылка» в коде. Способ получения зависит от того, что именно нужно: отправить коллеге адрес документа, сопоставить объекты между базами или найти элемент по известному идентификатору.
В пользовательском режиме ссылка получается прямо из формы объекта без программирования. В режиме разработчика используются методы встроенного языка — ПолучитьСсылку(), ПолучитьНавигационнуюСсылку(), свойство УникальныйИдентификатор. Ниже разобраны все сценарии с точным порядком действий.
Важно понимать ограничение: навигационная ссылка работает только внутри конкретной информационной базы, а GUID привязан к объекту конкретной базы. Переносить идентификаторы между разными базами без плана обмена нельзя — объекты с одинаковым GUID в двух независимых базах будут разными объектами.
Получение навигационной ссылки через интерфейс программы
Самый простой способ — кнопка в форме объекта. Откройте нужный документ, элемент справочника или запись регистра, затем нажмите кнопку «Ещё» в командной панели формы и выберите пункт «Получить ссылку». Программа покажет навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=... и предложит скопировать её в буфер обмена.
В некоторых конфигурациях пункт называется «Показать ссылку» или доступен через меню «Действия». Если пункта нет — проверьте права: у пользователя должно быть право просмотра объекта, а в тонком клиенте некоторые административные команды скрываются настройкой интерфейса.
Полученную ссылку можно вставить в письмо, задачу или сообщение. Коллега, работающий в той же базе, откроет её через «Файл → Открыть ссылку» или вставкой в адресную строку веб-клиента. В другой базе эта ссылка не сработает — она содержит внутренний идентификатор объекта.
- 1Откройте нужный документ или элемент справочника в форме
- 2Нажмите «Ещё» в командной панели формы
- 3Выберите пункт «Получить ссылку» (или «Показать ссылку»)
- 4Скопируйте ссылку кнопкой «Копировать» или вручную
- 5Проверьте: вставьте ссылку в «Файл → Открыть ссылку» — должен открыться тот же объект
Как узнать GUID (уникальный идентификатор) объекта
GUID нужен при обмене данными, интеграции с внешними системами и поиске «битых» ссылок. В пользовательском интерфейсе GUID напрямую не показывается — он виден внутри навигационной ссылки после параметра ref=, но в перекодированном виде, поэтому для точного получения используют код или внешние инструменты.
Программно идентификатор получается одной строкой: Строка(СсылкаНаОбъект.УникальныйИдентификатор()). Результат — строка вида «a1b2c3d4-...», которую можно сохранить в дополнительный реквизит, передать в HTTP-запрос или использовать для сопоставления объектов между базами.
Если под рукой нет конфигуратора, GUID можно извлечь из навигационной ссылки обработкой-конвертером, но такие обработки должны быть одобрены администратором. Самостоятельно запускать внешние обработки из непроверенных источников опасно — они выполняются с правами текущего пользователя.
Программное получение ссылки в коде
Во встроенном языке ссылка — это самостоятельное значение. Для существующего объекта её получают через свойство Ссылка у объекта: ТекСсылка = ОбъектДокумента.Ссылка;. Если объект ещё не записан, сначала вызовите УстановитьСсылкуНового() или запишите объект.
Навигационная ссылка формируется методом ПолучитьНавигационнуюСсылку(СсылкаНаОбъект). Она пригодна для открытия объекта в клиенте, но не для обмена между базами — для этого используйте GUID.
Обратная задача — получить ссылку по известному GUID — решается так: Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). После этого обязательно проверьте, что объект реально существует, иначе получите «битую» ссылку.
// Навигационная ссылка для пользователя
НавСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);
// GUID для интеграции
GUID = Строка(ДокументСсылка.УникальныйИдентификатор());
// Ссылка по известному GUID
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(GUID));
Если НоваяСсылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект не найден — ссылка битая");
КонецЕсли;Получение ссылки на новый, ещё не записанный объект
Частая задача при загрузке данных: нужно заранее знать ссылку объекта, который ещё не создан. Для этого у менеджера объекта есть метод ПолучитьСсылку() без параметров — он генерирует новый GUID, или с заданным GUID — для фиксированной ссылки.
Порядок такой: получите ссылку через Менеджер.ПолучитьСсылку(УникальныйИдентификатор), затем создайте объект методом СоздатьЭлемент() / СоздатьДокумент(), назначьте ссылку через УстановитьСсылкуНового() и заполните реквизиты. Только после Записать() объект появится в базе.
Типичная ошибка — использовать полученную ссылку до записи объекта в запросах и сравнениях. До записи это «висячая» ссылка: запрос по ней вернёт пустой результат, а отчёты покажут её как битую.
Ссылка в запросе и поиск объекта по ссылке
В языке запросов ссылка передаётся как параметр: ГДЕ Таблица.Ссылка = &Ссылка. Это основной способ найти связанные данные — например, все строки табличной части или движения документа. Параметр устанавливается через Запрос.УстановитьПараметр(\"Ссылка\", ДокументСсылка).
Для проверки существования объекта по ссылке используйте либо запрос, либо метод ПолучитьОбъект() с проверкой на Неопределено. Вариант с запросом быстрее, когда объект целиком не нужен — достаточно проверить наличие ссылки в таблице.
Признак «битой» ссылки в запросе — значения NULL в полях соединяемой таблицы или строка вида «Объект не найден (123:...)» при выводе ссылки. Такие ссылки появляются после удаления объектов без контроля ссылочной целостности.
Как проверить результат
Через «Файл → Открыть ссылку» открывается тот же документ
Ошибка «объект не найден» или открывается другой объект
ПолучитьОбъект() возвращает объект с нужными реквизитами
Возвращается Неопределено — ссылка битая
После Записать() объект находится запросом по ссылке
Запрос по ссылке пуст — объект не был записан
Типичные ошибки и ограничения
Самая частая ошибка — попытка открыть навигационную ссылку одной базы в другой. Ссылка содержит GUID, который в чужой базе либо не существует, либо указывает на совершенно другой объект. Для межбазовых переходов нужны внешние публикации или специальные механизмы интеграции.
Вторая группа ошибок — работа со ссылкой вместо объекта. У ссылки доступны только реквизиты, перечисленные в запросе или обращении через точку (каждое такое обращение — отдельное обращение к базе). Для массовой обработки получайте данные запросом, а не перебором Ссылка.Реквизит в цикле.
Третья ошибка — хранение навигационной ссылки как постоянного идентификатора. Формат навигационной ссылки может меняться между версиями платформы, а GUID — нет. Для длительного хранения и интеграций сохраняйте именно GUID.
Частые вопросы
Что важно запомнить
Для пользователя ссылка получается через «Ещё → Получить ссылку» в форме объекта. Для кода — ПолучитьНавигационнуюСсылку() и УникальныйИдентификатор(). Для интеграций храните GUID, а не навигационную ссылку, и всегда проверяйте существование объекта по ссылке.
Как открыть объект по навигационной ссылке, которую мне прислали?
В толстом или тонком клиенте используйте меню «Файл → Открыть ссылку» и вставьте полученную строку. В веб-клиенте ссылку можно дописать к адресу базы в браузере. Открыть её можно только в той же информационной базе, где она была получена.
Можно ли получить ссылку на объект без прав администратора?
Да. Кнопка «Получить ссылку» доступна обычному пользователю, если у него есть право просмотра конкретного объекта. Административные права не требуются — достаточно стандартного доступа к документу или справочнику.
Чем навигационная ссылка отличается от GUID?
GUID — постоянный идентификатор объекта, пригодный для обмена и интеграций. Навигационная ссылка — служебный адрес для открытия объекта в клиенте, она содержит GUID в перекодированном виде и зависит от формата платформы. Для хранения и обмена используйте GUID.
Как найти объект по строке «Объект не найден (123:...)»?
Такая строка означает, что объект удалён, а ссылка на него осталась. Восстановить объект по этой строке штатными средствами нельзя — только из резервной копии. Чтобы избежать таких ситуаций, удаляйте объекты с контролем ссылочной целостности или помечайте на удаление вместо непосредственного удаления.
Почему ПолучитьСсылку() с GUID возвращает ссылку, а объекта нет?
Метод ПолучитьСсылку() не обращается к базе — он просто конструирует значение ссылки из GUID. Существование объекта нужно проверять отдельно: через ПолучитьОбъект() с проверкой на Неопределено или запросом по ссылке.
Можно ли получить ссылку на запись регистра сведений?
Для регистров сведений ссылка как таковая не используется — записи идентифицируются ключом записи (набором измерений и периода). Навигационная ссылка на запись формируется по ключу записи через ПолучитьНавигационнуюСсылку() с параметром ключа, но программно оперировать нужно именно ключом записи.