При организации взаимодействия пользователей с информационной системой часто требуется отправлять уведомления на электронную почту с прямой ссылкой на созданный документ или назначенную задачу. Если пользователи работают через веб-браузер, обычная внутренняя навигационная ссылка вида e1cib/data/... не сработает в почтовом клиенте напрямую, так как операционная система не знает, как обработать подобный протокол без веб-адреса публикации базы. Разберем по шагам, как сформировать правильную внешнюю ссылку для веб-клиента, избавиться от кириллицы в адресе и реализовать альтернативный переход через параметры запуска.
Для перехода к конкретному объекту в веб-браузере ссылка должна состоять из двух ключевых частей: адреса публикации информационной базы на веб-сервере и навигационной ссылки на объект, отделенной символом решетки #.
В общем виде такой URL выглядит следующим образом:
Базовый URL публикации + /# + Внутренняя навигационная ссылка на объект
Рассмотрим структуру внутренней навигационной ссылки. Она строится по правилу e1cib/data/КлассМетаданных.ИмяОбъекта?ref=ШестнадцатеричныйИдентификатор. Чтобы избежать ошибок ручного перевода идентификатора в шестнадцатеричную строку (где порядок байт инвертирован по отношению к строковому представлению УникальныйИдентификатор), сформируем ссылку программно с помощью платформенных методов.
Посмотрим на пример кода формирования ссылки на стороне сервера:
// Получаем внутреннюю навигационную ссылку платформы
ВнутренняяСсылка = ПолучитьНавигационнуюСсылку(ЗадачаСсылка);
// Получаем адрес публикации (или берем заранее сохраненный путь из констант)
АдресПубликации = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
// Формируем результирующий URL для перехода через браузер
ПолнаяСсылка = АдресПубликации + "/#" + ВнутренняяСсылка;
Проанализируем важный нюанс: платформа 1С штатно поддерживает англоязычные синонимы классов метаданных в структуре навигационных ссылок. Если мы хотим исключить русские буквы в адресе, заменим название класса Задача на латинский аналог Task (по аналогии со Справочник — Catalog, Документ — Document). Если имя самого объекта метаданных также названо латиницей, весь URL будет полностью состоять из латинских символов.
Для исключения проблем с отображением ссылки в почтовых программах разберем следующие правила:
<a href="...">Открыть задачу</a>. Почтовые клиенты при отправке обычного текста часто обрезают ссылку на знаке решетки # или на пробелах и кириллице.КодироватьСтроку(ПолнаяСсылка, СпособКодированияСтроки.КодировкаURL).В некоторых случаях почтовые программы или политики безопасности корпоративных прокси-серверов отсекают хеш-фрагменты URL (все, что идет после знака #), из-за чего веб-клиент 1С открывает только начальную страницу базы, игнорируя навигацию. Также при отсутствии настроенной сквозной аутентификации (SSO / OpenID) после ввода логина и пароля исходный фрагмент навигации может сбрасываться.
В такой ситуации применим надежное решение: передачу идентификатора или номера задачи через стандартный HTTP GET-параметр cmd, который сохраняется веб-сервером и считывается платформой как ПараметрЗапуска.
URL в письме при таком подходе формируется стандартным образом:
АдресПубликации/?cmd=ИдентификаторИлиНомерЗадачи
Разберем реализацию этого механизма в конфигурации по шагам:
АдресБазы + "/?cmd=" + Строка(ЗадачаСсылка.УникальныйИдентификатор()).Модуле управляемого приложения находим предопределенное клиентское событие ПриНачалеРаботыСистемы.ПараметрЗапуска, находим нужную задачу и открываем её форму.Посмотрим на пример обработки параметра запуска:
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
// Передаем параметр на сервер для поиска ссылки по идентификатору
СсылкаНаЗадачу = НайтиЗадачуПоПараметруНаСервере(ПараметрЗапуска);
Если ЗначениеЗаполнено(СсылкаНаЗадачу) Тогда
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЗадачу);
ОткрытьФорму("Задача.ЗаявкиИТХелпДеск.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Такой вариант гарантирует, что ссылка будет корректно распознана любым почтовым агентом, а нужная форма откроется сразу после завершения авторизации пользователя.
Если в будущем потребуется открывать ссылки из почты не только в веб-браузере, но и через установленный тонкий клиент по протоколу e1c:// или e1cib://, на клиентских рабочих станциях под управлением Windows необходимо зарегистрировать обработчик протокола в реестре.
Для этого используется следующая структура файла реестра:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\e1c]
@="URL:e1c"
"URL Protocol"=""
"EditFlags"=hex:02,00,00,00
[HKEY_CLASSES_ROOT\e1c\shell]
[HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files\\1cv8\\common\\1cestart.exe\" /URL \"%1\""
Однако для пользователей, у которых есть доступ исключительно через веб-клиент, настройка реестра не требуется — достаточно использовать внешнюю ссылку с адресом веб-публикации или параметр командной строки cmd.