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

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

Механизм бизнес-событий в 1С:Документообороте — это мощный инструмент для автоматизации реакций системы на различные изменения. В отличие от простых подписок на события, этот механизм позволяет выстраивать гибкие цепочки действий, запускать процессы по расписанию и реагировать на сложные условия. В этой статье мы подробно разберем, как устроены детекторы бизнес-событий, как их программировать и настраивать. Если требуется роботизация действий пользователя в закрытых системах без API, можно использовать платформу для создания программных роботов One RPA.

Понятие бизнес-события и роль детекторов

Для начала проанализируем общую схему. В системе существуют стандартные события (например, регистрация документа или создание задачи), которые генерируются автоматически. Однако часто возникают ситуации, когда событие должно произойти при выполнении специфического условия: например, когда срок договора истекает через 3 дня или когда в определенной папке на диске появляется файл.

Для таких случаев используются Детекторы. Это программные алгоритмы, которые «опрашивают» информационную базу и, при обнаружении заданного условия, регистрируют новое событие в справочнике ПроизошедшиеБизнесСобытия.

Разберем основные этапы работы этого механизма:

  1. Регламентное задание Детектор бизнес-событий запускается по расписанию (обычно раз в минуту).
  2. Оно выполняет код, прописанный в настройках детектора.
  3. Если код возвращает Результат = Истина, в системе фиксируется запись о событии.
  4. Другое регламентное задание — Обработка произошедших бизнес-событий — считывает эти записи и выполняет ответные действия (запуск процессов, отправку уведомлений и т.д.). В качестве ответного действия для регулярной синхронизации данных можно применить программу МС:Автообмен для настройки обмена данными по расписанию.

Создание пользовательского бизнес-события по шагам

Рассмотрим последовательность действий для реализации собственной логики мониторинга данных:

  1. Перейдем в справочник Виды бизнес-событий и создадим новый элемент. Укажем понятное наименование, например, «Приближение срока выкупа лизинга».
  2. Настроим Правила автоматического запуска процессов. Здесь мы связываем созданный вид события с конкретным шаблоном процесса. Это позволит системе автоматически стартовать задачу исполнителю, как только детектор «поймает» событие.
  3. Создадим сам Детектор. Именно здесь нам потребуется написать код на встроенном языке 1С.

Программная реализация детектора

Проанализируем переменные, которые доступны нам внутри кода детектора. Система предоставляет контекст выполнения, в котором мы можем оперировать следующими параметрами:

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


// Определяем вид события, который будем регистрировать
ВидСобытия = Справочники.ВидыБизнесСобытий.НайтиПоНаименованию("Срок выкупа объекта лизинга", Истина);

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

Запрос.УстановитьПараметр("ИмяРеквизита", "ДатаВыкупаОбъектаЛизинга");
Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДата()));
Запрос.УстановитьПараметр("ВидСобытия", ВидСобытия);

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

Пока Выборка.Следующий() Цикл
    // Программная регистрация события для каждого найденного объекта
    БизнесСобытияВызовСервера.ЗарегистрироватьСобытие(Выборка.Ссылка, ВидСобытия);
КонецЦикла;

// В данном случае мы регистрируем события вручную через вызов метода,
// поэтому основной Результат детектора можно оставить Ложь.
Результат = Ложь;

Нюансы обработки произошедших событий

После того как событие попало в справочник ПроизошедшиеБизнесСобытия, оно ожидает своей очереди на обработку. Посмотрим, как можно расширить стандартное поведение системы с помощью Дополнительных обработчиков. Для автоматизации подобных рутинных операций отлично подойдёт готовый обработчик для автоматического преобразования файлов DOC/DOCX в PDF.

В коде обработчика нам доступен объект Событие, через который мы можем обратиться к любым его свойствам: Событие.Источник, Событие.Автор, Событие.Дата, Событие.КонтекстСобытия.

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


// Пример кода в дополнительном обработчике
ОбщийМодульНаСервере.ОбработатьМоеСобытие(Событие.Источник, Событие.Автор);

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

Особенности реализации в разных версиях 1С:ДО

Рассмотрим, как менялся подход к бизнес-событиям в зависимости от версии программы:

Решение проблемы запрета действий (пример с перенаправлением задач)

Иногда пользователи пытаются использовать бизнес-события для запрета каких-либо действий, например, запрета перенаправления просроченных задач. Проанализируем эту ситуацию: бизнес-событие работает постфактум. То есть событие регистрируется уже после того, как запись в базе была изменена.

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

Таким образом, мы выяснили, что детекторы бизнес-событий — это гибкий «движок» для создания собственных триггеров в системе 1С:Документооборот. Правильное использование сочетания программного кода в детекторах и настроек в правилах автозапуска позволяет автоматизировать практически любой бизнес-процесс предприятия.

← На главную