Как запретить пользователям создавать общие варианты отчетов и как устроено хранилище вариантов в 1С

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

В типовых конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), таких как Управление торговлей (УТ), ERP или Комплексная автоматизация, пользователи часто создают собственные варианты отчетов. По умолчанию система позволяет сделать эти варианты «Общими», что приводит к захламлению списка отчетов у всех сотрудников. В этой статье мы разберем, как ограничить эту возможность и как технически устроено хранение этих данных в системе.

Ограничение прав на создание общих вариантов отчетов

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

Способ 1: Использование типовых ролей

Рассмотрим стандартный механизм распределения прав. В БСП за работу с вариантами отвечают две ключевые роли:

  1. Сохранение личных вариантов отчетов — позволяет пользователю создавать настройки «для себя».
  2. Сохранение публичных вариантов отчетов — дает право устанавливать флаг «Доступен всем пользователям».

Если мы отберем у пользователя вторую роль, переключатель видимости в форме сохранения отчета станет недоступным (заблокированным). Это самый чистый и правильный способ решения задачи в рамках идеологии БСП. Однако стоит помнить, что если у пользователя назначена роль ПолныеПрава, никакие ограничения на уровне ролей не сработают.

Способ 2: Программное скрытие элементов формы

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

  1. Найдем форму сохранения варианта отчета (обычно это форма в составе БСП или общая форма конфигурации).
  2. В процедуре ПриСозданииНаСервере добавим проверку прав или функциональных опций.
  3. Установим свойство Доступность или Видимость для элемента управления, отвечающего за признак «Общий».

Почему 1С использует справочник «ВариантыОтчетов» вместо системного хранилища

Многие разработчики при попытке программно получить список всех отчетов обращаются к объекту ХранилищаНастроек.ХранилищеВариантовОтчетов. Однако при попытке вызвать метод Загрузить() они обнаруживают, что системное хранилище оказывается пустым или ведет себя нетипично. Выясним причину этого явления.

В современных конфигурациях стандартное (системное) хранилище вариантов отчетов переопределено. В свойствах корневого объекта конфигурации в поле «Хранилище вариантов отчетов» указан объект метаданных ХранилищеВариантовОтчетов. Это программная прослойка, которая перенаправляет данные в справочник ВариантыОтчетов.

Рассмотрим, для чего это было сделано разработчиками 1С:

Техническое устройство переопределенного хранилища

Если мы заглянем в модуль менеджера объекта ХранилищеВариантовОтчетов, мы увидим обработчики, которые срабатывают при вызове стандартных команд сохранения и загрузки. Посмотрим на упрощенную схему того, как это работает:


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

Сами настройки (структура компоновщика, выбранные поля, отборы) хранятся в справочнике ВариантыОтчетов. В новых версиях БСП для оптимизации данные настроек могут выноситься в отдельный регистр сведений (например, НастройкиВариантовОтчетов), где они хранятся в реквизите с типом ХранилищеЗначения.

Как программно получить все варианты отчетов

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


// Правильный подход через использование API БСП
ВариантСсылка = Справочники.ВариантыОтчетов.НайтиПоНаименованию("Мой отчет");
Если Не ВариантСсылка.Пустая() Тогда
    // Получаем настройки через программный интерфейс БСП
    НастройкиКомпоновщика = ВариантыОтчетов.ПолучитьНастройкиВарианта(ВариантСсылка);
КонецЕсли;

Такой подход гарантирует, что вы получите актуальные данные с учетом всех механизмов синхронизации, которые заложены в БСП.

Особенности RLS и видимости в справочнике

Механизм RLS для вариантов отчетов в типовых решениях достаточно сложен. Он опирается на несколько условий:

  1. Авторство: Пользователь всегда видит свои варианты (где он указан в поле Автор).
  2. Флаг «Только для автора»: Если этот признак установлен, никто другой не увидит этот вариант, даже если он находится в общей папке.
  3. Настройки видимости: Существуют вспомогательные регистры, которые определяют, каким ролям или подразделениям доступен конкретный отчет.

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

← На главную