В конфигурациях 1С:Предприятие 8, работающих в режиме обычного приложения (например, УПП 1.3, КА 1.1, БП 2.0 или УТ 10.3), разработчики часто сталкиваются с ситуацией, когда пользователю с ограниченными правами необходимо жестко зафиксировать определенный интерфейс. По умолчанию система предоставляет возможность переключения через меню Сервис — Переключить интерфейс. Даже если вы создали специальную роль и ограничили видимость объектов, наличие лишних интерфейсов путает пользователя и может открыть доступ к функционалу, который должен быть скрыт.
В этой статье мы подробно разберем, почему стандартные средства ограничения прав иногда не срабатывают, и рассмотрим несколько эффективных методов решения задачи: от административной настройки ролей до внесения изменений в программный код системы.
Разберем ситуацию: вы создали роль, зашли в закладку Интерфейсы и сняли флажки Использование со всех интерфейсов, кроме нужного. Однако при запуске программы пользователь все равно видит меню переключения. Выясним причину этого поведения. В большинстве типовых конфигураций существует роль Пользователь (или аналогичная), которая дает права на так называемый Общий интерфейс. Именно в этом интерфейсе обычно располагается системное меню Сервис с подменю Переключить интерфейс.
Если просто забрать права на Общий интерфейс у роли Пользователь, возникнет другая проблема: у пользователя могут исчезнуть стандартные системные меню, такие как Файл, Окна и Справка. Проанализируем, как можно обойти это ограничение корректно.
Этот способ является наиболее «чистым» с точки зрения архитектуры, так как не требует написания сложного кода, однако он требует внимательности при обновлении конфигурации. Рассмотрим шаги по реализации:
Продавец и Пользователь), изменения нужно вносить во все.Общий. Если вы оставите его включенным, пользователь увидит кнопку переключения. Если выключите — пропадут системные команды. Чтобы решить это, можно создать копию интерфейса Общий (назовем его ОбщийБезПереключения), удалить из его меню пункт Переключить интерфейс и назначить его ограниченной роли вместо стандартного Общего.Этот метод считается наиболее универсальным и гибким. Мы будем использовать глобальную коллекцию ГлавныйИнтерфейс, которая доступна в модуле обычного приложения. Рассмотрим программный код, который позволяет принудительно скрыть лишние интерфейсы и запретить их переключение.
Для реализации этого метода нам нужно открыть Модуль обычного приложения и найти процедуру ПриНачалеРаботыСистемы. Добавим в нее следующий алгоритм:
Процедура ПриНачалеРаботыСистемы()
// Получаем текущего пользователя информационной базы
ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
// Проверяем, задан ли основной интерфейс в настройках пользователя
Если ТекущийПользовательИБ.ОсновнойИнтерфейс <> Неопределено Тогда
// Определяем имя основного интерфейса
ИмяИнт = ТекущийПользовательИБ.ОсновнойИнтерфейс.Имя;
// Если пользователь не обладает полными правами, ограничиваем его
Если НЕ РольДоступна("ПолныеПрава") Тогда
// Проходим циклом по всем интерфейсам системы
Для каждого ТекИнтерфейс Из ГлавныйИнтерфейс Цикл
ТекИнтерфейс.Переключаемый = Ложь;
ТекИнтерфейс.Видимость = Ложь;
КонецЦикла;
// Активируем только тот интерфейс, который назначен пользователю как основной
НужныйИнтерфейс = ГлавныйИнтерфейс[ИмяИнт];
НужныйИнтерфейс.Переключаемый = Истина;
НужныйИнтерфейс.Видимость = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Проанализируем работу этого кода. Мы устанавливаем свойство Переключаемый в значение Ложь для всех интерфейсов, кроме основного. Это физически удаляет список выбора из системных меню. Свойство Видимость = Ложь скрывает панели инструментов, принадлежащие другим интерфейсам.
Если в вашей конфигурации (например, в УПП или КА) развита подсистема дополнительных прав пользователей, можно интегрировать запрет переключения прямо в настройки прав. Посмотрим на пример реализации, когда мы создаем новое право РазрешитьПереключатьИнтерфейс.
Рассмотрим порядок действий:
ПланВидовХарактеристик.ПраваПользователей добавим новое предопределенное значение РазрешитьПереключатьИнтерфейс (тип Булево).ПриНачалеРаботыСистемы добавим проверку этого права.
// Проверка права на переключение интерфейса
ЗначениеПрава = УправлениеДопПравамиПользователей.ПолучитьЗначениеПраваПользователя(
ПланыВидовХарактеристик.ПраваПользователей.РазрешитьПереключатьИнтерфейс);
Если ЗначениеПрава = Ложь Тогда
Для каждого Инт Из ГлавныйИнтерфейс Цикл
// Оставляем видимым только основной интерфейс, запрещая переключение
Если Инт.Имя <> ТекущийПользовательИБ.ОсновнойИнтерфейс.Имя Тогда
Инт.Видимость = Ложь;
КонецЕсли;
Инт.Переключаемый = Ложь;
КонецЦикла;
КонецЕсли;
Преимущество этого метода: администратору не нужно лезть в конфигуратор каждый раз, когда нужно разрешить или запретить переключение конкретному человеку. Достаточно изменить галочку в режиме 1С:Предприятие в настройках пользователя.
Как мы уже выяснили, при отключении Общего интерфейса пропадают системные функции. Рассмотрим, как правильно модифицировать конфигурацию, чтобы избежать этого эффекта:
Общий_Ограниченный.Общий, но удалим подменю Переключить интерфейс и, при необходимости, другие опасные пункты (например, консоль отчетов или запуск внешних обработок).
// Задействуем ограниченный общий интерфейс для доступа к системным меню
ОбщийДоп = ГлавныйИнтерфейс.Общий_Ограниченный;
ОбщийДоп.Переключаемый = Ложь; // Чтобы его нельзя было выбрать из списка
ОбщийДоп.Видимость = Истина; // Чтобы он всегда был активен
Таким образом, у пользователя всегда будут под рукой команды Печать, Сохранить как и Справка, но возможность сменить рабочую среду будет заблокирована.
При реализации запрета переключения интерфейсов следует помнить о следующих моментах:
Автоматическое создание интерфейсов. Если оно включено, платформа может самостоятельно добавлять пункты меню, игнорируя ваши настройки. Для жесткого контроля его лучше отключить.v8user.lst). В таких случаях помогает очистка кэша или принудительная установка ОсновнойИнтерфейс в коде при первом входе.Полные права. Если она есть, любые программные ограничения интерфейса могут быть легко обойдены через стандартные механизмы платформы.Подводя итог, можно сказать, что наиболее надежным решением является сочетание Метода 2 (программное управление в ПриНачалеРаботыСистемы) и Метода 4 (создание урезанной версии общего интерфейса). Это гарантирует стабильную работу программы и исключает человеческий фактор при настройке прав доступа.