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

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

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

Рассмотрим подробно, как устроена передача задач, где перехватывать их создание и как корректно распределить как новые, так и уже существующие задачи.

Особенности типового механизмов делегирования

Выясним причину, почему стандартное делегирование не переназначает исполнителя автоматически. Типовое делегирование прав в 1С:Документооборот не меняет реквизит Исполнитель в самой задаче, а лишь предоставляет доступ заместителям к списку задач отсутствующего пользователя. Если создано два правила делегирования на разных сотрудников, оба пользователя увидят все входящие задачи.

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

Перехват создания задач: подписки на события и бизнес-события

Разберем по шагам, где и как перехватывать задачи при их генерации.

Существует два основных подхода для программного перенаправления задач:

  1. Обработка бизнес-событий (офлайн): В 1С:Документооборот при создании бизнес-процессов подготавливаются бизнес-события. Вы можете написать свой обработчик бизнес-события, который выполняется регламентным заданием в фоновом режиме.
  2. Синхронный перехват через подписки на события (в Расширении): Чтобы перенаправление происходило мгновенно в момент создания или записи задачи, доработку делают в расширении конфигурации через подписку на событие ПриЗаписи для объектов задач (например, ЗадачаИсполнителя).

Алгоритм смены исполнителя задачи

Проанализируем логику, которую необходимо реализовать в обработчике:

  1. Проверить, что текущий исполнитель задачи (Исполнитель) совпадает с сотрудником, от которого оформлено делегирование.
  2. Получить предмет задачи или автора документа и проверить условие (например, определить подразделение автора).
  3. В зависимости от выполнившегося условия установить нового конкретного исполнителя в реквизит Исполнитель.
  4. Вызвать процедуру перенаправления задачи или записать изменения с обновлением прав доступа.

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


// Пример логики смены исполнителя задачи
Если ЗадачаОбъект.Исполнитель = ОтсутствующийСотрудник Тогда
    
    // Получаем подразделение автора документа
    ПодразделениеАвтора = ЗадачаОбъект.Предмет.Автор.Подразделение;
    
    Если ПодразделениеАвтора = ПодразделениеПродаж Тогда
        НовыйИсполнитель = Заместитель1;
    Иначе
        НовыйИсполнитель = Заместитель2;
    КонецЕсли;
    
    // Устанавливаем нового исполнителя
    ЗадачаОбъект.Исполнитель = НовыйИсполнитель;
    ЗадачаОбъект.Записать();
    
КонецЕсли;

Важное замечание по правам доступа: При программной смене исполнителя реквизит задачи обновляется сразу. Однако расчет прав доступа нового исполнителя к предмету (документу или файлу) может выполняться асинхронно через очередь обновления прав. Учитывайте этот момент при тестировании.

Как распределить уже существующие невыполненные задачи?

Если делегирование было настроено после того, как задачи уже были сформированы, новые правила их не затронут автоматически. Посмотрим, как обработать накопленные задачи.

Для перераспределения существующих задач создается внешняя обработка. Алгоритм ее работы следующий:

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

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЗадачаИсполнителя.Ссылка КАК Задача
    |ИЗ
    |	Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
    |ГДЕ
    |	ЗадачаИсполнителя.Исполнитель = &ОтсутствующийСотрудник
    |	И НЕ ЗадачаИсполнителя.Выполнена";

Запрос.УстановитьПараметр("ОтсутствующийСотрудник", ОтсутствующийСотрудник);
РезультатЗапроса = Запрос.Выполнить().Выбрать();

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

Таким образом, сочетание подписки на события (или обработчика бизнес-событий) для новых задач и однократный запуск внешней обработки для текущих задач позволяют полностью решить проблему персонального распределения делегированных задач в 1С:Документооборот.

← На главную