Каталог решений - Механизм бизнес-событий на конкретном примере

Механизм бизнес-событий на конкретном примере

Механизм бизнес-событий на конкретном примере

В наличии

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

Категория:

Описание

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

Вроде всё просто: отлавливаем создание вида связи «В ответ на» и запускаем бизнес-процесс «Ознакомление» с нужными параметрами. Но, зайдя в справочник «Виды бизнес-событий» ничего похожего на создание связи не обнаруживаем. Нам подходит только бизнес событие «Изменение входящего документа», в котором мы уже ручками будем отслеживать создание связи и запускать бизнес процесс.

Как механизм бизнес-событий работает в 1С:Документооборот? Рассмотрим на примере «Изменения входящего документа»:

  1. В модуле объекта процедурой «При записи» проверяется новый ли это документ. Если новый, то регистрируется бизнес событие «СозданиеВходящегоДокумента», если нет, то «ИзменениеВходящегоДокумента». Событие регистрируется процедурой БизнесСобытияВызовСервера.ЗарегистрироватьСобытие, где первым параметром указывается ссылка на объект.
  2. Процедура регистрации бизнес-событий создаёт событию уникальный идентификатор и пишет все данные в регистр сведений «ПроизошедшиеБизнесСобытия». На этом обработка в контексте объекта прекращается.
  3. Дальше с действие вступает регламентное задание «Обработка произошедших бизнес-событий», по умолчанию запускаемое каждые 59 секунд. Оно запускает процедуру «ОбработкаПроизошедшихБизнесСобытий», которая выбирает из регистра сведений «ПроизошедшиеБизнесСобытия» все не обработанные события и начинает их обрабатывать.
  4. Программа проверяет кто является потребителем данного бизнес-события (автозапуск бизнес-процесса, пользовательский обработчик или рассылка уведомлений) и запускает соответствующую процедуру. Дальше по коду идёт обработка исключений и очистка регистра «ПроизошедшиеБизнесСобытия».
  5. Выполнение пользовательского обработчика осуществляется в процедуре «ОбработатьСобытиеПользовательскаяОбработкаСобытий», которая выбирает все пользовательские обработчики, связанные с данным видом бизнес-события и выполняет их код. В качестве параметра «Событие» передаётся строка регистра сведений «ПроизошедшиеБизнесСобытия».

Вот такой несложный механизм.

Получается, что нам нужно всю логику разместить в дополнительном обработчике бизнес события для вида бизнес события «Изменение входящего документа» и «Создание входящего документа» т. к. при создании входящего документа на основании исходящего предварительной записи карточки документа перед созданием связи не производится.

Итак, начнём.

 

has been added to your cart:
Оформление заказа