При работе с Системой компоновки данных (СКД) в 1С часто возникает ситуация, когда у пользователя с ограниченными правами пропадают определенные поля в настройках отчета. Особенно часто это случается с полями, доступ к которым осуществляется «через точку» (например, Документ.Контрагент или Документ.Дата). При этом у администратора отчет работает корректно, а перенос настроек между пользователями не дает результата. Рассмотрим подробно причины этого поведения и способы решения проблемы.
Проанализируем ситуацию: отчет базируется на регистре сведений, где одно из измерений имеет тип ДокументСсылка (составной тип, включающий множество видов документов). Когда мы пытаемся в СКД развернуть поле Документ, чтобы вытащить Контрагента, система сталкивается с особенностью механизма проверки прав.
Важный технический нюанс: если поле имеет составной тип данных (например, «Любая ссылка» или список из нескольких десятков документов), СКД при построении дерева доступных полей пытается проанализировать структуру всех объектов, входящих в этот тип. Если у пользователя нет права Чтение хотя бы на один вид документа, входящий в этот составной тип, платформа может заблокировать доступ к «развертыванию» свойств через точку. Система не может гарантировать корректность выборки данных, если часть таблиц для нее недоступна.
Прежде всего, проверим права доступа. В 1С:Предприятие 8 недостаточно иметь права только на сам регистр, из которого выбираются данные. Проанализируем права на связанные объекты:
Чтение и Просмотр на все виды документов, которые могут физически находиться в поле Документ.Реализация и Перемещение, но тип поля в метаданных — общая ссылка, это может стать причиной блокировки.Подразделение или Проект) в роли снята галочка Просмотр. В этом случае поле также исчезнет из СКД.Выясним, как работает механизм ограничения доступа на уровне записей (RLS). Если в системе настроены правила доступа по организациям или контрагентам, обычный запрос может вызвать ошибку прав доступа. Рассмотрим пример исправления запроса в схеме компоновки данных:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Документы.Документ,
Документы.ДатаПечати,
Документы.Подписан,
Документы.ДатаВозвратаДокументов
ИЗ
РегистрСведений.Документы КАК Документы
Использование слова РАЗРЕШЕННЫЕ заставляет систему игнорировать записи, на которые у пользователя нет прав по RLS, и не выдавать ошибку. Это критически важно для корректной работы СКД под ограниченными ролями.
Если расширение прав невозможно или нецелесообразно, применим метод явного определения полей. Вместо того чтобы полагаться на механизм СКД по разыменованию ссылок в настройках (через точку), добавим нужные поля непосредственно в текст запроса. Это «подскажет» платформе, из каких именно таблиц нужно брать данные, и упростит проверку прав.
Разберем пример оптимизированного запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
РегистрДокументы.Документ КАК Документ,
РегистрДокументы.ДатаПечати КАК ДатаПечати,
РегистрДокументы.Подписан КАК Подписан,
// Выносим реквизиты ссылки в отдельные поля
РегистрДокументы.Документ.Дата КАК ДатаДокумента,
РегистрДокументы.Документ.Контрагент КАК Контрагент,
// Можно добавить определение вида документа для наглядности
ВЫБОР
КОГДА РегистрДокументы.Документ ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА "Реализация"
КОГДА РегистрДокументы.Документ ССЫЛКА Документ.ПеремещениеТоваров
ТОГДА "Перемещение"
ИНАЧЕ "Прочее"
КОНЕЦ КАК ВидДокумента
ИЗ
РегистрСведений.Документы КАК РегистрДокументы
После изменения запроса в схеме компоновки данных необходимо на закладке Наборы данных проверить, что новые поля (ДатаДокумента, Контрагент) появились в списке и для них не установлены ограничения.
Иногда поля становятся недоступными из-за настроек самого разработчика в СКД. Проанализируем закладку Наборы данных, колонки Ограничение поля и Ограничение условия:
Проверьте, не установлены ли эти флаги случайно. Также стоит обратить внимание на роль поля. Если поле является частью родительского объекта, ограничения могут наследоваться.
Если права настроены верно, а запрос изменен, но поля все равно не видны, проблема может крыться в сохраненных настройках. В 1С настройки отчетов хранятся в ХранилищеНастроек. При переносе настроек от администратора к пользователю может возникнуть конфликт метаданных.
Рекомендуется выполнить следующие действия:
%AppData%\1C\1cv8\).В современных конфигурациях (даже в поздних редакциях УТ 10.3) могут использоваться функциональные опции. Если реквизит Контрагент привязан к функциональной опции, которая отключена для данного пользователя или организации, СКД автоматически скроет это поле, независимо от прав доступа. Проверьте в конфигураторе свойство Функциональные опции у соответствующих реквизитов документов.
Для решения проблемы недоступности полей в СКД мы рекомендуем придерживаться следующего алгоритма:
ВЫБРАТЬ РАЗРЕШЕННЫЕ в тексте запроса.Документ.Контрагент) прямо в запросе СКД, назначая им понятные псевдонимы.Чтение на ВСЕ типы объектов, входящих в составной тип измерения или реквизита.ДокументСсылка (без указания конкретных типов), если это возможно, ограничивая список типов только реально используемыми.Эти шаги позволяют обойти жесткие механизмы проверки прав платформы при работе с метаданными и гарантируют стабильную работу отчетов у пользователей с любым набором ролей.