Как настроить передачу кликабельных ссылок на объекты 1С через почту и мессенджеры

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе совместной работы пользователей часто возникает необходимость передать ссылку на конкретный документ, элемент справочника или отчет через внешние средства коммуникации: электронную почту, Telegram, WhatsApp или корпоративные чаты. В 1С:Предприятии существует мощный механизм навигационных ссылок, однако при его использовании во внешней среде разработчики часто сталкиваются с тем, что ссылки либо не являются кликабельными, либо не открывают нужное приложение. Разберем подробно, как устроены эти механизмы и как заставить их работать корректно.

Типы навигационных ссылок в 1С

Прежде всего, нам необходимо разграничить понятия внутренних и внешних ссылок. Проанализируем, как платформа генерирует эти данные. Внутренняя ссылка (например, начинающаяся с e1cib/data/) — это путь к объекту внутри текущего сеанса. Сама по себе такая строка для операционной системы Windows или macOS является просто текстом. Чтобы ссылка стала "живой" во внешнем приложении, она должна соответствовать зарегистрированному в системе протоколу.

Рассмотрим основные форматы:

  1. Внутренняя ссылка: e1cib/data/Справочник.Номенклатура?ref=910f50e5.... Используется внутри платформы.
  2. Внешняя ссылка (протокол e1c): e1c://server/base#e1cib/data/.... Эта ссылка сообщает операционной системе, что нужно запустить тонкий или толстый клиент 1С и подключиться к конкретной базе.
  3. HTTP-ссылка для веб-клиента: https://myserver.ru/mybase/#e1cib/data/.... Самый универсальный формат, который понимает любой браузер.

Использование программных методов для получения ссылок

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


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

Однако, как мы выяснили, такая ссылка не будет работать в письме. Чтобы сформировать полноценную внешнюю ссылку, нам нужно добавить адрес информационной базы. Разберем по шагам, как создать функцию, которая возвращает готовую ссылку для отправки по почте:


Функция СформироватьВнешнююСсылку(ОбъектСсылка) Экспорт
    ВнутренняяСсылка = ПолучитьНавигационнуюСсылку(ОбъектСсылка);
    // Получаем адрес публикации, если база опубликована на веб-сервере
    АдресБазы = "https://server.com/trade_base/"; 
    Возврат АдресБазы + "#" + ВнутренняяСсылка;
КонецФункции

В более современных версиях платформы (начиная с 8.3.8) мы можем использовать метод ПолучитьНавигационнуюСсылкуИнформационнойБазы(). Проанализируем его преимущество: он автоматически подставляет адрес базы, если он задан в параметрах информационной базы в консоли администрирования или в параметрах запуска.

Регистрация протокола e1c в операционной системе

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

Для ручной регистрации протокола необходимо убедиться, что в ветке реестра HKEY_CLASSES_ROOT\e1c\shell\open\command прописан путь к стартеру 1С. Пример строки запуска должен выглядеть так:

"C:\Program Files\1cv8\common\1cestart.exe" /URL "%1"

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

Особенности передачи ссылок в мессенджеры (Telegram, Slack)

Многие современные мессенджеры из соображений безопасности не подсвечивают ссылки с нестандартными протоколами (такими как e1c://) как гиперссылки. Пользователь видит просто текст и не может на него нажать. Рассмотрим решение этой проблемы через создание "редиректора".

Суть метода заключается в использовании промежуточной веб-страницы:

  1. Вы формируете обычную http ссылку на ваш корпоративный сайт: https://mycompany.ru/go1c.php?link=e1cib/data/...
  2. При переходе по этой ссылке в браузере открывается скрипт, который выполняет перенаправление.
  3. В HTML-коде страницы прописывается автоматический переход на window.location.href = "e1c://...".

Это позволяет обойти ограничения мессенджеров и сделать процесс открытия базы максимально бесшовным для пользователя.

Работа с навигационными ссылками в Обычных формах (ОФ)

В обычном приложении навигационные ссылки "из коробки" работают не так эффективно, как в управляемом. Если нам нужно реализовать переход по ссылке в старых конфигурациях, мы используем механизм параметров запуска /C. Проанализируем схему реализации:

  1. Формируем ссылку, где в параметре /C передаем идентификатор объекта.
  2. В модуле управляемого приложения (или в обработчике ПриНачалеРаботыСистемы для ОФ) пишем код разбора параметра.

Процедура ПриНачалеРаботыСистемы()
    ПараметрЗапускаСтрока = ПараметрЗапуска;
    Если СтрНачинаетсяС(ПараметрЗапускаСтрока, "OpenObject=") Тогда
        ДанныеОбъекта = СтрЗаменить(ПараметрЗапускаСтрока, "OpenObject=", "");
        // Логика поиска объекта по УИД и открытие формы
        // ...
    КонецЕсли;
КонецПроцедуры

Обработка ссылки внутри 1С: метод ПерейтиПоНавигационнойСсылке

Если внутри вашей конфигурации реализован чат или система уведомлений, вам может потребоваться программно открыть объект по текстовой строке ссылки. Для этого идеально подходит метод ПерейтиПоНавигационнойСсылке(). Посмотрим на пример реализации в обработчике нажатия на кнопку:


&НаКлиенте
Процедура ОбработатьНажатиеНаСсылку(ТекстСсылки)
    // ТекстСсылки может быть как "e1cib/data/...", так и внешней URL
    Попытка
        ПерейтиПоНавигационнойСсылке(ТекстСсылки);
    Исключение
        Сообщить("Не удалось перейти по ссылке: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Важный момент: данный метод работает универсально. Если передать в него https://google.com, откроется браузер. Если передать внутреннюю ссылку 1С — откроется форма объекта. Это делает его незаменимым инструментом при создании кастомных интерфейсов взаимодействия между пользователями.

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

← На главную