Как определить, какого права не хватает пользователю в 1С:УТ 11.5?

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

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

Метод 1: Использование Журнала регистрации

Это самый быстрый и доступный способ диагностики. Журнал регистрации фиксирует большинство событий отказа в доступе на уровне сервера и клиента (существуют решения для автоматического создания профилей доступа на основе журнала регистрации). Разберем алгоритм действий:

  1. Откроем Журнал регистрации (раздел Администрирование — Обслуживание — Журнал регистрации).
  2. Установим отбор по пользователю, у которого возникает ошибка.
  3. Выберем период времени, максимально близкий к моменту появления сообщения об ошибке (с точностью до секунд).
  4. Проанализируем события с уровнем «Ошибка».

В большинстве случаев в колонке «Данные» или «Комментарий» будет указан конкретный объект метаданных. Например, вы можете увидеть запись вида: РегистрСведений.ПлановыеНачисления.Чтение или Документ.ЗаказКлиента.Изменение. Это прямое указание на то, какого именно права не хватает в профиле пользователя.

Метод 2: Отладка в режиме «Остановка по ошибке»

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

  1. Запустим Конфигуратор и подключимся к сеансу пользователя (меню Отладка — Подключение).
  2. В меню Отладка — Настройка отладки перейдем на закладку «Остановка по ошибке».
  3. Установим флажок «Останавливаться по ошибке».
  4. Попросим пользователя повторить действие, вызывающее ошибку.

В момент возникновения окна о нарушении прав конфигуратор «замрет» на той строке кода, где происходит обращение к запрещенному объекту. Здесь мы можем увидеть выполнение запроса или обращение к менеджеру объекта. Выясним причину, проверив стек вызовов. Если ошибка происходит в запросе, обратите внимание на текст запроса — в нем будет фигурировать таблица, к которой нет доступа.

Метод 3: Специализированные отчеты и обработки

В современных версиях БСП, на которых построена УТ 11.5, существует мощный встроенный инструмент — отчет «Анализ прав доступа» (также может быть полезна внешняя обработка для анализа прав доступа к объекту). Он позволяет взглянуть на проблему «от обратного».

Рассмотрим, как им пользоваться:

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

Также существует внешняя обработка АнализРолей, которая часто встречается в инструментах разработчика. Она позволяет быстро найти, в какие типовые роли включен конкретный объект. Это полезно, если вы определили недостающий объект (например, РегистрСведений.ЦеныНоменклатуры) и хотите понять, какую стандартную роль нужно добавить в профиль, чтобы не создавать новую.

Метод 4: Диагностика ограничений на уровне записей (RLS)

Иногда ситуация выглядит иначе: у пользователя есть права на документ, он его видит, но при попытке проведения или открытия определенных записей получает ошибку. Это работа механизма RLS (Record Level Security). В УТ 11.5 используется производительный режим RLS, который накладывает дополнительные условия ГДЕ на каждый SQL-запрос.

Для диагностики RLS проанализируем следующие моменты:

Метод 5: Использование Технологического журнала (ТЖ)

Если проблема носит массовый характер или возникает в фоновом задании, где обычная отладка затруднена, мы можем настроить сбор Технологического журнала. Нам потребуется событие EXCP (Exception). В файле logcfg.xml это будет выглядеть примерно так:


<event property="Name" target="EXCP">
    <eq property="Name" value="EXCP" />
</event>

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

Метод 6: Программная проверка прав

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


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

Также полезно использовать метод ПараметрыДоступа(), который возвращает структуру доступных полей и условий для текущего сеанса. Это поможет выяснить, не ограничено ли право на уровне отдельных реквизитов объекта.

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

← На главную