В типовой конфигурации «1С:Управление производственным предприятием» (УПП 1.3) механизм произвольных отчетов (расположенный по пути Сервис — Произвольные отчеты) предоставляет пользователям мощный инструмент для построения аналитики на базе Системы компоновки данных (СКД). Однако на практике часто возникает задача ограничить доступ к определенным отчетам. Например, когда отчет содержит конфиденциальные данные о себестоимости, продажах или управленческой прибыли, и его должны видеть только определенные сотрудники.
Сложность заключается в том, что в стандартном справочнике ПроизвольныеОтчеты нет встроенной и гибкой настройки прав в разрезе отдельных элементов для конкретных пользователей. В этой статье мы подробно разберем несколько эффективных способов решения этой задачи, начиная от простых административных настроек без изменения конфигурации и заканчивая программными методами.
---
Если нам необходимо полностью скрыть конкретный отчет от глаз нежелательных пользователей, лучшим и наиболее безопасным решением будет выгрузка схемы компоновки данных (СКД) и ее регистрация в качестве внешнего отчета.
Рассмотрим пошагово, как реализовать этот подход:
.erf).Этот метод позволяет полностью избежать изменения типовой конфигурации, сохраняя базу на поддержке, и гибко управлять видимостью отчета средствами стандартного администрирования.
---
Если конфигурация вашей базы уже находится на доработке или вы можете внести точечные изменения, наиболее надежным техническим решением будет проверка доступности определенной роли при попытке открыть отчет. Это исключит ситуацию, когда пользователь пытается запустить отчёт в обход интерфейса.
Проанализируем пример кода, который необходимо разместить в модуле формы отчета (в обработчике события ПриОткрытии):
Процедура ПриОткрытии(Отказ)
// Проверяем, обладает ли текущий пользователь специализированной ролью или полными правами
Если НЕ РольДоступна("Доступ к конфиденциальным отчетам") И НЕ РольДоступна("ПолныеПрава") Тогда
Предупреждение("У вас недостаточно прав для просмотра данного отчета!", 10, "Ограничение доступа");
Отказ = Истина; // Блокируем открытие формы отчета
КонецЕсли;
КонецПроцедуры
В данном сценарии мы создаем в конфигураторе новую роль (например, ДоступККонфиденциальнымОтчетам) без назначения ей каких-либо тяжелых прав на объекты метаданных — она будет служить исключительно "маркером" доступа. Затем мы назначаем эту роль нужным пользователям. Если пользователь без этой роли попытается открыть отчет, система выдаст предупреждение и отменит открытие формы благодаря параметру Отказ = Истина.
---
Иногда задача стоит иначе: пользователю можно открывать отчет, но он должен видеть в нем только те данные, которые разрешены его правами (например, информацию только по своей организации или своему складу). В этом случае на помощь приходит встроенный в платформу 1С механизм RLS (Record Level Security).
Выясним, как правильно спроектировать запрос в СКД для работы с RLS:
РАЗРЕШЕННЫЕ сразу после оператора ВЫБРАТЬ.ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Продажи.Период....<Объект не найден> или будут полностью скрыты.---
В 1С:УПП 1.3 реализован стандартный механизм сохранения вариантов отчетов. Если сам отчет не содержит критически секретной структуры, но содержит сложные преднастроенные отборы и группировки, доступ к которым нужно ограничить, мы можем воспользоваться разграничением прав на уровне сохраненных настроек.
Разберем, как это работает:
В результате другие сотрудники при открытии этого же произвольного отчета увидят лишь пустую стандартную схему. Им придется настраивать все группировки и формулы с нуля, что для рядового пользователя практически невыполнимо без детального знания структуры метаданных.
---
Если ваша база 1С:УПП 1.3 работает на современной версии платформы 1С:Предприятие 8.3, поддерживающей механизм расширений, и режим совместимости конфигурации позволяет их использовать, это открывает отличные возможности для кастомизации без изменения основной конфигурации.
С помощью расширения мы можем решить задачу изящно:
ПроизвольныеОтчеты.&После или &Вместо и программно установить отбор на список, чтобы пользователи видели только разрешенные им строки.Проанализируем пример кода в расширении для формы списка справочника:
&НаСервере
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Ограничиваем видимость элементов справочника на уровне динамического списка
Если НЕ РольДоступна("ПолныеПрава") Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.Наименование");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.ПравоеЗначение = "Конфиденциальный отчет по прибыли";
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
Используя приведенные методы, вы сможете гибко настроить безопасность работы с корпоративной аналитикой и защитить коммерческие данные вашей компании от несанкционированного просмотра.