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

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

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

Ограничения платформы при программном управлении панелью разделов

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

  1. Расположение и состав панелей: управляется объектом НастройкиИнтерфейсаКлиентскогоПриложения и сохраняется по ключу "Общее/НастройкиИнтерфейсаКлиентскогоПриложения". Данный механизм позволяет включать, скрывать или перемещать панели целиком (панель разделов, панель открытых, панель функций текущего раздела и т.д.), но не управляет составом конкретных подсистем внутри панели разделов.
  2. Состав разделов и команд: хранится в объекте НастройкиКомандногоИнтерфейса в ХранилищеСистемныхНастроек по ключу "Общее/ПанельРазделов/НастройкиКомандногоИнтерфейса". У данного объекта в объектной модели платформы нет открытых методов для прямого программного добавления или скрытия конкретных разделов (например, метода вида «СкрытьРаздел»).

Рассмотрим рабочий пример программной настройки состава самих панелей клиентского приложения:


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

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

Способ 1. Использование профилей групп доступа (штатный механизм БСП)

В большинстве типовых конфигураций на базе Библиотеки стандартных подсистем (БСП) видимость разделов привязана к интерфейсным ролям (с префиксами Раздел... или Подсистема...). Это наиболее правильный путь, не требующий изменения конфигурации:

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

Способ 2. Тиражирование настроек командного интерфейса от эталонного пользователя

Если требуется предоставить доступ к объектам, но скрыть сам раздел из интерфейса, воспользуемся копированием настроек командного интерфейса:

  1. Создадим или выберем эталонного пользователя.
  2. Выполним интерактивную настройку состава разделов под этой учетной записью через Главное меню — Вид — Настройка панели разделов, убрав лишние разделы.
  3. Скопируем настройки остальным пользователям одним из способов:
    1. Используя типовую обработку БСП Копирование настроек пользователей (раздел «Администрирование»), выбрав копирование командного интерфейса.
    2. Программно скопировав сохраненный объект через ХранилищеСистемныхНастроек:

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

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

Способ 3. Принудительное применение настроек при старте сеанса

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

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

Способ 4. Доработка через расширение конфигурации

Если типовую конфигурацию нельзя снимать с поддержки, а штатных ролей недостаточно для точной настройки видимости подсистем, используем механизм расширений:

  1. Создадим расширение конфигурации.
  2. Перенесем в расширение требуемые подсистемы и роли.
  3. Переопределим командный интерфейс конфигурации или права на подсистемы в рамках расширения без изменения основной конфигурации.
← На главную