Как запустить автоматический старт процесса по документу при наступлении определенных условий?

База знаний

Общие вопросы по работе с 1С:ДО

Как запустить автоматический старт процесса по документу при наступлении определенных условий?


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


Для классификации таких событий есть специальный справочник «Виды бизнес событий» (сами же события система записывает в регистр сведений «Произошедшие бизнес-события»). Также важными частями механизма бизнес-событий являются детекторы бизнес-событий и обработчики бизнес-событий, но о них ниже.

Рассмотрим пример – нужно автоматически отправлять в обработку все зарегистрированные служебные записки, файлы которых сотрудники подписали электронной подписью. Тогда условием будет – документ зарегистрирован, файл документа подписан электронной подписью, и по данному документу нет комплексного процесса «Обработка записки».

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


Теперь нужно добавить "Детектор бизнес-события". Детектор бизнес-события - это как раз та часть механизма, которая отслеживает выполнение условия и создает соответствующее событие в системе.

Добавим новый детектор в справочнике «Детекторы бизнес-событий». В его карточке укажем вид бизнес-события, который создали ранее. В поле «Выражение на встроенном языке» необходимо написать код, который проверяет, есть ли хотя бы один объект, для которого условие истинно. Если есть, то переменной «Результат» нужно присвоить значение Истина. В этом случае система создаст бизнес-событие с указанным видом.


ВАЖНО: Если не установлен флаг «Детектор включен», код детектора исполняться не будет!

В нашем случае нужен запрос, который проверяет, что есть документы с выполненным условием (к документу приложен файл, подписанный электронной подписью и по этому документу нет процессов обработки). Если такие документы есть — значит наше событие произошло. Таким образом событие будет сгенерировано, когда в системе есть один или несколько документов, для которых все условия выполнились, и по ним нужно стартовать процесс.

Код детектора:

 Результат = Ложь;

ВидыДокументов = Новый Массив;

ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Служебная записка", Истина));

Запрос = Новый Запрос;

Запрос.Текст =

                "ВЫБРАТЬ ПЕРВЫЕ 1

                |               ИСТИНА

                |ИЗ

                |               Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы

                |                               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы

                |                               ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла

|                               ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы

                |                               ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет

                |ГДЕ

                |               КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL

                |               И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)

                |               И НЕ ВнутренниеДокументы.ПометкаУдаления

                |               И Файлы.ПодписанЭП = ИСТИНА

                |               И НЕ Файлы.ПометкаУдаления";

Запрос.УстановитьПараметр("ВидыДокументов", ВидыДокументов);

РезультатЗапроса = Запрос.Выполнить();           

Если Не РезультатЗапроса.Пустой() Тогда

                Результат = Истина;

КонецЕсли;




Выполнение детекторов и формирование событий выполняет регламентное задание «Обработка детекторов бизнес-событий». Это задание исполняется один раз в минуту и выполняет все детекторы событий с флагом Включен.



Далее необходимо выполнить обработку сформированных бизнес-событий. В нашем случае это запуск процессов по документам. Для обработки бизнес-события в программе используется справочник "Дополнительные обработчики-бизнес событий".

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




Код обработчика:

 ВидыДокументов = Новый Массив;

ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Служебная записка", Истина));

Запрос = Новый Запрос;

Запрос.Текст =

                "ВЫБРАТЬ

                |               ВнутренниеДокументы.Ссылка

                |ИЗ

                |               Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы

                |                               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы

                |                               ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла

                |                               ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы

                |                               ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет

                |ГДЕ

                |               КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL

                |               И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)

                |               И НЕ ВнутренниеДокументы.ПометкаУдаления

                |               И Файлы.ПодписанЭП = ИСТИНА

                |               И НЕ Файлы.ПометкаУдаления";

Запрос.УстановитьПараметр("ВидыДокументов", ВидыДокументов);

РезультатЗапроса = Запрос.Выполнить();           

Если Не РезультатЗапроса.Пустой() Тогда

Выборка = РезультатЗапроса.Выбрать();

                ШаблонПроцесса = Справочники.ШаблоныКомплексныхБизнесПроцессов.НайтиПоНаименованию("Обработка записок", Истина);

    Пока Выборка.Следующий() Цикл

                               Документ = Выборка.Ссылка;

                               БизнесПроцессОбъект = БизнесПроцессы.КомплексныйПроцесс.СоздатьБизнесПроцесс();

                               БизнесПроцессОбъект.ЗаполнитьПоШаблонуИПредмету(ШаблонПроцесса, Документ, Документ.Подготовил);

                               БизнесПроцессОбъект.Записать();

                               Если ПолучитьФункциональнуюОпцию("ИспользоватьФоновыйСтартПроцессов") Тогда

                РегистрыСведений.ПроцессыДляЗапуска.ДобавитьПроцессДляФоновогоСтарта(БизнесПроцессОбъект.Ссылка);

                               Иначе

                                               БизнесПроцессОбъект.Старт();

                               КонецЕсли;

                КонецЦикла;

КонецЕсли;




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



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

Отлаживать же механизм можно частями - проконтролировать появление новых событий можно, открыв регистр сведений «Произошедшие бизнес события» (все события механизм запишет сюда), срабатывание обработчика можно увидеть тут-же по появлению флага «Обработано», а саму правильность кода обработчика — по появлению запланированного результата (в нашем примерe - создан процесс по документу).


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

                                         ДЕМОВЕРСИЯ ОНЛАЙН
14.02.2018