Как сохранить настройки отчета для всех пользователей без снятия конфигурации с поддержки

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

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

Разберем подробнее, почему возникает данное ограничение, и рассмотрим практические способы организации единого хранилища настроек без доработки конфигурации и снятия ее с поддержки.

Причины платформенного ограничения

Объект ХранилищеОбщихНастроек физически сохраняет записи в системной таблице базы данных с обязательной привязкой к имени пользователя. Если при вызове методов сохранения или чтения параметр имени пользователя не указан, платформа 1С автоматически подставляет имя текущего авторизованного пользователя.

Если же мы явно передаем чужое или фиксированное имя пользователя, платформа требует наличия административного права АдминистрированиеДанных. У рядовых пользователей такого права нет, поэтому при попытке чтения или записи настроек под общим ключом возникает ошибка прав доступа.

Способ 1. Использование привилегированного режима и ХранилищаОбщихНастроек

Самый компактный программный способ обойти ограничение прав — выполнять чтение и запись настроек в серверном контексте с включением привилегированного режима. При этом платформа не проверяет реальное существование пользователя в списке пользователей ИБ, что позволяет использовать строковую константу в качестве общего идентификатора.

Рассмотрим реализацию сохранения общих настроек отчета на сервере:


&НаСервере
Процедура СохранитьОбщиеНастройкиОтчетаНаСервере(СтруктураНастроек)
    УстановитьПривилегированныйРежим(Истина);
    
    КлючОбъекта = "ДополнительныйОтчет_МойОтчет";
    КлючНастроек = "ОсновныеПараметрыИФильтры";
    ИмяОбщегоПользователя = "__ОбщиеНастройкиДляВсех";
    
    ХранилищеОбщихНастроек.Сохранить(
        КлючОбъекта, 
        КлючНастроек, 
        СтруктураНастроек, 
        , 
        ИмяОбщегоПользователя
    );
КонецПроцедуры

Чтение сохраненных настроек выполняется аналогично на стороне сервера перед открытием формы отчета или при инициализации компоновщика:


&НаСервере
Функция ЗагрузитьОбщиеНастройкиОтчетаНаСервере()
    УстановитьПривилегированныйРежим(Истина);
    
    КлючОбъекта = "ДополнительныйОтчет_МойОтчет";
    КлючНастроек = "ОсновныеПараметрыИФильтры";
    ИмяОбщегоПользователя = "__ОбщиеНастройкиДляВсех";
    
    Возврат ХранилищеОбщихНастроек.Загрузить(
        КлючОбъекта, 
        КлючНастроек, 
        , 
        ИмяОбщегоПользователя
    );
КонецФункции

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

Способ 2. Хранение настроек в справочнике «Дополнительные отчеты и обработки»

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

Проанализируем преимущества этого подхода:

  1. Настройки хранятся прямо в элементе справочника и привязаны к конкретному установленному отчету.
  2. При резервном копировании или переносе базы данных настройки гарантированно сохраняются.
  3. Для чтения реквизита не требуется переопределять имена пользователей.

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


&НаСервере
Процедура ЗаписатьНастройкиВЭлементСправочника(СсылкаНаОтчет, СтруктураНастроек)
    УстановитьПривилегированныйРежим(Истина);
    
    ОбъектОтчета = СсылкаНаОтчет.ПолучитьОбъект();
    ОбъектОтчета.ХранилищеНастроек = Новый ХранилищеЗначения(СтруктураНастроек, Новый СжатиеДанных(9));
    ОбъектОтчета.Записать();
КонецПроцедуры

Способ 3. Публикация общего варианта отчета в БСП

Если дополнительный отчет создан на базе системы компоновки данных (СКД), можно воспользоваться типовым пользовательским функционалом подсистемы «Варианты отчетов»:

  1. Администратор базы или ответственный пользователь открывает отчет и настраивает все необходимые фильтры по дополнительным реквизитам.
  2. Через стандартное меню отчета выбирает команду Сохранить вариант отчета.
  3. В открывшемся окне сохранения указывает доступность варианта: Всем пользователям (или выбирает конкретные группы пользователей).

Этот способ не требует написания программного кода и полностью поддерживается типовыми механизмами 1С:Предприятия.

Способ 4. Добавление собственного регистра через расширение конфигурации

Если требуется строго структурированное хранение параметров с удобным пользовательским интерфейсом управления, создается расширение конфигурации (CFE):

  1. В расширение добавляется непериодический регистр сведений (например, НастройкиДополнительныхОтчетов).
  2. В качестве измерений используются имя отчета и имя параметра, а в качестве ресурса — значение (или ХранилищеЗначения).
  3. Основная конфигурация при этом остается на полной поддержке и обновляется в штатном режиме без каких-либо сложностей.
← На главную