При работе с инструментом «Универсальный отчет» в системе 1С:Предприятие часто возникает ситуация, когда администратор или аналитик видит все доступные поля, а рядовой пользователь сталкивается с их отсутствием в настройках или пустой колонкой в результате. Разберем детально причины этого поведения и способы исправления ошибки, опираясь на технические особенности платформы и практический опыт коллег.
Когда мы строим отчет по регистру (накопления, сведений или бухгалтерии), мы должны помнить, что данные в него записываются документами, которые в системе называются Регистратор. Если в «Универсальном отчете» выбраны поля, относящиеся к самому регистратору (например, дата создания документа, автор или специфические реквизиты документа), система обращается к таблицам этих документов.
Проанализируем ситуацию: если у пользователя есть права на чтение РегистрНакопления, но отсутствуют права на конкретные типы документов, которые являются регистраторами для этого регистра, то поля этих документов будут недоступны. В некоторых случаях система может даже не показывать их в списке выбора полей компоновки (СКД). Рассмотрим, как решить эту проблему:
РегистрНакопления.Важно различать эти два уровня доступа, так как для формирования отчетов в режиме «1С:Предприятие» одного «Чтения» недостаточно. Разберем по шагам, что дает каждое право:
«Нарушение прав доступа».Если пользователь видит пустой список полей в настройках «Универсального отчета», скорее всего, в его роли не установлена галочка «Просмотр» на уровне реквизитов документа или самого объекта. Проанализируем это в конфигураторе: откройте роль, выберите нужный документ, перейдите к списку прав и убедитесь, что права установлены корректно не только для объекта в целом, но и для его полей.
Часто в обсуждениях фигурируют поля с префиксами, например СТ_ДатаСоздания. Если поиск по всей конфигурации не выдает совпадений, значит, эти поля не были созданы программистом в конфигураторе. Выясним причину их появления. В современных конфигурациях (на базе БСП) широко используются дополнительные реквизиты и сведения.
Они хранятся в Планах видов характеристик (ПВХ) и отображаются в отчетах динамически. Чтобы пользователь их увидел, необходимо проверить следующие настройки:
ЗначенияСвойствОбъектов.ДополнительныеРеквизитыИСведения.Посмотрим на ситуацию с точки зрения настроек системы. Поле может физически существовать в метаданных и на него могут быть даны полные права, но оно будет скрыто, если связана с выключенной функциональной опцией. В 1С функциональные опции (ФО) управляют видимостью элементов интерфейса и доступностью полей в отчетах. Если аналитик работает в базе с включенным функционалом, а для конкретного пользователя или организации функционал ограничен, поля исчезнут. Проверьте значения констант, которые управляют ФО в вашем приложении.
Иногда корень проблемы кроется не в правах, а в «зависших» настройках. «Универсальный отчет» сохраняет состояние варианта для каждого пользователя. Если структура метаданных менялась (например, после обновления), старый кэш настроек СКД может блокировать отображение новых или измененных полей.
Попробуем выполнить следующие действия:
%AppData%\1C\1cv8).Для программиста, который хочет отладить этот процесс, полезно будет проверить доступность полей программно. Мы можем использовать метод ПравоДоступа() для анализа прав текущего пользователя. Рассмотрим пример кода, который проверяет права на реквизит регистратора:
// Пример проверки доступности поля для текущего пользователя
ИмяДокумента = "ПриходнаяНакладная";
ИмяРеквизита = "СТ_ДатаСоздания";
Если ПравоДоступа("Просмотр", Метаданные.Документы[ИмяДокумента]) Тогда
Если ПравоДоступа("Просмотр", Метаданные.Документы[ИмяДокумента].Реквизиты[ИмяРеквизита]) Тогда
Сообщить("Пользователь имеет права на просмотр реквизита.");
Иначе
Сообщить("Права на конкретный реквизит отсутствуют!");
КонецЕсли;
Иначе
Сообщить("Нет прав даже на сам документ-регистратор.");
КонецЕсли;
В случае, если документов-регистраторов много, можно использовать цикл для обхода коллекции метаданных регистра:
// Обход регистраторов регистра накопления
РегистрМетаданные = Метаданные.РегистрыНакопления.Продажи;
Для Каждого Регистратор Из РегистрМетаданные.Регистраторы Цикл
Если Не ПравоДоступа("Чтение", Регистратор) Тогда
Сообщить("Проблема: нет прав на документ " + Регистратор.Имя);
КонецЦикла;
Проанализируем еще один важный аспект: использование расширений. Если поле было добавлено через расширение, оно не будет найдено поиском по основной конфигурации. Убедитесь, что:
Таким образом, решение проблемы с полями в «Универсальном отчете» всегда лежит в плоскости комплексной проверки: от базовых прав Просмотр на регистраторы до анализа функциональных опций и динамических дополнительных реквизитов.