Введение
Некоторое время назад 1С выпустила тестовые релизы новой версии платформы 8.3.26. Среди прочего, в ней был реализован новый механизм "Уведомления клиента".
Теория
В глобальном контексте появилось новое свойство УведомленияКлиента, содержащее три метода:
- ПодключитьОбработчик - назначает обработчик для входящего уведомления в клиентском коде;
- ОтключитьОбработчик - отключает ранее подключенный обработчик;
- ОтправитьУведомление - отправляет уведомление клиентским сеансам с сервера.
Уведомление может быть отправлено всем активным сеансам, либо определенному множеству сеансов. Для этого в ОтправитьУведомление можно передать массив номеров сеанса.
Также, в типе ФоновоеЗадание появилось новое свойство НомерРодительскогоСеанса. Его можно использовать, например, для отправки уведомлений о прогрессе выполнения длительной фоновой операции.
Разработчики заявляют, что механизм уведомлений клиента гарантирует доставку уведомления - уведомление не будет утеряно из-за временного обрыва соединения со стороны клиентского приложения или при падении рабочего процесса сервера 1С.
Пример использования
В качестве примера реализуем простейший мессенджер:
Подготовка клиентского кода
Пропишем подключение и отключение обработчика:
Реализуем сам обработчик:
Реализация отправки и доставки сообщений
В обработчике кнопки "Отправить сообщение" ничего необычного - спрашиваем текст и вызываем некоторую серверную процедуру:
А как отправить сообщение уже с сервера другим сеансам, в которых открыта эта же обработка? Записывать данные в какой-то регистр и стучаться в него раз в несколько секунд? Писать тонну кода для отправки и приема из системы взаимодействия? Нет, все гораздо проще:
В процедуре я подготовил произвольную структуру данных сообщения (в отличие от системы взаимодействия, я могу передавать не только строку) и вызвал УведомленияКлиента.ОтправитьУведомление. Т.к. я не передавал массив с номерами сеансов, уведомление отправится всем активным сеансам ИБ (включая текущий).
Демонстрация
![](https://i.ytimg.com/vi/GGC15Vei2uc/sddefault.jpg)
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.18.46