Возникла задача: при проведении документа контролировать, изменились ли его движения по какому-либо регистру. Если изменились -- исключать документ из обмена, пока бухгалтер не посмотрит изменения и не примет решение, отправлять ли документ в обмен. (Документ в "закрытом" по константе периоде)
База источник -- ERP. Собирать запрос по всем регистрам через конструктор -- слишком объемно. Сделано через две подписки на событие.
1) Подписка ПередЗаписьюДокумента. В момент перед записью получены все регистры (накопления и бухгалтерии), для которых текущий документ является регистратором, по всем измерениям и ресурсам сформирован циклом запрос, результат помещен во временную таблицу.
2) Подписка ОбработкаПроведенияДокумента. Запрос из пункта 1 выполняется при проведении документа, результат помещается во вторую временную таблицу. Ресурсы здесь все со знаком минус.
Далее две временные таблицы объединяются, группируются по измерениям, суммируются по ресурсам, и ненулевые по сумме результаты выводятся как "измененные при проведении движения".
Для регистров бухгалтерии учтены Дт и Кт, для накопления -- вид движения, везде -- период.
В моем варианте -- если изменения по регистрам есть, то документ удаляется из обмена, и информация об изменениях записывается в отдельный новый регистр сведений.
Во второй части этой задачи из базы-приемника через com выполняется подключение к ERP, считывается регистр сведений с изменениями, и формируется инфа об изменениях в виде стандартного отчета по версионированию, с возможностью их принять. Эта часть в текущей публикации не выложена.
К публикации прикреплена обработка, в ней в модуле объекта процедуры, их нужно переместить в соответствующие подписки на события:
Подписка ПередЗаписью -- формирует тексты запросов, считывает движения до проведения.
Подписка ОбработкаПроведения -- сравнивает движения до и после.
Задание для удаления документов из обмена -- его можно доработать на какой-либо другой функционал. Например, рассылка об измененных в закрытом периоде документах.
На скринах: 1 -- часть сформированного запроса; 2 -- пример записи об изменениях в регистре сведений.
Тестирование проводилось на ERP 2.4.6.154.