В процессе разработки и внедрения корпоративных систем на платформе 1С:Предприятие 8.3 (Управляемые формы) администраторы и разработчики часто сталкиваются с тем, что пользователи непреднамеренно или умышленно ломают интерфейс программы. Они удаляют важные документы с начальной страницы, скрывают панели разделов или захламляют рабочую область лишними элементами с помощью стандартной кнопки «шестеренки» (Настройка панели действий и навигации).
Стандартная реакция администратора — отобрать у пользователя роль с правом «Сохранять данные пользователя» (СохранятьДанныеПользователя). Однако это радикальное действие влечет за собой серьезные побочные эффекты: пользователь больше не сможет сохранять свои варианты отчетов, настраивать ширину колонок в списках, сохранять историю выбора и другие персональные настройки, критически важные для комфортной работы.
В этой статье мы подробно проанализируем ситуацию, выясним причины такого поведения платформы и разберем по шагам несколько эффективных программных и архитектурных способов, позволяющих жестко зафиксировать интерфейс для определенных ролей (например, для менеджеров), сохранив при этом их право на полноценную работу с настройками отчетов.
---
Рассмотрим стандартный механизм работы платформы 1С. В конфигураторе мы можем открыть командный интерфейс рабочего стола или панели разделов и настроить видимость команд по ролям. Казалось бы, если мы снимем галочку видимости определенного документа для роли «Менеджер», то он не должен его видеть.
Но на практике это работает иначе:
Таким образом, стандартная настройка видимости в конфигураторе защищает интерфейс только от «ленивого» или нелюбопытного пользователя. Для полноценного контроля нам потребуются более надежные программные механизмы.
---
Проанализируем наиболее изящный способ решения задачи. Раз уж мы не можем физически убрать кнопку настроек («шестеренку») в тонком клиенте 1С, мы можем позволить пользователю изменять интерфейс в течение его сеанса, но при каждом новом входе в программу принудительно возвращать настройки интерфейса к утвержденному «эталону».
Для реализации этого метода мы будем использовать объект платформы ХранилищеСистемныхНастроек и ключ настроек "Общее/НастройкиИнтерфейсаКлиентскогоПриложения". Нам необходимо выполнить три шага.
Зайдем в режиме «1С:Предприятие» под специальным пользователем (например, «ШаблонМенеджера») и настроим его начальную страницу, панели разделов, навигации и действий так, как это должно выглядеть у всех реальных менеджеров.
Напишем временный код или обработку, которая считает эти настройки и сохранит их в базу данных (например, в константу с типом ХранилищеЗначения или в специальный справочник). Код для считывания выглядит следующим образом:
// Считываем эталонные настройки текущего (шаблонного) пользователя
ЭталонныеНастройки = ХранилищеСистемныхНастроек.Загрузить(
"Общее/НастройкиИнтерфейсаКлиентскогоПриложения",
""
);
// Сохраняем полученный объект в константу для последующего использования
Если ЭталонныеНастройки <> Неопределено Тогда
НачатьТранзакцию();
Попытка
Константы.ЭталонныеНастройкиИнтерфейсаМенеджера.Установить(Новый ХранилищеЗначения(ЭталонныеНастройки));
ЗафиксироватьТранзакцию();
Сообщить("Настройки успешно сохранены в качестве эталона!");
Исключение
ОтменитьТранзакцию();
ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЕсли;
Теперь перейдем в Модуль управляемого приложения и найдем предопределенный обработчик ПриНачалеРаботыСистемы. Добавим туда проверку роли пользователя и перезапись его настроек интерфейса данными из нашей константы:
Процедура ПриНачалеРаботыСистемы()
// Проверяем, относится ли пользователь к группе, которой нельзя менять интерфейс
Если РольДоступна("Менеджер") И НЕ РольДоступна("ПолныеПрава") Тогда
// Получаем эталонные настройки из константы (делаем вызов серверного метода)
ЭталонныеНастройки = ПолучитьЭталонныеНастройкиИзБазы();
Если ЭталонныеНастройки <> Неопределено Тогда
// Принудительно записываем настройки для текущего сеанса пользователя
ХранилищеСистемныхНастроек.Сохранить(
"Общее/НастройкиИнтерфейсаКлиентскогоПриложения",
"",
ЭталонныеНастройки
);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Результат: Даже если менеджер в процессе работы изменит расположение панелей или добавит лишние документы на начальную страницу, при следующем запуске системы программа автоматически вернет его рабочий стол к эталонному виду. Право сохранять настройки отчетов при этом полностью сохраняется!
---
Если задача стоит более жестко — сделать так, чтобы пользователь вообще не мог увидеть определенные команды в окне настройки навигации и действий — мы можем использовать механизм Функциональных опций (ФО).
Выясним причину, почему команды отображаются в списке доступных в окне настроек. Они отображаются там потому, что у пользователя есть права на сами объекты метаданных. Однако, если видимость команды или объекта привязана к функциональной опции, поведение платформы меняется:
Ложь, платформа считает этот функционал полностью выключенным для данного сеанса.Рассмотрим, как это настроить по шагам:
ТекущийПользователь).ДоступностьРасширенныхДокументов), хранилищем для которой будет выступать периодический регистр сведений или параметр сеанса.Ложь для пользователей с ролью «Менеджер».В результате менеджеры смогут полноценно работать с документами (например, если они открываются по ссылкам из других форм), но физически добавить эти документы себе на панель навигации через шестеренку они не смогут — этих пунктов просто не будет в списке выбора.
---
Разберем еще один оригинальный способ, предложенный в обсуждении на форуме. Он ориентирован на жесткий контроль состава форм именно на начальной странице (рабочем столе) 1С.
Начиная с версии платформы 8.3.5, разработчикам доступен объект НастройкиНачальнойСтраницы, с помощью которого можно программно управлять компоновкой рабочего стола.
Идея заключается в следующем: мы контролируем попытку пользователя закрыть обязательные формы начальной страницы.
ПриЗакрытии.ПрименитьНастройкиНачальнойСтраницы().Посмотрим на пример кода, который возвращает настройки начальной страницы в исходное состояние:
Процедура ВосстановитьНачальнуюСтраницу() Экспорт
// Создаем объект настроек начальной страницы
Настройки = Новый НастройкиНачальнойСтраницы;
// Задаем шаблон рабочей области: например, две колонки
Настройки.ВариантПолноэкранногоОтображения = ВариантПолноэкранногоОтображенияНачальнойСтраницы.Нет;
// Определяем форму, которая должна быть жестко зафиксирована слева
НоваяФорма = Новый ОписаниеФормыНачальнойСтраницы;
НоваяФорма.ИмяФормы = "Документ.ПродажиПокупателям.Форма.ФормаСписка";
НоваяФорма.Видимость = Истина;
// Добавляем форму в левую колонку рабочего стола
Настройки.ЛеваяКолонка.Добавить(НоваяФорма);
// Применяем настройки для текущего пользователя приложения
УстановитьНастройкиНачальнойСтраницы(Настройки);
КонецПроцедуры
Такой подход позволяет оперативно пресекать любые попытки пользователя «навести порядок» на рабочем столе в обход регламентов компании.
---
Если ваши сотрудники работают с базой 1С исключительно через веб-клиент (в браузере Chrome, Safari, Firefox), существует чисто техническая лазейка, позволяющая скрыть саму кнопку шестеренки с экрана.
Поскольку веб-клиент 1С генерирует стандартную HTML-страницу, все элементы интерфейса имеют свои CSS-классы. Мы можем принудительно внедрить кастомный стиль CSS на уровне веб-сервера (например, Apache или IIS), где опубликована база 1С.
Для этого выполняются следующие действия:
custom.css).
/* Пример скрытия кнопки настроек панелей навигации */
.p-settings-button, .navigation-panel-gear-icon {
display: none !important;
}
Важное ограничение: данный способ абсолютно бесполезен для пользователей тонкого и толстого клиентов 1С, так как там интерфейс отрисовывается платформой напрямую, без использования веб-технологий.
---
Мы детально изучили проблему ограничения настроек интерфейса в 1С:Предприятии 8.3 и пришли к выводу, что "серебряной пули" в виде одной галочки в правах не существует. Тем не менее, комбинируя различные подходы, мы можем решить эту задачу максимально эффективно:
Применение этих методов позволит вам сохранить порядок в интерфейсе пользователей, минимизировать количество обращений в службу поддержки с жалобами на «пропавшие кнопки» и при этом не ограничивать сотрудников в возможностях анализа данных и настройки отчетов.