При разработке корпоративных систем на платформе 1С:Предприятие 8.3 часто возникает задача упрощения интерфейса для конкретных групп пользователей. Типичный сценарий: для сотрудников определенной роли необходимо создать специализированное рабочее место (например, на базе управляемой формы внешней или встроенной обработки), полностью скрыв при этом стандартный рабочий стол, панель разделов и другие элементы командного интерфейса. Это позволяет пользователю сфокусироваться на своих непосредственных задачах и исключает случайные переходы в «лишние» разделы конфигурации.
В рамках этой статьи мы подробно разберем, как решить эту задачу. Выясним, почему стандартного ограничения прав на уровне ролей не всегда достаточно, и рассмотрим три мощных программных способа управления видимостью разделов и панелей интерфейса.
Существует распространенное заблуждение, что состав панелей (разделов, инструментов, открытых окон) определяется исключительно в конфигураторе на этапе разработки и не поддается гибкому программному изменению на лету. На самом деле платформа 1С предоставляет полноценный программный доступ к этим настройкам через объект НастройкиИнтерфейсаКлиентскогоПриложения.
Проанализируем ситуацию: нам необходимо при запуске программы для конкретного пользователя полностью очистить панель разделов, оставив только саму форму обработки на рабочем столе. Для этого мы можем модифицировать настройки интерфейса при начале работы системы и сохранить их в системное хранилище настроек текущего пользователя.
Рассмотрим пример кода, который решает эту задачу. Данный код целесообразно разместить в модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы или вызвать из нее:
&НаКлиенте
Процедура СкрытьПанелиИнтерфейсаПрограммно()
// Инициализируем объект настроек интерфейса клиентского приложения
Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
// Создаем новый пустой состав панелей
СоставПанелей = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения;
// Полностью очищаем все зоны размещения панелей (верх, лево, низ, право)
СоставПанелей.Верх.Очистить();
СоставПанелей.Лево.Очистить();
СоставПанелей.Низ.Очистить();
СоставПанелей.Право.Очистить();
// При необходимости мы можем оставить пользователю только панель открытых окон внизу экрана
НоваяПанель = Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельОткрытыхОкон");
СоставПанелей.Низ.Добавить(НоваяПанель);
// Применяем сформированный состав к общим настройкам интерфейса
Настройки.УстановитьСостав(СоставПанелей);
// Записываем измененные настройки в Хранилище Системных Настроек для текущего пользователя
ХранилищеСистемныхНастроек.Сохранить(
"Общее/НастройкиИнтерфейсаКлиентскогоПриложения",
"",
Настройки
);
// Обновляем интерфейс, чтобы платформа мгновенно применила новые параметры без перезапуска приложения
ОбновитьИнтерфейс();
КонецПроцедуры
Используя этот метод, мы можем гибко управлять рабочим пространством. Например, анализируя роли текущего пользователя при старте системы, мы можем либо полностью отключать панели, либо собирать их в уникальной конфигурации. Для готовой настройки интерфейса и панелей без доработки кода можно использовать расширение для индивидуальной настройки панелей и разделов 1С.
Если перед нами стоит задача скрыть не всю панель разделов целиком, а лишь определенные подсистемы (разделы) в зависимости от сложных бизнес-условий, лучшим архитектурным решением будет использование Функциональных опций (ФО) и их параметров.
Разберем этот механизм по шагам:
ДоступенРазделПродаж).УстановитьПараметрыФункциональныхОпцийИнтерфейса().Посмотрим на пример реализации программной установки параметров функциональных опций:
&НаКлиенте
Процедура НастроитьВидимостьРазделовЧерезФО()
// Создаем структуру, где ключ - это имя параметра функциональной опции,
// а значение - булево флаг видимости
ПараметрыИнтерфейса = Новый Структура;
// Скрываем раздел продаж для текущего сеанса работы пользователя
ПараметрыИнтерфейса.Вставить("ДоступенРазделПродаж", Ложь);
// Применяем параметры к командному интерфейсу платформы
УстановитьПараметрыФункциональныхОпцийИнтерфейса(ПараметрыИнтерфейса);
КонецПроцедуры
Преимущество этого метода в том, что платформа перестраивает интерфейс «на лету» без изменения физических прав пользователя на объекты метаданных. Пользователь по-прежнему имеет доступ к документам через программный код, но визуально разделы полностью исчезают из его главного меню.
При работе в типовых конфигурациях (таких как 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей или 1С:Бухгалтерия) прямое сохранение настроек интерфейса в ХранилищеСистемныхНастроек может работать некорректно. Дело в том, что БСП активно управляет настройками пользователей при первом входе в систему и может затирать или перезаписывать ручные изменения разработчика.
Чтобы выполнить задачу корректно и в соответствии со стандартами разработки фирмы «1С», нам необходимо использовать переопределяемый модуль БСП. Выясним, как это сделать:
ПользователиПереопределяемый.ПриУстановкеНачальныхНастроек.НачальныеНастройки мы можем переопределить свойства интерфейса еще до того, как система запишет их в базу для нового пользователя.Проанализируем программный код интеграции нашего решения в структуру БСП:
// Помещается в общий модуль ПользователиПереопределяемый
Процедура ПриУстановкеНачальныхНастроек(НачальныеНастройки, Пользователь) Экспорт
// Проверим, относится ли данный пользователь к группе, которой нужен чистый рабочий стол
Если ПользовательДолженВидетьТолькоРабочийСтол(Пользователь) Тогда
// Создаем новые настройки интерфейса
НастройкиИнтерфейса = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
СоставПанелей = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения;
// Очищаем панели
СоставПанелей.Верх.Очистить();
СоставПанелей.Лево.Очистить();
СоставПанелей.Низ.Очистить();
СоставПанелей.Право.Очистить();
НастройкиИнтерфейса.УстановитьСостав(СоставПанелей);
// Передаем настройки в объект НачальныеНастройки БСП
НачальныеНастройки.НастройкиИнтерфейса = НастройкиИнтерфейса;
КонецЕсли;
КонецПроцедуры
Использование этого метода гарантирует, что настройки интерфейса применятся бесконфликтно и не будут сброшены алгоритмами БСП при обновлении версии программы или при первом запуске информационной базы новым сотрудником. Для автоматизации этого процесса при работе с множеством информационных баз применяется программа для пакетного обновления и тестирования 1С в тихом режиме.
Реализуя скрытие разделов интерфейса программными методами, важно четко разделять понятия «юзабилити (удобство интерфейса)» и «безопасность (ограничение прав доступа)». Рассмотрим критические нюансы, о которых нельзя забывать при проектировании системы:
Мы подробно разобрали, как с помощью встроенного языка 1С управлять видимостью элементов интерфейса, рассмотрели особенности работы с объектной моделью настроек, функциональными опциями и механизмами БСП. Применяйте эти подходы в своей практике для создания удобных и интуитивно понятных рабочих мест для ваших пользователей!