Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Функция СтруктураИзменений(Объект) Экспорт
- Изменения = А1Э_Структуры.Создать(
- "Поля", Новый Структура,
- "ТабличныеЧасти", Новый Структура,
- );
- Поля = МассивПолей(Объект);
- Для Каждого Поле Из Поля Цикл
- Если Объект[Поле] = Объект.Ссылка[Поле] Тогда Продолжить; КонецЕсли;
- Изменения.Поля.Вставить(Поле, А1Э_Структуры.Создать(
- "СтароеЗначение", Объект.Ссылка[Поле],
- "НовоеЗначение", Объект[Поле],
- ));
- КонецЦикла;
- ТабличныеЧасти = МассивПолейТЧ(Объект);
- Для Каждого ТЧ из ТабличныеЧасти Цикл
- Для Каждого Строка ИЗ Объект[ТЧ.Имя] Цикл
- Для Каждого Поле Из ТЧ.Поля Цикл
- Если Строка.НомерСтроки > Объект.Ссылка[ТЧ.Имя].Количество() ИЛИ Строка[Поле] <> Объект.Ссылка[ТЧ.Имя][Строка.НомерСтроки - 1][Поле] Тогда
- Если НЕ Изменения.ТабличныеЧасти.Свойство(ТЧ.Имя) Тогда
- Изменения.ТабличныеЧасти.Вставить(ТЧ.Имя, Новый Структура);
- КонецЕсли;
- НомерСтрокиСтрокой = "Строка" + Строка.НомерСтроки;
- Если НЕ Изменения.ТабличныеЧасти[ТЧ.Имя].Свойство(НомерСтрокиСтрокой) Тогда
- Изменения.ТабличныеЧасти[ТЧ.Имя].Вставить(НомерСтрокиСтрокой, Новый Структура);
- КонецЕсли;
- Изменения.ТабличныеЧасти[ТЧ.Имя][НомерСтрокиСтрокой].Вставить(Поле, А1Э_Структуры.Создать(
- "СтароеЗначение", ?(Строка.НомерСтроки <= Объект.Ссылка[ТЧ.Имя].Количество(), Объект[ТЧ.Имя][Строка.НомерСтроки - 1][Поле], Null),
- "НовоеЗначение", Строка[Поле]
- ));
- КонецЕсли;
- КонецЦикла;
- КонецЦикла;
- КонецЦикла;
- Возврат Изменения;
- КонецФункции
- Функция МассивПолей(Объект) Экспорт
- МетаданныеОбъекта = Объект.Метаданные();
- ТипМетаданных = А1Э_Метаданные.ТипМетаданных(МетаданныеОбъекта);
- МассивПолей = Новый Массив;
- МассивПолей.Добавить("ПометкаУдаления");
- Если ТипМетаданных = "Справочник" Тогда
- Если МетаданныеОбъекта.ДлинаКода > 0 Тогда
- МассивПолей.Добавить("Код");
- КонецЕсли;
- Если МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
- МассивПолей.Добавить("Наименование");
- КонецЕсли;
- ИначеЕсли ТипМетаданных = "Документ" Тогда
- МассивПолей.Добавить("Дата");
- Если МетаданныеОбъекта.ДлинаНомера > 0 Тогда
- МассивПолей.Добавить("Номер");
- КонецЕсли;
- КонецЕсли;
- Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл
- МассивПолей.Добавить(Реквизит.Имя);
- КонецЦикла;
- //ТУДУ: Добавить общие реквизиты.
- Возврат МассивПолей;
- КонецФункции
- Функция МассивПолейТЧ(Объект) Экспорт
- МассивТабличныхЧастей = Новый Массив;
- ТабличныеЧасти = Объект.Метаданные().ТабличныеЧасти;
- Для Каждого ТЧ из ТабличныеЧасти Цикл
- ПоляТЧ = Новый Структура("Имя, Поля", ТЧ.Имя, Новый Массив);
- МассивТабличныхЧастей.Добавить(ПоляТЧ);
- Для Каждого Поле из ТЧ.Реквизиты Цикл
- ПоляТЧ.Поля.Добавить(Поле.Имя);
- КонецЦикла;
- КонецЦикла;
- Возврат МассивТабличныхЧастей;
- КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement