Разработка и Конфигурация · 9 мин
Как получить навигационную ссылку документа в 1С
Как получить навигационную ссылку документа в 1С: через интерфейс, функцию ПолучитьНавигационнуюСсылку, по GUID. Примеры кода, ошибки и проверка результата.
Навигационная ссылка документа в 1С — это строка вида e1cib/data/Документ.РеализацияТоваровУслуг?ref=80e4005056b0a1e811ee3a2b4f1c2d3e, которая однозначно указывает на конкретный объект базы. По такой ссылке можно открыть документ из письма, мессенджера, другой базы 1С или внешней системы, не выполняя поиск вручную.
Задача получения навигационной ссылки возникает в двух разных контекстах. Первый — прикладной: пользователю нужно быстро поделиться ссылкой на документ с коллегой. Второй — разработческий: ссылку требуется сформировать программно, например для обмена между базами, отправки уведомлений или построения интеграций.
Ниже разобраны оба сценария: как получить ссылку штатными средствами интерфейса, как сделать это кодом через функцию ПолучитьНавигационнуюСсылку(), как восстановить объект по ссылке и какие ошибки встречаются чаще всего.
Что такое навигационная ссылка и из чего она состоит
Навигационная ссылка имеет фиксированную структуру: префикс e1cib/data/, затем полное имя объекта метаданных (Документ.ЗаказКлиента, Справочник.Номенклатура и т.д.), затем параметр ref с уникальным идентификатором объекта в шестнадцатеричном виде. Идентификатор в ref — это тот же GUID, что возвращает метод УникальныйИдентификатор(), только записанный в другом порядке байтов.
Важно понимать: навигационная ссылка — это не URL веб-сайта. Она открывается только платформой 1С (толстым, тонким или веб-клиентом, если база опубликована). Для веб-клиента и внешнего доступа ссылка дополняется адресом публикации, например https://server/base/e1cib/data/....
Как скопировать ссылку на документ через интерфейс
В управляемом приложении (режим «Тонкий клиент», «Толстый клиент», веб-клиент) ссылка копируется без программирования. Откройте нужный документ, затем нажмите кнопку «Ещё» в командной панели формы и выберите пункт «Получить ссылку». В открывшемся окне платформа покажет навигационную ссылку и предложит варианты её представления — внутреннюю и, если база опубликована на веб-сервере, внешнюю.
Быстрый способ — сочетание клавиш Ctrl+F11 в открытой форме документа. Оно вызывает то же окно получения ссылки. Скопированную строку можно вставить в письмо или чат: у получателя, работающего в той же базе, документ откроется по этой ссылке.
- 1Откройте документ в списке или через поиск
- 2Нажмите «Ещё → Получить ссылку» или Ctrl+F11
- 3Выберите тип ссылки: внутренняя или внешняя (для веб-клиента)
- 4Скопируйте строку и передайте адресату
- 5Проверьте: вставьте ссылку в диалог «Перейти по ссылке» и убедитесь, что открывается нужный документ
Обратный переход тоже выполняется штатно: в главном меню выберите «Файл → Перейти по ссылке» (или нажмите Ctrl+F11 в главном окне, в зависимости от версии платформы пункт может находиться в меню «Сервис»), вставьте ссылку и подтвердите переход.
Как получить навигационную ссылку программно
Для программного получения ссылки используется глобальная функция ПолучитьНавигационнуюСсылку(). Она принимает ссылку на объект базы данных и возвращает строку навигационной ссылки.
ДокументСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-001234", ТекущаяДатаСеанса());
Если ЗначениеЗаполнено(ДокументСсылка) Тогда
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);
// Результат: e1cib/data/Документ.РеализацияТоваровУслуг?ref=...
КонецЕсли;
Если у вас есть не ссылка, а объект документа (например, внутри обработки проведения), сначала возьмите его свойство Ссылка: ПолучитьНавигационнуюСсылку(ЭтотОбъект.Ссылка). Передавать в функцию сам объект нельзя — нужен именно тип «ДокументСсылка».
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);Как получить ссылку по GUID и восстановить объект по ссылке
Частая задача интеграций — обратное преобразование: есть строка GUID из внешней системы, нужно получить ссылку на документ. Для этого используется метод менеджера документа ПолучитьСсылку():
ГУИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");
ДокументСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(ГУИД);
// Проверка, что объект реально существует в базе
Запрос = Новый Запрос("ВЫБРАТЬ 1 ИЗ Документ.РеализацияТоваровУслуг ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Если Не Запрос.Выполнить().Пустой() Тогда
НавСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);
КонецЕсли;
Обратите внимание на нюанс: ПолучитьСсылку() возвращает ссылку даже для несуществующего объекта — так называемую «битую ссылку». Поэтому перед использованием всегда проверяйте существование объекта запросом или через ДокументСсылка.ПолучитьОбъект() с обработкой Неопределено.
Разбор навигационной ссылки из строки
Если на вход приходит готовая строка навигационной ссылки (например, из письма или внешней системы), из неё нужно извлечь имя объекта и ref. Значение ref записано в переставленном виде: байты GUID идут в обратном порядке по сравнению со строковым представлением. Платформа умеет выполнять преобразование сама — через функцию ПолучитьСсылкуИзНавигационнойСсылки() в модуле общего назначения типовых конфигураций (например, ОбщегоНазначения.ЗначениеИзСтрокиXML и смежные механизмы) либо вручную перестановкой символов.
Простой практический приём: извлечь часть после ref=, преобразовать её в GUID перестановкой сегментов (первые 8 символов разворачиваются, затем группы по 4, последние 12 символов остаются), создать УникальныйИдентификатор и вызвать ПолучитьСсылку() соответствующего менеджера. Имя менеджера берётся из части строки между e1cib/data/ и знаком вопроса.
Типичные ошибки и ограничения
Первая ошибка — попытка передать в ПолучитьНавигационнуюСсылку() объект вместо ссылки. Функция работает со ссылочными типами; для объекта используйте его свойство Ссылка. Вторая — ожидание, что внутренняя ссылка e1cib/data/... откроется в браузере у внешнего пользователя: без публикации базы на веб-сервере и полного URL это невозможно.
Третья группа проблем связана с обменом ссылками между разными базами. Навигационная ссылка уникальна в пределах конкретной информационной базы: в другой базе тот же ref либо укажет на другой объект, либо ни на что. Для межбазовых интеграций передавайте GUID и имя типа отдельно и восстанавливайте ссылку на стороне приёмника.
Как проверить результат
После получения ссылки убедитесь, что она рабочая. Для интерфейсного способа вставьте скопированную строку в диалог «Перейти по ссылке» — должен открыться именно тот документ, с которого ссылка копировалась. Для программного способа выведите строку в сообщение и сверьте имя типа и ref с ожидаемыми.
Как проверить результат
Начинается с e1cib/data/, содержит имя типа и параметр ref
Отсутствует ref или имя объекта — ссылка не откроется
Открывается форма именно того документа
Сообщение «Объект не найден» — ссылка битая или из другой базы
ПолучитьСсылку() + запрос находят существующий объект
Запрос пуст — объект удалён или GUID преобразован неверно
FAQ
Можно ли получить навигационную ссылку на несохранённый документ?
Нет. Ссылка появляется у объекта только после записи в базу. Для нового документа сначала вызовите Записать(), затем используйте ПолучитьНавигационнуюСсылку(ДокументОбъект.Ссылка).
Чем навигационная ссылка отличается от GUID документа?
GUID — это просто уникальный идентификатор объекта без привязки к типу. Навигационная ссылка содержит и тип объекта (Документ.Имя), и тот же идентификатор в изменённом порядке байтов, поэтому по ней платформа может сразу открыть форму.
Откроется ли ссылка e1cib/data у пользователя другой базы?
Нет. Навигационная ссылка действует только в той информационной базе, где создан объект. Для обмена между базами передавайте GUID и имя типа, а на стороне приёмника восстанавливайте ссылку через ПолучитьСсылку().
Как сделать ссылку, которая откроется в браузере?
Базу нужно опубликовать на веб-сервере, после чего к навигационной ссылке добавляется адрес публикации: https://сервер/имя_базы/e1cib/data/... В диалоге «Получить ссылку» такой вариант предлагается автоматически, если публикация настроена.
Можно ли получить ссылку на запись регистра сведений?
Да, для регистров существуют свои форматы навигационных ссылок. Для записи регистра сведений используется ПолучитьНавигационнуюСсылку() с ключом записи — сначала сформируйте ключ через менеджер регистра, затем передайте его в функцию.
Что делать, если по ссылке выводится «Объект не найден»?
Объект удалён, ссылка скопирована из другой базы или GUID преобразован с ошибкой в порядке байтов. Проверьте источник ссылки и, при программном разборе, корректность перестановки сегментов ref.
Что важно запомнить
В интерфейсе ссылка копируется через «Ещё → Получить ссылку» (Ctrl+F11), программно — функцией ПолучитьНавигационнуюСсылку(Ссылка). Обратное восстановление выполняется через ПолучитьСсылку() с обязательной проверкой существования объекта, а ref в строке ссылки требует перестановки байтов при ручном разборе.