При настройке прав доступа и пользовательского интерфейса разработчики часто сталкиваются с ситуацией, когда пользователю необходимо закрыть доступ к определенному виду документов (например, СчетФактураПолученный), но оставить доступ к общему журналу (например, ДокументыПоЗакупкам). Если просто снять флаг Чтение на этот документ в назначенной роли, платформа 1С при открытии журнала выдает критическую ошибку Нарушение прав доступа. Разберем причины такого поведения платформы и подробно рассмотрим корректные способы решения задачи.
Выясним причину ошибки в механизмах платформы 1С:
Чтение на уровне метаданных для каждого документа, входящего в состав журнала. Если хотя бы на один документ право на чтение полностью отсутствует, обращение к таблице журнала блокируется платформой целиком.ГДЕ ДокументыПоЗакупкам.Ссылка ССЫЛКА Документ.СчетФактураПолученный дает обратный результат — такое условие оставляет доступными только счета-фактуры, отсекая все остальные документы. Для исключения требуется логическое отрицание НЕ.Рассмотрим самое надежное архитектурное решение, предложенное в обсуждении, — разделение отображения документов для пользователей с разными правами.
Разберем по шагам создание отдельного представления:
СчетФактураПолученный.
ВЫБРАТЬ
ДокументПоступление.Ссылка КАК Ссылка,
ДокументПоступление.Дата КАК Дата,
ДокументПоступление.Номер КАК Номер,
ДокументПоступление.Контрагент КАК Контрагент,
ДокументПоступление.СуммаДокумента КАК Сумма
ИЗ
Документ.ПриобретениеТоваровУслуг КАК ДокументПоступление
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДокументЗаказ.Ссылка,
ДокументЗаказ.Дата,
ДокументЗаказ.Номер,
ДокументЗаказ.Контрагент,
ДокументЗаказ.СуммаДокумента
ИЗ
Документ.ЗаказПоставщику КАК ДокументЗаказ
Такой подход полностью исключает обращение к закрытым таблицам, не нагружает платформу механизмами RLS и работает максимально быстро.
Если журнал должен оставаться единым, а документ требуется полностью скрыть от пользователя, настроим ограничение доступа на уровне записей (RLS). Проанализируем этот алгоритм.
Разберем по шагам настройку роли:
Чтение для документа СчетФактураПолученный на уровне метаданных. Это необходимо платформе для валидации структуры динамического списка журнала.Чтение документа СчетФактураПолученный прописываем условие полного запрета:
ГДЕ ЛОЖЬ
<Объект не найден>, переходим в ограничение RLS для права Чтение самого Журнала документов и задаем условие исключения:
ГДЕ НЕ Ссылка ССЫЛКА Документ.СчетФактураПолученный
При такой схеме платформа успешно проходит валидацию метаданных, а RLS корректно отфильтровывает ненужные записи без генерации исключений.
Если задача заключается только в том, чтобы документ не отображался в навигации разделов, а просмотр через журнал не критичен, права на чтение можно оставить.
Посмотрим, как убрать команду открытия списка из панели разделов:
Закупки).СчетФактураПолученный находим колонку с нужной ролью и снимаем флажок Видимость.В результате документ полностью исчезнет из панели навигации слева у пользователя с этой ролью, а динамический список журнала продолжит работу без ошибок доступа.