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