Периодически от пользователей появлялись вопросы типа: "как найти, кто поставил галочку в документе"? Версионирование объектов включено, есть журнал регистрации, да вот незадача - галочка эта находится не в реквизитах документа, а в Дополнительных свойствах, привязанных к этому документу. В журнале регистрации запись такая, конечно же фиксируется, но информации по ней - практически ноль, только то, что Метаданные = РегистрСведений.ДополнительныеСведения, а хотелось бы видеть сам объект, свойство и новое значение. Причем по объекту желательно сделать возможность поиска (=отбора).
Процедура ПриЗаписиДополнительныхСведенийПередЗаписью(Источник, Отказ, Замещение) Экспорт
Объект = Источник.Отбор.Объект.Значение;
НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Объект);
НаборЗаписей.Прочитать();
СтарыеЗначения = НаборЗаписей.Выгрузить();
МассивОбработанныхСвойств = Новый Массив;
Для каждого Запись Из Источник Цикл
СделатьЗапись = Ложь;
НайденнаяСтрока = СтарыеЗначения.Найти(Запись.Свойство, "Свойство");
Если НайденнаяСтрока = Неопределено Тогда
СделатьЗапись = Истина;
Иначе
Если НайденнаяСтрока.Значение <> Запись.Значение Тогда
СделатьЗапись = Истина;
КонецЕсли;
КонецЕсли;
Если СделатьЗапись Тогда
СделатьЗаписьЖурналаРегистрацииОбИзмененииДопСведения(Объект, Запись.Свойство, Запись.Значение);
КонецЕсли;
МассивОбработанныхСвойств.Добавить(Запись.Свойство);
КонецЦикла;
// отдельно обработаем те свойства, значения которых выставлено в Ложь (они не попадают в Источник)
Для каждого ТекСтрока Из СтарыеЗначения Цикл
Если МассивОбработанныхСвойств.Найти(ТекСтрока.Свойство) = Неопределено Тогда
СделатьЗаписьЖурналаРегистрацииОбИзмененииДопСведения(Объект, ТекСтрока.Свойство, Ложь);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура СделатьЗаписьЖурналаРегистрацииОбИзмененииДопСведения(Объект, Свойство, Значение)
ЗаписьЖурналаРегистрации("Данные.Изменение",
УровеньЖурналаРегистрации.Информация,
Метаданные.РегистрыСведений.ДополнительныеСведения,
Объект,
"У свойства: """ + Свойство + """ установлено новое значение: """ + Значение + """");
КонецПроцедуры