08. Бизнес-процессы

Как определить бизнес процесс, в котором количество последовательных этапов определяется индивидуально на момент старта экземпляра процесса?

Процедура ПередВыполнением(Отказ) Если Исполнитель.Пустая() Тогда Исполнитель = ПараметрыСеанса.ТекущийИсполнитель; КонецЕсли; ДатаВыполнения=ТекущаяДата(); КонецПроцедуры ПолучитьФорму("Маршрут").Открыть(); СтандартнаяОбработка = Ложь; Если ТочкиМаршрута.Количество() = 0 Тогда Сообщить("Не определен маршрут!!!"); Отказ = Истина; КонецЕсли; Результат = ПолучитьТочкуМаршрута().Пустая(); Функция ПолучитьТочкуМаршрута() Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | НаМаршрутеТочкиМаршрута.НомерСтроки КАК НомерСтроки, | НаМаршрутеТочкиМаршрута.Склад |ИЗ | БизнесПроцесс.НаМаршруте.ТочкиМаршрута КАК НаМаршрутеТочкиМаршрута |ГДЕ | (НаМаршрутеТочкиМаршрута.Склад НЕ В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ЭтапПути.Склад | ИЗ | Задача.ЭтапПути КАК ЭтапПути | ГДЕ | ЭтапПути.БизнесПроцесс = &БизнесПроцесс )) | И | (Ссылка = &БизнесПроцесс) |УПОРЯДОЧИТЬ ПО | НомерСтроки"; Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат (Выборка.Склад); Иначе Возврат(Справочники.Склады.ПустаяСсылка()); КонецЕсли; КонецФункции ФормируемыеЗадачи[0].Склад = ПолучитьТочкуМаршрута(); ПолучитьФорму("ПутевойЛист").Открыть(); СтандартнаяОбработка = Ложь; Если ПоказанияСпидометраКонечные = 0 ИЛИ Ссылка.РасходТоплива = 0 Тогда Сообщить("Не введены данные по путевому листу!"); Отказ = Истина; КонецЕсли;

Как при работе с бизнес процессами отказаться от стандартного способа формирования задачи и сформировать ее программно?

Для Каждого Рецензент Из НаСогласование Цикл НоваяЗадача = Задачи.ЭтапПути.СоздатьЗадачу(); НоваяЗадача.БизнесПроцесс = Ссылка; НоваяЗадача.Пользователь = Рецензент.Рецензент; НоваяЗадача.Наименование = "Согласование со специалистом"; НоваяЗадача.ТочкаМаршрута = БизнесПроцессы.НаПараллельноеСогласование.ТочкиМаршрута.Согласование; НоваяЗадача.Дата = ТекущаяДата(); НоваяЗадача.Записать(); ФормируемыеЗадачи.Добавить(НоваяЗадача); КонецЦикла; СтандартнаяОбработка = Ложь;