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

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

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

Архитектура исполнения процессов в 1С:Документооборот

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

Задачи создаются динамически: при переходе точки маршрута система обращается к правилам, вычисляет исполнителя (персону, роль или автоподстановку) и только в этот момент генерирует объекты Задача.ЗадачаИсполнителя. Таким образом, пытаться перехватить маршрут непосредственно перед Старт() не имеет смысла. Решать задачу необходимо либо через штатную настройку условий маршрутизации, либо в точках генерации задач.

Решение 1. Штатная настройка условий в шаблоне процесса (без программирования)

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

  1. Откроем шаблон процесса согласования (в редакции КОРП).
  2. Включим признак Использовать условия.
  3. В табличной части списка согласующих появится колонка Условие. Настроим для требуемого участника правило (через встроенный конструктор условий или на встроенном языке).
  4. Если настроенное условие вернет Ложь, система автоматически пропустит данного согласующего: задача ему создаваться не будет, и процесс сразу перейдет к следующему шагу.

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

Решение 2. Программный перехват в точке маршрута «ПриСозданииЗадач»

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

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

Рассмотрим пример логики перехвата в расширении конфигурации:


&Вместо("ПриСозданииЗадач")
Процедура Расш_ПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
    
    // Вызываем базовую логику формирования коллекции задач
    ПродолжитьВызов(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ);
    
    Индекс = ФормируемыеЗадачи.Количество() - 1;
    Пока Индекс >= 0 Цикл
        ТекущаяЗадача = ФормируемыеЗадачи[Индекс];
        
        // Проверяем условия по объекту задачи или ее предмету
        Если ТребуетсяАвтоматическиПропустить(ТекущаяЗадача) Тогда
            // Удаляем задачу из коллекции до записи в базу данных
            ФормируемыеЗадачи.Удалить(Индекс);
        КонецЕсли;
        
        Индекс = Индекс - 1;
    КонецЦикла;

КонецПроцедуры

Удаляя задачу из коллекции ФормируемыеЗадачи до момента ее записи в базу, мы предотвращаем ее появление в списках пользователя. Бизнес-процесс при этом продолжит движение по маршруту согласно заложенной логике.

Архитектурные ограничения и подводные камни

При программной модификации алгоритмов согласования важно учитывать ограничения платформы 1С:Предприятие:

  1. Недопустимость автовыполнения задач в транзакции их создания. Грубейшая ошибка — вызывать метод ВыполнитьЗадачу() в событиях ПередЗаписью или ПриСозданииЗадач. Задача в этот момент еще физически не зафиксирована в базе. Попытка немедленного продвижения процесса приведет к рекурсивным блокировкам, ошибкам транзакции или взаимоблокировкам (deadlock). Для автоматического согласования задачу необходимо поместить в очередь (например, специальный регистр сведений) и завершать асинхронно через регламентное задание.
  2. Запрет физического удаления запущенного бизнес-процесса. Если бизнес-процесс стартовал, по нему уже начали формироваться записи в системных таблицах и регистрах состояний. Физическое удаление объекта нарушит ссылочную целостность базы. Если по результатам проверки процесс необходимо отменить, используйте штатный метод прерывания с установкой состояния Прерван. При этом система корректно отменит подчиненные задачи и очистит регистры ожидания.
  3. Контекст регламентных заданий. Если включен отложенный запуск через ПроцессыДляЗапуска, формирование задач происходит в фоновом задании. Код проверок не должен содержать обращений к клиентским методам, формам или интерактивным диалогам.
  4. Использование электронной подписи (ЭП). Если на шаге согласования включена обязательная заверка визы электронной подписью, полностью программное фоновое согласование без участия пользователя невозможно без серверного криптоконтейнера.
← На главную