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

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

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

Способ 1. Использование расширений конфигурации и уточняющих ролей

Самый правильный путь с точки зрения поддержки системы — это работа через расширения конфигурации. В типовых решениях права часто настроены «широкими мазками». Например, роль ЧтениеДанныхБухгалтерии дает доступ к просмотру множества подсистем сразу. Если мы просто уберем эту роль у пользователя, он потеряет доступ к важным объектам в других разделах.

Разберем по шагам, как решить задачу через расширение:

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

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

Способ 2. Функциональные опции и параметры сеанса

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

Выясним, как связать функциональную опцию с конкретным пользователем. Если мы привяжем ФО к константе, раздел скроется у всех. Чтобы сделать это индивидуально, используем Параметры сеанса.

Рассмотрим алгоритм реализации:

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

Посмотрим на пример кода, который нужно разместить в модуле сеанса:


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

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

Способ 3. Программное управление через УстановитьПараметрыФункциональныхОпцийИнтерфейса

Иногда требуется изменить интерфейс «на лету» без перезагрузки сеанса или в очень специфических условиях. Для этого в платформе существует метод УстановитьПараметрыФункциональныхОпцийИнтерфейса(). Он работает на стороне клиента и перестраивает интерфейс немедленно.

Рассмотрим подробнее использование этого метода в модуле управляемого приложения:


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

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

Способ 4. Косметическое скрытие через настройки интерфейса

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

Разберем по шагам:

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

Это самый быстрый способ, но помните: пользователь сможет зайти в те же настройки и вернуть раздел обратно, если у него есть на это права.

Меры предосторожности: «Все функции» и связанные объекты

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

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

← На главную