Как организовать переход по внешней ссылке в 1С и автоматическое открытие документа в браузере без ввода пароля

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

Реализация сценария, при котором пользователь переходит по ссылке из почты, мессенджера или другой системы сразу в форму документа 1С, является классической задачей интеграции. Основная сложность здесь заключается в обеспечении безопасности и удобства: пользователь не должен вручную вводить логин и пароль, а система должна «понять», какой именно объект нужно открыть, основываясь на переданных данных.

В этой статье мы разберем, как правильно настроить веб-клиент 1С для работы с внешними ссылками, рассмотрим методы автоматической авторизации и программную обработку параметров запуска. Мы пройдем путь от формирования структуры URL до написания кода в модуле управляемого приложения.

Механизм передачи параметров через URL

Для начала проанализируем, как платформа 1С воспринимает внешние ссылки. Веб-клиент поддерживает стандартные параметры командной строки, которые можно передавать прямо в адресной строке браузера. Рассмотрим основные из них:

  1. N — имя пользователя (логин).
  2. P — пароль пользователя.
  3. C — параметр запуска (произвольная строка, которую можно прочитать в коде).

Типовая ссылка с явной передачей учетных данных может выглядеть следующим образом: http://myserver/base_name/?N=TechnicalUser&P=Password123&C=ID_999. В данном примере мы заходим под техническим пользователем и передаем идентификатор документа в параметре C.

Обеспечение бесшовного входа через файл публикации (default.vrd)

Передавать пароль в открытом виде в строке URL крайне небезопасно: он сохраняется в истории браузера и логах сервера. Чтобы избежать этого, мы проанализируем возможность использования файла публикации default.vrd. Это позволяет создать отдельную «точку входа» для внешних ссылок с уже прописанными учетными данными.

Разберем, как это настроить. На веб-сервере (IIS или Apache) создается отдельная публикация базы (например, base_guest). В каталоге этой публикации находим файл default.vrd и добавляем в него атрибуты авторизации:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/base_guest"
       ib="Srvr=&quot;ServerName&quot;;Ref=&quot;BaseName&quot;;"
       usr="TechnicalUser"
       pwd="SecretPassword">
    <standardOdata enable="false"/>
</point>

Теперь при обращении по адресу http://myserver/base_guest/?C=31256 1С автоматически авторизует сеанс под указанным пользователем, и нам останется только обработать параметр C.

Программная обработка параметра запуска в 1С

После того как авторизация прошла успешно, нам необходимо перехватить переданный параметр и открыть нужный документ. Рассмотрим, как это сделать в Модуле управляемого приложения. Основным событием здесь является ПриНачалеРаботыСистемы.

Выясним, как извлечь данные. В платформе существует глобальное свойство ПараметрЗапуска, которое содержит всё, что было передано после ключа C= в URL. Проанализируем пример кода для обработки этого параметра:


Процедура ПриНачалеРаботыСистемы()
    
    // Получаем переданный ID из URL
    ПереданныйID = ПараметрЗапуска;
    
    Если ЗначениеЗаполнено(ПереданныйID) Тогда
        // Вызываем обработчик открытия, используя ожидание, 
        // чтобы избежать блокировки всплывающих окон браузером
        ПодключитьОбработчикОжидания("ПрикладнаяОбработкаВнешнегоПерехода", 0.1, Истина);
    КонецЕсли;
    
КонецПроцедуры

Важный момент: мы используем ПодключитьОбработчикОжидания. Это необходимо, так как браузеры часто блокируют открытие новых окон (форм), если они вызываются напрямую в момент инициализации приложения. Рассмотрим процедуру обработки подробнее:


Процедура ПрикладнаяОбработкаВнешнегоПерехода() Экспорт
    
    // Распарсим параметр запуска, если там передано несколько значений
    // Например: "ID_31256;Period_2023"
    ДанныеПараметра = ПараметрЗапуска; 
    
    // Логика поиска документа по ID (в данном случае ID физлица)
    ФизлицоСсылка = Справочники.ФизическиеЛица.НайтиПоРеквизиту("ID_Внешний", ДанныеПараметра);
    
    Если Не ФизлицоСсылка.Пустая() Тогда
        
        // Устанавливаем параметры сеанса, если это необходимо для RLS или логики базы
        // УстановитьПараметрыСеансаДляФизлица(ФизлицоСсылка);
        
        // Поиск или создание документа для этого физлица
        ПараметрыФормы = Новый Структура;
        ПараметрыФормы.Вставить("Ключ", НайтиДокументПоФизлицу(ФизлицоСсылка));
        
        ОткрытьФорму("Документ.АнкетаПользователя.ФормаОбъекта", ПараметрыФормы);
        
    КонецЕсли;
    
КонецПроцедуры

Безопасность и использование токенов (GUID)

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

Разберем по шагам безопасный алгоритм:

  1. В 1С создается специальный регистр сведений ВнешниеСсылки с полями: Токен (GUID), Объект (Ссылка), СрокДействия (Дата).
  2. При необходимости отправить ссылку, система генерирует новый GUID, записывает его в регистр и формирует URL: ?C=550e8400-e29b-41d4-a716-446655440000.
  3. При переходе по ссылке код в 1С ищет этот GUID в регистре.
  4. Если токен найден и срок действия не истек, открывается документ.
  5. Для повышения безопасности токен можно удалять сразу после первого использования.

Особенности работы с правами доступа (RLS)

Посмотрим на ситуацию со стороны прав. Технический пользователь, под которым осуществляется вход, должен обладать достаточными правами для просмотра и редактирования целевого документа. Однако, если в базе включен RLS (ограничение доступа на уровне записей), технический пользователь может не «увидеть» документ конкретного физлица.

Существует два способа решения этой проблемы:

  1. Программное отключение прав: Использование метода УстановитьПривилегированныйРежим(Истина) в процедурах поиска и первичной обработки.
  2. Динамическая подмена: Как предлагал автор темы, можно программно устанавливать ПараметрыСеанса.ТекущийПользователь, чтобы штатные механизмы RLS отработали корректно для того лица, чей ID передан в ссылке.

Альтернативные методы: OpenID и Прямые ссылки

Помимо параметров запуска, стоит упомянуть технологию OpenID. Если в вашей организации используется единая система аутентификации, 1С может быть настроена на работу через OpenID-провайдер. В этом случае пользователь, уже авторизованный в своей корпоративной сети, пробросит свою сессию в 1С автоматически без дополнительных настроек в URL.

Также платформа поддерживает формат навигационных ссылок e1cib/data/.... Если авторизация уже настроена через default.vrd, ссылка может выглядеть так: http://server/base/ru_RU/e1cib/data/Документ.Анкета?ref=baef24fd52be099511e9cfdc7065b2eb. Это самый короткий путь к объекту, но он менее гибкий, так как не позволяет выполнить произвольный код перед открытием формы.

Таким образом, мы выяснили, что наиболее надежным и гибким решением является использование выделенной публикации с преднастроенной авторизацией и передача уникального токена в параметре C, который обрабатывается в процедуре ПриНачалеРаботыСистемы через обработчик ожидания.

← На главную