Как настроить отчет в 1С, чтобы данные считывались без предоставления прав на просмотр справочников?

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

Часто в работе администратора или разработчика 1С возникает задача: пользователю необходимо видеть данные в отчете, но при этом запрещено «гулять» по справочникам, из которых эти данные собираются. Если просто убрать права, отчет перестает формироваться или выдает пустой результат. Давайте разберем, как правильно настроить права доступа и механизмы формирования отчетов, чтобы соблюсти требования безопасности и работоспособности системы.

Разберем разницу между правами «Чтение» и «Просмотр»

Первым делом выясним причину проблемы. В системе 1С права Чтение и Просмотр работают по-разному:

Если вы хотите, чтобы отчет формировался, но справочники не «мозолили глаза» пользователю, необходимо оставить Чтение, но отобрать Просмотр. В этом случае пользователь не увидит объекты в разделах программы, но система сможет корректно обработать запрос отчета.

Использование привилегированного режима

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

Чтобы реализовать это решение, необходимо внести изменения в код отчета (например, в процедуру формирования отчета в модуле объекта):


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

Использование функции УстановитьПривилегированныйРежим(Истина) позволяет выполнять чтение данных, даже если у пользователя нет прав на чтение конкретных справочников. При этом после завершения формирования отчета обязательно вызывайте УстановитьПривилегированныйРежим(Ложь) для возврата в обычный режим работы.

Настройка интерфейса и функциональные опции

Если вам нужно, чтобы пользователь не видел справочники, но при этом у него есть права на чтение, воспользуйтесь следующими методами:

  1. Ограничение видимости форм: В конфигураторе для ролей можно отключить права на интерактивное открытие форм справочников, оставив только право на чтение данных через запросы.
  2. Настройка разделов (подсистем): Убедитесь, что справочники не включены в состав команд интерфейса пользователя, если роль не предполагает работу с ними.
  3. Функциональные опции: Вы можете привязать видимость команд справочников к ФункциональныеОпции. Это позволит динамически управлять отображением элементов управления в зависимости от настроек системы или ролей пользователя.

Важные советы по отладке отчетов на СКД

Если вы столкнулись с тем, что отчет на СистемаКомпоновкиДанных (СКД) упорно не выводит данные:

Комбинируя эти методы — правильную настройку прав Чтение/Просмотр и программное использование привилегированного режима — вы сможете обеспечить необходимый уровень безопасности и удобства работы пользователей в вашей базе 1С.

← На главную