Как запретить пользователю переключать интерфейс в 1С

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

В конфигурациях 1С:Предприятие 8, работающих в режиме обычного приложения (например, УПП 1.3, КА 1.1, БП 2.0 или УТ 10.3), разработчики часто сталкиваются с ситуацией, когда пользователю с ограниченными правами необходимо жестко зафиксировать определенный интерфейс. По умолчанию система предоставляет возможность переключения через меню Сервис — Переключить интерфейс. Даже если вы создали специальную роль и ограничили видимость объектов, наличие лишних интерфейсов путает пользователя и может открыть доступ к функционалу, который должен быть скрыт.

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

Почему стандартное снятие галочек в ролях не всегда помогает?

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

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

Метод 1. Настройка прав доступа через Конфигуратор

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

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

Метод 2. Программное управление интерфейсами при запуске

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

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


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

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

Метод 3. Использование дополнительных прав (План видов характеристик)

Если в вашей конфигурации (например, в УПП или КА) развита подсистема дополнительных прав пользователей, можно интегрировать запрет переключения прямо в настройки прав. Посмотрим на пример реализации, когда мы создаем новое право РазрешитьПереключатьИнтерфейс.

Рассмотрим порядок действий:

  1. В объекте ПланВидовХарактеристик.ПраваПользователей добавим новое предопределенное значение РазрешитьПереключатьИнтерфейс (тип Булево).
  2. В модуле обычного приложения в процедуре ПриНачалеРаботыСистемы добавим проверку этого права.

// Проверка права на переключение интерфейса
ЗначениеПрава = УправлениеДопПравамиПользователей.ПолучитьЗначениеПраваПользователя(
    ПланыВидовХарактеристик.ПраваПользователей.РазрешитьПереключатьИнтерфейс);

Если ЗначениеПрава = Ложь Тогда
    Для каждого Инт Из ГлавныйИнтерфейс Цикл
        // Оставляем видимым только основной интерфейс, запрещая переключение
        Если Инт.Имя <> ТекущийПользовательИБ.ОсновнойИнтерфейс.Имя Тогда
            Инт.Видимость = Ложь;
        КонецЕсли;
        Инт.Переключаемый = Ложь;
    КонецЦикла;
КонецЕсли;

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

Метод 4. Решение проблемы исчезающих меню Файл и Справка

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

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

// Задействуем ограниченный общий интерфейс для доступа к системным меню
ОбщийДоп = ГлавныйИнтерфейс.Общий_Ограниченный;
ОбщийДоп.Переключаемый = Ложь; // Чтобы его нельзя было выбрать из списка
ОбщийДоп.Видимость = Истина;  // Чтобы он всегда был активен

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

Дополнительные рекомендации

При реализации запрета переключения интерфейсов следует помнить о следующих моментах:

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

← На главную