Перем ПредыдущаяСтрока; // Нужна для обработки ожидания при генерации контекстного меню

Перем мКоличествоСтатическихКнопокКоманднойПанели;
//Перем мСписокВыбораПодсистем;
Перем мСвязанныйДинамическийСписок;
Перем мХранимыеТипыМетаобъектов;

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

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

// Открывает консоль отчетов (из конфигурации или из макета) и открывает переданную настройку
//
// Параметры
//  ИмяФайлаНастроек - полное имя файла с настройками
//
// Возвращаемое значение:
//   Форма консоли отчетов
//
Функция ОткрытьНастройкуКонсолиЗапросовПостроителейКомпоновок(ИмяФайлаНастроек)
	Расширение = ВРЕГ(Прав(ИмяФайлаНастроек,3));
	Если Расширение = "RCF" Тогда
		ИмяОбъекта = "КонсольОтчетов";
		ИмяОбъекта1 = "ирКонсольПостроителейОтчетов";
	ИначеЕсли Расширение = "SEL" Тогда
		ИмяОбъекта = "КонсольЗапросов";
		ИмяОбъекта1 = "ирКонсольЗапросов";
	ИначеЕсли Расширение = "DCF" Тогда
		ИмяОбъекта = "КонсольКомпоновокДанных";
		ИмяОбъекта1 = "ирКонсольКомпоновокДанных";
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	Если Ложь
		Или Метаданные.Обработки.Найти(ИмяОбъекта) <> Неопределено 
		Или Метаданные.Отчеты.Найти(ИмяОбъекта) <> Неопределено
	Тогда
		Форма = Обработки[ИмяОбъекта].ПолучитьФорму();
	ИначеЕсли Ложь
		Или Метаданные.Обработки.Найти(ИмяОбъекта1) <> Неопределено 
		Или Метаданные.Отчеты.Найти(ИмяОбъекта1) <> Неопределено
	Тогда
		Форма = Обработки[ИмяОбъекта1].ПолучитьФорму();
	Иначе
		Попытка
			ИмяФайла = ПолучитьИмяВременногоФайла();
			ДвоичныеДанные = ПолучитьМакет(ИмяОбъекта);
			ДвоичныеДанные.Записать(ИмяФайла);
			Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
			Если Форма = Неопределено Тогда
				ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
			КонецЕсли;
			УдалитьФайлы(ИмяФайла);
		Исключение
			Предупреждение("Не удалось создать обработку для открытия данной настройки");
			Сообщить(ОписаниеОшибки());
			Возврат Неопределено;
		КонецПопытки; 
	КонецЕсли;
	Если СтрДлина(ИмяФайлаНастроек)>4 Тогда
		Файл = Новый Файл(ИмяФайлаНастроек);
		Если Файл.Существует() Тогда
			ирОбщий.СохранитьЗначениеЛкс(ИмяОбъекта+"_ИмяФайла", ИмяФайлаНастроек);
		КонецЕсли;
	КонецЕсли;
	
	Возврат Форма;
КонецФункции // ОткрытьНастройкуКонсолиОтчетов()

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

// Добавляет кнопку действия на командную панель
//
// Параметры
// КП - кнопки командной панели
// Имя - имя кнопки
// Синоним - синоним объекта. текст кнопки
// Команда - команда, выполняемая кнопкой. Хранится в тексте подсказки
// Действие - обработчик кнопки. Для простоты будет один. Команда выполняется по содержимому подсказки
//
Процедура ДобавитьКнопку(КП, Имя, Синоним = "", Команда, Действие, Картинка = Неопределено, Подсказка = "")
	
	Кнопка = КП.Добавить(Имя, ТипКнопкиКоманднойПанели.Действие, ?(Синоним = "", Имя, Синоним), Действие);
	Кнопка.Подсказка = Команда; // Затем она отсюда читается
	Если Картинка <> Неопределено Тогда
		Кнопка.Картинка = Картинка;
	КонецЕсли; 
	Если КП.Количество() = мКоличествоСтатическихКнопокКоманднойПанели+1 Тогда
		Кнопка.КнопкаПоУмолчанию = Истина;
	КонецЕсли;
	
КонецПроцедуры // ДобавитьКнопку()

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

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

Процедура УдалитьКонтекстныеКнопкиКоманднойПанели()

	// Очистить динамические кнопки командной панели
	КнопкиКоманднойПанели = ЭлементыФормы.КоманднаяПанельДереваИнтерфейса.Кнопки;
	КоличествоКнопок = КнопкиКоманднойПанели.Количество();
	Для Сч = 1 По КоличествоКнопок - мКоличествоСтатическихКнопокКоманднойПанели Цикл
		КнопкиКоманднойПанели.Удалить(КоличествоКнопок - Сч);
	КонецЦикла;

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

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

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
	//Отказ = Истина;
КонецПроцедуры

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

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

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

КонецПроцедуры // ПриОткрытии

///////////////////////////////////////////////////////////////////////////////
Процедура ПриЗакрытии()

	СохранитьНастройки(ЭтаФорма);
	ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма);
	
КонецПроцедуры // ПриЗакрытии

// Вызывается регулярно для очистки фильра
//
//
Процедура ОчисткаСтрокиФильтра()
	
	ФильтрИмен = "";
	ФильтрИмен_ПриИзменении();
	ЗаполнитьДеревоИнтерфейса(ЭтаФорма);
	//ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока = ДеревоИнтерфейса.Строки[0];
	 
КонецПроцедуры // ОчисткаСтрокиФильтра()

Процедура КоманднаяПанельПроверитьВерсию(Кнопка)
	
	Сообщить("Запрос номеров версий...", СтатусСообщения.Информация);
	
	Попытка
		IE = Новый COMОбъект("InternetExplorer.Application");
	Исключение
	    Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки; 
	
	IE.Visible = 0;
	IE.Silent = -1;
	IE.Navigate("http://www.infostart.ru/public/15324/blog/");
	ПроверитьВерсию(IE);
	
КонецПроцедуры // КоманднаяПанельПроверитьВерсию()

Процедура ПроверитьВерсию(IE=Неопределено)
	
	Если IE = Неопределено Тогда
		IE = Новый COMОбъект("InternetExplorer.Application");
	КонецЕсли;
	Если IE.readyState < 4 Тогда
		ПодключитьОбработчикОжидания("ПроверитьВерсию", 0.1, Истина);
		Возврат;
	КонецЕсли;
	
	Описание = IE.Document.title;
	IE.Quit();
	IE = Неопределено;
	
	Описание = Сред(Описание, Найти(Описание, "(") + 1);
	Описание = Лев(Описание, Найти(Описание, ")") - 1);
	Сообщить("Текущая версия:   " + Метаданные().Комментарий);
	Сообщить("Последняя версия: " + Описание);
	
КонецПроцедуры // КоманднаяПанельПроверитьВерсию()


///////////////////////////////////////////////////////////////////////////////
// ~~~~ СОБЫТИЯ ФИЛЬТРА ПОДСИСТЕМ ~~~~
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
Процедура ПриИзмененииФильтраПодсистем()

	ЗаполнитьДеревоИнтерфейса(ЭтаФорма);
	
КонецПроцедуры // ПриИзмененииФильтраПодсистем

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

///////////////////////////////////////////////////////////////////////////////
Процедура ФильтрПодсистем_Очистка(Элемент, СтандартнаяОбработка)

	ФильтрПодсистем_ПриИзменении(Элемент);
	
КонецПроцедуры // ФильтрПодсистем_Очистка

///////////////////////////////////////////////////////////////////////////////
Процедура ФильтрПодсистем_ПриИзменении(Элемент)

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

///////////////////////////////////////////////////////////////////////////////
Процедура ЗаполнитьДеревоПодсистем() Экспорт
	
	////мСписокВыбораПодсистем = ДобавитьПодсистему();
	//ДобавитьПодсистему();
	
КонецПроцедуры // ЗаполнитьДеревоПодсистем

///////////////////////////////////////////////////////////////////////////////
// ~~~~ СОБЫТИЯ ФИЛЬТРА ИМЕН ~~~~
///////////////////////////////////////////////////////////////////////////////

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

	ЗаполнитьДеревоИнтерфейса(ЭтаФорма);
	
	//Если НЕ ПустаяСтрока(ФильтрИмен) тогда
	//	Для каждого СтрокаДерева из ДеревоИнтерфейса.Строки цикл
	//		//ЭлементыФормы.ДеревоИнтерфейса.Развернуть(СтрокаДерева, Истина);
	//	КонецЦикла;
	//КонецЕсли;
	
КонецПроцедуры // ПриИзмененииФильтраИмен

///////////////////////////////////////////////////////////////////////////////
Процедура ФильтрИмен_ПриИзменении(Элемент="")

	ПриИзмененииФильтраИмен();
	
КонецПроцедуры // ФильтрИмен_ПриИзменении

Процедура ФильтрИменОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПриИзмененииФильтраИмен();
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////
//Процедура ФильтрИмен_Очистка(Элемент, СтандартнаяОбработка)

//	ПриИзмененииФильтраИмен();
//	
//КонецПроцедуры // ФильтрИмен_Очистка

///////////////////////////////////////////////////////////////////////////////
Процедура ФильтрИмен_АвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)

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

///////////////////////////////////////////////////////////////////////////////
// ~~~~ СОБЫТИЯ ДЕРЕВА ИНТЕРФЕЙСА ~~~~
///////////////////////////////////////////////////////////////////////////////

// Предлагает выбор формы и открывает ее для текущей строки дерева
//
// Параметры
//  Команда - строка команды. Если указана, то выбор формы не предлагается, а сразу открывается форма по умолчанию
//
Процедура ОткрытиеФормы(Команда = "")
	
	НоваяФорма = Неопределено;
	Если ТипЗнч(Команда) = Тип("КнопкаКоманднойПанели") Тогда
		Кнопка = Команда;
		ТекущаяСтрока = ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока;
		ВидОбъекта = ТекущаяСтрока.Вид;
		ИмяОбъекта = ТекущаяСтрока.Имя;
		Попытка
			Если Истина
				И ЗначениеЗаполнено(ВидОбъекта) 
				И ЗначениеЗаполнено(ИмяОбъекта) 
			Тогда
				ОткрытьФормуПоПолномуИмени = Ложь; 
				Если Истина
					И (Ложь
						Или мХранимыеТипыМетаобъектов.Найти(ВидОбъекта, "Множественное") <> Неопределено 
						Или ВидОбъекта = "Обработки"
						Или ВидОбъекта = "Отчеты")
					И ВидОбъекта <> "Константы"
				Тогда
					КоллекцияМетаданных = ?(Найти(ВидОбъекта,".") > 0, Метаданные.НайтиПоПолномуИмени(ВидОбъекта), Метаданные[ВидОбъекта]);
					МДОбъект = КоллекцияМетаданных[ИмяОбъекта];
					СтрокаПолногоИмени = МДОбъект.ПолноеИмя();
					Если Кнопка.Имя = "УниверсальныйОтчетПоРегиструНакопления" Тогда
						НоваяФорма = УниверсальныйОтчетПоРегиструНакопления(ИмяОбъекта);
					ИначеЕсли Кнопка.Имя = "ДинамическийСписок" Тогда
						НоваяФорма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирДинамическийСписок.Форма",,, СтрокаПолногоИмени);
					//ИначеЕсли Кнопка.Имя = "ИсторияДанных" Тогда
					//	ОткрытьФорму("sysForm:DataHistoryVersions", Новый Структура("Metadata", СтрокаПолногоИмени));
					ИначеЕсли Кнопка.Имя = "СправкаМетаданного" Тогда
						НоваяФорма = Неопределено;
						ОткрытьСправку(Метаданные.НайтиПоПолномуИмени(СтрокаПолногоИмени));
					ИначеЕсли Кнопка.Имя = "ФункциональныеОпции" Тогда
						ФункциональныеОпцииОбъекта(СтрокаПолногоИмени);
						НоваяФорма = Неопределено;
					ИначеЕсли Кнопка.Имя = "СвязанныйДинамическийСписок" Тогда
						НоваяФорма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирДинамическийСписок.Форма",,, "Связанный");
						НоваяФорма.УстановитьОбъектМетаданных(СтрокаПолногоИмени);
						мСвязанныйДинамическийСписок = НоваяФорма;
					ИначеЕсли Кнопка.Имя = "КонсольЗапросов" Тогда
						КонсольЗапросов = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольЗапросов");
						#Если Сервер И Не Сервер Тогда
							КонсольЗапросов = Обработки.ирКонсольЗапросов.Создать();
						#КонецЕсли
						НоваяФорма = КонсольЗапросов.ОткрытьПоОбъектуМетаданных(МДОбъект.ПолноеИмя());
					ИначеЕсли Кнопка.Имя = "КонсольКомпоновки" Тогда
						КонсольКомпоновокДанных = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Отчет.ирКонсольКомпоновокДанных");
						#Если Сервер И Не Сервер Тогда
							КонсольКомпоновокДанных = Отчеты.ирКонсольКомпоновокДанных.Создать();
						#КонецЕсли
						НоваяФорма = КонсольКомпоновокДанных.ОткрытьПоОбъектуМетаданных(МДОбъект.ПолноеИмя());
					ИначеЕсли Кнопка.Имя = "ПодборИОбработкаОбъектов" Тогда
						НоваяФорма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирПодборИОбработкаОбъектов.Форма",,, МДОбъект.ПолноеИмя());
					ИначеЕсли Кнопка.Имя = "ЖурналРегистрации" Тогда
						АнализЖурналаРегистрации = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирАнализЖурналаРегистрации");
						#Если Сервер И Не Сервер Тогда
							АнализЖурналаРегистрации = Обработки.ирАнализЖурналаРегистрации.Создать();
						#КонецЕсли
						НоваяФорма = АнализЖурналаРегистрации.ОткрытьСПараметром("Метаданные", СтрокаПолногоИмени);
					ИначеЕсли Кнопка.Имя = "ИсследоватьМетаданные" Тогда
						НоваяФорма = ирОбщий.ИсследоватьЛкс(МДОбъект);
					Иначе
						ОткрытьФормуПоПолномуИмени = Истина;
					КонецЕсли; 
				Иначе
					Если ВидОбъекта = "ОбщиеФормы" Тогда
						// Баг платформы 8.3.5 общая форма так каждый раз новая получается
						НоваяФорма = ПолучитьОбщуюФорму(ИмяОбъекта);
					ИначеЕсли ВидОбъекта = "Интерфейсы" Тогда
						ГлавныйИнтерфейс.ПереключитьИнтерфейс(ИмяОбъекта);
					ИначеЕсли ВидОбъекта = "Внешние обработки" Тогда
						лОбработка = ВнешниеОбработки.Создать(ИмяОбъекта);
						Если лОбработка.Метаданные().ОсновнаяФорма = Неопределено Тогда
							Сообщить("У внешней обработки не назначена основная форма");
						Иначе
							НоваяФорма = лОбработка.ПолучитьФорму();
							Если НоваяФорма = Неопределено Тогда
								Сообщить("У внешней обработки не назначена основная форма для текущего режима запуска приложения");
							КонецЕсли; 
						КонецЕсли; 
					ИначеЕсли ВерсияПлатфомы >= "8.1" И ВидОбъекта = "Внешние отчеты" Тогда
						НоваяФорма = ВнешниеОтчеты.Создать(ИмяОбъекта).ПолучитьФорму();
					ИначеЕсли ВидОбъекта = "Табличные документы" Тогда
						ТабличныйДокумент = Новый ТабличныйДокумент;
						ТабличныйДокумент.Прочитать(ИмяОбъекта);
						ирОбщий.ОткрытьЗначениеЛкс(ТабличныйДокумент, Ложь,, ИмяОбъекта);
					ИначеЕсли ВидОбъекта = "Текстовые документы" Тогда
						ТекстовыйДокумент = Новый ТекстовыйДокумент;
						ТекстовыйДокумент.Прочитать(ИмяОбъекта);
						ирОбщий.ОткрытьТекстЛкс(ТекстовыйДокумент.ПолучитьТекст(), ИмяОбъекта, "Обычный", Истина);
					ИначеЕсли Найти(ВидОбъекта, "Настройки консоли") > 0 Тогда
						НоваяФорма = ОткрытьНастройкуКонсолиЗапросовПостроителейКомпоновок(ИмяОбъекта);
					ИначеЕсли Истина
						И ЕстьУниверсальныйОтчет 
						И Есть_РС_СохраненныеНастройки
						И Лев(ТекущаяСтрока.Вид, 11) = "ОтчетОбъект" 
						И Метаданные.Отчеты.Найти(Сред(ТекущаяСтрока.Вид, Найти(ТекущаяСтрока.Вид, ".")+1)) <> Неопределено
					Тогда
						// Восстановление сохраненной настройки
						НоваяФорма = ОткрытьНастройкуОтчета(ВидОбъекта, ИмяОбъекта);
					ИначеЕсли ЕстьСправочникВнешнихОбработок И ВидОбъекта = "СправочникВнешниеОбработки" Тогда
						Если Кнопка.Имя = "Открыть" Тогда
							НоваяФорма = ОткрытьОбработкуИзСправочникаВнешнихОбработок(ИмяОбъекта);
						Иначе //НайтиВСправочникеВнешнихОбработок
							СсылкаВнешнейОбработки = Справочники.ВнешниеОбработки.НайтиПоКоду(ИмяОбъекта);
							НоваяФорма = СсылкаВнешнейОбработки.ПолучитьФорму();
						КонецЕсли; 
					ИначеЕсли ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ИмяОбъекта) Тогда
						// Полнотекстовый поиск
						СсылкаОбъекта = ИмяОбъекта;
						Если СсылкаОбъекта <> Неопределено Тогда
							// В первую очередь нужны исследователь объектов  и редактор реквизитов - у них нет ограничений на открытие формы и тп
							Если Кнопка.Имя = "ирРедакторОбъектаБД" Тогда
								НоваяФорма = ирРедакторОбъектаБД(СсылкаОбъекта);
							ИначеЕсли Кнопка.Имя = "ирИсследоватьОбъект" Тогда
								НоваяФорма = ирИсследоватьОбъект(СсылкаОбъекта);
							Иначе
								НоваяФорма = СсылкаОбъекта.ПолучитьФорму(Кнопка.Имя);
							КонецЕсли; 
						КонецЕсли;
					ИначеЕсли ВидОбъекта = "Константы" Тогда
						Если Кнопка.Имя = "ИсследоватьМетаданные" Тогда
							НоваяФорма = ирОбщий.ИсследоватьЛкс(Метаданные.Константы[ИмяОбъекта]);
						Иначе
							НоваяФорма = ОткрытьРедакторКонстант();
						КонецЕсли; 
					Иначе
						ОткрытьФормуПоПолномуИмени = Истина;
					КонецЕсли; 
				КонецЕсли; 
				Если ОткрытьФормуПоПолномуИмени Тогда 
					НоваяФорма = ирОбщий.ПолучитьФормуЛкс(МДОбъект.ПолноеИмя() + "." + Кнопка.Имя);
				КонецЕсли; 
			КонецЕсли;
		Исключение
			Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
			Возврат;
		КонецПопытки;
	ИначеЕсли Команда = "" Тогда
		// Вызов первой из доступных команд
		СгенерироватьКомандыКонтекстногоМеню();
		КнопкиКоманднойПанели = ЭлементыФормы.КоманднаяПанельДереваИнтерфейса.Кнопки;
		Если КнопкиКоманднойПанели.Количество() > мКоличествоСтатическихКнопокКоманднойПанели Тогда
			ОткрытиеФормы(КнопкиКоманднойПанели[мКоличествоСтатическихКнопокКоманднойПанели]);
		КонецЕсли;
		Возврат;
	Иначе
		Если Найти(Команда + "!", ".ФормаСписка!") > 0 Тогда
			ИмяМД = ирОбщий.ПолучитьСтрокуБезКонцаЛкс(Команда, СтрДлина(".ФормаСписка"));
			Попытка
				НоваяФорма = ирОбщий.ПолучитьФормуСпискаЛкс(ИмяМД);
			Исключение
				Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
				Возврат;
			КонецПопытки;
		Иначе
			Попытка
				НоваяФорма = ирОбщий.ПолучитьФормуЛкс(Команда);
			Исключение
				Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
				Возврат;
			КонецПопытки;
		КонецЕсли; 
	КонецЕсли;
	Если НоваяФорма = Неопределено тогда
		Возврат;
	// закомментировал для Антибаг платформы 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1032819#1032819
	//ИначеЕсли НоваяФорма.Открыта() тогда
	//	НоваяФорма.Активизировать();
	Иначе
		НоваяФорма.Открыть();
	КонецЕсли;
	ОбновитьСтатистикуИспользования(ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока, ЭтаФорма);
	
КонецПроцедуры // ОткрытиеФормы()


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

///////////////////////////////////////////////////////////////////////////////
Процедура ДеревоИнтерфейса_ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	
	ирОбщий.ТабличноеПоле_ОформитьЯчейкиИмяСинонимЛкс(Элемент, ОформлениеСтроки);
	Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ДанныеСтроки.Имя, Ложь) Тогда
		Если Не ЗначениеЗаполнено(ДанныеСтроки.Имя) Тогда
			ЦветФонаЯчеекПустыхЗначений = ирОбщий.ЦветФонаЯчеекПустыхЗначенийЛкс();
			ПредставлениеЗначения = мПлатформа.мПолучитьПредставлениеПустогоЗначения(ДанныеСтроки.Имя);
			ОформлениеСтроки.Ячейки.Имя.УстановитьТекст(ПредставлениеЗначения);
			ОформлениеСтроки.Ячейки.Имя.ЦветФона = ЦветФонаЯчеекПустыхЗначений;
		КонецЕсли;
		ТипСсылки = ТипЗнч(ДанныеСтроки.Имя);
		ОформлениеСтроки.Ячейки.Имя.УстановитьТекст(ОформлениеСтроки.Ячейки.Имя.Текст + " (" + Метаданные.НайтиПоТипу(ТипСсылки).ПолноеИмя() + ")");
		ОформлениеСтроки.Ячейки.Представление.УстановитьТекст(ОформлениеСтроки.Ячейки.Представление.Текст + " (" + ТипСсылки + ")");
	КонецЕсли;
	Если ДанныеСтроки.КоличествоСтрок = Неопределено Тогда
		ОформлениеСтроки.Ячейки.КоличествоСтрок.УстановитьТекст("?");
	КонецЕсли; 
	
КонецПроцедуры // ДеревоИнтерфейса_ПриВыводеСтроки

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

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

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

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

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

Функция ПодготовитьЗначениеПеретаскивания(ЗначениеПеретаскивания)
	
	Результат = ЗначениеПеретаскивания;
	Если ТипЗнч(ЗначениеПеретаскивания) = Тип("Массив") Тогда
		Если ЗначениеПеретаскивания.Количество() > 0 Тогда
			ЗначениеПеретаскивания = ЗначениеПеретаскивания[0];
			ХмлТип = XMLТипЗнч(ЗначениеПеретаскивания);
			Если ХмлТип <> Неопределено Тогда
				Если Найти(ХмлТип.ИмяТипа, "Ref.") > 0 Тогда
					Результат = Новый Структура();
					Результат.Вставить("Вид", ЗначениеПеретаскивания.Метаданные().ПолноеИмя());
					Результат.Вставить("Имя", ЗначениеПеретаскивания);
					Результат.Вставить("Представление", ЗначениеПеретаскивания);
				КонецЕсли; 
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли; 
	Возврат Результат;

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

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

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

///////////////////////////////////////////////////////////////////
// Статические кнопки командной панели

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

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

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

///////////////////////////////////////////////////////////////////////////////
// Фоновые команды

////////////////////////////////////////////////////////////////////
// Команды, специфические для статических веток

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

Процедура ФоновыйПоиск() Экспорт

	ВыполнитьФоновыйПоиск();
	
	//ОтключитьОбработчикОжидания("ФоновыйПоиск");

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

Процедура кнНастройкаНажатие(Элемент)
	ПолучитьФорму("Настройка").ОткрытьМодально();
КонецПроцедуры

Процедура кнПрятатьНажатие(Элемент)
	Если СостояниеОкна = ВариантСостоянияОкна.Прячущееся Тогда
		_СостояниеОкна = ВариантСостоянияОкна.Прикрепленное
	Иначе
		_СостояниеОкна = ВариантСостоянияОкна.Прячущееся 
	КонецЕсли;
	стНастройки.Вставить("СостояниеОкна", _СостояниеОкна);
	Переоткрыть();
КонецПроцедуры

// Переоткрывает форму. Бывает нужно при смене отображения окна и при запуске отладочной версии
//
Процедура Переоткрыть(ИскатьОтладочнуюВерсию=Неопределено)
	
	Если НЕ Метаданные.Обработки.Найти(ЭтотОбъект.Метаданные().Имя) = Неопределено Тогда 
		Если ИскатьОтладочнуюВерсию=Истина Тогда
			ФайлОбработки = Новый Файл(КаталогВременныхФайлов()+"\ip8.epf");
			Если ФайлОбработки.Существует() Тогда
				Попытка
					Обработка = ВнешниеОбработки.Создать(ФайлОбработки);
				Исключение
					Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
					Возврат
				КонецПопытки;
			Иначе
				// Поиск в справочнике внешних обработок
				Обработка = НайтиИнтерфейснуюПанельВСправочникеВнешнихОбработок();
			КонецЕсли;
			
			Если Обработка = Неопределено Тогда
				Возврат
			Иначе
				ЗаполнитьЗначенияСвойств(Обработка, ЭтотОбъект);
				Форма = Обработка.ПолучитьФорму();
				ЗаполнитьЗначенияСвойств(Форма, ЭтаФорма,,"СостояниеОкна");					
			КонецЕсли;
		Иначе	
			Форма = Обработки[Метаданные().Имя].Создать().ПолучитьФорму();
		КонецЕсли;
		
	Иначе
		_ИмяФайла_ = "";
		Выполнить("_ИмяФайла_ = ИспользуемоеИмяФайла");
		Если ЗначениеЗаполнено(_ИмяФайла_) Тогда
			ФайлОбработки = Новый Файл(_ИмяФайла_);
			Если ФайлОбработки.Существует() Тогда
				Форма = ВнешниеОбработки.ПолучитьФорму(_ИмяФайла_);
			Иначе 
				Возврат;
			КонецЕсли;
		Иначе
			Возврат
		КонецЕсли;
	КонецЕсли;
	
	Если Не Форма = Неопределено Тогда
		Закрыть();
		Форма.Открыть();
	КонецЕсли;
	
КонецПроцедуры // Переоткрыть()

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

Процедура КомандыПанели_кнКонсоль(Кнопка)
	Если Кнопка.Имя = "КонсольПостроителей" Тогда 
		РасширениеФайла = "rcf";
	ИначеЕсли Кнопка.Имя = "КонсольЗапросов" Тогда
		РасширениеФайла = "sel";
	ИначеЕсли Кнопка.Имя = "КонсольКомпоновки" Тогда
		РасширениеФайла = "dcf";
	КонецЕсли; 
	Форма = ОткрытьНастройкуКонсолиЗапросовПостроителейКомпоновок(РасширениеФайла);
	Если НЕ Форма = Неопределено Тогда
		Форма.Открыть();
	КонецЕсли;
КонецПроцедуры

Процедура КомандыПанелиПечать(Кнопка)
	
	ВывестиТЗвТД(ДеревоИнтерфейса, Истина, ФильтрПодсистем + ?(ЗначениеЗаполнено(ФильтрИмен), ФильтрИмен, ""));
	// Yasen Для эксперимента выведем дерево в коллекцию
	ирОбщий.ИсследоватьЛкс(ДеревоИнтерфейса.Строки,, Истина);
	
КонецПроцедуры

// Открывает универсальный отчет по данному регистру
//
// Параметры
//  ИмяРегистра - строковый идентификатор регистра
//
// Возвращаемое значение:
//   Форма универсального отчета, заполненная настройками и готовая к формированию
//
Функция УниверсальныйОтчетПоРегиструНакопления(ИмяРегистра)
	
	Если НЕ ЕстьУниверсальныйОтчет Тогда
		Возврат РегистрыНакопления[ИмяРегистра].ПолучитьФормуСписка();
	КонецЕсли;
	УниверсальныйОтчет = Отчеты.УниверсальныйОтчет.Создать();
	ФормаОтчета = УниверсальныйОтчет.ПолучитьФорму();
	УниверсальныйОтчет.ИмяРегистра = ИмяРегистра;
	УниверсальныйОтчет.ПереУстановитьНачальныеНастройки(УниверсальныйОтчет, УниверсальныйОтчет, ФормаОтчета);
	ДоступныеПоля = УниверсальныйОтчет.ПостроительОтчета.ДоступныеПоля;
	Для каждого Поле Из ДоступныеПоля Цикл
		Если Поле.Измерение Тогда
			УниверсальныйОтчет.ДобавитьИзмерениеСтроки(Поле.ПутьКДанным);
		КонецЕсли;
		Если Поле.Отбор Тогда
			УниверсальныйОтчет.ДобавитьОтбор(Поле.ПутьКДанным);
		КонецЕсли;
	КонецЦикла;
	Возврат ФормаОтчета;
	
КонецФункции // УниверсальныйОтчетПоРегиструНакопления()

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

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

Функция ОткрытьДинамическийСписок(ВидОбъекта, ИмяОбъекта)
	
	Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирДинамическийСписок.Форма",,, СоответствиеВидовМетаданныхДляПоискаПолногоИмени[ВидОбъекта]+"."+ИмяОбъекта);
	Возврат Форма;
	
КонецФункции

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

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

Функция ирРедакторОбъектаБД(Ссылка)
	
	Форма = ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(Ссылка);
	Возврат Форма;
	
КонецФункции // ирРедакторОбъектаБД()

Функция ирПолучитьКартинкуЕслиЕсть(ИмяКартинки)
	
	Результат = Неопределено;
	Если Лев(ИмяКартинки, 2) = "ир" Тогда
		Результат = ирКэш.КартинкаПоИмениЛкс(ИмяКартинки);
	Иначе
		// Для типовых поиск по метаданным недоступен
		Попытка
			Результат = БиблиотекаКартинок[ИмяКартинки];
		Исключение
		КонецПопытки;
	КонецЕсли;
	Возврат Результат;
	
КонецФункции

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

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

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

Процедура КомандыПанелиОПодсистеме(Кнопка)
	
	ирОбщий.ОткрытьСправкуПоПодсистемеЛкс(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

Процедура ФильтрПодсистемОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	Элемент.Значение = ВыбранноеЗначение; // Без этого выбор из списка последних использованных не устанавливал значение
	
КонецПроцедуры

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