Часто в разработке на платформе 1С возникает следующая архитектурная задача: у одного пользователя (например, операциониста) открыта обработка — автоматизированное рабочее место (АРМ). В это же время другой пользователь (менеджер) вносит изменения в связанный документ и проводит его. Нам необходимо мгновенно или с минимальной задержкой оповестить АРМ операциониста об изменениях, вывести диалоговое окно и обновить данные на форме.
Давайте подробно разберем эту ситуацию и проанализируем доступные варианты решения проблемы. Выясним причину, почему некоторые стандартные методы здесь не сработают, и рассмотрим по шагам самые эффективные подходы.
Среди начинающих разработчиков часто возникает соблазн использовать встроенные глобальные методы Оповестить или ОповеститьОбИзменении. Важно помнить и понимать, что эти механизмы работают исключительно в рамках одного клиентского сеанса (то есть в оперативной памяти компьютера одного конкретного пользователя). Они отлично подходят для обновления соседних вкладок и форм у самого менеджера, но абсолютно бесполезны для отправки сигнала другому пользователю по локальной сети. Нам потребуются другие инструменты.
Рассмотрим самый простой и проверенный временем вариант, который будет работать на любых версиях платформы 1С:Предприятие 8. Суть заключается в использовании промежуточного хранилища данных и периодического опроса.
Разберем по шагам реализацию данного метода:
ОчередьОповещений.ПриЗаписи добавляем код, который при изменении важных реквизитов делает запись в наш регистр сведений.ПодключитьОбработчикОжидания, который будет срабатывать, например, каждые 5-10 секунд.Этот метод прост во внедрении, но при большом количестве пользователей (как в высоконагруженных системах типа 1С:ERP) частый фоновый опрос базы данных может создавать излишнюю нагрузку.
Посмотрим на более современный подход. Если в вашей базе развернута Система взаимодействия, ее можно использовать не только для чатов между сотрудниками, но и как скрытую шину передачи программных сообщений между сеансами.
Проанализируем реализацию:
ОбработкаОповещенияСистемыВзаимодействия или ОбработкаДействияСообщения.ПоказатьОповещениеПользователя.Этот способ работает по принципу push-уведомлений и избавляет систему от постоянных опросов базы данных.
С выходом версии платформы 8.3.26 появился долгожданный штатный функционал, созданный специально для решения подобных бизнес-сценариев. Разберем этот новый и самый оптимальный архитектурный подход.
В системе реализован объект МенеджерУведомленийКлиента, который позволяет отправлять push-уведомления со стороны сервера напрямую в конкретные клиентские приложения.
Как это работает:
МенеджерУведомленийКлиента.ПодключитьОбработчик() регистрируется процедура, которая будет ожидать входящего сигнала.ПриЗаписи модуля измененного документа, вызывается метод для отправки уведомления. Сервер может адресовать сигнал конкретному сеансу пользователя, передав туда нужные параметры (например, ссылку на документ и измененное количество продукции).Это самый "чистый", производительный и правильный подход для современных конфигураций 1С, так как он не требует настройки Системы взаимодействия и не нагружает СУБД лишними запросами.
Если речь идет об огромной высоконагруженной системе на базе 1С:ERP, где одновременно работают тысячи пользователей, и требуется мгновенная реакция интерфейсов, мы можем рассмотреть использование внешних брокеров (таких как RabbitMQ, Apache Kafka или работа через WebSocket).
В данном случае архитектура строится следующим образом:
Этот вариант требует привлечения дополнительных технологий и написания интеграционного кода, но обеспечивает максимальную масштабируемость и минимальные задержки при обмене событиями в режиме реального времени.
В зависимости от версии вашей платформы, требований к производительности и наличия Системы взаимодействия, вы можете выбрать любой из предложенных вариантов для успешного решения задачи.