Как скрыть определенный документ из журнала документов без ошибки прав доступа в 1С

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

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

Почему возникает ошибка прав доступа при открытии журнала

Выясним причину ошибки в механизмах платформы 1С:

  1. Составная структура журнала документов: Журнал документов представляет собой объект конфигурации, объединяющий таблицы всех включенных в него видов документов. Динамический список формы журнала формирует единый внутренний запрос ко всем этим таблицам.
  2. Проверка прав метаданных: Чтобы динамический список смог построить выборку по журналу, у текущего пользователя должно присутствовать базовое право Чтение на уровне метаданных для каждого документа, входящего в состав журнала. Если хотя бы на один документ право на чтение полностью отсутствует, обращение к таблице журнала блокируется платформой целиком.
  3. Ошибки в условиях RLS: Попытка ограничить доступ через условие ГДЕ ДокументыПоЗакупкам.Ссылка ССЫЛКА Документ.СчетФактураПолученный дает обратный результат — такое условие оставляет доступными только счета-фактуры, отсекая все остальные документы. Для исключения требуется логическое отрицание НЕ.

Вариант 1. Разделение журналов или использование отдельной формы

Рассмотрим самое надежное архитектурное решение, предложенное в обсуждении, — разделение отображения документов для пользователей с разными правами.

Разберем по шагам создание отдельного представления:

  1. Создаем отдельный журнал документов или отдельную форму динамического списка, куда не будет входить документ СчетФактураПолученный.
  2. Если используется расширение конфигурации, переопределяем рабочую область начальной страницы (рабочего стола) для целевого профиля пользователя.
  3. В форме динамического списка настраиваем произвольный запрос через объединение только разрешенных таблиц:

ВЫБРАТЬ
    ДокументПоступление.Ссылка КАК Ссылка,
    ДокументПоступление.Дата КАК Дата,
    ДокументПоступление.Номер КАК Номер,
    ДокументПоступление.Контрагент КАК Контрагент,
    ДокументПоступление.СуммаДокумента КАК Сумма
ИЗ
    Документ.ПриобретениеТоваровУслуг КАК ДокументПоступление

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ДокументЗаказ.Ссылка,
    ДокументЗаказ.Дата,
    ДокументЗаказ.Номер,
    ДокументЗаказ.Контрагент,
    ДокументЗаказ.СуммаДокумента
ИЗ
    Документ.ЗаказПоставщику КАК ДокументЗаказ

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

Вариант 2. Комбинация базового права на чтение и ограничений RLS

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

Разберем по шагам настройку роли:

  1. В роли пользователя оставляем включенным флаг Чтение для документа СчетФактураПолученный на уровне метаданных. Это необходимо платформе для валидации структуры динамического списка журнала.
  2. В настройке RLS для права Чтение документа СчетФактураПолученный прописываем условие полного запрета:

ГДЕ ЛОЖЬ

  1. Чтобы в общем журнале документов строки запрещенного документа не отображались с представлением <Объект не найден>, переходим в ограничение RLS для права Чтение самого Журнала документов и задаем условие исключения:

ГДЕ НЕ Ссылка ССЫЛКА Документ.СчетФактураПолученный

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

Вариант 3. Скрытие документа из командного интерфейса подсистемы

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

Посмотрим, как убрать команду открытия списка из панели разделов:

  1. В дереве метаданных находим подсистему (например, Закупки).
  2. Нажимаем правой кнопкой мыши и выбираем Командный интерфейс подсистемы.
  3. В строке команды открытия списка документа СчетФактураПолученный находим колонку с нужной ролью и снимаем флажок Видимость.

В результате документ полностью исчезнет из панели навигации слева у пользователя с этой ролью, а динамический список журнала продолжит работу без ошибок доступа.

← На главную