В системе 1С: Документооборот существует понятие бизнес-событий (событий произошедших в программе). Для того чтобы можно было использовать этот механизм, необходимо его включить в настройках программы:
Для классификации таких событий есть специальный справочник «Виды бизнес событий» (сами же события система записывает в регистр сведений «Произошедшие бизнес-события»). Также важными частями механизма бизнес-событий являются детекторы бизнес-событий и обработчики бизнес-событий, но о них ниже.
Рассмотрим пример – нужно автоматически отправлять в обработку все зарегистрированные служебные записки, файлы которых сотрудники подписали электронной подписью. Тогда условием будет – документ зарегистрирован, файл документа подписан электронной подписью, и по данному документу нет комплексного процесса «Обработка записки».
Создадим вид для бизнес-события, которое будет формироваться при наступлении данного условия.
Теперь нужно добавить "Детектор бизнес-события". Детектор бизнес-события - это как раз та часть механизма, которая отслеживает выполнение условия и создает соответствующее событие в системе.
Добавим новый детектор в справочнике «Детекторы бизнес-событий». В его карточке укажем вид бизнес-события, который создали ранее. В поле «Выражение на встроенном языке» необходимо написать код, который проверяет, есть ли хотя бы один объект, для которого условие истинно. Если есть, то переменной «Результат» нужно присвоить значение Истина. В этом случае система создаст бизнес-событие с указанным видом.
ВАЖНО: Если не установлен флаг «Детектор включен», код детектора исполняться не будет!
В нашем случае нужен запрос, который проверяет, что есть документы с выполненным условием (к документу приложен файл, подписанный электронной подписью и по этому документу нет процессов обработки). Если такие документы есть — значит наше событие произошло. Таким образом событие будет сгенерировано, когда в системе есть один или несколько документов, для которых все условия выполнились, и по ним нужно стартовать процесс.
Код детектора:
Результат = Ложь;
ВидыДокументов = Новый Массив; ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Служебная записка", Истина)); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА |ИЗ | Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы | ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла | ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы | ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет |ГДЕ | КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL | И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов) | И НЕ ВнутренниеДокументы.ПометкаУдаления | И Файлы.ПодписанЭП = ИСТИНА | И НЕ Файлы.ПометкаУдаления"; Запрос.УстановитьПараметр("ВидыДокументов", ВидыДокументов); РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Результат = Истина; КонецЕсли; |
Выполнение детекторов и формирование событий выполняет регламентное задание «Обработка детекторов бизнес-событий». Это задание исполняется один раз в минуту и выполняет все детекторы событий с флагом Включен.
Далее необходимо выполнить обработку сформированных бизнес-событий. В нашем случае это запуск процессов по документам. Для обработки бизнес-события в программе используется справочник "Дополнительные обработчики-бизнес событий".
В нем также необходимо написать код на встроенном языке, который будет выполнять необходимые действия. В нашем случае фрагмент кода должен находить конкретные документы, для которых выполнились условия, и создавать для них процессы.
Код обработчика:
ВидыДокументов = Новый Массив;
ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Служебная записка", Истина)); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВнутренниеДокументы.Ссылка |ИЗ | Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы | ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла | ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы | ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет |ГДЕ | КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL | И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов) | И НЕ ВнутренниеДокументы.ПометкаУдаления | И Файлы.ПодписанЭП = ИСТИНА | И НЕ Файлы.ПометкаУдаления"; Запрос.УстановитьПараметр("ВидыДокументов", ВидыДокументов); РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); ШаблонПроцесса = Справочники.ШаблоныКомплексныхБизнесПроцессов.НайтиПоНаименованию("Обработка записок", Истина); Пока Выборка.Следующий() Цикл Документ = Выборка.Ссылка; БизнесПроцессОбъект = БизнесПроцессы.КомплексныйПроцесс.СоздатьБизнесПроцесс(); БизнесПроцессОбъект.ЗаполнитьПоШаблонуИПредмету(ШаблонПроцесса, Документ, Документ.Подготовил); БизнесПроцессОбъект.Записать(); Если ПолучитьФункциональнуюОпцию("ИспользоватьФоновыйСтартПроцессов") Тогда РегистрыСведений.ПроцессыДляЗапуска.ДобавитьПроцессДляФоновогоСтарта(БизнесПроцессОбъект.Ссылка); Иначе БизнесПроцессОбъект.Старт(); КонецЕсли; КонецЦикла; КонецЕсли; |
Обработчик бизнес-события и бизнес-событие необходимо связать между собой при помощи команды Подписки в панели навигации обработчика. В открывшемся списке нужно нажать Создать и указать ссылку на созданный ранее вид бизнес-события.
После этого необходимо проверить работу детектора и обработчика, если код написан без ошибок - новые события будут появляться и обрабатываться встроенным механизмом.
Отлаживать же механизм можно частями - проконтролировать появление новых событий можно, открыв регистр сведений «Произошедшие бизнес события» (все события механизм запишет сюда), срабатывание обработчика можно увидеть тут-же по появлению флага «Обработано», а саму правильность кода обработчика — по появлению запланированного результата (в нашем примерe - создан процесс по документу).
Для тестирования программы 1С:Документооборот вам достаточно заполнить форму, нажав на кнопку ниже.
ДЕМОВЕРСИЯ ОНЛАЙН