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