Каталог решений - Использование подписок на событие для корректировки движений документов «извне»

Использование подписок на событие для корректировки движений документов «извне»

Использование подписок на событие для корректировки движений документов «извне»

В наличии

Рассмотрим на практическом примере использование объекта «Подписка на событие» для корректировки движений документа.

Категория:

Описание

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

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

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

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

 Давайте рассмотрим решение более подробно:

 Создадим новую подписку на событие «ЗаписьНаправленияВПлатежки». У подписки существует ряд свойств, которые будут определять ее поведение:

 Источник – это объект (например, документ или список документов) для которого будет вызываться действия. Для нашего случая – выберем  Платежное поручение исходящее и Платежное поручение входящее

 События – само действия, после которого будет выполняться наш код. Согласно условиям задачи, выберем ОбработкаПроведения

 Обработчик – указание на процедуру, в которой будет происходить обработка. Выберем для этих целей общий модуль ОбщегоНазначения.

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

 Рассмотрим ее параметры:

 Источник – этот объект вида СправочникОбъект или ДокументОбъект, для которого происходит действие.

Отказ – параметр, позволяющий отменить проведение документа при определенных условиях.

РежимПроведения – варианты проведения (оперативное или неоперативное), позволяющее по-разному строить алгоритмы обработки.

 Остановимся на параметре Источник. Для нашей задачи тип этого параметра будет – ДокументОбъект. Для этого типа доступна коллекция Движения, которая содержит все наборы записей регистров, для которых данный документ является регистратором.

 В данной коллекции содержится набор записей РасчетыСКонтрагентамиНаборЗаписей, который нас интересует. Допустим, что в регистре создано измерение Направление, которое нам необходимо заполнять из документа.

Напишем следующий код:

Наборы = Источник.Движения;
Расчеты = Наборы.РасчетыСКонтрагентами;
Для каждого Стр из Расчеты Цикл
	Стр.Направление = Источник.Направление;
КонецЦикла;

 

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

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

Минус такого подхода: увеличение времени проведения документов и записи  элементов справочников.

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

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