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