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

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

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

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

Понимание условной маршрутизации: когда и как проверяются условия

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

Представим, что мы идем на прогулку. На развилке дорог мы задаем вопрос: «Хочешь лимонад?». Если попутчик отвечает «Да», мы сворачиваем в проулок к киоску (система создает задачу исполнителю). Если ответ «Нет», мы продолжаем движение прямо по главному проспекту (система пропускает этот шаг и переходит к следующему). Точно так же работает и условная маршрутизация в «1С:Документооборот».

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

Пропуск филиальных шагов: как избежать зависания процесса

Рассмотрим ситуацию, когда четвертый шаг процесса — это согласование у директора филиала (например, в г. Абакан), но документ может быть создан и в головном офисе, где директора филиала нет. Нам нужно сделать так, чтобы для головного офиса этот шаг автоматически пропускался.

Выясним, как это реализовать. Нам необходимо настроить условие маршрутизации для шага 4. Если документ создан в филиале Абакан, условие должно возвращать Истина, во всех остальных случаях — Ложь.

Для этого в шаблоне процесса на четвертом шаге мы устанавливаем флаг «Использовать условия» и привязываем к нему условие маршрутизации. Код проверки на встроенном языке будет выглядеть следующим образом:


Если Предмет.ДополнительныеРеквизиты[0].Значение = Справочники.СтруктураПредприятия.НайтиПоНаименованию("Абакан") Тогда
    Результат = Истина;
Иначе 
    Результат = Ложь;
КонецЕсли;

Важное предупреждение: обращение к дополнительным реквизитам по индексу [0] — это крайне нестабильная практика, так как порядок реквизитов в базе данных может измениться. Безопаснее находить нужный дополнительный реквизит по его свойству (метаданным). Тем не менее, приведенный алгоритм наглядно показывает суть: если условие возвращает Ложь (заявка из головного офиса), система сама поймет, что шаг выполнять не нужно, и сразу перейдет к шагу 5. Дополнительно указывать «куда переходить в случае Ложь» в настройках шага не требуется.

При этом поведение системы различается в зависимости от версии программы:

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

Исключение повторного согласования: почему это критично

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

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

Способ 1. Программная проверка истории виз документа (для 1С:ДО 2.1 и 3.0)

Самый надежный способ узнать, согласовывал ли уже пользователь этот документ ранее — обратиться к табличной части виз документа. Мы можем написать программное условие маршрутизации на встроенном языке 1С, которое будет выполняться перед стартом очередного шага.

Рассмотрим пример кода, который проверяет, содержится ли уже успешная виза от конкретного сотрудника (например, руководителя автора документа) в истории согласования:


// Определяем проверяемого сотрудника (в данном случае руководитель того, кто подготовил документ)
ПроверяемыйСотрудник = Предмет.Подготовил.Руководитель; 
Результат = Истина; // По умолчанию шаг НЕ пропускаем (задача должна создаться)

// Обходим коллекцию виз согласования документа
Для Каждого СтрокаВизы Из Предмет.ВизыСогласования Цикл
    // Проверяем, совпадает ли исполнитель визы с нашим сотрудником
    // и было ли решение положительным ("Согласовано")
    Если СтрокаВизы.Исполнитель = ПроверяемыйСотрудник 
        И СтрокаВизы.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано Тогда
        
        // Если успешная виза от этого человека уже есть, возвращаем Ложь
        // Шаг маршрутизации будет пропущен
        Результат = Ложь; 
        Прервать;
    КонецЕсли;
КонецЦикла;

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

Способ 2. Логическое исключение на основе реквизитов (Без кода)

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

Допустим, на шаге 2 документ согласовывает непосредственный руководитель автора. На шаге 8 настроено согласование у определенной роли, которую на данный момент также исполняет этот руководитель. Чтобы исключить повторное согласование на шаге 8, мы можем добавить для него условие маршрутизации со следующей логикой:

«Исполнитель Шага 8 НЕ РАВЕН Подготовил.Подразделение.Руководитель»

Если это условие выполняется (то есть текущий исполнитель шага 8 — это другое лицо), то задача создается. Если они равны, условие возвращает Ложь, и шаг 8 успешно пропускается, так как руководитель уже выразил свое мнение на шаге 2.

Способ 3. Использование механизма «Вытеснения участников» в 1С:ДО 3.0

Если вы работаете в современной редакции 1С:Документооборот 3.0, разработчики фирмы «1С» уже добавили штатный механизм для решения этой проблемы, который не требует написания кода или создания сложных условий вручную.

Этот механизм называется «Вытеснение участников согласования». Разберем по шагам, как его активировать и использовать:

  1. Перейдем в раздел Настройки — Настройка программы — Процессы и задачи.
  2. Установим флаг «Использовать вытеснение участников».
  3. В правилах и шаблонах обработки документов система начнет автоматически анализировать пересечения ролей и исполнителей.

Как это работает на практике? Если один и тот же сотрудник назначен в процессе и согласующим, и утверждающим (подписывающим) лицом, программа автоматически «вытеснит» его из этапа согласования. Шаг согласования для него будет пропущен, так как его финальное решение при утверждении/подписании документа имеет более высокий приоритет. Также в системе можно настроить ранги подразделений, благодаря чему руководитель вышестоящего подразделения будет автоматически вытеснять нижестоящего сотрудника, исключая дублирование задач.

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

Мы проанализировали различные методы оптимизации процессов согласования в системе «1С:Документооборот». Подведем итог:

← На главную