Детектор завершения согласования для 1С: Документооборот КОРП

Публикация № 1189808 04.02.20

Задачи пользователя - Адаптация типовых решений

1С: Документооборот подписка на событие бизнес-события детектор

Детектор, обнаруживающий завершение согласования и создающий соответствующее бизнес-событие, на которое можно настроить обработчик или автозапуск процесса.

Понадобилось отлавливать завершения согласований для уведомления ответственных за документ. Конечная цель не так важна, пользоваться можно для чего угодно.

Чтобы не дорабатывать конфигурацию, просто добавил новый детектор бизнес-события (Настройка и администрирование - Детекторы)

Детектор обнаруживает завершения процесса согласования в пределах последних 10 минут, по которому есть основной предмет, еще не обработанного этим детектором. Генерирует бизнес-событие с указанным видом в стандартном регистре 1С: Документооборот.

Детекторы по умолчанию выполняются фоновым заданием примерно раз в минуту, сильно грузить систему обработчик не должен.

В дальнейшем можно либо добавить обработчик события в самом детекторе, либо настроить автозапуск процесса по событию стандартными средствами (Управление процессами - Правила автозапуска процессов).

Внешний вид детектора:

 

Текст детектора:

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

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

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. MSK_Step 22 04.02.20 14:02 Сейчас в теме
А добавить процесс ознакомления после согласования или у вас пользователи сами создают простые процессы?
2. akim2040 32 04.02.20 14:43 Сейчас в теме
Присоединяюсь к предыдущему комментарию.
Мне кажется это всё решается комплексными процессами?
3. shiaju 22 05.02.20 05:23 Сейчас в теме
(1), (2) Да, это вполне возможно. Детектор просто позволяет отлавливать все согласования независимо от того, участвуют ли они в шаблоне (у меня стояла цель, если кто-то запустил согласование документа не по шаблону, по завершении согласования можно уведомить ответственного за документ).
4. paphiopedilum 20.04.22 10:28 Сейчас в теме
Создала детектор, настроила автозапуск процесса по нему.

По какой-то причине детектор исправно срабатывает каждую минуту и запускает 10 процессов по одному документу.
Прикрепленные файлы:
5. shiaju 22 20.04.22 10:55 Сейчас в теме
(4) Возможно, вы не указали свой элемент справочника в строчке ниже? Тут указан гуид конкретного элемента из моей конкретной базы, у вас в базе он другой:

Запрос.УстановитьПараметр("ВидСобытияЗавершениеСогласования", Справочники.ВидыБизнесСобытий.ПолучитьСсылку(новый УникальныйИдентификатор("4dec49cd-2226-11ea-bbd5-00265552556a"))); //Вид события, которое будет создавать детектор, нужно указать ссылку на элемент справочника, я сделал поиск по ГУИД во избежание проблем при переименовании
ivangrant; +1 Ответить
6. paphiopedilum 21.04.22 09:03 Сейчас в теме
(5) Да, именно в этом и была проблема

Спасибо вам! Работает отлично, на быстродействие не влияет.
ivangrant; shiaju; +2 Ответить
Оставьте свое сообщение