Как организовать параллельное выполнение нескольких задач и независимое движение по маршруту бизнес-процесса в 1С?

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

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

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

Ограничения стандартных механизмов карты маршрута

Проанализируем поведение базовых элементов схемы бизнес-процесса:

  1. Обычная точка действия: Если в обработчике точки действия программно сформировать несколько задач для разных исполнителей или предметов, родительский бизнес-процесс перейдет к следующему этапу только тогда, когда будут выполнены абсолютно все задачи текущей точки. Это делает невозможным независимое пошаговое продвижение по цепочке действий для каждого отдельного предмета.
  2. Точки разделения и слияния: Схема бизнес-процесса в платформе является статичной. Элементы ТочкаРазделения и ТочкаСлияния требуют жестко заданного на этапе конфигурирования количества параллельных веток. Если количество предметов или параллельных потоков определяется динамически во время выполнения, стандартные ветки использовать нельзя.

Решение: Использование точки вложенного бизнес-процесса

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

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

Программная реализация в обработчике события

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


Процедура КонтрольКонтрактаПередСозданиемВложенныхБизнесПроцессов(ТочкаМаршрутаБизнесПроцесса, ФормируемыеБизнесПроцессы, Отказ)
    
    // Получаем перечень предметов, по которым нужно запустить параллельные процессы
    СписокКонтрактовТЗ = ПолучитьСписокКонтрактов(Предмет);
    
    Для Каждого СтрокаКонтракт Из СписокКонтрактовТЗ Цикл
        
        // Создаем экземпляр вложенного бизнес-процесса
        ВложенныйБП = БизнесПроцессы.Т_КонтрольКонтракта.СоздатьБизнесПроцесс();
        ВложенныйБП.Дата = ТекущаяДата();
        ВложенныйБП.Предмет = СтрокаКонтракт.Ссылка;
        ВложенныйБП.Исполнитель = Исполнитель;
        ВложенныйБП.Автор = Пользователи.ТекущийПользователь();
        ВложенныйБП.Записать();
        
        // Обязательно добавляем созданный процесс в формируемую коллекцию
        ФормируемыеБизнесПроцессы.Добавить(ВложенныйБП.Ссылка);
        
    КонецЦикла;
    
КонецПроцедуры

Важные нюансы и механизм ведущих задач

Разберем технические особенности работы этого механизма:

  1. Заполнение коллекции ФормируемыеБизнесПроцессы: Созданные объекты обязательно должны быть записаны и добавлены в массив, переданный в параметре ФормируемыеБизнесПроцессы. Только в этом случае платформа зарегистрирует их как дочерние по отношению к текущей точке.
  2. Ведущие задачи: Платформа 1С автоматически связывает созданные вложенные бизнес-процессы с точкой родительского маршрута через системный механизм ВедущаяЗадача. Создавать ведущие задачи вручную в коде не требуется.
  3. Синхронизация завершения: Родительский бизнес-процесс перейдет к следующей точке маршрута автоматически, как только будут завершены все вложенные бизнес-процессы из списка.

Альтернативные архитектурные подходы

В зависимости от требований системы можно рассмотреть и другие варианты организации логики:

  1. Полностью независимые процессы: Если родительскому процессу не требуется ожидать завершения обработки всех элементов, можно создавать независимые бизнес-процессы без иерархической привязки через ВедущаяЗадача, а контроль выполнения вести через регистры сведений или реквизиты объектов-оснований.
  2. Циклический маршрут (итератор): Если параллельное выполнение не требуется и обработка может идти строго последовательно, в карте маршрута можно организовать цикл: обработка одного предмета → ТочкаУсловия (проверка, остались ли необработанные строки) → переход к следующему предмету либо выход из цикла.
← На главную