Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Глава 3.21. Программная настройка интерфейса
Дальше: Настройка состава форм на начальной странице

Настройка состава панелей интерфейса

Основной объект, с помощью которого выполняется настройка панелей интерфейса, – НастройкиИнтерфейсаКлиентскогоПриложения. Он позволяет работать как с настройками, заданными в конфигураторе разработчиком, так и с настройками, которые пользователь установил для себя в режиме 1С:Предприятие.

Процедуру настройки интерфейса нужно вызывать в модуле управляемого приложения, в обработчике события ПриНачалеРаботыСистемы (листинг 3.185).

Листинг 3.185. Обработчик события «ПриНачалеРаботыСистемы»

Процедура ПриНачалеРаботыСистемы()

 

РаботаСИнтерфейсом.НастройкаИнтерфейса();

ОбновитьИнтерфейс();

 

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

После выполнения настройки необходимо выполнить перестроение интерфейса клиентского приложения с помощью метода глобального контекста ОбновитьИнтерфейс().

Саму процедуру настройки интерфейса поместим в общий неглобальный модуль РаботаСИнтерфейсом с установленными свойствами Сервер и Вызов сервера (листинг 3.186).

Листинг 3.186. Процедура «НастройкаИнтерфейса»

Процедура НастройкаИнтерфейса() Экспорт

 

ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();

Для Каждого РольПользователя Из ПользовательИБ.Роли Цикл

Если РольПользователя.Имя = "Администратор" Тогда

РасширенныйИнтерфейс();

 

КонецЕсли;

 

Если РольПользователя.Имя = "Менеджер" Тогда

МинимальныйИнтерфейс();

 

КонецЕсли;

 

КонецЦикла;

 

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

В этой процедуре для пользователя с ролью Менеджер мы вызываем процедуру для формирования минималистичного интерфейса, а для пользователя с ролью Администратор вызываем процедуру формирования расширенного интерфейса. Для простоты будем считать, что каждому пользователю присвоена только одна роль.

Для менеджера мы будем отображать в основном окне приложения только панель инструментов и панель открытых, причем независимо от его личных настроек и настроек, сделанных в конфигураторе.

Поместим в общем модуле процедуру МинимальныйИнтерфейс() и заполним ее следующим образом (листинг 3.187).

Листинг 3.187. Процедура «МинимальныйИнтерфейс»

Процедура МинимальныйИнтерфейс() Экспорт

 

НастройкиИнтерфейса = Новый НастройкиИнтерфейсаКлиентскогоПриложения;

НастройкиСостава = НастройкиИнтерфейса.ПолучитьСостав();

 

// Очистить настройки состава.

НастройкиСостава.Верх.Очистить();

НастройкиСостава.Лево.Очистить();

НастройкиСостава.Низ.Очистить();

НастройкиСостава.Право.Очистить();

 

ПанельИнструментов = Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельИнструментов");

ПанельОткрытых = Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельОткрытых");

 

НастройкиСостава.Верх.Добавить(ПанельИнструментов);

НастройкиСостава.Низ.Добавить(ПанельОткрытых);

 

НастройкиИнтерфейса.УстановитьСостав(НастройкиСостава);

ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения", , НастройкиИнтерфейса);

 

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

В этой процедуре мы конструктором создаем пустой объект НастройкиИнтерфейсаКлиентскогоПриложения. Затем с помощью метода этого объекта ПолучитьСостав() мы получаем настройки состава интерфейса, установленные в конфигураторе. После этого очищаем список панелей интерфейса и групп панелей, размещенных в верхней, левой, правой и нижней частях основного окна клиентского приложения.

Это необходимо сделать, так как, даже если разработчик ничего не настраивал в конфигураторе, стандартно в интерфейсе клиентского приложения уже отображаются панель разделов, панель функций текущего раздела и панель инструментов (рис. 3.233).

Рис. 3.233. Стандартный состав панелей интерфейса в конфигураторе

Затем создаем конструктором новые элементы настройки состава интерфейса на основании стандартных имен панелей – ПанельИнструментов и ПанельОткрытых. И добавляем их соответственно в верхнюю и нижнюю часть основного окна приложения.

После этого с помощью метода УстановитьСостав() мы загружаем измененные настройки состава интерфейса в пустой объект НастройкиИнтерфейсаКлиентскогоПриложения.

И в заключение сохраняем эти настройки для текущего пользователя в хранилище системных настроек с ключом Общее/НастройкиИнтерфейсаКлиентскогоПриложения. Это необходимо сделать, так как пользовательские настройки применяются поверх всех остальных и затирают их.

Запустим «1С:Предприятие» от имени пользователя с ролью Менеджер. Независимо от настроек, сделанных в конфигураторе, и от личных настроек менеджера, сделанных в прошлом сеансе работы, при старте прикладного решения для него всегда будет отображаться минималистичный интерфейс, состоящий из рабочей области, панели инструментов (сверху) и панели открытых в нижней части основного окна приложения (рис. 3.234).

Рис. 3.234. Минимальный состав панелей интерфейса для менеджера

Теперь рассмотрим формирование состава панелей интерфейса для пользователя с ролью Администратор на основе настроек, сделанных им в режиме 1С:Предприятие.

Предположим, администратор в пользовательском режиме изменил стандартное расположение панелей интерфейса. Он скрыл панель разделов и установил отображение панели открытых в нижней части основного окна приложения (рис. 3.235).

Рис. 3.235. Настройка панелей администратором в режиме «1С:Предприятие»

После изменения эти настройки были сохранены в системном хранилище для пользователя с ролью Администратор. И теперь при старте прикладного решения для администратора в основном окне приложения вместо стандартного состава и расположения панелей интерфейса показывается тот вид, который он настроил для себя в режиме 1С:Предприятие (рис. 3.236).

Рис. 3.236. Состав панелей интерфейса, настроенных администратором

Теперь мы хотим немного изменить и расширить эти настройки из встроенного языка. А именно – мы хотим отображать для администратора в левой части основного окна приложения панель избранного, а сверху, несмотря на его личные настройки, отображать панель инструментов и панель функций текущего раздела, причем не друг под другом, а в одной строке.

Для этого настройки пользователя надо прочитать из системного хранилища, изменить и записать обратно.

Напомним, что процедура НастройкаИнтерфейса() расположена в общем модуле РаботаСИнтерфейсом и вызывается из модуля управляемого приложения в обработчике ПриНачалеРаботыСистемы(). В процедуре настройки анализируются роли пользователей, и для пользователя с ролью Администратор вызывается процедура формирования расширенного интерфейса.

Поместим процедуру РасширенныйИнтерфейс() в том же общем модуле и заполним ее следующим образом (листинг 3.188).

Листинг 3.188. Процедура «РасширенныйИнтерфейс»

Процедура РасширенныйИнтерфейс() Экспорт

 

НастройкиИнтерфейса = ХранилищеСистемныхНастроек. Загрузить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения");

НастройкиСостава = НастройкиИнтерфейса.ПолучитьСостав();

 

Лево = НастройкиСостава.Лево;

Верх = НастройкиСостава.Верх;

Низ = НастройкиСостава.Низ;

Право = НастройкиСостава.Право;

 

ПанельИнструментов = Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельИнструментов");

ПанельФункцийТекущегоРаздела = НовыйЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельФункцийТекущегоРаздела");

ПанельИзбранного = Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельИзбранного");

 

Если Верх.Количество() > 0 Тогда

Верх.Очистить();

 

КонецЕсли;

 

ГруппаВерх = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения();

ГруппаВерх.Верх.Добавить(ПанельИнструментов);

ГруппаВерх.Верх.Добавить(ПанельФункцийТекущегоРаздела);

Верх.Добавить(ГруппаВерх.Верх);

 

Для Каждого Панель Из Лево Цикл

Если Панель.Имя = "ПанельИнструментов" Тогда

Лево.Удалить(Лево.Индекс(Панель));

 

КонецЕсли;

 

Если Панель.Имя = "ПанельФункцийТекущегоРаздела" Тогда

Лево.Удалить(Лево.Индекс(Панель));

КонецЕсли;

Если Панель.Имя = "ПанельИзбранного" Тогда

Лево.Удалить(Лево.Индекс(Панель));

 

КонецЕсли;

 

КонецЦикла;

 

Лево.Добавить(ПанельИзбранного);

 

НастройкиИнтерфейса.УстановитьСостав(НастройкиСостава);

ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения", , НастройкиИнтерфейса);

 

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

В этой процедуре сначала мы загружаем из системного хранилища настройки текущего пользователя в объект НастройкиИнтерфейсаКлиентскогоПриложения. Затем с помощью метода этого объекта ПолучитьСостав() мы получаем настройки состава интерфейса, заданные пользователем. После этого с помощью свойств Верх, Лево, Право, Низ получаем список панелей и групп панелей, размещенных в верхней, левой, правой и нижней частях основного окна клиентского приложения.

Затем создаем конструктором новые элементы настройки состава интерфейса на основании стандартных имен панелей: ПанельИнструментов, ПанельФункцийТекущегоРаздела и ПанельИзбранного.

Нужно обратить внимание на один момент. Здесь, в отличие от настройки панелей для менеджера, мы не очищаем списки панелей, так как нам нужно добавить свои панели к списку панелей пользователя.

Поэтому в общем случае, перед тем как добавлять панели, надо проверить, не содержатся ли они в каждой из четырех групп (Верх, Лево, Право, Низ) настроек состава интерфейса, заданных пользователем. Это необходимо сделать потому, что панель интерфейса не может быть дважды включена ни в одну и ту же, ни в разные группы настроек состава интерфейса.

Для упрощения примера мы будем проверять наличие трех панелей (которые мы собираемся добавлять) только в левой группе настроек состава пользовательского интерфейса. И если наши панели там уже содержатся, будем их просто удалять. А верхнюю группу будем очищать, несмотря на настройки пользователя.

После выполнения этих проверок мы конструктором создаем пустой объект НастройкиСоставаИнтерфейсаКлиентскогоПриложения. И добавляем в верхнюю часть этих настроек (ГруппаВерх.Верх) созданные ранее элементы настройки состава интерфейса – ПанельИнструментов и ПанельФункцийТекущегоРаздела. И затем уже эту новую группу настроек (ГруппаВерх.Верх) добавляем в верхнюю группу пользовательских настроек состава. Таким образом, мы расположили обе панели интерфейса в новой группе настроек и поместили эту группу вверху основного окна приложения пользователя.

ПанельИзбранного просто добавляем в левую группу пользовательских настроек состава, так как перед этим мы удаляем ее из списка панелей (если она там содержится).

После этого с помощью метода УстановитьСостав() мы загружаем измененные настройки состава в пользовательские настройки состава интерфейса.

В заключение сохраняем эти настройки для текущего пользователя в хранилище системных настроек с ключом Общее/НастройкиИнтерфейсаКлиентскогоПриложения.

Запустим «1С:Предприятие» от имени пользователя с ролью Администратор. Мы видим, что в левой части основного окна приложения появилась панель избранного, а сверху, несмотря на личные настройки пользователя, в одной строке располагаются панель инструментов и панель функций текущего раздела. При этом панель открытых отображается в нижней части основного окна приложения – в соответствии с пользовательскими настройками, сделанными ранее (рис. 3.237).

Рис. 3.237. Расширенный состав панелей интерфейса для администратора

Назад: Глава 3.21. Программная настройка интерфейса
Дальше: Настройка состава форм на начальной странице