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