Как настроить права доступа для произвольных отчетов в 1С:УПП 1.3

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В типовой конфигурации «1С:Управление производственным предприятием» (УПП 1.3) механизм произвольных отчетов (расположенный по пути Сервис — Произвольные отчеты) предоставляет пользователям мощный инструмент для построения аналитики на базе Системы компоновки данных (СКД). Однако на практике часто возникает задача ограничить доступ к определенным отчетам. Например, когда отчет содержит конфиденциальные данные о себестоимости, продажах или управленческой прибыли, и его должны видеть только определенные сотрудники.

Сложность заключается в том, что в стандартном справочнике ПроизвольныеОтчеты нет встроенной и гибкой настройки прав в разрезе отдельных элементов для конкретных пользователей. В этой статье мы подробно разберем несколько эффективных способов решения этой задачи, начиная от простых административных настроек без изменения конфигурации и заканчивая программными методами.

---

Способ 1. Перенос схемы в «Дополнительные отчеты и обработки» (Рекомендуемый без программирования)

Если нам необходимо полностью скрыть конкретный отчет от глаз нежелательных пользователей, лучшим и наиболее безопасным решением будет выгрузка схемы компоновки данных (СКД) и ее регистрация в качестве внешнего отчета.

Рассмотрим пошагово, как реализовать этот подход:

  1. Откроем нужный произвольный отчет в режиме «1С:Предприятие».
  2. Перейдем в настройки схемы компоновки данных и выгрузим схему СКД в внешний XML-файл на диск.
  3. Запустим конфигуратор 1С, создадим новый внешний отчет (файл с расширением .erf).
  4. Добавим в созданный внешний отчет макет с типом «Схема компоновки данных» и импортируем ранее сохраненный XML-файл.
  5. Назначим эту схему основной схемой компоновки для внешнего отчета и сохраним файл.
  6. Вернемся в режим «1С:Предприятие» и перейдем в меню Сервис — Дополнительные отчеты и обработки — Дополнительные внешние отчеты.
  7. Зарегистрируем наш отчет в справочнике. В форме настройки элемента мы сможем четко указать список пользователей, у которых будет «Быстрый доступ» к этому отчету, а также определить разделы интерфейса, в которых он будет отображаться.

Этот метод позволяет полностью избежать изменения типовой конфигурации, сохраняя базу на поддержке, и гибко управлять видимостью отчета средствами стандартного администрирования.

---

Способ 2. Программная проверка прав при открытии отчета

Если конфигурация вашей базы уже находится на доработке или вы можете внести точечные изменения, наиболее надежным техническим решением будет проверка доступности определенной роли при попытке открыть отчет. Это исключит ситуацию, когда пользователь пытается запустить отчёт в обход интерфейса.

Проанализируем пример кода, который необходимо разместить в модуле формы отчета (в обработчике события ПриОткрытии):


Процедура ПриОткрытии(Отказ)
    
    // Проверяем, обладает ли текущий пользователь специализированной ролью или полными правами
    Если НЕ РольДоступна("Доступ к конфиденциальным отчетам") И НЕ РольДоступна("ПолныеПрава") Тогда
        Предупреждение("У вас недостаточно прав для просмотра данного отчета!", 10, "Ограничение доступа");
        Отказ = Истина; // Блокируем открытие формы отчета
    КонецЕсли;
    
КонецПроцедуры

В данном сценарии мы создаем в конфигураторе новую роль (например, ДоступККонфиденциальнымОтчетам) без назначения ей каких-либо тяжелых прав на объекты метаданных — она будет служить исключительно "маркером" доступа. Затем мы назначаем эту роль нужным пользователям. Если пользователь без этой роли попытается открыть отчет, система выдаст предупреждение и отменит открытие формы благодаря параметру Отказ = Истина.

---

Способ 3. Ограничение доступа на уровне записей (RLS) в запросах СКД

Иногда задача стоит иначе: пользователю можно открывать отчет, но он должен видеть в нем только те данные, которые разрешены его правами (например, информацию только по своей организации или своему складу). В этом случае на помощь приходит встроенный в платформу 1С механизм RLS (Record Level Security).

Выясним, как правильно спроектировать запрос в СКД для работы с RLS:

---

Способ 4. Ограничение видимости через механизм «Сохраненные настройки»

В 1С:УПП 1.3 реализован стандартный механизм сохранения вариантов отчетов. Если сам отчет не содержит критически секретной структуры, но содержит сложные преднастроенные отборы и группировки, доступ к которым нужно ограничить, мы можем воспользоваться разграничением прав на уровне сохраненных настроек.

Разберем, как это работает:

  1. Создайте и настройте нужный вариант произвольного отчета.
  2. При сохранении настройки (нажав на кнопку сохранения варианта) обратите внимание на флаги прав доступа.
  3. Установите переключатель в положение «Доступно только мне» или выберите конкретный список пользователей (групп пользователей), которым разрешено использовать эту настройку.

В результате другие сотрудники при открытии этого же произвольного отчета увидят лишь пустую стандартную схему. Им придется настраивать все группировки и формулы с нуля, что для рядового пользователя практически невыполнимо без детального знания структуры метаданных.

---

Способ 5. Использование расширений конфигурации (для современных версий платформы)

Если ваша база 1С:УПП 1.3 работает на современной версии платформы 1С:Предприятие 8.3, поддерживающей механизм расширений, и режим совместимости конфигурации позволяет их использовать, это открывает отличные возможности для кастомизации без изменения основной конфигурации.

С помощью расширения мы можем решить задачу изящно:

Проанализируем пример кода в расширении для формы списка справочника:


&НаСервере
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Ограничиваем видимость элементов справочника на уровне динамического списка
    Если НЕ РольДоступна("ПолныеПрава") Тогда
        ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.Наименование");
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
        ЭлементОтбора.ПравоеЗначение = "Конфиденциальный отчет по прибыли";
        ЭлементОтбора.Использование = Истина;
    КонецЕсли;
    
КонецПроцедуры

Используя приведенные методы, вы сможете гибко настроить безопасность работы с корпоративной аналитикой и защитить коммерческие данные вашей компании от несанкционированного просмотра.

← На главную