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