При автоматизации документооборота в крупных компаниях часто возникает задача организации последовательного согласования документов. Типичный сценарий: документ должен пройти согласование по всей цепочке руководства инициатора — от его непосредственного начальника до топ-менеджеров, но при этом необходимо исключить из этой цепочки высшее руководство (например, генерального директора), согласование с которым должно происходить на других этапах или вообще регулироваться отдельным процессом.
Стандартная автоподстановка «Все руководители подразделений автора» в «1С:Документооборот 2.1» (далее — ДО 2.1) далеко не всегда решает эту задачу корректно. Она может захватывать избыточные уровни иерархии, не соблюдать требуемую последовательность или включать в список согласующих лиц, чье участие не предполагается. В этой статье мы подробно разберем, как решить эту задачу несколькими способами: от гибкого программного метода до визуальной настройки схем комплексных процессов.
Этот метод является наиболее надежным, гибким и лаконичным. Вместо того чтобы пытаться использовать жесткие типовые алгоритмы, мы напишем собственное правило автоподстановки, которое будет динамически вычислять список руководителей для любого сотрудника организации и отсекать генерального директора на уровне программного кода.
Давайте разберем по шагам, как реализовать этот алгоритм. Перейдем в меню «Настройка и администрирование», выберем «Правила автоподстановки» и создадим новое правило для процесса согласования.
Логика работы нашего скрипта будет следующей:
СтруктураПредприятия.Рассмотрим пример кода, реализующий данную логику:
// Инициализируем массив для хранения списка согласующих руководителей
Результат = Новый Массив;
// Получаем автора текущего процесса
АвторПроцесса = Неопределено;
Если ЗначениеЗаполнено(Предмет) Тогда
АвторПроцесса = Предмет.Автор;
КонецЕсли;
Если Не ЗначениеЗаполнено(АвторПроцесса) Тогда
Возврат Результат;
КонецЕсли;
// Получаем подразделение автора
ТекущееПодразделение = АвторПроцесса.Подразделение;
// Задаем уникальный идентификатор или ссылку на генерального директора, которого нужно исключить
// В реальной базе лучше использовать поиск по коду, реквизиту или роли, избегая жесткого кодирования ГУИД
СсылкаГенеральныйДиректор = Справочники.Пользователи.НайтиПоРеквизиту("Должность", Справочники.Должности.НайтиПоНаименованию("Генеральный директор"));
// Цикл обхода иерархии подразделений снизу вверх
Пока ЗначениеЗаполнено(ТекущееПодразделение) Цикл
// Получаем руководителя текущего подразделения
Руководитель = ТекущееПодразделение.Руководитель;
Если ЗначениеЗаполнено(Руководитель) Тогда
// Проверяем, является ли руководитель генеральным директором
Если Руководитель <> СсылкаГенеральныйДиректор Тогда
// Проверяем, чтобы пользователь не дублировался в списке (на случай пересечения ролей)
Если Результат.Найти(Руководитель) = Неопределено Тогда
Результат.Добавить(Руководитель);
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Переходим к вышестоящему подразделению
ТекущееПодразделение = ТекущееПодразделение.Родитель;
КонецЦикла;
Возврат Результат;
После сохранения этого правила автоподстановки мы можем использовать его в шаблоне процесса согласования. В таблице участников выберем наше созданное правило. Важный нюанс: в колонке «Порядок» обязательно укажем значение «Последовательно». Поскольку наш алгоритм собирает руководителей снизу вверх (от непосредственного к вышестоящему), возвращаемый массив будет содержать пользователей именно в таком порядке. Платформа направит задачу первому руководителю в списке, а после его согласования — следующему.
Если в вашей компании политика безопасности запрещает добавление кастомного кода или у вас нет доступа к конфигурированию правил автоподстановки, задачу можно решить с помощью стандартного функционала схем комплексных процессов. Этот подход предлагался в оригинальном обсуждении на форуме.
Для реализации этого способа мы выполним следующие действия:
Если Руководитель подразделения равен [Генеральный директор], то направлять процесс в обход этого блока (сразу на завершение процесса или на другой этап).Проанализируем этот метод подробнее. Главный его минус заключается в громоздкости схемы. Если в организации сложная структура с большой глубиной вложенности подразделений, графическая схема комплексного процесса станет огромной и сложной в поддержке. При любом изменении организационной структуры предприятия администратору придется вручную перенастраивать условия переходов и состав блоков.
Рассмотрим промежуточный вариант, который сочетает в себе простоту настройки табличного шаблона и гибкость условий маршрутизации. Мы можем использовать типовую автоподстановку для получения списка согласующих, но ограничить отправку задач конкретным лицам с помощью условий маршрутизации на уровне самого процесса.
Для этого в шаблоне согласования:
Получатель задачи НЕ РАВЕН [Генеральный директор] (или проверка по должности).Мы проанализировали различные варианты настройки последовательного согласования в «1С:Документооборот 2.1». Каждый из них имеет свои области применения:
Выбирайте наиболее подходящий для вашей конфигурации метод и делайте процессы согласования прозрачными и эффективными!