Как найти причину ошибки Нарушение прав доступа при формировании отчета СКД

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

Ошибка «Нарушение прав доступа» при формировании отчета в 1С — одна из самых коварных. Часто она не оставляет информативных следов в обычном журнале регистрации, особенно если ограничение срабатывает на уровне системы компоновки данных (СКД) или механизма RLS (Record Level Security). Ситуация осложняется в комплексных конфигурациях, таких как БИТ.ФИНАНС, или при использовании расширений. Рассмотрим подробно, как «вычислить» объект-нарушитель и исправить проблему.

Проверка базовых прав доступа: Чтение vs Просмотр

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

Разберем, почему это важно:

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

Использование ключевого слова РАЗРЕШЕННЫЕ

Проанализируем текст запроса отчета. По умолчанию запрос может пытаться выбрать все записи. Если в конфигурации включен RLS, запрос без указания ограничений может завершиться ошибкой, если он обращается к записям, которые пользователю запрещены. Чтобы система автоматически отсекала недоступные данные, необходимо использовать ключевое слово РАЗРЕШЕННЫЕ.

Пример корректного начала запроса:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    ПродажиОбороты.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода) КАК ПродажиОбороты

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

Метод Змейки: Пошаговый поиск через консоль запросов

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

Выполним следующие шаги:

  1. Создадим копию базы или выберем тестового пользователя с идентичным набором ролей.
  2. Временно добавим этому пользователю роль Открытие внешних обработок.
  3. Зайдем в сеанс под этим пользователем и откроем внешнюю консоль запросов.
  4. Скопируем текст запроса из отчета в консоль.
  5. Начнем «откусывать» или добавлять части запроса (пакеты временных таблиц).

Рассмотрим пример. Если запрос состоит из трех временных таблиц и одного итогового выбора, мы сначала выполняем только первый пакет:


// Пакет №1
ВЫБРАТЬ РАЗРЕШЕННЫЕ ... ИЗ Справочник.Контрагенты

Если первый пакет выполнился без ошибок, добавляем второй. На том этапе, где консоль выдаст «Нарушение прав доступа», и находится проблемный объект (регистр, справочник или таблица части запроса).

Диагностика через Технологический журнал (ТЖ)

Когда «глаза и мозги» не справляются, на помощь приходит самый мощный инструмент платформы — Технологический журнал. Он позволяет увидеть ошибку в момент ее возникновения в недрах сервера 1С.

Для настройки создадим файл logcfg.xml в каталоге conf на сервере 1С и пропишем в нем сбор событий исключений EXCP. Это позволит нам зафиксировать точное имя метаданных, к которым идет обращение.

Пример настройки logcfg.xml:


<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\LOGS\ACCESS_ERRORS" history="24">
        <event>
            <eq property="Name" value="EXCP"/>
            <like property="Descr" value="*Нарушение прав доступа*"/>
        </event>
        <property name="all"/>
    </log>
</config>

После возникновения ошибки в логах появится запись, где в поле Descr будет указан текст ошибки, а часто и контекст исполнения, включая имя таблицы или объекта метаданных.

Особенности работы с расширениями и БИТ.ФИНАНС

Поскольку отчет добавлен через расширение в связке с БИТ.ФИНАНС, выясним специфические причины сбоя:

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

Обычная консоль запросов не учитывает специфику СКД. Рекомендуем использовать Консоль СКД. Она позволяет выгрузить «Исполняемый запрос». Это тот самый запрос, который платформа формирует после наложения всех RLS-фильтров и пользовательских настроек. Зачастую именно в этом трансформированном запросе видно обращение к таблицам, на которые у пользователя нет прав, хотя в исходном тексте запроса всё выглядело чисто.

Подведем итог: для решения проблемы мы должны последовательно проверить права Просмотр, применить РАЗРЕШЕННЫЕ, выполнить запрос по частям через консоль (метод змейки) и, в крайнем случае, проанализировать технологический журнал сервера. Такой комплексный подход гарантирует нахождение «объекта-преткновения» даже в самых сложных иерархических отчетах.

← На главную