Ссылки в 1С: навигационные, внешние и в коде

· 9 мин

Содержание

Чтобы получить ссылку на документ или элемент справочника в 1С 8.3, откройте объект и вызовите команду Получить ссылку в главном меню программы — платформа покажет строку вида e1cib/data/Документ.РеализацияТоваровУслуг?ref=..., её можно скопировать и отправить коллеге. В коде ту же навигационную ссылку возвращает функция ПолучитьНавигационнуюСсылку(Ссылка).

Сделать ссылку в 1С можно по-разному: навигационную — на документ, справочник, отчёт или обработку внутри базы; внешнюю — на сайт или файл; динамическую — чтобы из печатной формы или отчёта открывался исходный объект. Ниже — рабочие способы для всех этих случаев с кодом и путями меню.

Как скопировать ссылку на документ или справочник вручную

Самый быстрый способ — без программирования. Пользователь получает ссылку прямо из интерфейса и передаёт её в письме или мессенджере; получатель открывает объект одним кликом (если у него есть доступ к той же базе).

Порядок действий:

  1. Откройте нужный документ, элемент справочника или список.
  2. Нажмите кнопку главного меню программы (значок в левом верхнем углу окна) и найдите команду Получить ссылку.
  3. В открывшемся окне скопируйте строку ссылки кнопкой или сочетанием Ctrl+C.

Полученная строка — это навигационная ссылка. Она начинается с e1cib/ и содержит идентификатор объекта. Чтобы перейти по чужой ссылке, в том же меню выберите Перейти по ссылке, вставьте строку и нажмите переход.

Ссылку на текущий объект удобно класть в Избранное (значок звезды вверху окна). Тогда часто используемый документ или отчёт открывается из списка избранного без поиска.

Тот же приём работает для списков: если открыть список документов и получить ссылку, она приведёт именно к списку, а не к конкретной строке. Для отчёта ссылка сохраняет текущее состояние формы — сформированный результат так не передаётся, но открытая форма отчёта с её настройками у получателя воспроизведётся.

Что ещё полезно знать про ручной способ:

  • 🔗 Ссылку можно вставить не только в письмо, но и в поле любого текста внутри базы — в комментарий к задаче, в описание в справочнике.
  • 👥 Получатель должен иметь доступ к базе и права на объект. Без прав ссылка откроет клиент, но объект не покажет.
  • 🖥 По клику на ссылку из внешней программы запускается клиент 1С и открывает нужную базу — при условии, что база зарегистрирована в списке на компьютере получателя.

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

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

НавСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);
// Результат: "e1cib/data/Документ.РеализацияТоваровУслуг?ref=a1b2c3..."

Чтобы открыть объект по такой строке, используйте ПерейтиПоНавигационнойСсылке — это клиентская процедура:

&НаКлиенте
Процедура ОткрытьСвязанныйДокумент()
    ПерейтиПоНавигационнойСсылке(НавСсылка);
КонецПроцедуры

Если нужно просто открыть форму объекта по его ссылке, не формируя строку, подойдёт ПоказатьЗначение:

&НаКлиенте
Процедура ОткрытьЗаказ()
    ПоказатьЗначение(, Объект.ЗаказКлиента);
КонецПроцедуры

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

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

Навигационная ссылка привязана к конкретной информационной базе. Внутри строки зашит идентификатор базы и GUID объекта. Ссылка, скопированная из одной базы, не откроется в другой, даже если это точная копия конфигурации.

Ссылки на отчёты, обработки и команды

На отчёт или обработку ссылку получают так же, как на документ: открываете форму отчёта и вызываете Получить ссылку в главном меню. Строка будет начинаться с e1cib/app/Отчет.ИмяОтчета или e1cib/command/... — в зависимости от того, что именно открыто.

Разберём типы навигационных ссылок, которые встречаются чаще всего:

Префикс строкиКуда ведёт
e1cib/data/…Конкретный объект: документ, элемент справочника
e1cib/list/…Список объектов (журнал документов, справочник целиком)
e1cib/app/Отчет.…Форма отчёта
e1cib/command/…Команда (обработка, отчёт, глобальная команда)

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

Ссылки на сайты, файлы и внешние ресурсы

Переход на внешний адрес делает та же процедура ПерейтиПоНавигационнойСсылке, только вместо e1cib/… передаётся обычный URL:

&НаКлиенте
Процедура ОткрытьСайтПоставщика()
    ПерейтиПоНавигационнойСсылке("https://example.ru/price");
КонецПроцедуры

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

Чтобы сделать кликабельную ссылку прямо на форме, добавьте декорацию типа Надпись и включите у неё свойство Гиперссылка. Надпись станет синей и подчёркнутой, а клик нужно обработать:

&НаКлиенте
Процедура СсылкаНаСайтНажатие(Элемент)
    ПерейтиПоНавигационнойСсылке("https://example.ru");
КонецПроцедуры

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

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

Ещё один вариант для сложной вёрстки — поле HTML-документа. В нём ссылки задаются обычной разметкой <a href="...">, а клик по ссылке внутри формы обрабатывается в событии поля. Это удобно, когда нужно показать письмо, инструкцию или справку с несколькими переходами и привычным оформлением. Для коротких подписей и типовых писем проще форматированный документ, для готовой HTML-вёрстки — поле HTML-документа.

Переходы по ссылкам в отчётах и печатных формах

В отчётах и печатных формах за переходы отвечает механизм расшифровки (Расшифровка). Это не строка-ссылка, а значение, привязанное к ячейке табличного документа: когда пользователь кликает по ячейке, платформа передаёт это значение в обработчик.

Чтобы из печатной формы открывался исходный объект:

  1. В макете у нужной ячейки задайте параметр расшифровки (свойство ячейки, где указывается имя параметра).
  2. При заполнении области присвойте этому параметру ссылку на объект — например, Область.Параметры.Расшифровка = СтрокаТЧ.Номенклатура;.
  3. На форме, где показывается табличный документ, обработайте клик в событии ОбработкаРасшифровки.

Обработчик решает, что делать с расшифровкой. Проверяем тип значения и открываем форму объекта:

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Если ТипЗнч(Расшифровка) = Тип("СправочникСсылка.Номенклатура") Тогда
        СтандартнаяОбработка = Ложь;
        ПоказатьЗначение(, Расшифровка);
    КонецЕсли;
КонецПроцедуры

В отчётах на системе компоновки данных (СКД) расшифровки формируются автоматически: достаточно, чтобы поле выводилось в результат. Клик по значению в готовом отчёте открывает меню расшифровки, из которого можно перейти к исходным данным, сгруппировать, отфильтровать или открыть сам объект. Дополнительно у поля в настройках СКД можно указать оформление, чтобы значение выглядело как ссылка.

Когда по одному клику нужно передать сразу несколько значений (например, и номенклатуру, и склад), в параметр расшифровки кладут структуру. Обработчик ОбработкаРасшифровки разбирает её и решает, что открыть. Это гибче одиночной ссылки: один отчёт может вести и к карточке товара, и к документу-регистратору в зависимости от того, по какой ячейке кликнули.

Так получаются динамические ссылки: в печатной форме реализации клик по строке товара открывает карточку номенклатуры, а клик по номеру документа — сам документ.

Ссылки в запросах и сериализация через XDTO

В языке запросов «ссылка» — это и ссылочное поле объекта, и оператор проверки типа. Оператор ССЫЛКА отбирает записи по типу регистратора или другого составного поля:

ВЫБРАТЬ
    Продажи.Регистратор КАК Документ
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

Когда поле составного типа, а нужно обратиться к реквизиту конкретного вида документа, применяют ВЫРАЗИТЬ:

ВЫБРАТЬ
    ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Контрагент
ИЗ
    РегистрНакопления.Продажи КАК Продажи

Когда ссылку нужно сохранить вне базы — выгрузить в файл обмена, передать во внешнюю систему, записать в лог — её сериализуют в строку. Простой способ — функции работы с XML:

СтрокаСсылки = XMLСтрока(ДокументСсылка);
// Обратно:
Восстановленная = XMLЗначение(Тип("ДокументСсылка.РеализацияТоваровУслуг"), СтрокаСсылки);

Для сложных структур с несколькими ссылками используют сериализатор XDTO — СериализаторXDTO.XMLСтрока(Значение) и обратную СериализаторXDTO.XMLЗначение(...). Он сохраняет не только саму ссылку, но и тип, поэтому при чтении восстанавливается исходное значение. Именно так ссылки едут в планах обмена: в сообщение пишется не просто GUID, а тип объекта, и в базе-приёмнике значение собирается правильно.

Важная оговорка про перенос между базами. GUID одного и того же по смыслу объекта в двух разных базах, как правило, различается, если объекты не связаны обменом. Поэтому переносить ссылку строкой и подставлять её «в лоб» в другую базу нельзя — там будет другой объект или пустота. Корректный путь — синхронизация через план обмена либо поиск объекта-приёмника по его реквизитам (коду, наименованию, ИНН).

Если на руках только уникальный идентификатор объекта, ссылку собирают через менеджер:

Идентификатор = Новый УникальныйИдентификатор("a1b2c3d4-...");
Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Идентификатор);

ПолучитьСсылку вернёт ссылку даже на несуществующий объект — она будет «битой». Перед использованием проверяйте через Ссылка.Пустая() или чтение объекта.

Почему ссылка не открывается: разбор ошибок

Большинство проблем со ссылками сводится к нескольким ситуациям. Найдите свою в подсказке ниже.

Диагностика: выберите симптом

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

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

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

Чем навигационная ссылка отличается от расшифровки?
Навигационная ссылка — это строка e1cib/…, её можно скопировать и передать. Расшифровка — это значение, привязанное к ячейке отчёта или печатной формы; оно не копируется как текст, а обрабатывается при клике внутри базы.
Можно ли отправить ссылку на документ коллеге по почте?
Да, если он работает в той же информационной базе и у него есть права на объект. Скопируйте строку через Получить ссылку и вставьте в письмо. По клику у коллеги откроется клиент 1С и перейдёт к объекту.
Почему ссылка открывается у меня, но не у коллеги?
Чаще всего дело в правах доступа: сама ссылка корректна, но у пользователя нет прав на просмотр этого объекта или на запуск отчёта. Проверьте роли пользователя.
Как сделать так, чтобы из печатной формы открывался документ?
Задайте ячейке макета параметр расшифровки, при заполнении присвойте ему ссылку на объект и обработайте клик в событии ОбработкаРасшифровки формы, где показывается табличный документ.
Ссылка работает только в тонком клиенте?
Навигационные ссылки e1cib/… работают в тонком и веб-клиенте. Внешние адреса https:// в веб-клиенте открываются в браузере. В толстом клиенте поведение для внешних адресов может отличаться — для пользовательских сценариев предпочтительнее тонкий клиент.