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