Как настроить последовательное согласование всеми руководителями сотрудника по цепочке снизу вверх, исключая генерального директора, в «1С:Документооборот 2.1»?

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

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

Стандартная автоподстановка «Все руководители подразделений автора» в «1С:Документооборот 2.1» (далее — ДО 2.1) далеко не всегда решает эту задачу корректно. Она может захватывать избыточные уровни иерархии, не соблюдать требуемую последовательность или включать в список согласующих лиц, чье участие не предполагается. В этой статье мы подробно разберем, как решить эту задачу несколькими способами: от гибкого программного метода до визуальной настройки схем комплексных процессов.

Способ 1. Использование скрипта в правилах автоподстановки (Рекомендуемый метод)

Этот метод является наиболее надежным, гибким и лаконичным. Вместо того чтобы пытаться использовать жесткие типовые алгоритмы, мы напишем собственное правило автоподстановки, которое будет динамически вычислять список руководителей для любого сотрудника организации и отсекать генерального директора на уровне программного кода.

Давайте разберем по шагам, как реализовать этот алгоритм. Перейдем в меню «Настройка и администрирование», выберем «Правила автоподстановки» и создадим новое правило для процесса согласования.

Логика работы нашего скрипта будет следующей:

  1. Определить автора (инициатора) бизнес-процесса.
  2. Найти непосредственное подразделение автора в справочнике СтруктураПредприятия.
  3. В цикле подниматься по дереву подразделений вверх к родительским элементам.
  4. На каждом уровне определять руководителя подразделения.
  5. Проверять, не является ли найденный руководитель генеральным директором.
  6. Если руководитель не равен генеральному директору, добавлять его в итоговый массив участников.
  7. Возвращать сформированный массив пользователей для подстановки в процесс согласования.

Рассмотрим пример кода, реализующий данную логику:


// Инициализируем массив для хранения списка согласующих руководителей
Результат = Новый Массив;

// Получаем автора текущего процесса
АвторПроцесса = Неопределено;
Если ЗначениеЗаполнено(Предмет) Тогда
    АвторПроцесса = Предмет.Автор;
КонецЕсли;

Если Не ЗначениеЗаполнено(АвторПроцесса) Тогда
    Возврат Результат;
КонецЕсли;

// Получаем подразделение автора
ТекущееПодразделение = АвторПроцесса.Подразделение;

// Задаем уникальный идентификатор или ссылку на генерального директора, которого нужно исключить
// В реальной базе лучше использовать поиск по коду, реквизиту или роли, избегая жесткого кодирования ГУИД
СсылкаГенеральныйДиректор = Справочники.Пользователи.НайтиПоРеквизиту("Должность", Справочники.Должности.НайтиПоНаименованию("Генеральный директор"));

// Цикл обхода иерархии подразделений снизу вверх
Пока ЗначениеЗаполнено(ТекущееПодразделение) Цикл
    
    // Получаем руководителя текущего подразделения
    Руководитель = ТекущееПодразделение.Руководитель;
    
    Если ЗначениеЗаполнено(Руководитель) Тогда
        // Проверяем, является ли руководитель генеральным директором
        Если Руководитель <> СсылкаГенеральныйДиректор Тогда
            // Проверяем, чтобы пользователь не дублировался в списке (на случай пересечения ролей)
            Если Результат.Найти(Руководитель) = Неопределено Тогда
                Результат.Добавить(Руководитель);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    // Переходим к вышестоящему подразделению
    ТекущееПодразделение = ТекущееПодразделение.Родитель;
    
КонецЦикла;

Возврат Результат;

После сохранения этого правила автоподстановки мы можем использовать его в шаблоне процесса согласования. В таблице участников выберем наше созданное правило. Важный нюанс: в колонке «Порядок» обязательно укажем значение «Последовательно». Поскольку наш алгоритм собирает руководителей снизу вверх (от непосредственного к вышестоящему), возвращаемый массив будет содержать пользователей именно в таком порядке. Платформа направит задачу первому руководителю в списке, а после его согласования — следующему.

Способ 2. Настройка схемы комплексного процесса (Без программирования)

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

Для реализации этого способа мы выполним следующие действия:

  1. Создадим новый шаблон комплексного процесса.
  2. Перейдем на вкладку «Схема процесса» вместо стандартной таблицы этапов.
  3. Добавим последовательные блоки действия «Согласование» для каждого возможного уровня руководства. Например:
    • Этап 1: Руководитель отдела
    • Этап 2: Руководитель управления
    • Этап 3: Директор департамента
  4. Для каждого блока настроим условия маршрутизации. Условия будут проверять уровень вложенности и структуру подразделения автора.
  5. Чтобы исключить генерального директора, в условии перехода к завершающим этапам согласования укажем проверку: Если Руководитель подразделения равен [Генеральный директор], то направлять процесс в обход этого блока (сразу на завершение процесса или на другой этап).

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

Способ 3. Комбинация автоподстановки и условий маршрутизации

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

Для этого в шаблоне согласования:

Резюме и рекомендации

Мы проанализировали различные варианты настройки последовательного согласования в «1С:Документооборот 2.1». Каждый из них имеет свои области применения:

Выбирайте наиболее подходящий для вашей конфигурации метод и делайте процессы согласования прозрачными и эффективными!

← На главную