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