Как организовать обмен навигационными ссылками между тонким и веб-клиентом в 1С?

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

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

В чем заключается проблема с навигационными ссылками?

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

  1. При прямом подключении тонкого клиента к кластеру серверов 1С (по TCP) метод возвращает строку вида e1c://server/ИмяСервера/ИмяБазы.
  2. При работе через веб-клиент или через веб-сервер (по протоколам HTTP/HTTPS) метод возвращает строку вида http://ИмяВебСервера/ИмяБазы.

В результате пользователь веб-клиента не может напрямую открыть ссылку, начинающуюся с протокола e1c://, если на его компьютере не установлен тонкий клиент с зарегистрированным системным протоколом. Аналогично тонкий клиент, подключенный напрямую по TCP, не знает адрес внешней публикации веб-сервера (Apache или IIS), так как кластер серверов 1С не хранит сведения о сторонних веб-серверах.

Рассмотрим подробнее варианты решения данной задачи.

Решение 1. Использование внутренних навигационных ссылок (для обмена внутри 1С)

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

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


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

Для перехода к объекту по такой ссылке на стороне любого клиента (как тонкого, так и веб-клиента) вызывается метод ПерейтиПоНавигационнойСсылке():


// Открываем объект по внутренней навигационной ссылке
ПерейтиПоНавигационнойСсылке(ВнутренняяСсылка);

Важный момент: метод ПерейтиПоНавигационнойСсылке() одинаково успешно обрабатывает относительные навигационные ссылки формата e1cib/... независимо от того, через какой клиент работает пользователь.

Решение 2. Хранение адреса веб-публикации в константе (для внешних рассылок)

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

Разберем реализацию по шагам:

  1. Создаем в конфигурации константу, например, АдресВебПубликации (тип Строка), и указываем в ней базовый URL базы данных, например: https://portal.company.ru/base.
  2. Создаем экспортную функцию для генерации внешних ссылок, пригодных для открытия в веб-браузере:

Функция ПолучитьВнешнююВебСсылку(Знач СсылкаНаОбъект) Экспорт
    БазовыйАдрес = Константы.АдресВебПубликации.Получить();
    Если ПустаяСтрока(БазовыйАдрес) Тогда
        БазовыйАдрес = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
    КонецЕсли;
    
    ВнутренняяСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект);
    
    Возврат БазовыйАдрес + "/#" + ВнутренняяСсылка;
КонецФункции

Такая ссылка гарантированно откроется у любого пользователя, у которого есть доступ к веб-публикации через браузер.

Решение 3. Подключение всех тонких клиентов через веб-сервер

Еще один практический способ унификации ссылок — перенастройка подключения тонких клиентов. Если в окне запуска 1С у всех пользователей тонкого клиента указать подключение к информационной базе по HTTP/HTTPS (через адрес веб-сервера, а не через прямой адрес кластера 1С), то метод ПолучитьНавигационнуюСсылкуИнформационнойБазы() начнет возвращать идентичный префикс формата http(s)://... во всех рабочих сеансах без необходимости ручной подмены адресов.

← На главную