Понадобилось отлавливать завершения согласований для уведомления ответственных за документ. Конечная цель не так важна, пользоваться можно для чего угодно.
Чтобы не дорабатывать конфигурацию, просто добавил новый детектор бизнес-события (Настройка и администрирование - Детекторы)
Детектор обнаруживает завершения процесса согласования в пределах последних 10 минут, по которому есть основной предмет, еще не обработанного этим детектором. Генерирует бизнес-событие с указанным видом в стандартном регистре 1С: Документооборот.
Детекторы по умолчанию выполняются фоновым заданием примерно раз в минуту, сильно грузить систему обработчик не должен.
В дальнейшем можно либо добавить обработчик события в самом детекторе, либо настроить автозапуск процесса по событию стандартными средствами (Управление процессами - Правила автозапуска процессов).
Внешний вид детектора:
Текст детектора:
Результат = Ложь;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПроизошедшиеБизнесСобытия.Источник КАК Источник,
| СогласованиеПредметы.Предмет КАК ОсновнойПредмет
|ПОМЕСТИТЬ ВТ_ЗавершенныеСогласования
|ИЗ
| РегистрСведений.ПроизошедшиеБизнесСобытия КАК ПроизошедшиеБизнесСобытия
| ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.Согласование.Предметы КАК СогласованиеПредметы
| ПО ПроизошедшиеБизнесСобытия.Источник = СогласованиеПредметы.Ссылка
|ГДЕ
| ПроизошедшиеБизнесСобытия.ВидСобытия = ЗНАЧЕНИЕ(Справочник.ВидыБизнесСобытий.ЗавершениеБизнесПроцесса)
| И ПроизошедшиеБизнесСобытия.Источник ССЫЛКА БизнесПроцесс.Согласование
| И ПроизошедшиеБизнесСобытия.ВидСобытия = ЗНАЧЕНИЕ(Справочник.ВидыБизнесСобытий.ЗавершениеБизнесПроцесса)
| И ПроизошедшиеБизнесСобытия.Период >= &Период
| И СогласованиеПредметы.РольПредмета = ЗНАЧЕНИЕ(Перечисление.РолиПредметов.Основной)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПроизошедшиеБизнесСобытия.Источник КАК Источник
|ПОМЕСТИТЬ ВТ_УжеДетектированные
|ИЗ
| РегистрСведений.ПроизошедшиеБизнесСобытия КАК ПроизошедшиеБизнесСобытия
|ГДЕ
| ПроизошедшиеБизнесСобытия.ВидСобытия = &ВидСобытияЗавершениеСогласования
// | И ПроизошедшиеБизнесСобытия.Источник ССЫЛКА Справочник.ВнутренниеДокументы //тут можно раскомментить, чтобы выбирались только внутренние документы, во избежание ошибок адресации (см попытку ниже)
| И ПроизошедшиеБизнесСобытия.Период >= &Период
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ЗавершенныеСогласования.Источник КАК Источник,
| ВТ_ЗавершенныеСогласования.ОсновнойПредмет КАК ОсновнойПредмет
|ИЗ
| ВТ_ЗавершенныеСогласования КАК ВТ_ЗавершенныеСогласования
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УжеДетектированные КАК ВТ_УжеДетектированные
| ПО ВТ_ЗавершенныеСогласования.ОсновнойПредмет = ВТ_УжеДетектированные.Источник
|ГДЕ
| ВТ_УжеДетектированные.Источник ЕСТЬ NULL";
Запрос.УстановитьПараметр("Период", ТекущаяДата() - 600);
Запрос.УстановитьПараметр("ВидСобытияЗавершениеСогласования", Справочники.ВидыБизнесСобытий.ПолучитьСсылку(новый УникальныйИдентификатор("4dec49cd-2226-11ea-bbd5-00265552556a"))); //Вид события, которое будет создавать детектор, нужно указать ссылку на элемент справочника, я сделал поиск по ГУИД во избежание проблем при переименовании
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Попытка
ПараметрыВозврата = Новый Структура;
ПараметрыВозврата.Вставить("Источник", Выборка.ОсновнойПредмет);
ПараметрыВозврата.Вставить("Автор", Выборка.ОсновнойПредмет.Ответственный);
Результат = Истина;
Исключение
//здесь нужен код для обработки ошибок адресации, но в целом пока и так работает
КонецПопытки;
КонецЕсли;