«Недостаточно прав для работы с таблицей» в 1С: причины и решение
Запрос или запись обращаются к таблице (документа, регистра, справочника), на которую у пользователя нет нужного права. Имя таблицы указывается в сообщении, например «Документ.Сторно» или «РегистрНакопления.ТоварыНаСкладах».
Текст ошибки
Причины
- При проведении документ пишет в регистр, на который у роли нет права чтения или изменения
- Отчёт или обработка читает таблицу, недоступную пользователю
- Новая версия конфигурации добавила регистр или документ, а права на него в собственных ролях не выданы
- Пользователь не включён в группу доступа с нужным профилем
- Доработанный код обращается к таблице без проверки прав и без привилегированного режима
Как читать сообщение
В тексте указано, к какой таблице не хватило доступа. Это ключевая подсказка: права нужно выдать именно на этот объект, а не на документ, который пользователь открывал. Например, при проведении реализации ошибка может указывать на регистр взаиморасчётов.
Для администратора типовой конфигурации
- Определите, к какой подсистеме относится таблица из ошибки.
- Откройте «Администрирование» → «Настройки пользователей и прав» → «Группы доступа» и проверьте, есть ли у пользователя группа с профилем, отвечающим за эту функцию.
- Если используется собственный профиль, скопированный из поставляемого, сравните его с поставляемым профилем текущей версии: новые роли в скопированный профиль сами не добавляются.
- Если в ошибке упомянут служебный объект, который не должен быть доступен пользователю напрямую, это может быть ошибкой в конфигурации или доработке. Проверьте актуальность релиза и отключите расширения.
Для нетиповой конфигурации
В конфигураторе найдите объект из сообщения в дереве метаданных, откройте закладку «Права» и выдайте нужной роли право «Чтение» (для отчётов и запросов) или «Изменение», «Добавление» (для записи). После сохранения конфигурации и обновления базы пользователю нужно перезапустить сеанс.
Для разработчика
Если таблица служебная и пользователю не нужен к ней прямой доступ, а прочитать её требует логика документа, выполняйте чтение на сервере в привилегированном режиме:
&НаСервере
Функция ПолучитьКурс(Валюта, Дата)
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Курсы.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК Курсы");
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Валюта", Валюта);
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.Курс, 0);
КонецФункции
Для запросов к данным, где действуют ограничения на уровне записей, используйте в тексте запроса ключевое слово РАЗРЕШЕННЫЕ: тогда запрос вернёт только доступные записи вместо ошибки.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Документы.Ссылка
ИЗ
Документ.РеализацияТоваров КАК Документы
Ключевое слово РАЗРЕШЕННЫЕ решает проблему ограничений по записям, но не заменяет право на таблицу: без права «Чтение» запрос по-прежнему выдаст ошибку.
Частые вопросы
Почему ошибка указывает на регистр, хотя я проводил документ?
Проведение формирует движения по регистрам и часто читает остатки. Права нужны и на сам документ, и на все регистры, которые он затрагивает.
Поможет ли РАЗРЕШЕННЫЕ в запросе?
Только если доступ ограничен на уровне записей. Если у роли вообще нет права на таблицу, нужно выдать право.