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