При работе с типовыми конфигурациями на базе обычных форм (например, УПП 1.3 или КА 1.1) часто возникает задача скопировать сохраненную пользователем сложную настройку отчета другому сотруднику. Однако при попытке воспользоваться стандартными обработками копирования настроек нужный вариант отчета может отсутствовать в списке доступных для переноса. Разберем причины такого поведения платформы и рассмотрим практические способы переноса настроек отчета на базе объекта ПостроительОтчета.
Проанализируем архитектуру сохранения настроек в 1С. В обычных формах существует два принципиально разных механизма сохранения состояния отчетов:
Справочник.СохраненныеНастройки или регистр сведений СохраненныеНастройкиПользователей. Такие настройки видны всем типовым обработкам копирования настроек.1Cv8.pfl в каталоге профиля операционной системы) или внутреннюю системную таблицу базы данных.Когда отчет на базе ПостроительОтчета использует платформенное автосохранение, типовые обработки копирования не могут найти эти данные, так как они опрашивают прикладные справочники и регистры, не имея прямого доступа к файлу 1Cv8.pfl конкретного пользователя.
Рассмотрим, как скопировать настройки без изменения конфигурации с помощью внешней обработки. Объект ПостроительОтчета предоставляет штатные методы ПолучитьНастройки() и УстановитьНастройки(), которые оперируют объектом НастройкиПостроителяОтчета. Мы можем сериализовать эти данные в файл и загрузить другому пользователю.
Разберем по шагам алгоритм выгрузки настроек под пользователем-источником:
// Получаем объект отчета с уже открытой или сформированной формой
ОтчетОбъект = Отчеты.ПланФактныйАнализОборотовПоБюджетам.Создать();
// Считываем текущие настройки построителя
ТекущиеНастройки = ОтчетОбъект.ПостроительОтчета.ПолучитьНастройки();
// Сохраняем объект настроек во внешний файл
ИмяФайла = "C:\Temp\ReportSettings.dat";
ЗначениеВФайл(ИмяФайла, ТекущиеНастройки);
Теперь посмотрим на код загрузки и применения настроек под целевым пользователем:
ИмяФайла = "C:\Temp\ReportSettings.dat";
// Проверяем наличие файла и считываем настройки
Если ЭтоФайл(ИмяФайла) Тогда
ЗагруженныеНастройки = ЗначениеИзФайла(ИмяФайла);
// Создаем экземпляр отчета для целевого пользователя
ОтчетОбъект = Отчеты.ПланФактныйАнализОборотовПоБюджетам.Создать();
ОтчетОбъект.ПостроительОтчета.УстановитьНастройки(ЗагруженныеНастройки);
// Открываем форму отчета с примененными настройками
ФормаОтчета = ОтчетОбъект.ПолучитьФорму();
ФормаОтчета.Открыть();
КонецЕсли;
После открытия формы целевому пользователю достаточно нажать штатную кнопку сохранения настроек в форме отчета, чтобы зафиксировать их в своем профиле.
Если требуется скопировать системные настройки отчета административным путем без выгрузки в промежуточные файлы, воспользуемся объектом ХранилищеСистемныхНастроек (или ХранилищеПользовательскихНастроекОтчетов). Этот объект позволяет явно указывать имя пользователя, для которого выполняется чтение или запись.
Рассмотрим пример кода для копирования настройки между учетными записями:
КлючОбъекта = "Отчет.ПланФактныйАнализОборотовПоБюджетам/НастройкиОтчета";
КлючНастроек = "Основная";
ИмяПользователяИсточника = "ИвановИИ";
ИмяПользователяПриемника = "ПетровПП";
// Считываем настройки исходного пользователя
Настройки = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта, КлючНастроек, , ИмяПользователяИсточника);
Если Настройки <> Неопределено Тогда
// Сохраняем настройки в профиль целевого пользователя
ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, , ИмяПользователяПриемника);
КонецЕсли;
Если отчет планируется активно использовать и централизованно администрировать в дальнейшем, имеет смысл включить его в типовой механизм конфигурации. Для этого в процедурах формы отчета (например, при открытии и сохранении) настраивается вызов типовых функций работы с сохраненными настройками.
Преимущества интеграции в прикладной механизм:
Справочник.СохраненныеНастройки), а не в кэше пользователя на диске.