При автоматизации бизнес-процессов часто возникает необходимость оповещать пользователей о новых задачах или изменениях через электронную почту — для этого есть инструмент автоматической отправки триггерных писем и уведомлений из 1С. В тело таких писем бывает крайне полезно добавить прямую гиперссылку, позволяющую пользователю по клику сразу перейти к нужному объекту (задаче, документу и т.д.) в информационной базе 1С. Однако, при работе с веб-сервером или клиент-серверной архитектурой, стандартные механизмы получения ссылок могут возвращать непригодные для внешнего использования адреса, например, в формате e1c://server/rphost/имя_базы вместо привычного для браузера http://<адрес_хоста>/<путь_к_базе>. Рассмотрим, как можно решить эту проблему и сформировать корректную внешнюю навигационную ссылку.
Когда мы используем функцию ПолучитьНавигационнуюСсылкуИнформационнойБазы в серверном контексте (например, в регламентном задании, которое отправляет письма), она часто возвращает ссылку вида e1c://server/rphost/имя_базы для клиент-серверного варианта или e1c://file/<путь_к_файлу> для файлового — для надежной рассылки писем подойдёт программа настройки и отправки оповещений по электронной почте. Эти ссылки предназначены для открытия через тонкий клиент или специальный обработчик протокола e1c, который должен быть зарегистрирован в операционной системе. Для запуска 1С:Предприятия через веб-браузер требуются ссылки формата HTTP или HTTPS. Наша задача — получить именно такую ссылку, которая будет корректно открываться в браузере и вести к опубликованной на веб-сервере базе.
Давайте проанализируем различные подходы к решению этой задачи, от ручных настроек до использования встроенных функций платформы 1С.
Один из наиболее распространенных и гибких способов – это создание пользовательской константы, в которой будем хранить полный адрес публикации информационной базы на веб-сервере. Этот подход особенно актуален, если уведомления отправляются из фоновых или регламентных заданий, где функция ПолучитьНавигационнуюСсылкуИнформационнойБазы может возвращать некорректные значения (например, пустую строку или внутренний адрес e1c://).
В конфигураторе создадим новую константу, например, с именем АдресВебСервера. Тип данных для этой константы должен быть Строка с достаточной длиной. В эту константу вручную или программно заносим полный адрес публикации нашей базы, например: http://myserver.com/MyBaseName или https://myserver.com/MyBaseName.
Для пользователей, работающих в разных сетях или подключающихся к базе по разным адресам, вместо константы можно рассмотреть создание справочника с привязкой адресов к пользователям или группам пользователей, что обеспечит еще большую гибкость.
Нам потребуется изменить код в общем модуле, который отвечает за формирование текста уведомлений. Часто это происходит в модулях, связанных с бизнес-процессами и задачами, например, в ОбщийМодуль.БизнесПроцессыИЗадачиВызовСервера, в процедуре СформироватьПредставлениеЗадачи(ЗадачаСтруктура) или аналогичной, которая генерирует текст для письма — в таких сценариях полезна готовая система контроля и уведомлений сотрудников по событиям в 1С.
Найдите место, где формируется навигационная ссылка, и замените стандартную логику на следующую:
Если ЗначениеЗаполнено(Константы.АдресВебСервера.Получить()) Тогда
НавигационнаяСсылка = СокрЛП(Константы.АдресВебСервера.Получить()) + "/#" + ПолучитьНавигационнуюСсылку(ЗадачаСтруктура.Ссылка);
Иначе
// Если константа не заполнена, используем стандартный механизм.
// Обратите внимание: этот вариант может не работать для веб-клиента из регламентных заданий.
НавигационнаяСсылка = ПолучитьНавигационнуюСсылкуИнформационнойБазы() + "/#" + ПолучитьНавигационнуюСсылку(ЗадачаСтруктура.Ссылка);
КонецЕсли;
Здесь ЗадачаСтруктура.Ссылка представляет собой ссылку на объект базы данных (например, документ, элемент справочника, задачу бизнес-процесса), для которого мы хотим получить навигационную ссылку. Метод ПолучитьНавигационнуюСсылку(ЗадачаСтруктура.Ссылка) возвращает относительную ссылку на объект в формате e1cib/data/Справочник.ИмяСправочника?ref=<идентификатор_объекта>. Объединив адрес веб-сервера из константы с этой относительной ссылкой через символ /#, мы получаем полную внешнюю веб-ссылку.
Справочник.ВнутренниеДокументы), могут некорректно отображаться как гиперссылки. Это связано с тем, что почтовый клиент не всегда правильно интерпретирует или кодирует такие символы.
Для решения этой проблемы необходимо убедиться, что все компоненты ссылки правильно закодированы для URL. Платформа 1С обычно сама заботится о кодировании при формировании относительной ссылки, но если вы формируете часть URL вручную, убедитесь в правильном использовании функций кодирования, таких как КодироватьСтрокуДляURL().
ПолучитьНавигационнуюСсылкуИнформационнойБазы() может возвращать пустое значение или ссылку в формате e1c://, не подходящую для веб-клиента. В этом случае использование константы с предварительно заданным HTTP/HTTPS адресом является предпочтительным решением.В последних релизах платформы 1С и типовых конфигураций (например, 1С:Документооборот) был добавлен более удобный и типовой механизм для формирования внешних ссылок — здесь пригодится модуль настройки динамических шаблонов почтовых уведомлений для 1С:Документооборот. Это специальная константа или настройка, предназначенная именно для этих целей.
В типовых конфигурациях найдите настройки уведомлений. Обычно они расположены в разделе Настройка программы - Общие настройки - Использовать уведомления - Настроить. Здесь должна присутствовать константа или поле для ввода Адрес публикации на веб-сервере (или схожее по названию).
Заполните это поле полным HTTP/HTTPS адресом вашей опубликованной информационной базы, например: http://myserver.com/MyBaseName.
После заполнения этой константы, типовые механизмы отправки уведомлений в конфигурации автоматически начнут использовать это значение для формирования внешних веб-ссылок. Вам не потребуется вносить изменения в код конфигурации, что является значительным преимуществом.
Этот подход рекомендуется, так как он минимизирует риски при обновлении конфигурации и использует встроенные возможности платформы.
ПолучитьНавигационнуюСсылкуИнформационнойБазы()В определенных сценариях, если вы уверены, что код, формирующий ссылку, выполняется в контексте веб-клиента или тонкого клиента, и вам нужен именно HTTP/HTTPS адрес базы, можно использовать функцию ПолучитьНавигационнуюСсылкуИнформационнойБазы() в связке с ПолучитьНавигационнуюСсылку(СсылкаНаОбъект).
// Предполагается, что СсылкаНаОбъект - это ссылка на объект базы данных (например, Документ.ЗаказКлиента)
НавигационнаяСсылкаОбъекта = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект);
// Получаем базовый адрес информационной базы.
// Важно: в контексте регламентного задания этот метод может вернуть 'e1c://' или пустую строку.
БазоваяСсылкаИБ = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
// Объединяем их для получения полной внешней ссылки
ВнешняяНавигационнаяСсылка = БазоваяСсылкаИБ + "#" + НавигационнаяСсылкаОбъекта;
ПолучитьНавигационнуюСсылкуИнформационнойБазы() ведет себя по-разному в зависимости от контекста.
e1c:// или пустую строку, что делает ее непригодной для веб-клиента.ПолучитьВнешнююНавигационнуюСсылку() (для новых версий платформы)В более поздних версиях платформы 1С (начиная с 8.3.18, возможно, и раньше в некоторых релизах) появилась специализированная функция ПолучитьВнешнююНавигационнуюСсылку(), которая призвана упростить этот процесс и более надежно формировать внешние ссылки. Эта функция принимает две части ссылки и корректно их объединяет, учитывая особенности публикации.
// Предполагается, что СсылкаНаОбъект - это ссылка на объект базы данных
НавигационнаяСсылкаОбъекта = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект);
// Базовый адрес информационной базы.
// Функция ПолучитьВнешнююНавигационнуюСсы() может использовать внутренние механизмы
// для определения корректного базового URL, если он известен платформе.
БазоваяСсылкаИБ = ПолучитьНавигационнуюСсылкуИнформационнойБазы(); // Или другое известное URL
// Использование новой функции для формирования внешней ссылки
ВнешняяНавигационнаяСсылка = ПолучитьВнешнююНавигационнуюСсылку(БазоваяСсылкаИБ, НавигационнаяСсылкаОбъекта);
Эта функция была добавлена для повышения удобства и корректности формирования внешних ссылок, особенно в сложных сценариях публикации. Если ваша платформа поддерживает эту функцию, рекомендуем рассмотреть ее использование как наиболее предпочтительный вариант.
Всегда помните о кодировании специальных символов и кириллицы в URL. Хотя платформа 1С часто справляется с этим автоматически, ручное формирование частей URL может потребовать использования функций, таких как КодироватьСтрокуДляURL(), чтобы избежать проблем с распознаванием ссылок браузерами и почтовыми клиентами. Например, пробелы должны быть заменены на %20, а некоторые другие символы – на их процентные аналоги.
По умолчанию, ссылки из почты на опубликованную базу 1С открываются в веб-клиенте. Если у вас возникла необходимость открывать такие ссылки в тонком клиенте, это потребует нетиповой доработки:
e1c://server/TestServerName/TestBaseName#.e1c в реестре Windows, чтобы операционная система знала, какое приложение запускать при клике по такой ссылке. Обычно это делается с помощью специального параметра 1С-клиента, например, /URL. Это сложное и трудоемкое решение, которое требует администрирования на рабочих станциях пользователей.При открытии нескольких ссылок на 1С в браузере пользователи могут столкнуться с тем, что каждая ссылка открывает новый сеанс 1С, вместо того чтобы использовать уже существующий или открываться в новой вкладке в рамках текущего сеанса. Это может привести к потере незавершенной работы в предыдущих вкладках. Поведение браузера при открытии ссылок может быть частично настроено пользователем (например, через Ctrl + клик или нажатие средней кнопки мыши для открытия в фоновой вкладке), но контроль над созданием нового сеанса лежит на логике веб-публикации 1С и платформы.
В 1С 8.3.19 и более поздних версиях были внесены улучшения в обработку навигационных ссылок, что может помочь в управлении поведением открытия форм и отчетов с дополнительными параметрами, позволяя более гибко настраивать процесс.
Формирование внешней навигационной ссылки для веб-клиента в 1С — это важная задача для обеспечения удобства работы пользователей с системой. Мы рассмотрели несколько подходов, каждый из которых имеет свои преимущества и особенности:
ПолучитьНавигационнуюСсылкуИнформационнойБазы() – подходит для интерактивных режимов работы клиента, но имеет ограничения на сервере.ПолучитьВнешнююНавигационнуюСсылку() – современный и удобный метод для актуальных версий платформы, упрощающий формирование ссылок.Выбор конкретного решения зависит от версии вашей платформы, конфигурации и контекста, в котором формируются ссылки. Рекомендуем начать с проверки наличия типовых настроек в вашей конфигурации, а затем, при необходимости, переходить к программным решениям с использованием констант или новых функций платформы.