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