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

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

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

Способ 1. Настройка панели разделов в пользовательском режиме

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

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

Способ 2. Программное копирование настроек через ХранилищеСистемныхНастроек

Разберем по шагам более продвинутый метод. Все изменения, которые пользователь вносит в интерфейс вручную, сохраняются в специальном объекте — ХранилищеСистемныхНастроек. К этим данным можно получить доступ программно. Это позволяет нам один раз настроить интерфейс «как надо» и при каждом входе или по специальной команде подтягивать эту настройку нужным пользователям. Также существуют готовые алгоритмы для сохранения настроек формы для всех пользователей.

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


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

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

Этот метод хорош тем, что он не затрагивает права доступа (роли). Пользователь по-прежнему может открывать объекты через поиск или ссылки, но его рабочее пространство остается чистым и не перегруженным.

Способ 3. Использование функциональных опций

Проанализируем ситуацию, когда разделы нужно скрывать массово или в зависимости от определенных условий бизнеса. В 1С существует мощный механизм — ФункциональныеОпции. Мы можем создать функциональную опцию, привязать ее к конкретной подсистеме (разделу) и управлять ее видимостью через константу или регистр сведений.

Если источником данных для функциональной опции сделать регистр сведений в разрезе пользователей, то система сама, на уровне платформы, будет скрывать разделы для тех, у кого в регистре стоит соответствующий флаг. Это наиболее правильный архитектурный подход («best practice»), так как он встроен в ядро платформы 8.3.

Способ 4. Программное управление интерфейсом при старте системы

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

Рассмотрим пример реализации в процедуре ПриНачалеРаботыСистемы. Допустим, нам нужно скрыть все, кроме раздела «Главное» для определенных пользователей:


Процедура ПриНачалеРаботыСистемы()
    
    // Проверяем условие (например, роль или имя пользователя)
    Если РольДоступна("СпециальнаяРольОграниченногоИнтерфейса") Тогда
        
        Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
        
        // Создаем структуру состава панелей
        СоставПанелей = Новый СоставПанелейИнтерфейсаКлиентскогоПриложения;
        
        // Оставляем только нужные панели, остальные скрываем
        // В данном примере мы можем управлять видимостью всей панели разделов
        // Или настраивать ее содержимое через интерфейсные настройки
        
        // Применяем настройки
        УстановитьНастройкиИнтерфейсаКлиентскогоПриложения(Настройки);
        
    КонецЕсли;

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

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

Способ 5. Механизмы БСП (Библиотеки стандартных подсистем)

Если ваша конфигурация разработана на базе БСП (что актуально для БП 3.0, УТ 11, ЗУП 3), то задача существенно упрощается. В БСП уже есть готовые инструменты для администратора. Выясним, как ими воспользоваться:

  1. Перейдите в раздел Администрирование — Настройки пользователей и прав.
  2. Выберите пункт Пользователи.
  3. В карточке пользователя или в списке воспользуйтесь кнопкой Настройки — Копирование настроек.
  4. В открывшемся окне можно выбрать конкретные настройки внешнего вида (включая панель разделов) и скопировать их от одного пользователя другим.

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

Способ 6. Режим «Рабочего стола» (Desktop Mode)

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

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

Подводя итог, выбор метода зависит от ваших целей:

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

← На главную