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