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