Почему в отчете СКД у пользователя не отображаются отборы и не выводится результат?

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

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

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

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

Основная причина такого поведения кроется в принципиальном различии двух базовых прав доступа в ролевой модели 1С:

  1. Право «Чтение» — это низкоуровневое право на получение данных из базы. Оно позволяет считывать записи таблиц через объектную модель и механизмы запросов на стороне сервера.
  2. Право «Просмотр» — это интерфейсное (интерактивное) право. Оно определяет, разрешено ли визуализировать данные объекта или его реквизитов в пользовательском интерфейсе.

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

Пошаговое решение проблемы через настройку ролей

Разберем, как восстановить корректное отображение отборов и вывод данных:

  1. Откроем дерево метаданных конфигурации в режиме «Конфигуратор».
  2. Перейдем в ветку Роли и откроем роль (или набор ролей), назначенную проблемному пользователю.
  3. Найдем объект метаданных (регистр сведений, регистр накопления, документ или справочник), к которому обращается запрос отчета.
  4. Убедимся, что для данного объекта и всех его реквизитов/измерений установлен флаг «Просмотр», а не только «Чтение».
  5. Обновим конфигурацию базы данных и повторно проверим работу отчета под учетной записью пользователя.

Программное формирование СКД без интерактивного права «Просмотр»

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

Для отключения проверки интерактивных ограничений при генерации макета и процессора компоновки данных используем следующий подход:


УстановитьПривилегированныйРежим(Истина);

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

// Четвертый параметр - ВозможностьИспользоватьНедоступныеПоля (устанавливаем Истина)
ПроцессорКомпоновки.Инициализировать(
    МакетКомпоновки, 
    ВнешниеНаборыДанных, 
    ДанныеРасшифровки, 
    Истина
);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

УстановитьПривилегированныйРежим(Ложь);

Дополнительные факторы исчезновения полей и отборов

Если право Просмотр на объект установлено, но отборы по-прежнему не отображаются, проверим следующие моменты:

  1. Права RLS на уровне отдельных полей: если на объект в целом просмотр разрешен, но на конкретное измерение или реквизит наложено ограничение доступа, СКД скроет отбор именно по этому полю.
  2. Функциональные опции: если поле схемы компоновки привязано к функциональной опции, которая отключена для текущего пользователя, поле исключается из доступных настроек.
  3. Кэш пользовательских настроек: если пользователь открывал отчет до выдачи прав, в хранилище могли сохраниться некорректные настройки формы. Для сброса необходимо программно вызвать КомпоновщикНастроек.ЗагрузитьНастройки() со стандартным вариантом либо сбросить пользовательские настройки отчета в режиме «1С:Предприятие».
← На главную