Журналирование изменений свойств объектов


Доработка подойдет для любой конфигурации, где дополнительные свойства объектов хранятся в регистре сведений ЗначенияСвойствОбъектов
 

 Обновлено 2024-09-14

Зачем это нужно

  Штатный механизм платформы(журнал регистрации) не фиксирует какая именно запись регистра сведений была сделана в базу данных. Механизм версионирования объектов позволяет версионировать изменений в объектах ссылочного типа(и то не во всех: только Справочники и Документы).

рис. 1. Запись фиксирующая изменения в регистре сведений, созданная платформой

  Если в вашей базе активно используют свойства и категории объектов и периодически возникают вопросы "кто изменил?" — стоит задуматься как такую информацию фиксировать

Код подписки ПриЗаписи

// Крынецкий 14.01.13
// Журналирование изменения свойств и категорий
Процедура у_ПриЗаписиСвойствКатегорийПриЗаписи(Источник, Отказ, Замещение) Экспорт

мМетаданные  = Источник.Метаданные();
мДанные    = Источник.Отбор.Объект.Значение;
мКомментарий  = "";

НаборЗаписей = Источник;

Если ТипЗнч(Источник)=Тип("РегистрСведенийНаборЗаписей.ЗначенияСвойствОбъектов") Тогда
Событие    = "Запись свойств";

Если НаборЗаписей.Количество()>0 Тогда
Для Каждого Запись Из НаборЗаписей Цикл
мКомментарий = мКомментарий + ?(мКомментарий = "", "", Символы.ПС) + Запись.Свойство + Символы.Таб + Запись.Значение;
КонецЦикла;
Иначе
Событие = "Удаление свойств";
мКомментарий = НаборЗаписей.Отбор;

Если НаборЗаписей.Отбор.Найти("Объект") <> Неопределено Тогда
мДанные = НаборЗаписей.Отбор["Объект"].Значение;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(Источник)=Тип("РегистрСведенийНаборЗаписей.КатегорииОбъектов") Тогда
Событие = "Запись категорий";

НаборЗаписей = Источник;
Если НаборЗаписей.Количество()>0 Тогда
Для Каждого Запись Из НаборЗаписей Цикл
мКомментарий = мКомментарий + ?(мКомментарий = "", "", Символы.ПС) + Запись.Категория;
КонецЦикла;
КонецЕсли;
Иначе
Событие = "Неопознанное событие";
КонецЕсли;

ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Информация, мМетаданные, мДанные, мКомментарий);

КонецПроцедуры

Как объединить конфигурации

  1. Создаем общий модуль или используем уже существующий. У модуля должны стоять свойства: Сервер, Внешнее соединение, Клиент(обычное приложение)
  2. Объединяем конфигурации, берем только подписку на событие у_ПриЗаписиСвойствКатегорий
  3. После объединения у подписки на событие у_ПриЗаписиСвойствКатегорий указываем, что обработчик должен располагаться в указанном модуле
  4. Из конфигурации берем текст процедуры у_ПриЗаписиСвойствКатегорийПриЗаписи()

Что в итоге

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

рис.2. Запись сделанная подпиской на событие

Тестировалось в 1С:УПП 1.3.111 на платформах 8.3.12, 8.2.19.130

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *