Как настроить доступность отдельных элементов интерфейса в обычных формах 1С?

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

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

Ограничения объекта метаданных «Интерфейс»

Проанализируем структуру работы с интерфейсами в обычном приложении. Объект метаданных Интерфейс в платформе 1С:Предприятие не предоставляет разработчику объектной модели для динамического управления отдельными элементами, подменю или кнопками панелей инструментов. В коллекциях встроенного языка нет возможности обратиться к конкретному пункту меню и установить для него значение Доступность = Ложь.

Через глобальный контекст и объект ГлавныйИнтерфейс доступно только переключение интерфейсов целиком с помощью метода ГлавныйИнтерфейс.ПереключитьИнтерфейс(). Управлять состоянием отдельных веток внутри одного назначенного интерфейса программно невозможно.

Тем не менее решить задачу разграничения доступа к функциям системы можно несколькими стандартными и проверенными способами.

Способ 1. Создание специализированных интерфейсов для групп пользователей

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

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

Способ 2. Автоматическое управление видимостью через роли и права доступа

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

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

Способ 3. Перенос навигации на форму рабочего стола

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

Посмотрим на пример реализации. Создадим форму рабочего стола и добавим на нее командные кнопки. В модуле формы в процедуре ПриОткрытии опишем проверку доступных прав:


Процедура ПриОткрытии()
    
    // Проверяем наличие роли или права доступа к объекту
    ДоступностьЖурнала = ПравоДоступа("Чтение", Метаданные.Документы.РеализацияТоваровУслуг);
    
    // Управляем доступностью элементов формы
    ЭлементыФормы.КнопкаОткрытьРеализации.Доступность = ДоступностьЖурнала;
    ЭлементыФормы.КнопкаСформироватьОтчет.Доступность = РольДоступна("ПолныеПрава");
    
КонецПроцедуры

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

Способ 4. Программный контроль в обработчиках действий

Если пункт меню привязан к выполнению процедуры общего модуля, выполним проверку прав непосредственно перед исполнением алгоритма. Разберем по шагам, как предотвратить несанкционированное действие:


Процедура ДействиеПунктМеню() Экспорт
    
    Если Не РольДоступна("ОтветственныйЗаПроведение") Тогда
        Предупреждение("У вас недостаточно прав для выполнения этой операции!");
        Возврат;
    КонецЕсли;
    
    // Основная логика процедуры
    ВыполнитьОбработкуДанных();
    
КонецПроцедуры

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

← На главную