Загрузка данных



#Область ОбработчикиСобытий

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

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

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

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

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

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


// Возвращает название панели клиентского приложения, в которой находится панель разделов.
// Параметры:
//  НастройкиСоставаИнтерфейса - НастройкиСоставаИнтерфейсаКлиентскогоПриложения
//  
// Возвращаемое значение:
//  Структура - содержит два свойства:
//  РасположениеПанели - Строка - расположение панели клиентского приложения, в которой находится панель разделов.
//  ГруппаПанелиРазделов - ГруппаНастройкиСоставаИнтерфейсаКлиентскогоПриложения - панель разделов
//  КоличествоПереходов - Число - уроверь панели разделов в иерархии групп панели
//
&НаСервере
Функция ПолучитьПоложениеПанелиРазделов(НастройкиСоставаИнтерфейса)
	
	ПоложениеПанелиРазделов = Новый Структура;
	ПоложениеПанелиРазделов.Вставить("РасположениеПанели");
	ПоложениеПанелиРазделов.Вставить("ГруппаПанелиРазделов");
	ПоложениеПанелиРазделов.Вставить("КоличествоПереходов");
	
	ПараметрыПанелиРазделов = РазмещениеПанелиРазделов(НастройкиСоставаИнтерфейса.Лево);
	Если ПараметрыПанелиРазделов.ЕстьПанель Тогда
		ПоложениеПанелиРазделов.РасположениеПанели = "Лево";
		ПоложениеПанелиРазделов.ГруппаПанелиРазделов = ПараметрыПанелиРазделов.ГруппаПанелиРазделов;
		ПоложениеПанелиРазделов.КоличествоПереходов = ПараметрыПанелиРазделов.КоличествоПереходов;
		Возврат ПоложениеПанелиРазделов;
	КонецЕсли;
	
	ПараметрыПанелиРазделов = РазмещениеПанелиРазделов(НастройкиСоставаИнтерфейса.Право);
	Если ПараметрыПанелиРазделов.ЕстьПанель Тогда
		ПоложениеПанелиРазделов.РасположениеПанели = "Право";
		ПоложениеПанелиРазделов.ГруппаПанелиРазделов = ПараметрыПанелиРазделов.ГруппаПанелиРазделов;
		ПоложениеПанелиРазделов.КоличествоПереходов = ПараметрыПанелиРазделов.КоличествоПереходов;
		Возврат ПоложениеПанелиРазделов;
	КонецЕсли;
	
	ПараметрыПанелиРазделов = РазмещениеПанелиРазделов(НастройкиСоставаИнтерфейса.Верх);
	Если ПараметрыПанелиРазделов.ЕстьПанель Тогда
		ПоложениеПанелиРазделов.РасположениеПанели = "Верх";
		ПоложениеПанелиРазделов.ГруппаПанелиРазделов = ПараметрыПанелиРазделов.ГруппаПанелиРазделов;
		ПоложениеПанелиРазделов.КоличествоПереходов = ПараметрыПанелиРазделов.КоличествоПереходов;
		Возврат ПоложениеПанелиРазделов;
	КонецЕсли;
	
	ПараметрыПанелиРазделов = РазмещениеПанелиРазделов(НастройкиСоставаИнтерфейса.Низ);
	Если ПараметрыПанелиРазделов.ЕстьПанель Тогда
		ПоложениеПанелиРазделов.РасположениеПанели = "Низ";
		ПоложениеПанелиРазделов.ГруппаПанелиРазделов = ПараметрыПанелиРазделов.ГруппаПанелиРазделов;
		ПоложениеПанелиРазделов.КоличествоПереходов = ПараметрыПанелиРазделов.КоличествоПереходов;
		Возврат ПоложениеПанелиРазделов;
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаСервере
Процедура СохранитьСоставИНастройкуПанели(НастройкиОтображения, НастройкиИнтерфейса, ПоложениеПанелиРазделов)
	
	НастройкиПанелей = Новый Структура;
	НастройкиПанелей.Вставить("ПоложениеПанелиРазделов", ПоложениеПанелиРазделов);
	НастройкиПанелей.Вставить("НастройкиИнтерфейса", НастройкиИнтерфейса);
	НастройкиПанелей.Вставить("ВидПанелиРазделов", НастройкиОтображения.ОтображениеПанелиРазделов);
	
	ХранилищеСистемныхНастроек.Сохранить("НастройкиПользователя", "НастройкаПанелейИнтерфейса", НастройкиПанелей);
	
КонецПроцедуры

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

&НаСервере
Процедура ДобавитьПанельРазделов(Группа)
	
	Группа.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельРазделов"));
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьИнтерфейсПрограммы()
	
	ТекущееАктивноеОкно = АктивноеОкно();
	ОбновитьИнтерфейс();
	Если ТекущееАктивноеОкно <> Неопределено Тогда
		ТекущееАктивноеОкно.Активизировать();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти