Как ограничить доступ пользователя в 1С всего одним или двумя отчетами?

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

Часто перед разработчиком встает задача: предоставить пользователю доступ исключительно к одному или двум отчетам. На первый взгляд заказчику кажется, что это «дело пяти минут», но на практике мы сталкиваемся с тем, что для формирования отчета системе требуется доступ на чтение к огромному количеству таблиц, метаданных и объектов интерфейса. Без этих прав система либо выдает ошибку доступа, либо отчет просто не выводит данные из-за ограничений RLS (Row Level Security).

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

Метод 1. Автоматическая рассылка отчетов

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

В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) существует встроенный механизм «Рассылки отчетов». Мы можем настроить регламентное задание, которое будет формировать нужные отчеты по расписанию и отправлять их пользователю на электронную почту в формате PDF или Excel. Это полностью снимает проблему прав доступа, так как отчет формируется под учетной записью с широкими правами, а пользователь получает только готовый результат.

Метод 2. Создание специализированного АРМ в расширении

Если пользователю все же необходимо заходить в 1С, мы можем пойти по пути создания специализированного АРМ (Автоматизированного рабочего места). Разберем этот процесс по шагам:

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

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

Метод 3. Формирование отчета в привилегированном режиме

Одна из главных проблем при ограничении прав — это RLS. Даже если мы дадим право на чтение справочника Номенклатура, настройки прав доступа могут скрывать часть данных. Чтобы отчет гарантированно показывал нужные цифры без предоставления пользователю прав на все первичные документы, мы можем использовать привилегированный режим.

Рассмотрим пример кода, который позволяет программно сформировать отчет, игнорируя проверку прав доступа текущего пользователя:


// В модуле объекта отчета или внешней обработки
Процедура СформироватьОтчетНаСервере()
    
    УстановитьПривилегированныйРежим(Истина);
    
    // Здесь располагается логика формирования отчета
    // Например, вызов компоновщика макета и вывод в табличный документ
    
    УстановитьПривилегированныйРежим(Ложь);
    
КонецПроцедуры

Использование УстановитьПривилегированныйРежим(Истина) позволяет системе обращаться к данным напрямую в обход механизма прав. Однако будьте осторожны: это накладывает на разработчика ответственность за то, чтобы пользователь случайно не увидел данные, которые ему действительно запрещены по политике безопасности компании.

Метод 4. Использование «Витрин данных»

Выясним причину, почему отчеты работают медленно при жестких ограничениях прав. Это происходит из-за того, что СУБД приходится на лету проверять права для каждой строки в десятках таблиц. Чтобы избежать этого и упростить настройку прав, мы можем создать «Витрину данных».

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

Метод 5. Внешние BI-системы и OData

Современный подход подразумевает, что пользователю вообще не обязательно заходить в интерфейс 1С для просмотра отчетов. Мы можем опубликовать базу 1С на веб-сервере и включить интерфейс OData.

Это позволит подключить к 1С внешние инструменты, такие как Excel, Power BI или Grafana. В этом случае мы настраиваем доступ только к конкретным сущностям через стандартный механизм 1С, и пользователь видит актуальные данные в привычном ему интерфейсе таблиц или графиков, не нагружая саму информационную базу сеансами работы.

Как эффективно отлаживать недостающие права?

Часто разработчики тратят часы, анализируя Журнал регистрации, чтобы понять, какого именно права не хватает. Разберем более эффективный метод — использование Технологического журнала (ТЖ).

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

Как объяснить сложность задачи заказчику?

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

Аргументация может звучать так: «Дать доступ к отчету — это не просто нажать кнопку. Это как построить в охраняемом банке изолированный коридор, который ведет только в одну комнату, при этом сделать так, чтобы по пути посетитель не смог заглянуть ни в одну другую дверь. Нам нужно проверить и настроить права доступа к 50-70 типам различных объектов, из которых этот отчет собирает информацию».

Подводя итог, отметим, что выбор метода зависит от конкретной ситуации. Для простых задач идеально подойдет рассылка, для интерактивной работы — АРМ в расширении с привилегированным режимом, а для высоконагруженных систем — витрины данных или внешние BI-системы.

← На главную