При разработке и сопровождении отчетов на обычных формах в 1С:Предприятии разработчики часто сталкиваются с вопросом: куда именно платформа сохраняет пользовательские параметры, когда пользователь нажимает стандартные кнопки-стрелочки Сохранить значение и Восстановить значение в автоматически генерируемой форме отчета? Попытки найти эти данные через стандартные объекты метаданных, такие как ХранилищеОбщихНастроек или ХранилищеВариантовОтчетов, часто не приносят результата. Рассмотрим подробно внутреннее устройство этого механизма, выясним причину такого поведения платформы и разберем альтернативные варианты сохранения настроек.
Стандартный механизм сохранения значений реквизитов формы в обычном приложении работает идентично системным методам встроенного языка СохранитьЗначение() и ВосстановитьЗначение(). Проанализируем, как и где физически размещаются эти данные:
Files в виде системного профайла с расширением .pfl. Имя файла формируется на основании уникального идентификатора текущего пользователя информационной базы (GUID объекта ПользовательИнформационнойБазы).AppData\Roaming\1C\1cv8), однако сами сохраненные значения реквизитов формы привязаны именно к системным файлам информационной базы.Платформа не предоставляет прямого табличного или объектного доступа для чтения файлов .pfl через стандартные запросы или менеджеры объектов, поэтому прочитать или отредактировать эти настройки напрямую штатными методами для произвольного пользователя затруднительно.
Для внешних отчетов и обработок (файлов .erf и .epf) платформа формирует системный ключ сохранения настроек с учетом полного физического пути к файлу на диске или в сетевом каталоге. Разберем практические следствия этой особенности:
ОчиститьНастройкиПользователя(), однако он удаляет все сохраненные пользовательские настройки целиком.Если требуется надежное хранение параметров отчета с возможностью переноса настроек между пользователями или сохранением их независимо от пути к файлу, применяют программные методы управления настройками.
1. Использование системного хранилища общих настроек
Вместо стандартного автосохранения формы можно программно сохранять структуру реквизитов через ХранилищеОбщихНастроек. В качестве ключа объекта задается фиксированная строка, что исключает привязку к пути к файлу на диске.
Посмотрим на пример процедуры сохранения настроек отчета:
Процедура СохранитьНастройкиОтчета(СтруктураНастроек, ИмяНастройки) Экспорт
КлючОбъекта = "ВнешнийОтчет_АнализПродаж";
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, ИмяНастройки, СтруктураНастроек);
КонецПроцедуры
Разберем пример загрузки сохраненных настроек:
Функция ЗагрузитьНастройкиОтчета(ИмяНастройки) Экспорт
КлючОбъекта = "ВнешнийОтчет_АнализПродаж";
Возврат ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, ИмяНастройки);
КонецФункции
2. Сериализация настроек во внешний файл
Для переноса вариантов отчета между различными базами данных или отправки коллегам удобно выгружать настройки в отдельный файл на диске с помощью методов ЗначениеВФайл() и ЗначениеИзФайла().
Посмотрим на пример реализации выгрузки:
Процедура ЭкспортироватьНастройкиВФайл(ПутьКФайлу, СтруктураПараметров)
ЗначениеВФайл(ПутьКФайлу, СтруктураПараметров);
КонецПроцедуры
Функция ИмпортироватьНастройкиИзФайла(ПутьКФайлу)
Возврат ЗначениеИзФайла(ПутьКФайлу);
КонецФункции
3. Использование типовых механизмов конфигурации
В типовых конфигурациях на обычных формах (например, в старых редакциях конфигураций «Управление производственным предприятием» или «Управление торговлей») часто реализован регистр сведений СохраненныеНастройки и специализированные общие модули для работы с отчетами. Использование этих регистров позволяет передавать варианты отчетов другим пользователям и включать настройки в стандартные резервные копии данных.