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

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

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

Архитектурные ограничения клиентских сообщений

Проанализируем частую ошибку начинающих разработчиков — попытку использовать метод Сообщить() или методы открытия форм для отправки экранного сообщения другому пользователю.

Метод Сообщить() работает строго в контексте клиентского сеанса того пользователя, который выполняет действие (в данном случае — последнего исполнителя подзадачи). Серверный код или регламентное задание не могут напрямую вызвать интерактивное диалоговое окно в чужом клиентском приложении. Чтобы постановщик увидел оповещение на своем экране, данные должны быть зафиксированы в информационной базе, а сеанс автора должен их считать (через регламентное задание, обработчик ожидания, механизм оповещений или Систему взаимодействия).

Структура метаданных: где искать подчиненные задачи

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

  1. В подчиненном бизнес-процессе заполняется реквизит ГлавнаяЗадача, который ссылается на родительскую задачу.
  2. Для проверки завершения всех подзадач необходимо выполнять запрос к регистру или задачам подчиненных бизнес-процессов, где ГлавнаяЗадача равна проверяемой задаче.
  3. Если среди найденных задач нет незавершенных (реквизит Выполнена = Ложь или статус не равен завершающему), считается, что последняя подзадача выполнена.

Способ 1. Использование механизма бизнес-событий

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

  1. Создание детектора бизнес-события: пишем алгоритм детектора, который отслеживает выполнение задачи. Детектор проверяет, завершилась ли последняя подчиненная задача, и фиксирует факт наступления бизнес-события.
  2. Обработчик бизнес-события: при наступлении события обработчик автоматически запускает действие — например, формирует подчиненный процесс типа Ознакомление или Исполнение, назначенное автору главной задачи.

Посмотрим на пример логики проверки завершения подзадач в коде детектора или обработчика:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Задачи.Ссылка КАК Ссылка
    |ИЗ
    |	Задача.ЗадачаИсполнителя КАК Задачи
    |ГДЕ
    |	Задачи.БизнесПроцесс.ГлавнаяЗадача = &ГлавнаяЗадача
    |	И Задачи.Выполнена = ЛОЖЬ
    |	И Задачи.ПометкаУдаления = ЛОЖЬ";

Запрос.УстановитьПараметр("ГлавнаяЗадача", ТекущаяГлавнаяЗадача);
Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда
    // Все подчиненные задачи завершены — генерируем событие или уведомление
КонецЕсли;

Способ 2. Штатный механизм проверки и контроля

Разберем типовые возможности настройки бизнес-процессов без программирования:

  1. При создании бизнес-процесса Исполнение с несколькими исполнителями предусмотрен флаг Контролировать (или Проверять выполнение).
  2. Если данный флаг включен, то после того как последний исполнитель нажимает кнопку «Выполнено», процесс автоматически направляет автору задачу на проверку результата исполнения. Задача появляется у автора в списке «Задачи мне».

Способ 3. Варианты доставки визуальных уведомлений

Если требуется вывести постановщику именно уведомление перед глазами помимо письма на электронную почту, рассмотрим следующие механизмы:

  1. Подсистема «Центр оповещений»: в персональных настройках уведомлений пользователь может настроить способ доставки Окном для событий изменения процессов или поступления задач. В этом случае система выводит всплывающее информационное окно на рабочий стол 1С при получении события.
  2. Создание процесса «Ознакомление»: обработчик события стартует легковесный процесс Ознакомление на автора. У автора обновляется счетчик невыполненных задач на начальной странице и в виджете «Мои задачи».
  3. Использование подсистемы «Напоминания пользователей» (БСП): программное создание записи в регистре сведений НапоминанияПользователя для автора с текущим временем срабатывания. Клиентский сеанс автора при очередном цикле опроса выведет стандартное окно напоминания поверх открытых форм.
  4. Система взаимодействия (1С:Диалоги): отправка контекстного оповещения автору через встроенный чат платформы или программного бота, что генерирует штатное всплывающее push-уведомление платформы.
← На главную