В процессе разработки и настройки прав доступа в конфигурациях 1С:Предприятие 8 на обычных формах часто возникает необходимость ограничить доступ пользователей к системным пунктам меню, таким как «Сервис». По умолчанию платформа 1С автоматически подтягивает это меню из «Общего» интерфейса, что создает трудности, если мы хотим создать специализированный интерфейс для конкретного пользователя.
Рассмотрим подробно несколько стратегий решения этой задачи, от простых настроек интерфейсов до программного управления видимостью.
Самый надежный и «чистый» способ — это жесткое определение состава интерфейса на этапе разработки. Этот метод позволяет создать «маленький» интерфейс, в котором отсутствуют лишние элементы.
Интерфейсы.Копировать.Сервис и удалите его, используя соответствующую команду контекстного меню.1С:Предприятие через Администрирование -> Пользователи (поле Основной интерфейс).Важное примечание: При обновлении типовых конфигураций дополнительные интерфейсы сохраняются. Однако, если в типовой интерфейс добавляются новые важные пункты, вам придется вручную внести изменения в ваш созданный интерфейс.
Иногда нет необходимости скрывать само меню «Сервис», нужно лишь запретить пользователю выполнять действия, скрытые внутри него. Платформа 1С обладает встроенным механизмом фильтрации командного интерфейса.
Если у пользователя в Ролях нет доступа на запуск конкретных обработок, отчетов или функций, которые находятся в меню Сервис, то при попытке их использования система выдаст сообщение: Нарушение прав доступа. Более того, во многих случаях пункты, к которым у пользователя нет прав, скрываются автоматически. Проанализируйте профиль прав пользователя и уберите лишние доступы — это самый архитектурно верный путь.
Если требуется динамически скрывать меню для определенных групп пользователей, можно воспользоваться программным методом в модуле управляемого приложения. Этот подход работает в толстом клиенте или обычном режиме работы.
Разберем пример кода, который необходимо разместить в процедуре ПриНачалеРаботыСистемы. Этот алгоритм перебирает все доступные интерфейсы и скрывает их, оставляя видимым только основной интерфейс пользователя:
Процедура ПриНачалеРаботыСистемы()
Если РольДоступна("ПолныеПрава") Тогда
Возврат;
КонецЕсли;
ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
ИнтерфейсПользователя = ПользовательИБ.ОсновнойИнтерфейс;
Если ИнтерфейсПользователя = Неопределено Тогда
Возврат;
КонецЕсли;
#Если Клиент Тогда
Для каждого ТекИнтерфейс Из ГлавныйИнтерфейс Цикл
ТекИнтерфейс.Переключаемый = Ложь;
ТекИнтерфейс.Видимость = Ложь;
КонецЦикла;
мИнтерфейс = ГлавныйИнтерфейс.Найти(ИнтерфейсПользователя.Имя);
Если мИнтерфейс <> Неопределено Тогда
мИнтерфейс.Переключаемый = Истина;
мИнтерфейс.Видимость = Истина;
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Данный код позволяет жестко зафиксировать интерфейс пользователя и скрыть все остальные, включая «Общий». Помните, что использование ГлавныйИнтерфейс эффективно только в обычном приложении.
Если ваша задача — максимально ограничить рабочее пространство пользователя, чтобы он не отвлекался на системные панели, можно настроить параметры отображения форм в конфигураторе:
СпособОтображенияОкна в значение Максимизированное.СостояниеОкна как Свободное.Эти настройки позволяют развернуть форму на весь экран, визуально скрывая лишние панели инструментов и меню, предоставляя пользователю только рабочую область. Для скрытия системного заголовка и развертывания окна на весь экран подойдёт решение для запуска 1С на обычных формах в полноэкранном режиме.
Заключение: Выбор метода зависит от ваших задач. Для постоянной настройки лучше всего подходит создание отдельного интерфейса в конфигураторе. Для гибкого управления безопасностью используйте настройку Ролей. Программные методы рекомендуем применять только в случае сложной логики, когда интерфейс должен меняться «на лету» в зависимости от условий работы.