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