Рассмотрим классическую архитектурную задачу: внешняя система (сайт, АТС, другой сервис) отправляет webhook на сервер 1С. В результате этого события у конкретного пользователя в активном сеансе должна мгновенно открыться форма документа или выполниться определенная процедура. Разберем по шагам, как можно реализовать такой функционал и проанализируем плюсы и минусы различных подходов.
Многие разработчики изначально пытаются решить эту задачу "в лоб" с помощью метода ПодключитьОбработчикОжидания. Идея заключается в том, чтобы клиент каждую секунду опрашивал сервер (например, читал специальный регистр сведений), проверяя наличие новых событий. Проанализируем этот метод: он имеет критические недостатки. Постоянный поллинг создает огромную паразитную нагрузку на сервер, забивает пул соединений и все равно дает задержку реакции. Поэтому выясним, какие существуют современные push-технологии для 1С.
Самый правильный и поддерживаемый вендором способ — это использование Системы взаимодействия. Если у вас установлена платформа 1С версии 8.3.15 и выше, вы можете использовать встроенный механизм интеграций.
Посмотрим на алгоритм работы через СВ:
Систему взаимодействия можно использовать как через облако 1С, так и развернув локальный "1С:Сервер взаимодействия" внутри вашей корпоративной сети. Это потребует установки дополнительных компонентов (PostgreSQL, Hazelcast, Elasticsearch), но обеспечит полную независимость от интернета.
Если разворачивать тяжелый сервер Системы взаимодействия нецелесообразно, рассмотрим отличную легковесную альтернативу — использование протокола MQTT. Для этого потребуется бесплатный MQTT-брокер (например, Mosquitto) и внешняя компонента (ВК) для 1С.
Разберем архитектуру такого решения:
/1c/users/UserID/events).ОбработкаВнешнегоСобытия и выполняем открытие формы.Этот метод работает молниеносно, не нагружает сервер 1С фоновыми опросами и требует минимальных ресурсов.
Проанализируем еще один интересный подход, который часто применяют разработчики, использующие внешние компоненты на C++ или C#. Суть заключается в том, чтобы поднять крошечный сервер (TCP, HTTP или WebSocket) прямо внутри клиентского сеанса.
Как это работает:
ВнешнееСобытие в 1С.Важное ограничение: этот метод отлично работает только внутри локальной сети, где сервер имеет прямой сетевой доступ к компьютерам клиентов, и где нет жестких ограничений брандмауэра.
Если ваши пользователи работают с мобильным приложением или мобильным клиентом 1С, рассмотрим механизм push-уведомлений. В платформу встроен "Сервис доставки push-уведомлений".
Когда сервер получает webhook, он формирует пуш-уведомление и отправляет его через сервисы Apple (APNs), Google (FCM) или облако 1С. Когда пользователь нажимает на уведомление в шторке телефона, мобильный клиент 1С перехватывает событие. В параметрах пуш-уведомления можно передать данные, по которым система поймет, какую именно форму нужно открыть.
Какой бы транспортный механизм вы ни выбрали (Систему взаимодействия, MQTT или внешнюю компоненту), в конечном итоге клиентский сеанс получает сигнал-уведомление с идентификатором объекта. Разберем, как изящно открыть форму документа.
Вместо использования конструкций ОткрытьФорму, которые могут требовать сборки сложных структур параметров, рекомендуется использовать механизм навигационных ссылок. Сервер должен передать клиенту строковое представление ссылки.
Посмотрим на пример кода, который вызывается на клиенте при получении сигнала:
&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// Проверяем, что событие пришло от нашей компоненты
Если Источник = "MQTT_Client" И Событие = "OpenDocument" Тогда
// В параметре Данные ожидаем строку вида "e1cib/data/Документ.ЗаказКлиента?ref=..."
НавигационнаяСсылка = Данные;
Если ЗначениеЗаполнено(НавигационнаяСсылка) Тогда
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Метод ПерейтиПоНавигационнойСсылке работает максимально естественно для платформы 1С: он сам найдет нужный объект, проверит права доступа и откроет основную форму документа, словно пользователь кликнул по ссылке в интерфейсе программы.
Мы подробно проанализировали способы открытия форм по событию webhook на сервере. Если инфраструктура позволяет, всегда старайтесь использовать Систему взаимодействия — это стабильный, штатный механизм, который будет развиваться вендором. Если же вам нужно легковесное, быстрое и независимое решение, обратите внимание на интеграцию с брокерами очередей через MQTT и внешние компоненты.