Как оповестить пользователей после выполнения фонового или регламентного задания в 1С?

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

Разберем классическую задачу архитектуры 1С: как отправить сигнал с сервера, где выполняется регламентное задание, на клиентские сеансы пользователей. Поскольку регламентное задание работает в отрыве от пользовательского сеанса, прямой связи «сервер-клиент» в платформе не существует. Мы вместе проанализируем наиболее надежные подходы к решению этой задачи.

Использование регистра сведений как очереди сообщений

Это самый популярный и стабильный способ «подружить» фоновое задание с интерфейсом пользователя. Суть заключается в разделении логики исполнения и логики уведомления.

  1. Создадим регистр сведений ОчередьОповещений. В нем предусмотрим измерения: Пользователь (тип СправочникСсылка.Пользователи) и Прочитано (тип Булево), а также ресурсы для самого сообщения.
  2. В фоновом задании после завершения работы запишем результат выполнения в этот регистр.
  3. На клиенте, в модуле управляемого приложения или в общей форме, настроим ПодключитьОбработчикОжидания.

Разберем пример кода для клиентской части:


Процедура ПриНачалеРаботыСистемы()
    ПодключитьОбработчикОжидания("ПроверитьНаличиеОповещений", 60);
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьНаличиеОповещений()
    Результат = ПолучитьНовыеОповещенияНаСервере();
    Для Каждого СтрокаОповещения Из Результат Цикл
        Описание = Новый ОписаниеОповещения("ПослеНажатияНаОповещение", ЭтотОбъект, СтрокаОповещения.Параметры);
        ПоказатьОповещениеПользователю("Задание завершено", , СтрокаОповещения.Текст, , Описание);
    КонецЦикла;
КонецПроцедуры

Обработка клика по уведомлению

Чтобы оповещение не просто висело, а приносило пользу, мы можем сделать его интерактивным. Используя объект ОписаниеОповещения, мы передаем контекст, который поможет пользователю сразу перейти к результату.

Рассмотрим, как реализовать открытие формы после того, как пользователь нажал на всплывшее окно:


&НаКлиенте
Процедура ПослеНажатияНаОповещение(Параметры) Экспорт
    // Здесь мы открываем нужную форму с переданными параметрами
    ОткрытьФорму("Обработка.МояОбработка.Форма", Параметры);
КонецПроцедуры

Альтернативные подходы и их особенности

Помимо регистра сведений, существуют и другие методы, однако каждый из них имеет свои ограничения:

Итоги и рекомендации

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

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

← На главную