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

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

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

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

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

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

Если мы создаем процесс кодом, нам необходимо явно прописывать эти зависимости. Рассмотрим пример логики заполнения:


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

// Указываем, что этот этап запустится только после этапа с Ключом "КлючПервогоЭтапа"
СтрокаСвязи = Объект.ПредшественникиЭтапов.Добавить();
СтрокаСвязи.КлючЭтапа = НовыйЭтап.КлючСвязи;
СтрокаСвязи.КлючПредшественника = КлючПервогоЭтапа;

Использование динамических автоподстановок: правильный подход

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

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

  1. Создадим новый элемент в справочнике Автоподстановки (например, «Исполнители из ТЧ Служебной записки»).
  2. Пропишем логику вычисления исполнителей в общем модуле ШаблоныБизнесПроцессовПереопределяемый.

Найдем процедуру ПриПолученииИсполнителейИзАвтоподстановки и добавим в нее наш код:


Если ИмяАвтоподстановки = "ИсполнителиИзТЧСлужебнойЗаписки" Тогда
    // Получаем объект-основание (нашу СЗ)
    Если ТипЗнч(Предмет) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
        // Читаем данные ТЧ документа
        Для Каждого СтрокаТЧ Из Предмет.ТабличнаяЧастьСписокРассылки Цикл
            Результат.Добавить(СтрокаТЧ.Исполнитель);
        КонецЦикла;
    КонецЕсли;
КонецЕсли;

В чем преимущество такого метода? Система сама создаст нужное количество задач или этапов (в зависимости от настроек шаблона) при старте процесса. Нам не нужно вручную управлять объектами БизнесПроцессСсылка.КомплексныйПроцесс.

Реализация условий маршрутизации

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

В настройках этапа комплексного процесса можно указать условие. Это может быть:

Для нашей задачи с начальниками автора и адресата мы можем создать условие на встроенном языке:


// Условие для этапа "Согласование руководителем автора"
Руководитель = РаботаСоСтруктуройПредприятия.ПолучитьРуководителя(Предмет.Подготовил);
Результат = ЗначениеЗаполнено(Руководитель);

Если условие вернет Ложь, система просто пропустит этот этап в смешанном маршруте и перейдет к следующему согласно таблице предшественников.

Программное вмешательство через переопределяемые модули

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

Наиболее подходящее место — общий модуль РаботаСКомплекснымиБизнесПроцессамиСерверПереопределяемый. В нем существуют точки входа, позволяющие модифицировать структуру процесса непосредственно перед его формированием. Рассмотрим процедуру ПриСозданииЭтаповКомплексногоБизнесПроцесса (название может варьироваться в зависимости от конкретного релиза 2.1).

Важные рекомендации при работе с кодом КБП:

Резюме

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

← На главную