Как настроить автоматический пропуск этапа согласования в 1С:Документооборот, если нет согласующих лиц?

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

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

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

Причина возникновения проблемы

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

Способ 1. Использование встроенной настройки в 1С:Документооборот 3.0

Если вы используете современную версию 1С:Документооборот 3.0, решение этой проблемы максимально упрощено. Рассмотрим этот механизм подробнее:

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

Способ 2. Программная проверка через условия маршрутизации (версия 2.1)

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

Разберем алгоритм настройки:

  1. Перейдем в раздел Управление процессамиУсловия маршрутизации.
  2. Создадим новое условие с типом «Выражение на встроенном языке».
  3. В окне выражения напишем код, который имитирует поиск исполнителей. Переменная Результат должна возвращать Истина, если согласующие есть, и Ложь, если их нет.

Рассмотрим пример кода для условия маршрутизации, который проверяет наличие исполнителей в шаблоне:


// Пример кода для проверки наличия исполнителей
// Получаем предмет процесса (документ)
ОбъектДокумент = Предмет;

// Логика проверки: если документ подготовил руководитель подразделения, 
// то согласование не требуется (результат Ложь)
Если ОбъектДокумент.Подготовил.Подразделение.Руководитель = ОбъектДокумент.Подготовил Тогда
    Результат = Ложь;
Иначе
    Результат = Истина;
КонецЕсли;

После создания условия его необходимо указать в шаблоне комплексного процесса в колонке «Условие перехода» для этапа согласования. Таким образом, этап будет запускаться только при выполнении данного условия.

Способ 3. Использование графической схемы маршрута

Иногда линейная настройка комплексного процесса (списком) не позволяет гибко описать логику. В таких случаях мы рекомендуем использовать способ настройки «Схема».

Проанализируем преимущества этого метода:

Для кейса с начальником отдела (Сообщение №3) схема будет выглядеть так: Точка условия проверяет «Автор = Руководитель?». Если «Да», стрелка идет сразу к блоку «Утверждение». Если «Нет», стрелка ведет к блоку «Согласование», а уже после него — к «Утверждению».

Способ 4. Проверка через автоподстановки и «Заглушки»

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

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

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

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

Подводя итог, выберем оптимальную стратегию:

Во-первых, если есть возможность перехода на 1С:ДО 3.0 — это лучшее решение, так как там проблема решена на уровне платформы одной галочкой в настройках.

Во-вторых, для версии 2.1 наиболее «чистым» с точки зрения архитектуры является Способ 2 (Условия маршрутизации). Он позволяет оставить процесс линейным и понятным для администраторов, скрывая сложность внутри программного условия.

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

Рассмотрим использование функций общего модуля для более точной проверки исполнителей в скриптах:


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

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

← На главную