Пытаюсь определить что поменялось в записи РС, но чет ни чего не выходит.
Процедура ПередЗаписью(Отказ, Замещение) //модуль набора записей
ИсходныйНабор = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
Для каждого ЭлОтбора Из Отбор Цикл
ЗаполнитьЗначенияСвойств(ИсходныйНабор.Отбор.Найти(ЭлОтбора.Имя),ЭлОтбора);
КонецЦикла;
ИсходныйНабор.Прочитать();
ДополнительныеСвойства.Вставить("ИсходныйНабор",ИсходныйНабор);
КонецПроцедуры
Событие вызывается 2 раза:
1. Очистка набора (Замещение = Истина)
Чтение регистра дает исходные данные (ИсходныйНабор)
Записываемый набор пустой.
2. Запись нового набора (Замещение = Ложь)
Записываемый набор - это измененные данные
Чтение регистра - дает пустой набор
Дополнительные свойства очищаются при втором вызове.
Можно конечно загнать данные исходного набора в структуру и положить в глобальную переменную, но интуиция подсказывает, что это не есть хорошо.
Подскажите как правильно отследить изменения независимого регистра сведений. В частности интересует старое значение измерения и новое.
Решил:) Но теперь записи просто так не удалить. Только интерактивно, передав ключ в ДопСвойства набора.
Если у кого есть напильник, буду благодарен!:)
Процедура ЗаполнитьНабор(Приемник, Источник)
Для каждого текЗапись Из Источник Цикл
ЗаполнитьЗначенияСвойств(Приемник.Добавить(),текЗапись);
КонецЦикла;
КонецПроцедуры
Процедура СообщитьОбИзменениях(Было, Стало)
Для каждого киз Из Новый Структура("рес,рек",Метаданные().Ресурсы,Метаданные().Реквизиты) Цикл
Для каждого ирр Из киз.Значение Цикл
Если Было[ирр.Имя]<>Стало[ирр.Имя] Тогда
Сообщить(ирр.Имя + ": было " + Было[ирр.Имя] + " Стало " + Стало[ирр.Имя]);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ПередЗаписью(Отказ, Замещение)
Если не ДополнительныеСвойства.Свойство("йетоКлючьKотoрыйНиктoHеДолженЗнаtь") Тогда
Если Замещение Тогда
ЭтотОбъект.Прочитать();
Иначе
новыйНабор = РегистрыСведений[Метаданные().Имя].СоздатьНаборЗаписей();
ЗаполнитьНабор(новыйНабор,ЭтотОбъект);
ЭтотОбъект.Прочитать();
СообщитьОбИзменениях(ЭтотОбъект[0],новыйНабор[0]);
ЭтотОбъект.Очистить();
ЭтотОбъект.ДополнительныеСвойства.Вставить("йетоКлючьKотoрыйНиктoHеДолженЗнаtь");
ЭтотОбъект.Записать(Истина);
ЗаполнитьНабор(ЭтотОбъект,новыйНабор);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При первом вызове события очистка не происходит, а при втором вызове сначала читаю новые данные, потом старые. Очищаю старые и записываю новые.
И что разработчики платформы не могут сделать что то подобное, но более культурно?
Или хотя бы определили бы событие-родитель, для двух событий записи регистра.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший