Как ограничить доступ пользователей к конкретным дополнительным отчетам в 1С:ERP?

1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

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

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

Выясним причину: почему отчеты и обработки настраиваются по-разному

Проанализируем архитектуру подсистемы Дополнительные отчеты и обработки библиотеки стандартных подсистем (БСП), на которой построена 1С:ERP.

Дополнительные обработки открываются через специализированные команды меню («Дополнительные обработки») и используют регистр сведений ПользовательскиеНастройкиДоступаКОбработкам. В интерфейсе карточки обработки предусмотрена колонка для прямого указания списка пользователей, которым доступна команда.

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

Способ 1. Штатное ограничение прав через механизм RLS

Рассмотрим основной типовой способ разграничения видимости и возможности открытия отчетов без изменения конфигурации. Для этого задействуем механизм ограничения доступа на уровне записей (RLS).

Разберем по шагам порядок настройки:

  1. Проверим, включена ли в программе функциональная опция Ограничивать доступ на уровне записей (раздел НСИ и администрирование — Настройка пользователей и прав — Группы доступа).
  2. Откроем нужный Профиль групп доступа, назначенный пользователям, которым требуется ограничить список отчетов. Убедимся, что профиль содержит роль Чтение дополнительных отчетов и обработок.
  3. В табличной части видов доступа профиля выберем вид доступа Дополнительные отчеты и обработки.
  4. Создадим или откроем соответствующую Группу доступа и перейдем на закладку ограничений доступа. В качестве значений вида доступа укажем конкретные разрешенные или запрещенные элементы справочника ДополнительныеОтчетыИОбработки.

Когда пользователю через RLS закрыт доступ на чтение определенного элемента справочника дополнительных отчетов, БСП при формировании панели отчетов раздела автоматически исключает все варианты, привязанные к этому объекту. Пользователь не только не сможет открыть отчет, но и не увидит его в списке доступных вариантов.

Обратите внимание на ограничения штатного метода:

  1. Правило пересечения прав: RLS в платформе 1С работает по принципу «разрешено всё, что разрешено хотя бы в одной роли или группе доступа». Если пользователю назначена хотя бы одна группа доступа с полными правами или профиль с неограниченным чтением справочника дополнительных отчетов, ограничение не сработает.
  2. Попытка настроить видимость вручную внутри справочника ВариантыОтчетов для внешнего отчета часто является недолговечной: при обновлении версии отчета или повторном сохранении метаданных БСП может сбросить настройки видимости к исходным значениям.

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

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

Посмотрим на пример реализации проверки в модуле объекта отчета в процедуре ПриКомпоновкеРезультата. Это исключает запуск отчета даже при вызове через фоновые задания или стандартные обработчики БСП:


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

Также рассмотрим вариант проверки прав при открытии формы отчета в процедуре ПриСозданииНаСервере:


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

Способ 3. Переопределение фильтрации вариантов через расширение конфигурации

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

Для этого подключим расширение и перехватим вызов в общем модуле ДополнительныеОтчетыИОбработки (метод ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю). В теле процедуры отфильтруем список возвращаемых объектов в зависимости от прав или ролей текущего пользователя системы.

Таким образом, для строгого и безопасного ограничения доступа рекомендуется комбинировать штатный RLS по справочнику ДополнительныеОтчетыИОбработки и программную проверку прав внутри критически важных отчетов.

← На главную