Доброго дня, форумчане!
Появилась необходимость отслеживать историю изменения реквизитов документа. С шапкой документа проблем не возникло, а вот т табличными частями есть.
В качестве исходных данных сравниваю ТЧ Объекта и ТЧ Ссылки (новые и не сохраненные объекты контролировать ненужно). При сравнении построчно через метаданные определяю расхождение в строке и пишу в регистр сведений. Пример:
Для Каждого стрСсылка Из табСсылка Цикл
стрОбъект = табОбъект[стрСсылка - 1];
Для Каждого Реквизит Из докОбъект.Метаданные().Реквизиты Цикл
Если Не Объект[Реквизит.Имя] = докСсылка[Реквизит.Имя] Тогда
новСтрока = табДвижение.Добавить();
новСтрока.Период = ТекущаяДата();
новСтрока.СсылкаНаОбъект = Объект.Ссылка;
новСтрока.ИмяТабличнойЧасти = ТЧ.Имя;
новСтрока.НомерСтрокиТЧ = стрСсылка.НомерСтроки;
новСтрока.РеквизитИзменения = Реквизит.Синоним;
новСтрока.ЗначениеДоИзменения = стрСсылка[Реквизит.Имя];
новСтрока.ТипИзменения = Перечисления.БКД_ТипыИзмененийПродаж.Изменение;
новСтрока.ЗначениеПослеИзменения = стрОбъект[Реквизит.Имя];
новСтрока.Пользователь = ПараметрыСеанса.ТекущийПользователь;
Продолжить;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Где: табСсылка – ТЧ из ссылки на объект
табОбъект – ТЧ из объекта
Но как проконтролировать ситуации, когда добавлялись или удалялись строки ума не приложу.
ГЛАВНОЕ: В документы нельзя добавлять новые реквизиты!
(3) Вероятно, чтобы можно было целиком восстановить прошлую версию, а не собирать её по кускам из всех изменений. Да и быстрее оно так. Настроить только нужно, чтобы не версировалось все-все. В идеале, проработать механизм очистки от лишних/ненужных версий.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.