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

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

В платформе "1С:Предприятие" начиная с версии 8.3.26 появился долгожданный механизм — прямая отправка уведомлений из серверного кода в клиентское приложение. Это нововведение позволяет создавать более отзывчивые и эффективные интерфейсы. Давайте подробно разберемся, как это работает, в чем его преимущества перед уже существующими способами и какие практические задачи он помогает решить.

Принцип работы: от опроса к событиям

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

  1. Задержка: Пользователь получал результат не мгновенно, а с задержкой, равной интервалу опроса.
  2. Лишняя нагрузка: Постоянные запросы от множества клиентов создавали ненужную нагрузку на сервер, даже если никаких новых данных не было.

Новый механизм работает принципиально иначе — по событийной модели. Теперь клиент не опрашивает сервер, а подписывается на получение уведомлений и ждет. Как только на сервере происходит нужное событие (например, фоновое задание завершилось или посчитало промежуточный итог), сервер сам инициирует отправку сообщения клиенту. Клиент, получив его, немедленно выполняет код в заранее определенном обработчике.

Технически, для такой "мгновенной" связи, вероятнее всего, используются технологии вроде WebSockets, которые позволяют поддерживать постоянное двунаправленное соединение между сервером и клиентом. Это обеспечивает доставку в реальном времени, буквально за миллисекунды.

На клиенте для подписки на уведомления используется метод МенеджерУведомленийКлиента.ПодключитьОбработчик(). Посмотрим на его синтаксис:


ПодключитьОбработчик(<Ключ>, <Обработчик>)

Сравнение с существующими механизмами

Чтобы понять ценность нового инструмента, сравним его с другими способами коммуникации в 1С.

Отличие от обычных оповещений (Оповестить())

Основной вопрос, который возникает: "Зачем нужна новая сущность, если есть Оповестить()?". Ответ кроется в контексте вызова. Метод Оповестить() предназначен для взаимодействия внутри одного клиентского сеанса, например, для передачи данных между двумя открытыми формами. Его нельзя вызвать из серверного кода, у которого нет контекста формы, и тем более из фонового задания, которое выполняется в отдельном серверном процессе.

Новый механизм уведомлений решает именно эту задачу: инициировать действие на клиенте из серверного кода, не привязанного к интерфейсу. Это идеально подходит для асинхронных операций.

Отличие от Системы Взаимодействия

Система Взаимодействия также позволяет обмениваться сообщениями между сервером и клиентом. Однако это — мощный, но "тяжелый" инструмент. Он включает в себя чаты, видеозвонки, обсуждения, требует развертывания отдельного сервера или использования облачного сервиса. Использовать его для чисто технических задач, вроде обновления статуса отчета, — это как стрелять из пушки по воробьям.

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

Ключевая особенность: гарантированная доставка в сеанс

В документации есть важная формулировка: "гарантированная доставка информации до клиентского сеанса (именно сеанса, не пользователя!)". Проанализируем, что это значит. Один и тот же пользователь может запустить несколько экземпляров 1С. Например, бухгалтер открыл программу на двух мониторах в двух разных окнах — это два разных сеанса.

Если в первом сеансе он запустил формирование отчета в фоне, то уведомление о его готовности придет именно в тот сеанс, который инициировал задачу. Оно не появится во втором окне, что было бы нелогично и сбивало бы с толку. Такая адресная доставка до конкретного сеанса обеспечивает предсказуемость и корректность работы интерфейса.

Практические сценарии использования

Рассмотрим, где новый механизм будет особенно полезен.

  1. Обновление динамических списков по событию.

    Классическая задача: несколько менеджеров работают с одним списком заказов. Раньше, чтобы увидеть новый заказ, созданный коллегой, нужно было либо периодически обновлять список вручную (F5), либо настраивать автообновление каждые 30-60 секунд. Теперь можно сделать так, чтобы при проведении нового документа сервер отправлял уведомления всем клиентам, у которых открыта форма этого списка, и список обновлялся бы у них мгновенно. Это намного эффективнее, чем программное перемещение колонки динамического списка для привлечения внимания к новым данным.

  2. Индикация длительных операций.

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

    • "Обработано 100 из 1000 номенклатурных позиций..."
    • "Расчет себестоимости завершен, идет формирование печатной формы..."
    • "Отчет готов! Можно открывать."

    Это значительно улучшает пользовательский опыт (UX), так как система перестает быть "черным ящиком" и информирует о ходе процесса.

  3. Реализация совместной работы в реальном времени.

    Представим, что менеджер открыл карточку документа, который в этот же момент начал редактировать другой сотрудник. Можно отправить уведомление первому менеджеру с сообщением "Этот документ сейчас редактирует пользователь Иванов И.И.". Чтобы такое сообщение точно не осталось незамеченным, можно дополнительно использовать уведомление из 1С в центре уведомлений Windows.

  4. Создание внутренних систем оповещения.

    Можно реализовать простые технологические чаты или системы уведомлений. Например, при поступлении на склад критически важного товара система может автоматически отправить уведомление начальнику отдела закупок. В крупных системах, где таких событий тысячи, новый механизм отлично дополнит конвейер обработки задач, обеспечивая оперативную обратную связь.

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

← На главную