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