Как программно скрыть разделы интерфейса в 1С:Предприятие 8.3?

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

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

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

Способ 1. Программное управление составом панелей через настройки интерфейса

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

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

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


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

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

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

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

Разберем этот механизм по шагам:

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

Посмотрим на пример реализации программной установки параметров функциональных опций:


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

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

Способ 3. Особенности работы в конфигурациях на базе БСП (Библиотека стандартных подсистем)

При работе в типовых конфигурациях (таких как 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей или 1С:Бухгалтерия) прямое сохранение настроек интерфейса в ХранилищеСистемныхНастроек может работать некорректно. Дело в том, что БСП активно управляет настройками пользователей при первом входе в систему и может затирать или перезаписывать ручные изменения разработчика.

Чтобы выполнить задачу корректно и в соответствии со стандартами разработки фирмы «1С», нам необходимо использовать переопределяемый модуль БСП. Выясним, как это сделать:

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

Проанализируем программный код интеграции нашего решения в структуру БСП:


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

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

Важные ограничения программных методов и безопасность данных

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

  1. Интерактивный возврат настроек пользователем: Если у пользователя в назначенных ему ролях не отключено системное право «Сохранение данных пользователя» (которое по умолчанию присутствует практически во всех стандартных ролях), он сможет легко обойти программное скрытие панелей. Для этого ему достаточно зайти в главное меню программы, выбрать «Вид» -> «Настройка панелей» и нажать кнопку «Стандартные». Панель разделов тут же вернется на экран. Чтобы этого избежать, для целевых пользователей необходимо создать жестко ограниченную роль, где право на сохранение настроек отключено.
  2. Косметический характер скрытия: Помните, что визуальное скрытие разделов (через ФО или настройки интерфейса) — это исключительно косметическая мера. Если у пользователя в ролях физически остаются права на чтение и изменение документов скрытых подсистем, он сможет получить к ним доступ. Продвинутый пользователь сможет открыть формы документов через меню «Функции для технического специалиста» (ранее «Все функции»), глобальный поиск, внешние обработки или по навигационной ссылке.
  3. Комплексный подход: Для надежного скрытия данных и разделов всегда сочетайте визуальное скрытие с ограничением прав на уровне СУБД (через роли конфигурации и механизмы RLS). Визуальное скрытие разгружает внимание пользователя, а ограничение ролей — защищает коммерческие данные компании от несанкционированного доступа.

Мы подробно разобрали, как с помощью встроенного языка 1С управлять видимостью элементов интерфейса, рассмотрели особенности работы с объектной моделью настроек, функциональными опциями и механизмами БСП. Применяйте эти подходы в своей практике для создания удобных и интуитивно понятных рабочих мест для ваших пользователей!

← На главную