Основная проблема реализации - то, что ДО активно использует обработку через регламентные задания, поэтому выполнить код нельзя прямо в скрипте схемы процесса. Все делаем в пользовательском режиме.
Поехали:
1. Реализовать можно и без расширения, и так нам нужна функция поиска элемента, именно ее мы и будем добавлять в расширение, добавляем в общий модуль DIS_ОбщиеФункцию
Функция НайтиСоздатьСкрипт_ЗарегистрироватьСобытиеПерезапуска() Экспорт 
	
	ИдентификаторСсылки = Новый УникальныйИдентификатор("a777b57b-1fd6-11e5-926b-07051c6a2d65");
	Обработчик = Справочники.СкриптыСхемДляОбработокОбъектов.ПолучитьСсылку(ИдентификаторСсылки);
	
	Если Не ОбщегоНазначения.СсылкаСуществует(Обработчик) Тогда 
		оСпр = Справочники.СкриптыСхемДляОбработокОбъектов.СоздатьЭлемент();
		оСпр.УстановитьСсылкуНового(Обработчик);
		
		оСпр.Наименование = НСтр("ru = 'Зарегистрировать событие перезапуска процесса'");    
		оСпр.Выражение = 
			"БизнесСобытияВызовСервера.ЗарегистрироватьСобытие(
			|	Параметры.ОбработкаОбъект.Владелец, 
			|	DIS_ОбщиеФункции.НайтиСоздатьБизнесСобытие_ПроцессыТребуетсяПерезапуск())";
		оСпр.Записать();
	КонецЕсли;
	
	Возврат Обработчик;
	
КонецФункции       
2. В справочнике ВидыБизнесСобытий добавляем элемент "Процессы: требуется перезапуск", никаких специальных настроек не требуется.
3. В справочнике ПользовательскиеОбработчикиБизнесСобытий добавляем элемент "Перезапуск процесса" с кодом
ОбработкаОбъекта = Справочники.ОбработкиОбъектов.ОбработкаОбъекта(Событие.Источник);
Если ЗначениеЗаполнено(ОбработкаОбъекта) Тогда
	ОбработкиОбъектов.ПрерватьОбработку(ОбработкаОбъекта, "");
КонецЕсли;
ПравилаОбработкиСервер.ЗаполнитьДействияПрограммно(
	Событие.Источник, 
	Сотрудники.ОсновнойСотрудникПользователя(
			?(ЗначениеЗаполнено(Событие.Источник.Ответственный),
				Событие.Источник.Ответственный,
				"ТекущийПользователь")));
ОбработкиОбъектовВызовСервера.НачатьОбработку(Событие.Источник);
4. В регистре СвязьПользовательскихОбработчиковБизнесСобытийИВидаСобытий создаем связь созданных ранее элементов
5. Для создания элемента в справочнике СкриптыСхемДляОбработокОбъектов элемента нужно выполнить ранее созданную функцию
DIS_ОбщиеФункции.НайтиСоздатьСкрипт_ЗарегистрироватьСобытиеПерезапуска();
Теперь в схему комплексного процесса можно добавить обработку со скриптом "Зарегистрировать событие перезапуска процесса" и обязательным завершением процесса.
После попадания на эту обработку БП завершится и произойдет запись в очередь бизнес событий, потом произойдут штатные обработчики и уже после выполнится наш код помещения в историю создания новой обработки и запуск ее.
Гарантированно работает на Документооборот КОРП, редакция 3.0 (3.0.16.33).
Вступайте в нашу телеграмм-группу Инфостарт
