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

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

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

Почему штатное делегирование прав не подходит для автоподстановки

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

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

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

Проверка факта отсутствия через общий модуль

Для определения статуса сотрудника в конфигурации 1С:Документооборот предусмотрен программный интерфейс работы с отсутствиями. Логика проверки вынесена в общий модуль Отсутствия.

Проанализируем по шагам, как выстроить проверку в коде алгоритма автоподстановки:

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

Критически важные нюансы при написании кода

При реализации собственного алгоритма в модулях АвтоподстановкиПереопределяемый или ШаблоныБизнесПроцессовПереопределяемый обязательно следует учитывать следующие технологические особенности:

1. Гарантированный возврат исполнителя (Fallback)
Если функция автоподстановки вернет значение Неопределено, пустую ссылку или вызовет необработанную ошибку, процесс остановится. Данная ошибка зафиксируется в регистре сведений Очередь маршрутизации комплексных процессов. В алгоритме обязательно должна быть предусмотрена логика по умолчанию — например, возврат руководителя подразделения или администратора системы, если ни основной сотрудник, ни его заместитель не найдены.

2. Отсутствие рекурсивного замещения
Штатный механизм замещения действует однократно. Если сотрудник А замещает сотрудника Б, но сам в данный момент находится в отпуске и на него оформлено замещение сотрудником В, система не передаст задачу автоматически сотруднику В. Если алгоритму автоподстановки требуется искать конечного исполнителя по всей цепочке замещений, такой поиск необходимо явно реализовать циклом в коде.

3. Ролевая адресация как альтернатива
Вместо возврата конкретного физического лица из автоподстановки можно возвращать роль (с объектами адресации или без). В таком случае задачу увидит и сможет принять в работу любой доступный участник роли, что избавляет от необходимости писать сложную логику проверки отсутствий для каждого отдельного пользователя.

← На главную