Перем Колонки;
Перем ПолноеИмяТаблицыБД;
Перем СравнениеТаблиц Экспорт;
Перем ИмяСвойстваНомерСтороны;

Процедура ПриОткрытии()
	
	Если КлючУникальности = "Автотест" Тогда
		Возврат;
	КонецЕсли;
	ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма);
	ЭтаФорма.СравнениеТаблиц = ирОбщий.СоздатьОбъектПоИмениМетаданныхЛкс("Обработка.ирСравнениеТаблиц");
	ирКлиент.УстановитьПрикреплениеФормыВУправляемомПриложенииЛкс(Этаформа);
	
КонецПроцедуры

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

КонецФункции

Функция НайтиУдалитьКолонкуПоРоли(Знач ИмяРолиКолонки, Знач НомерСтороны)
	
	Успех = Ложь;
	ИмяКолонки = ИмяРолиКолонки + НомерСтороны;
	КолонкаТП = ЭлементыФормы.СвойстваОбъектов.Колонки.Найти(ИмяКолонки);
	Если КолонкаТП <> Неопределено Тогда
		ЭлементыФормы.СвойстваОбъектов.Колонки.Удалить(КолонкаТП);
		Успех = Истина;
	КонецЕсли;
	КолонкаТЗ = СвойстваОбъектов.Колонки.Найти(ИмяКолонки);
	Если КолонкаТЗ <> Неопределено Тогда
		СвойстваОбъектов.Колонки.Удалить(КолонкаТЗ);
		Успех = Истина;
	КонецЕсли;
	Возврат Успех;

КонецФункции

Процедура СвойстваОбъектовПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт

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

Процедура ПриПовторномОткрытии(СтандартнаяОбработка = Неопределено)
	
	Если ПараметрОбъекты.Количество() > 0 Тогда
		ЗагрузитьДанные();
	КонецЕсли;

КонецПроцедуры

Функция ЗагрузитьДанные()
	
	ТаблицаОбъектов.Очистить();
	Для Каждого ЭлементСписка Из ПараметрОбъекты Цикл
		ДобавитьОбъектСравнения(ЭлементСписка.Значение, ЭлементСписка.Представление);
	КонецЦикла;
	Успех = Истина;
	Если ТаблицаОбъектов.Количество() > 0 Тогда
		ЭлементыФормы.ДействияФормы.Кнопки.СравнитьКакКоллекции.Доступность = ирОбщий.ЛиКоллекцияЛкс(ТаблицаОбъектов[0].Объект);
		Если Не ОбновитьСоставСвойств() Тогда 
			Успех = Ложь;
			Если ирОбщий.ЛиКоллекцияЛкс(ТаблицаОбъектов[0].Объект) Тогда 
				ДействияФормыСравнитьКакКоллекции();
			Иначе
				ирКлиент.СравнитьЗначенияВФормеЧерезXMLЛкс(ТаблицаОбъектов[0].Объект, ТаблицаОбъектов[1].Объект);
			КонецЕсли; 
		КонецЕсли;
	КонецЕсли;
	ПараметрОбъекты.Очистить();
	Возврат Успех;

КонецФункции

Функция ДобавитьОбъектСравнения(ОбъектСравнения, ПредставлениеОбъекта = "")
	
	СтрокаОбъекта = ТаблицаОбъектов.Добавить();
	Если ПараметрТекущийОбъект = ОбъектСравнения Тогда
		ЭлементыФормы.ТаблицаОбъектов.ТекущаяСтрока = СтрокаОбъекта;
		ЭтаФорма.ПараметрТекущийОбъект = Неопределено; 
	КонецЕсли;
	Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ОбъектСравнения) Тогда
		ПредставлениеОбъекта = "" + ОбъектСравнения;
		ОбъектСравнения = ирОбщий.ОбъектБДПоКлючуЛкс(, ОбъектСравнения).Методы;
	КонецЕсли;
	СтрокаОбъекта.Объект = ОбъектСравнения;
	Если ЗначениеЗаполнено(ПредставлениеОбъекта) Тогда
		СтрокаОбъекта.ПредставлениеОбъекта = ПредставлениеОбъекта;
	Иначе
		СтрокаОбъекта.ПредставлениеОбъекта = ирОбщий.РасширенноеПредставлениеЛкс(ОбъектСравнения,, Истина);
	КонецЕсли;
	СтрокаОбъекта.ТипОбъекта = ТипЗнч(ОбъектСравнения); 
	Возврат СтрокаОбъекта;

КонецФункции

Процедура СвойстваОбъектовВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	СтрокаНомераСтороны = СвойстваОбъектов.Найти(ИмяСвойстваНомерСтороны, "Имя");
	НомерСтороны = СтрокаНомераСтороны[Колонка.Имя];
	Если ТипЗнч(НомерСтороны) = Тип("Число") Тогда
		ирКлиент.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка, ВыбраннаяСтрока["Значение" + НомерСтороны],,,, ВыбраннаяСтрока.Представление + " " + НомерСтороны);
	ИначеЕсли Истина
		И ВыбраннаяСтрока.ТипРазличия = "Изменено" 
		//И Колонка = ЭлементыФормы.СвойстваОбъектов.Колонки.ТипРазличия 
	Тогда  
		Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ВыбраннаяСтрока["Значение1"]) Тогда
			НовыеОбъекты = Новый СписокЗначений;
			НовыеОбъекты.ЗагрузитьЗначения(ТаблицаОбъектов.ВыгрузитьКолонку("Значение"));
			ирКлиент.СравнитьОбъектыВФормеЛкс(НовыеОбъекты,,,, Новый УникальныйИдентификатор,, ЭтаФорма);
		Иначе
			ПараОбъектов = ЭлементыФормы.ТаблицаОбъектов.ВыделенныеСтроки;
			Если ПараОбъектов.Количество() < 2 Тогда
				ПараОбъектов = ТаблицаОбъектов;
			КонецЕсли;
			ирКлиент.Сравнить2ЗначенияВФормеЛкс(ВыбраннаяСтрока["Значение" + ПараОбъектов[0].НомерСтороны], ВыбраннаяСтрока["Значение" + + ПараОбъектов[1].НомерСтороны],,,,,, Новый УникальныйИдентификатор);
		КонецЕсли;
	Иначе
		//ирКлиент.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка,, Ложь);
	КонецЕсли; 
	
КонецПроцедуры

Процедура КлсКомандаНажатие(Кнопка) Экспорт 
	
	ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка);
	
КонецПроцедуры

Процедура СвойстваОбъектовПриИзмененииФлажка(Элемент, Колонка)
	
	ирКлиент.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка);
	
КонецПроцедуры

Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт
	
	ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные);

КонецПроцедуры

Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт 
	
	ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок);

КонецПроцедуры

Процедура ПриЗакрытии()
	
	ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма);

КонецПроцедуры

Процедура ДействияФормыИсследовать(Кнопка)
	
	ТекущаяСтрока = ЭлементыФормы.СвойстваОбъектов.ТекущаяСтрока;
	Если ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	МетаданныеПоля = МетаданныеПоля(ТекущаяСтрока);
	Если МетаданныеПоля = Неопределено Тогда
		МетаданныеПоля = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(ИмяТаблицыБД);
	КонецЕсли; 
	ирКлиент.ОткрытьОбъектМетаданныхЛкс(МетаданныеПоля);
	
КонецПроцедуры

Функция МетаданныеПоля(Знач ТекущаяСтрока = Неопределено)
	
	Если ТекущаяСтрока = Неопределено Тогда
		ТекущаяСтрока = ЭлементыФормы.СвойстваОбъектов.ТекущаяСтрока;
	КонецЕсли; 
	ИмяТаблицыБДВсеПоля = ИмяТаблицыБД;
	Если ирОбщий.ЛиКорневойТипРегистраБухгалтерииЛкс(ирОбщий.ТипТаблицыБДЛкс(ИмяТаблицыБД)) Тогда
		ИмяТаблицыБДВсеПоля = ИмяТаблицыБДВсеПоля + ".ДвиженияССубконто";
	КонецЕсли; 
	ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ИмяТаблицыБДВсеПоля);
	ПолеТаблицы = ПоляТаблицыБД.Найти(ТекущаяСтрока.Имя);
	МетаданныеПоля = ПолеТаблицы.Метаданные;
	Возврат МетаданныеПоля;

КонецФункции

Процедура СвойстваОбъектовПриАктивизацииСтроки(Элемент = Неопределено)
	Элемент = ЭлементыФормы.СвойстваОбъектов;
	ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
	НомерСтороны = СвойстваОбъектов.Найти(ИмяСвойстваНомерСтороны, "Имя")[Элемент.ТекущаяКолонка.Данные];
	Если ТипЗнч(НомерСтороны) = Тип("Число") Тогда
		СтрокаОбъекта = ТаблицаОбъектов.Найти(НомерСтороны, "НомерСтороны");
		ЭлементыФормы.ТаблицаОбъектов.ТекущаяСтрока = СтрокаОбъекта;
	КонецЕсли;
	ТекущаяСтрока = Элемент.ТекущаяСтрока;
	Если ТекущаяСтрока <> Неопределено Тогда
		Для Каждого СтрокаОбъекта Из ТаблицаОбъектов Цикл
			СтрокаОбъекта.Значение = ТекущаяСтрока["Значение" + СтрокаОбъекта.НомерСтороны];
			СтрокаОбъекта.ПредставлениеЗначения = ТекущаяСтрока["ПредставлениеЗначения" + СтрокаОбъекта.НомерСтороны]; 
			Если ТекущаяСтрока.Имя <> ИмяСвойстваНомерСтороны Тогда
				СтрокаОбъекта.Разность = ТекущаяСтрока["Разность" + СтрокаОбъекта.НомерСтороны];
			Иначе
				СтрокаОбъекта.Разность = Неопределено;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

Процедура ДействияФормыСравнитьКакКоллекции(Кнопка = Неопределено)
	
	ПараОбъектов = ЭлементыФормы.ТаблицаОбъектов.ВыделенныеСтроки;
	Если ПараОбъектов.Количество() < 2 Тогда
		ПараОбъектов = ТаблицаОбъектов;
	КонецЕсли;
	ирКлиент.Сравнить2ЗначенияВФормеЛкс(ПараОбъектов[0].Объект, ПараОбъектов[1].Объект,,,,,,, Истина);
	
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	
	Если КлючУникальности = "Автотест" Тогда
		Возврат;
	КонецЕсли;
	Если Не ЗагрузитьДанные() Тогда 
		Отказ = Истина;
	КонецЕсли; 
	
КонецПроцедуры

Процедура ДействияФормыТолькоРазличия(Кнопка)
	
	ЭтаФорма.ТолькоРазличия = Не Кнопка.Пометка;
	ОбновитьСоставСвойств();
	
КонецПроцедуры

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт
	
	ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); 

КонецПроцедуры

Процедура ТаблицаОбъектовВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ирОбщий.ИсследоватьЛкс(ВыбраннаяСтрока.Объект);
КонецПроцедуры

Процедура ТаблицаОбъектовПриАктивизацииСтроки(Элемент)
	ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры

Процедура ТаблицаОбъектовПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт
	ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
	ирКлиент.ОформитьЯчейкуРазностиЛкс(ОформлениеСтроки);
КонецПроцедуры

Процедура ДействияФормыОбновить(Кнопка)
	ОбновитьСоставСвойств();
КонецПроцедуры

Процедура ТаблицаОбъектовПередНачаломДобавления(Элемент, Отказ, Копирование)
	Отказ = Истина;
КонецПроцедуры

Процедура ТаблицаОбъектовПослеУдаления(Элемент = Неопределено)
	ОбновитьСоставСвойств();
КонецПроцедуры

Процедура ДействияФормыУдалитьОбъектИзСравнения(Кнопка)
	
	Если ЭлементыФормы.ТаблицаОбъектов.ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ТаблицаОбъектов.Удалить(ЭлементыФормы.ТаблицаОбъектов.ТекущаяСтрока);
	ТаблицаОбъектовПослеУдаления();
	
КонецПроцедуры

Процедура ДействияФормыВставитьОбъектИзБуфера(Кнопка)
	
	НовыйОбъект = ирКлиент.ЗначениеИзБуфераОбменаЛкс();
	Если ЛиОбъектСовместим(НовыйОбъект) Тогда
		ДобавитьОбъектИОбновитьСравнение(НовыйОбъект);
	КонецЕсли;
	
КонецПроцедуры

Функция ЛиОбъектСовместим(Знач НовыйОбъект)
	
	Возврат Ложь
		Или ТаблицаОбъектов.Количество() = 0
		Или ТипЗнч(НовыйОбъект) = ТипЗнч(ТаблицаОбъектов[0].Объект)
		Или (Истина
			И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(НовыйОбъект) 
			И НовыйОбъект.Метаданные() = ирОбщий.МетаданныеОбъектаБДЛкс(ТаблицаОбъектов[0].Объект));

КонецФункции

Процедура ТаблицаОбъектовПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
	МассивЗначений = ирКлиент.МассивЗначенийПеретаскиванияЛкс(ПараметрыПеретаскивания);
	Если ЛиОбъектСовместим(МассивЗначений[0]) Тогда
		СтандартнаяОбработка = Ложь;
		//ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование;
		ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
	КонецЕсли;
КонецПроцедуры

Процедура ТаблицаОбъектовПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
	МассивЗначений = ирКлиент.МассивЗначенийПеретаскиванияЛкс(ПараметрыПеретаскивания);
 	Если ЛиОбъектСовместим(МассивЗначений[0]) Тогда
		СтандартнаяОбработка = Ложь;
		ДобавитьОбъектИОбновитьСравнение(МассивЗначений[0]);
	КонецЕсли;
КонецПроцедуры

Процедура ДобавитьОбъектИОбновитьСравнение(Знач НовыйОбъект)
	
	НоваяСтрока = ДобавитьОбъектСравнения(НовыйОбъект);
	ОбновитьСоставСвойств();
	ЭлементыФормы.ТаблицаОбъектов.ТекущаяСтрока = НоваяСтрока;
	ЭлементыФормы.СвойстваОбъектов.ТекущаяКолонка = ЭлементыФормы.СвойстваОбъектов.Колонки["ПредставлениеЗначения" + НоваяСтрока.НомерСтороны];

КонецПроцедуры

Процедура ТаблицаОбъектовПриИзмененииФлажка(Элемент, Колонка)
	
	ирКлиент.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка);
	
КонецПроцедуры

Процедура ТаблицаОбъектовЭталонПриИзменении(Элемент)
	
	Признак = Ложь;
	Для каждого СтрокаОбъекта Из ТаблицаОбъектов Цикл
		Если СтрокаОбъекта = ЭлементыФормы.ТаблицаОбъектов.ТекущаяСтрока Тогда
			Продолжить;
		КонецЕсли; 
		СтрокаОбъекта.Эталон = Признак;
	КонецЦикла;
	ОбновитьРазностиЧисел();
	
КонецПроцедуры

Процедура ОбновитьРазностиЧисел()
	
	НомерЭталона = ТаблицаОбъектов.Найти(Истина, "Эталон");
	Если НомерЭталона <> Неопределено Тогда
		НомерЭталона = НомерЭталона.НомерСтороны;
	КонецЕсли;
	Для каждого СтрокаОбъекта Из ТаблицаОбъектов Цикл
		ЭлементыФормы.СвойстваОбъектов.Колонки["Разность" + СтрокаОбъекта.НомерСтороны].Видимость = Истина
			И НомерЭталона <> Неопределено
			И СтрокаОбъекта.НомерСтороны <> НомерЭталона;
	КонецЦикла;
	ЭлементыФормы.ТаблицаОбъектов.Колонки.Разность.Видимость = НомерЭталона <> Неопределено;
	ирОбщий.РассчитатьРазностиВТаблицеРазличийОбъектовЛкс(ТаблицаОбъектов, СвойстваОбъектов, НомерЭталона, ИмяСвойстваНомерСтороны);
	СвойстваОбъектовПриАктивизацииСтроки();

КонецПроцедуры

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирПлатформа.Форма.СравнениеОбъектов");
СвойстваОбъектов.Колонки.Добавить("Значение1");
СвойстваОбъектов.Колонки.Добавить("Значение2");
СвойстваОбъектов.Колонки.Добавить("ЗначениеУстановлено1", Новый ОписаниеТипов("Булево"));
СвойстваОбъектов.Колонки.Добавить("ЗначениеУстановлено2", Новый ОписаниеТипов("Булево"));
ТаблицаОбъектов.Колонки.Добавить("Объект"); 
ТаблицаОбъектов.Колонки.Добавить("Значение"); 
ИмяСвойстваНомерСтороны = "<Номер>";
ТолькоРазличия = Истина;