При совместной работе пользователей через различные типы клиентов (часть пользователей работает через классический тонкий клиент с прямым подключением к кластеру, а часть — через интернет-браузер или веб-клиент) часто возникает задача обмена ссылками на документы, справочники и другие объекты информационной базы. Разберем особенности формирования таких ссылок, выясним причины возникающих сложностей и рассмотрим практические способы решения этой задачи.
Полная навигационная ссылка на конкретный объект платформы формируется объединением адреса информационной базы и внутренней навигационной ссылки объекта. Проанализируем, как работает штатный метод платформы ПолучитьНавигационнуюСсылкуИнформационнойБазы():
e1c://server/ИмяСервера/ИмяБазы.http://ИмяВебСервера/ИмяБазы.В результате пользователь веб-клиента не может напрямую открыть ссылку, начинающуюся с протокола e1c://, если на его компьютере не установлен тонкий клиент с зарегистрированным системным протоколом. Аналогично тонкий клиент, подключенный напрямую по TCP, не знает адрес внешней публикации веб-сервера (Apache или IIS), так как кластер серверов 1С не хранит сведения о сторонних веб-серверах.
Рассмотрим подробнее варианты решения данной задачи.
Если пользователи обмениваются ссылками внутри самой программы (например, через задачи, Систему взаимодействия, внутренние чаты или специальные реквизиты документов), префикс адреса информационной базы вообще не требуется.
Разберем, как получить и открыть внутреннюю ссылку. Для получения ссылки на объект используется метод ПолучитьНавигационнуюСсылку():
// Получаем внутреннюю ссылку на объект базы
ВнутренняяСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект);
// Результат имеет вид: "e1cib/data/Документ.РеализацияТоваровУслуг?ref=..."
Для перехода к объекту по такой ссылке на стороне любого клиента (как тонкого, так и веб-клиента) вызывается метод ПерейтиПоНавигационнойСсылке():
// Открываем объект по внутренней навигационной ссылке
ПерейтиПоНавигационнойСсылке(ВнутренняяСсылка);
Важный момент: метод ПерейтиПоНавигационнойСсылке() одинаково успешно обрабатывает относительные навигационные ссылки формата e1cib/... независимо от того, через какой клиент работает пользователь.
Если ссылки необходимо отправлять во внешние каналы (по электронной почте, в сторонние мессенджеры или корпоративные порталы), ссылка обязательно должна открываться в веб-браузере. Так как тонкий клиент при прямом подключении не знает сетевой адрес веб-сервера, зафиксируем адрес веб-публикации в настройках конфигурации.
Разберем реализацию по шагам:
АдресВебПубликации (тип Строка), и указываем в ней базовый URL базы данных, например: https://portal.company.ru/base.
Функция ПолучитьВнешнююВебСсылку(Знач СсылкаНаОбъект) Экспорт
БазовыйАдрес = Константы.АдресВебПубликации.Получить();
Если ПустаяСтрока(БазовыйАдрес) Тогда
БазовыйАдрес = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
КонецЕсли;
ВнутренняяСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект);
Возврат БазовыйАдрес + "/#" + ВнутренняяСсылка;
КонецФункции
Такая ссылка гарантированно откроется у любого пользователя, у которого есть доступ к веб-публикации через браузер.
Еще один практический способ унификации ссылок — перенастройка подключения тонких клиентов. Если в окне запуска 1С у всех пользователей тонкого клиента указать подключение к информационной базе по HTTP/HTTPS (через адрес веб-сервера, а не через прямой адрес кластера 1С), то метод ПолучитьНавигационнуюСсылкуИнформационнойБазы() начнет возвращать идентичный префикс формата http(s)://... во всех рабочих сеансах без необходимости ручной подмены адресов.