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

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

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

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

Процедура ДобавитьСтрокуМакета(Знач МетаМакет, Знач ПолноеИмяРодителя, Знач ИзвлекатьСодержимое = Ложь)
	
	СтрокаМакета = МакетыКонфигурации.Добавить();
	ЗаполнитьЗначенияСвойств(СтрокаМакета, МетаМакет);
	СтрокаМакета.Представление = МетаМакет.Представление();
	СтрокаМакета.Родитель = ПолноеИмяРодителя;
	СтрокаМакета.ПолноеИмя = СтрокаМакета.Родитель;
	Если Найти(ПолноеИмяРодителя, ".") > 0 Тогда
		СтрокаМакета.ПолноеИмя = СтрокаМакета.ПолноеИмя + ".Макет";
	КонецЕсли;
	СтрокаМакета.ПолноеИмя = СтрокаМакета.ПолноеИмя + "." + СтрокаМакета.Имя;
	Если ИзвлекатьСодержимое Тогда
		ИзвлечьСодержимоеМакета(СтрокаМакета, МетаМакет);
	КонецЕсли;

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

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

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

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

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

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

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

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

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

Процедура ОбновитьПодменюПоследниеВыбранные()
	
	ирКлиент.ПоследниеВыбранныеЗаполнитьПодменюЛкс(ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.ПоследниеВыбранные, ЭлементыФормы.МакетыКонфигурации);

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

Функция ПоследниеВыбранныеНажатие(Кнопка) Экспорт
	
	ирКлиент.ПоследниеВыбранныеНажатиеЛкс(ЭтаФорма, ЭлементыФормы.МакетыКонфигурации, "ПолноеИмя", Кнопка);
	
КонецФункции

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

Функция ПолноеПредставлениеМакета(Знач ТекущаяСтрока) Экспорт
	Результат = СтрЗаменить(ТекущаяСтрока.ПолноеИмя, ".Макет.", ".");
	Возврат Результат;
КонецФункции

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

Процедура ДействияФормыВычислитьРазмеры(Кнопка)
	Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(МакетыКонфигурации.Количество(), "Размеры");
	Для Каждого СтрокаМакета Из МакетыКонфигурации Цикл
		ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
		СтрокаМакета.Размер = ирОбщий.РазмерЗначенияЛкс(ДанныеМакета(СтрокаМакета));
	КонецЦикла;
	ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
	УстановитьВидимостьРазмеров(Истина);
КонецПроцедуры

Процедура МакетыКонфигурацииПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
	Если ЗначениеЗаполнено(ДанныеСтроки.ИмяТипа) Тогда
		ОформлениеСтроки.Ячейки.ТипДанных.УстановитьКартинку(ирКлиент.КартинкаТипаЛкс(Тип(ДанныеСтроки.ИмяТипа)));
	КонецЕсли;
КонецПроцедуры

Процедура МакетыКонфигурацииПриАктивизацииСтроки(Элемент)
	Если Не ЗначениеЗаполнено(Элемент.ТекущаяСтрока.ТипДанных) Тогда
		ИзвлечьСодержимоеМакета(Элемент.ТекущаяСтрока);
	КонецЕсли;
	ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры

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

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

Процедура УстановитьВидимостьРазмеров(Знач Видимость)
	
	ЭлементыФормы.ДействияФормы.Кнопки.ВычислитьРазмеры.Доступность = Не Видимость;
	ЭлементыФормы.МакетыКонфигурации.Колонки.Размер.Видимость = Видимость;

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

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

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

Процедура ЗаполнитьКонец(СостояниеЗадания = Неопределено, РезультатЗадания = Неопределено) Экспорт
	Если СостояниеЗадания <> СостояниеФоновогоЗадания.Завершено Тогда
		Возврат;
	КонецЕсли;
	Результат = РезультатЗадания.МакетыКонфигурации; // см. МакетыКонфигурации.Выгрузить()
	Результат.Индексы.Добавить("ПолноеИмя");
	Для Каждого СтрокаТЧ Из МакетыКонфигурации Цикл
		Если ЗначениеЗаполнено(СтрокаТЧ.ТипДанных) Тогда
			Продолжить;
		КонецЕсли;
		СтрокаРезультата = Результат.Найти(СтрокаТЧ.ПолноеИмя, "ПолноеИмя");
		ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаРезультата);
	КонецЦикла;
КонецПроцедуры 

// Предопределеный метод
Процедура ПроверкаЗавершенияФоновыхЗаданий() Экспорт 
	ирКлиент.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма);
КонецПроцедуры

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирПлатформа.Форма.МакетыКонфигурации");

