Как настроить права доступа в отчете на обычных формах, чтобы скрывать недоступные документы?

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

При разработке отчетов в среде 1С:Предприятие часто возникает задача разграничения прав доступа. Если у пользователя недостаточно прав на просмотр определенных документов (например, наложены ограничения RLS), система должна корректно обрабатывать такие ситуации, чтобы не выдавать конфиденциальную информацию. Рассмотрим, как реализовать отображение пометки «Объект не найден» вместо удаления строки из отчета.

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

Самый простой и стандартный способ работы с правами — использование инструкции РАЗРЕШЕННЫЕ в запросе. Когда система выполняет такой запрос, она автоматически исключает из выборки все записи, к которым у пользователя нет прав доступа на чтение.

Это решение подходит, если по бизнес-логике отчет не должен содержать информацию о том, что документ вообще существует для конкретного пользователя. Однако, если ваша задача — показать пользователю, что запись есть, но просмотреть её нельзя, данный метод не подойдет, так как строка будет полностью удалена из результата.


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

Вариант 2: Программная обработка и функция ПравоДоступа

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

  1. Выполнение запроса: Выполняем запрос без использования ключевого слова РАЗРЕШЕННЫЕ, чтобы получить полный список записей, существующих в базе.
  2. Обход результата: Организуем цикл обхода выборки результата запроса.
  3. Проверка прав: В каждой итерации цикла проверяем наличие прав доступа для текущего пользователя к конкретному объекту с помощью функции ПравоДоступа.
  4. Формирование представления: Если функция возвращает Истина, выводим данные документа. Если Ложь — заполняем ячейку строкой «Объект не найден».

Рассмотрим пример реализации кода для обработки результата запроса:


Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Если ПравоДоступа("Чтение", Выборка.ДокументРезерва.Метаданные()) Тогда
        ПредставлениеДокумента = Выборка.ДокументРезерва;
    Иначе
        ПредставлениеДокумента = "Объект не найден";
    КонецЕсли;

    // Далее код вывода данных в табличный документ
    ОбластьСтроки.Параметры.Документ = ПредставлениеДокумента;
КонецЦикла;

Важные рекомендации по реализации

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

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

← На главную