наверх
Свободные IT публикации
быстро и доступно
логин:
пароль:

Бизнес-процессы в 1С 8.x


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

Процедура ПередВыполнением(Отказ) 
	Если Исполнитель.Пустая() Тогда 
		Исполнитель = ПараметрыСеанса.ТекущийИсполнитель; 
	КонецЕсли; 
	ДатаВыполнения=ТекущаяДата(); 
КонецПроцедуры 

ПолучитьФорму("Маршрут").Открыть(); 
СтандартнаяОбработка = Ложь; 

Если ТочкиМаршрута.Количество() = 0 Тогда 
	Сообщить("Не определен маршрут!!!"); 
	Отказ = Истина; 
КонецЕсли; 

Результат = ПолучитьТочкуМаршрута().Пустая(); 

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

	Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка); 

	Выборка = Запрос.Выполнить().Выбрать(); 

	Если Выборка.Следующий() Тогда 
		Возврат (Выборка.Склад); 
	Иначе 
		Возврат(Справочники.Склады.ПустаяСсылка()); 
	КонецЕсли; 

КонецФункции 

ФормируемыеЗадачи[0].Склад = ПолучитьТочкуМаршрута(); 

ПолучитьФорму("ПутевойЛист").Открыть(); 
СтандартнаяОбработка = Ложь; 

Если ПоказанияСпидометраКонечные = 0 ИЛИ Ссылка.РасходТоплива = 0 Тогда 
	Сообщить("Не введены данные по путевому листу!"); 
	Отказ = Истина; 
КонецЕсли;

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

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

	ФормируемыеЗадачи.Добавить(НоваяЗадача); 
КонецЦикла;