Как найти недостающую роль, если поле в отчете 1С:УТ 11 недоступно для выбора или отбора

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

В процессе настройки прав доступа в конфигурации «1С:Управление торговлей 11» (или аналогичных на базе ERP и КА) администраторы и разработчики часто сталкиваются со странным поведением системы: пользователь видит поле Кассир (или любое другое) в форме документа, но в настройках отчета или в доступных полях компоновки данных это поле полностью отсутствует. Рассмотрим, почему это происходит и как найти ту самую «недостающую» роль, не прибегая к методу бесконечного перебора.

Причина исчезновения полей: правило «слабого звена» в СКД

Современные отчеты в 1С строятся на базе Системы компоновки данных (СКД). Когда мы открываем настройки отчета, платформа автоматически анализирует схему запроса и права текущего пользователя. Проанализируем ситуацию: если отчет «Ведомость по денежным средствам» собирает данные из нескольких источников (например, из различных регистров, где регистраторами выступают документы Приходный кассовый ордер, Расходный кассовый ордер, Инвентаризация наличных ДС и другие), система проверяет права доступа ко всем этим объектам.

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

Пошаговый алгоритм поиска недостающих прав

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

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

Использование встроенных инструментов для анализа прав

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

Перейдем в раздел Администрирование — Настройки пользователей и прав — Профили групп доступа. В некоторых редакциях доступен отчет «Права доступа», который позволяет выбрать конкретного пользователя и интересующий нас объект метаданных. Система покажет наглядную матрицу: какие права (Чтение, Просмотр, Изменение) даны и через какие именно роли они получены.

Влияние функциональных опций

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

Проверьте, включены ли в программе настройки, связанные с использованием касс и учетом денежных средств. Если опция выключена глобально, платформа считает реквизит неиспользуемым и удаляет его из макетов отчетов.

Особый случай: Ошибка доступа к истории работы пользователя

В процессе работы под ограниченными правами может возникнуть специфическая ошибка: Нарушение прав доступа при обращении к объекту ИсторияРаботыПользователя. Это происходит в момент открытия форм или выполнения кода в общих модулях, отвечающих за навигацию.

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

Также стоит проверить наличие роли «Просмотр истории работы пользователя». В типовых конфигурациях она часто выделена отдельно и должна быть включена в базовый профиль любого сотрудника.

Пример программной проверки прав

Если вы хотите программно проверить, почему поле недоступно, можно использовать следующий фрагмент кода для анализа прав текущего пользователя на объект и его поля:


// Проверим право на чтение объекта
Если ПравоДоступа("Чтение", Метаданные.Документы.ПриходныйКассовыйОрдер) Тогда
    // Проверим право на просмотр конкретного реквизита
    Если Не ПравоДоступа("Просмотр", Метаданные.Документы.ПриходныйКассовыйОрдер.Реквизиты.Кассир) Тогда
        Сообщить("У пользователя нет прав на просмотр реквизита 'Кассир'!");
    КонецЕсли;
Иначе
    Сообщить("Нет прав даже на чтение самого документа.");
КонецЕсли;

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

← На главную