
Процедура ОбновитьДеревоПредставления() Экспорт

	ЭлементыФормы.СериализацияШирокая.УстановитьТекст(XMLНастройки);
	ЭтаФорма.ДлинаТекста = СтрДлина(XMLНастройки);
	ЗначениеДеревом.Строки.Очистить();
	ЭлементыФормы.ЗначениеДеревом.Колонки.Очистить();
	Попытка
		XMLДокумент = Новый ЧтениеXML;
		XMLДокумент.УстановитьСтроку(XMLНастройки);
		XMLДокумент.Прочитать();	
		ДеревоXMLДокумента = Новый ДеревоЗначений;
		ОписаниеСписокАтрибутов = Новый ОписаниеТипов("СписокЗначений");
		ДеревоXMLДокумента.Колонки.Очистить();
		ДеревоXMLДокумента.Колонки.Добавить("ТипУзла");
		ДеревоXMLДокумента.Колонки.Добавить("ИмяXMLЭлементаДанных");
		ДеревоXMLДокумента.Колонки.Добавить("ЗначениеXMLЭлементаДанных");
		ДеревоXMLДокумента.Колонки.Добавить("СписокАтрибутов", ОписаниеСписокАтрибутов);
		ЗагрузитьРекурсивно(XMLДокумент, ДеревоXMLДокумента.Строки);
		ЗначениеДеревом = ДеревоXMLДокумента;
		ЭлементыФормы.ЗначениеДеревом.СоздатьКолонки();
		ЭлементыФормы.ЗначениеДеревом.Колонки.ТипУзла.Видимость = Ложь;
		ЭлементыФормы.ЗначениеДеревом.Колонки.ИмяXMLЭлементаДанных.ОтображатьИерархию = Истина;
		ЭлементыФормы.ПанельОсн.Страницы.СтраницаДерево.Видимость = Истина;
		Для каждого СтрокаКорня Из ЗначениеДеревом.Строки Цикл
			ЭлементыФормы.ЗначениеДеревом.Развернуть(СтрокаКорня, Истина);
		КонецЦикла; 
	Исключение
		ЭлементыФормы.ПанельОсн.Страницы.СтраницаДерево.Видимость = Ложь;
	КонецПопытки; 
	
КонецПроцедуры

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

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

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

Процедура ОсновныеДействияФормыИсследовать(Кнопка)
	
	ирОбщий.ИсследоватьЛкс(ЗначениеНастройки);
	
КонецПроцедуры

Процедура ОсновныеДействияФормыСравнить(Кнопка)
	
	ирОбщий.СравнитьСодержимоеЭлементаУправленияЛкс(ЭлементыФормы.СериализацияШирокая);

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

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

Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт 
	
	ирОбщий.ОбработчикОжиданияСПараметрамиЛкс();

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

ирОбщий.ИнициализироватьФормуЛкс(ЭтаФорма, "Обработка.ирРедакторХранилищНастроек.Форма.СериализацияЗначения");
