Где хранятся настройки отчета на основе построителя отчета и как скопировать их другому пользователю?

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

При работе с типовыми конфигурациями на базе обычных форм (например, УПП 1.3 или КА 1.1) часто возникает задача скопировать сохраненную пользователем сложную настройку отчета другому сотруднику. Однако при попытке воспользоваться стандартными обработками копирования настроек нужный вариант отчета может отсутствовать в списке доступных для переноса. Разберем причины такого поведения платформы и рассмотрим практические способы переноса настроек отчета на базе объекта ПостроительОтчета.

Выясним причину: почему настройки не видны в типовых обработках

Проанализируем архитектуру сохранения настроек в 1С. В обычных формах существует два принципиально разных механизма сохранения состояния отчетов:

  1. Прикладной механизм конфигурации. Отчет интегрирован в типовую подсистему сохранения настроек. Данные записываются в структуры конфигурации — чаще всего это Справочник.СохраненныеНастройки или регистр сведений СохраненныеНастройкиПользователей. Такие настройки видны всем типовым обработкам копирования настроек.
  2. Платформенный механизм формы. Если отчет использует базовые свойства формы (свойства «Автоматическое сохранение данных в настройках» и список «Сохранять значения»), платформа записывает настройки в локальный системный кэш пользователя (файл 1Cv8.pfl в каталоге профиля операционной системы) или внутреннюю системную таблицу базы данных.

Когда отчет на базе ПостроительОтчета использует платформенное автосохранение, типовые обработки копирования не могут найти эти данные, так как они опрашивают прикладные справочники и регистры, не имея прямого доступа к файлу 1Cv8.pfl конкретного пользователя.

Способ 1. Программный экспорт и импорт настроек построителя через файл

Рассмотрим, как скопировать настройки без изменения конфигурации с помощью внешней обработки. Объект ПостроительОтчета предоставляет штатные методы ПолучитьНастройки() и УстановитьНастройки(), которые оперируют объектом НастройкиПостроителяОтчета. Мы можем сериализовать эти данные в файл и загрузить другому пользователю.

Разберем по шагам алгоритм выгрузки настроек под пользователем-источником:


// Получаем объект отчета с уже открытой или сформированной формой
ОтчетОбъект = Отчеты.ПланФактныйАнализОборотовПоБюджетам.Создать();

// Считываем текущие настройки построителя
ТекущиеНастройки = ОтчетОбъект.ПостроительОтчета.ПолучитьНастройки();

// Сохраняем объект настроек во внешний файл
ИмяФайла = "C:\Temp\ReportSettings.dat";
ЗначениеВФайл(ИмяФайла, ТекущиеНастройки);

Теперь посмотрим на код загрузки и применения настроек под целевым пользователем:


ИмяФайла = "C:\Temp\ReportSettings.dat";

// Проверяем наличие файла и считываем настройки
Если ЭтоФайл(ИмяФайла) Тогда
    ЗагруженныеНастройки = ЗначениеИзФайла(ИмяФайла);
    
    // Создаем экземпляр отчета для целевого пользователя
    ОтчетОбъект = Отчеты.ПланФактныйАнализОборотовПоБюджетам.Создать();
    ОтчетОбъект.ПостроительОтчета.УстановитьНастройки(ЗагруженныеНастройки);
    
    // Открываем форму отчета с примененными настройками
    ФормаОтчета = ОтчетОбъект.ПолучитьФорму();
    ФормаОтчета.Открыть();
КонецЕсли;

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

Способ 2. Программная запись в системное хранилище настроек платформы

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

Рассмотрим пример кода для копирования настройки между учетными записями:


КлючОбъекта = "Отчет.ПланФактныйАнализОборотовПоБюджетам/НастройкиОтчета";
КлючНастроек = "Основная";
ИмяПользователяИсточника = "ИвановИИ";
ИмяПользователяПриемника = "ПетровПП";

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

Если Настройки <> Неопределено Тогда
    // Сохраняем настройки в профиль целевого пользователя
    ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, , ИмяПользователяПриемника);
КонецЕсли;

Способ 3. Перевод сохранения отчета на прикладной механизм

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

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

  1. Настройки сохраняются в таблицах базы данных (Справочник.СохраненныеНастройки), а не в кэше пользователя на диске.
  2. Настройки не сбрасываются при очистке локального кэша 1С или смене рабочего места сотрудника.
  3. Все варианты отчетов становятся доступны стандартным обработкам копирования и управления настройками пользователей.
← На главную