Блокировка повторного запуска процессов в 1С: Документооборот

Все что нужно, добавить подписку на событие ПередЗаписью для БизнесПроцессСсылка.

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

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *