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