Как запретить пользователям изменять настройки начальной страницы и панелей навигации в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Стандартная реакция администратора — отобрать у пользователя роль с правом «Сохранять данные пользователя» (СохранятьДанныеПользователя). Однако это радикальное действие влечет за собой серьезные побочные эффекты: пользователь больше не сможет сохранять свои варианты отчетов, настраивать ширину колонок в списках, сохранять историю выбора и другие персональные настройки, критически важные для комфортной работы.

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

---

Почему стандартная настройка видимости в Конфигураторе не решает проблему?

Рассмотрим стандартный механизм работы платформы 1С. В конфигураторе мы можем открыть командный интерфейс рабочего стола или панели разделов и настроить видимость команд по ролям. Казалось бы, если мы снимем галочку видимости определенного документа для роли «Менеджер», то он не должен его видеть.

Но на практике это работает иначе:

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

Таким образом, стандартная настройка видимости в конфигураторе защищает интерфейс только от «ленивого» или нелюбопытного пользователя. Для полноценного контроля нам потребуются более надежные программные механизмы.

---

Способ 1. Принудительный сброс настроек интерфейса при запуске системы (Рекомендуемый)

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

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

Шаг 1. Создание эталонных настроек

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

Шаг 2. Программный экспорт эталонных настроек

Напишем временный код или обработку, которая считает эти настройки и сохранит их в базу данных (например, в константу с типом ХранилищеЗначения или в специальный справочник). Код для считывания выглядит следующим образом:


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

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

Шаг 3. Принудительное применение настроек при начале работы

Теперь перейдем в Модуль управляемого приложения и найдем предопределенный обработчик ПриНачалеРаботыСистемы. Добавим туда проверку роли пользователя и перезапись его настроек интерфейса данными из нашей константы:


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

Результат: Даже если менеджер в процессе работы изменит расположение панелей или добавит лишние документы на начальную страницу, при следующем запуске системы программа автоматически вернет его рабочий стол к эталонному виду. Право сохранять настройки отчетов при этом полностью сохраняется!

---

Способ 2. Использование Функциональных Опций для жесткого скрытия команд

Если задача стоит более жестко — сделать так, чтобы пользователь вообще не мог увидеть определенные команды в окне настройки навигации и действий — мы можем использовать механизм Функциональных опций (ФО).

Выясним причину, почему команды отображаются в списке доступных в окне настроек. Они отображаются там потому, что у пользователя есть права на сами объекты метаданных. Однако, если видимость команды или объекта привязана к функциональной опции, поведение платформы меняется:

  1. Если функциональная опция для текущего пользователя возвращает значение Ложь, платформа считает этот функционал полностью выключенным для данного сеанса.
  2. В этом случае команды объектов не просто скрываются с экрана, они полностью удаляются из списков доступных команд в окне настройки навигации (под шестеренкой).

Рассмотрим, как это настроить по шагам:

  1. Создадим новый параметр функциональных опций (например, ТекущийПользователь).
  2. Создадим Функциональную Опцию (например, ДоступностьРасширенныхДокументов), хранилищем для которой будет выступать периодический регистр сведений или параметр сеанса.
  3. В конфигураторе привяжем команды «проблемных» документов или отчетов к этой функциональной опции.
  4. При старте системы будем устанавливать значение этой ФО в значение Ложь для пользователей с ролью «Менеджер».

В результате менеджеры смогут полноценно работать с документами (например, если они открываются по ссылкам из других форм), но физически добавить эти документы себе на панель навигации через шестеренку они не смогут — этих пунктов просто не будет в списке выбора.

---

Способ 3. Динамический контроль состава форм начальной страницы

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

Начиная с версии платформы 8.3.5, разработчикам доступен объект НастройкиНачальнойСтраницы, с помощью которого можно программно управлять компоновкой рабочего стола.

Идея заключается в следующем: мы контролируем попытку пользователя закрыть обязательные формы начальной страницы.

  1. При начале работы системы мы считываем и запоминаем эталонный состав форм начальной страницы в параметрах сеанса или глобальной переменной.
  2. Для всех обязательных форм рабочего стола в модуле формы прописываем обработчик события ПриЗакрытии.
  3. Если пользователь пытается закрыть форму, обработчик перехватывает это действие и запускает процедуру проверки общего модуля.
  4. Если состав форм нарушен, мы можем программно переустановить настройки обратно, используя метод ПрименитьНастройкиНачальнойСтраницы().

Посмотрим на пример кода, который возвращает настройки начальной страницы в исходное состояние:


Процедура ВосстановитьНачальнуюСтраницу() Экспорт
    
    // Создаем объект настроек начальной страницы
    Настройки = Новый НастройкиНачальнойСтраницы;
    
    // Задаем шаблон рабочей области: например, две колонки
    Настройки.ВариантПолноэкранногоОтображения = ВариантПолноэкранногоОтображенияНачальнойСтраницы.Нет;
    
    // Определяем форму, которая должна быть жестко зафиксирована слева
    НоваяФорма = Новый ОписаниеФормыНачальнойСтраницы;
    НоваяФорма.ИмяФормы = "Документ.ПродажиПокупателям.Форма.ФормаСписка";
    НоваяФорма.Видимость = Истина;
    
    // Добавляем форму в левую колонку рабочего стола
    Настройки.ЛеваяКолонка.Добавить(НоваяФорма);
    
    // Применяем настройки для текущего пользователя приложения
    УстановитьНастройкиНачальнойСтраницы(Настройки);
    
КонецПроцедуры

Такой подход позволяет оперативно пресекать любые попытки пользователя «навести порядок» на рабочем столе в обход регламентов компании.

---

Способ 4. CSS-инъекция для Веб-клиента (Решение для браузеров)

Если ваши сотрудники работают с базой 1С исключительно через веб-клиент (в браузере Chrome, Safari, Firefox), существует чисто техническая лазейка, позволяющая скрыть саму кнопку шестеренки с экрана.

Поскольку веб-клиент 1С генерирует стандартную HTML-страницу, все элементы интерфейса имеют свои CSS-классы. Мы можем принудительно внедрить кастомный стиль CSS на уровне веб-сервера (например, Apache или IIS), где опубликована база 1С.

Для этого выполняются следующие действия:

  1. На веб-сервере в каталоге публикации базы находится файл темы оформления или главный файл стилей (например, custom.css).
  2. В этот файл добавляется правило, скрывающее элемент интерфейса панели настроек:
    
    /* Пример скрытия кнопки настроек панелей навигации */
    .p-settings-button, .navigation-panel-gear-icon {
        display: none !important;
    }
    
  3. После этого у всех пользователей, открывающих 1С в браузере, кнопка настройки навигации физически исчезнет с экрана.

Важное ограничение: данный способ абсолютно бесполезен для пользователей тонкого и толстого клиентов 1С, так как там интерфейс отрисовывается платформой напрямую, без использования веб-технологий.

---

Резюме и рекомендации

Мы детально изучили проблему ограничения настроек интерфейса в 1С:Предприятии 8.3 и пришли к выводу, что "серебряной пули" в виде одной галочки в правах не существует. Тем не менее, комбинируя различные подходы, мы можем решить эту задачу максимально эффективно:

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

← На главную