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