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