Advertisement
Adepht

СтруктураИзменений

Jul 16th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. Функция СтруктураИзменений(Объект) Экспорт
  2. Изменения = А1Э_Структуры.Создать(
  3. "Поля", Новый Структура,
  4. "ТабличныеЧасти", Новый Структура,
  5. );
  6. Поля = МассивПолей(Объект);
  7. Для Каждого Поле Из Поля Цикл
  8. Если Объект[Поле] = Объект.Ссылка[Поле] Тогда Продолжить; КонецЕсли;
  9. Изменения.Поля.Вставить(Поле, А1Э_Структуры.Создать(
  10. "СтароеЗначение", Объект.Ссылка[Поле],
  11. "НовоеЗначение", Объект[Поле],
  12. ));
  13. КонецЦикла;
  14. ТабличныеЧасти = МассивПолейТЧ(Объект);
  15. Для Каждого ТЧ из ТабличныеЧасти Цикл
  16. Для Каждого Строка ИЗ Объект[ТЧ.Имя] Цикл
  17. Для Каждого Поле Из ТЧ.Поля Цикл
  18. Если Строка.НомерСтроки > Объект.Ссылка[ТЧ.Имя].Количество() ИЛИ Строка[Поле] <> Объект.Ссылка[ТЧ.Имя][Строка.НомерСтроки - 1][Поле] Тогда
  19. Если НЕ Изменения.ТабличныеЧасти.Свойство(ТЧ.Имя) Тогда
  20. Изменения.ТабличныеЧасти.Вставить(ТЧ.Имя, Новый Структура);
  21. КонецЕсли;
  22. НомерСтрокиСтрокой = "Строка" + Строка.НомерСтроки;
  23. Если НЕ Изменения.ТабличныеЧасти[ТЧ.Имя].Свойство(НомерСтрокиСтрокой) Тогда
  24. Изменения.ТабличныеЧасти[ТЧ.Имя].Вставить(НомерСтрокиСтрокой, Новый Структура);
  25. КонецЕсли;
  26.  
  27. Изменения.ТабличныеЧасти[ТЧ.Имя][НомерСтрокиСтрокой].Вставить(Поле, А1Э_Структуры.Создать(
  28. "СтароеЗначение", ?(Строка.НомерСтроки <= Объект.Ссылка[ТЧ.Имя].Количество(), Объект[ТЧ.Имя][Строка.НомерСтроки - 1][Поле], Null),
  29. "НовоеЗначение", Строка[Поле]
  30. ));
  31. КонецЕсли;
  32. КонецЦикла;
  33. КонецЦикла;
  34. КонецЦикла;
  35. Возврат Изменения;
  36. КонецФункции
  37.  
  38. Функция МассивПолей(Объект) Экспорт
  39. МетаданныеОбъекта = Объект.Метаданные();
  40. ТипМетаданных = А1Э_Метаданные.ТипМетаданных(МетаданныеОбъекта);
  41. МассивПолей = Новый Массив;
  42. МассивПолей.Добавить("ПометкаУдаления");
  43. Если ТипМетаданных = "Справочник" Тогда
  44. Если МетаданныеОбъекта.ДлинаКода > 0 Тогда
  45. МассивПолей.Добавить("Код");
  46. КонецЕсли;
  47. Если МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
  48. МассивПолей.Добавить("Наименование");
  49. КонецЕсли;
  50. ИначеЕсли ТипМетаданных = "Документ" Тогда
  51. МассивПолей.Добавить("Дата");
  52. Если МетаданныеОбъекта.ДлинаНомера > 0 Тогда
  53. МассивПолей.Добавить("Номер");
  54. КонецЕсли;
  55. КонецЕсли;
  56. Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл
  57. МассивПолей.Добавить(Реквизит.Имя);
  58. КонецЦикла;
  59. //ТУДУ: Добавить общие реквизиты.
  60. Возврат МассивПолей;
  61. КонецФункции
  62.  
  63. Функция МассивПолейТЧ(Объект) Экспорт
  64. МассивТабличныхЧастей = Новый Массив;
  65. ТабличныеЧасти = Объект.Метаданные().ТабличныеЧасти;
  66. Для Каждого ТЧ из ТабличныеЧасти Цикл
  67. ПоляТЧ = Новый Структура("Имя, Поля", ТЧ.Имя, Новый Массив);
  68. МассивТабличныхЧастей.Добавить(ПоляТЧ);
  69. Для Каждого Поле из ТЧ.Реквизиты Цикл
  70. ПоляТЧ.Поля.Добавить(Поле.Имя);
  71. КонецЦикла;
  72. КонецЦикла;
  73. Возврат МассивТабличныхЧастей;
  74. КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement