При разработке отчетов в 1С одной из важнейших задач повышения удобства работы пользователя (UX) является сохранение настроек. Пользователю крайне неудобно каждый раз при открытии отчета заново выбирать организацию, подразделение или период. В этой статье мы подробно разберем, как реализовать автоматическое сохранение параметров для каждого пользователя, рассмотрим особенности внешних отчетов и проанализируем различные подходы — от стандартных свойств формы до программного управления через хранилища настроек.
Если вы работаете в конфигурации на обычных формах (например, 1С:УСО или 1С:УПП), самым простым и эффективным способом будет использование встроенного механизма платформы. Давайте разберем по шагам, как это настроить без написания кода.
Сохранять значения и установите его.Выбираемые настройки. Нажмите на нее.ДатаНачала, ДатаКонца, Организация).Восстанавливать значения при открытии.Важный нюанс: Этот механизм сохраняет данные в локальный файл настроек пользователя (кеш на компьютере). Если пользователь зайдет в систему с другого рабочего места, настройки могут не восстановиться. Для централизованного хранения в базе данных используются другие методы.
В современных конфигурациях на управляемых формах (ERP, КА, БП 3.0) работа с настройками строится иначе. Платформа предоставляет объект ХранилищеОбщихНастроек. Рассмотрим ситуацию, когда нам нужно программно сохранить структуру параметров.
Для программного сохранения настроек при закрытии формы мы можем использовать следующий код:
Процедура ПриЗакрытии(ЗавершениеРаботы)
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("Организация", Объект.Организация);
СтруктураНастроек.Вставить("Период", Объект.Период);
// Сохраняем настройки в системное хранилище
ХранилищеОбщихНастроек.Сохранить("МойВнешнийОтчет", "НастройкиПользователя", СтруктураНастроек);
КонецПроцедуры
А в процедуре ПриСозданииНаСервере мы восстановим эти данные:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Настройки = ХранилищеОбщихНастроек.Загрузить("МойВнешнийОтчет", "НастройкиПользователя");
Если Настройки <> Неопределено Тогда
Объект.Организация = Настройки.Организация;
Объект.Период = Настройки.Период;
КонецЕсли;
КонецПроцедуры
Этот метод гораздо надежнее, так как данные пишутся напрямую в базу данных 1С и доступны пользователю на любом устройстве.
Если ваш отчет построен на базе СКД, то ручное программирование сохранения параметров зачастую избыточно. Платформа уже содержит мощный функционал для управления вариантами и настройками отчета.
Разберем, как включить параметры в пользовательские настройки:
Включать в пользовательские настройки.Теперь при нажатии кнопки "Сохранить вариант" или при автоматическом сохранении (если настроено в свойствах формы отчета через ХранилищеВариантов), 1С сама позаботится о сохранении всех отмеченных параметров.
Проанализируем ситуацию, с которой часто сталкиваются разработчики внешних отчетов: настройки "слетают" после обновления файла. Выясним причину этого поведения.
Платформа идентифицирует настройки по внутреннему имени объекта и пути к файлу. Если вы используете внешнюю обработку или отчет, рекомендуется:
КлючСохраненияПоложенияОкна и программно задан КлючОбъекта для хранилища настроек.В обсуждениях часто встречается ошибка, когда разработчики пытаются передать реквизиты в универсальную процедуру для восстановления, но значения не меняются. Рассмотрим пример неправильного подхода:
// ОШИБКА: Значение передается по значению, а не по ссылке
Процедура УстановитьЗначение(СохраненноеЗначение, Значение)
Если СохраненноеЗначение <> Неопределено Тогда
Значение = СохраненноеЗначение; // Это изменит только локальную переменную Значение
КонецЕсли;
КонецПроцедуры
В 1С при передаче простых типов (Число, Дата, Строка) в процедуру, создается их копия. Чтобы изменить реквизит формы, необходимо обращаться к нему напрямую или использовать объектную технику (например, передавать структуру или сам ЭтотОбъект).
В типовых решениях на базе обычных форм (УПП, УСО, БП 2.0) существует специальный регистр сведений СохраненныеНастройки. Если вы хотите, чтобы ваш отчет вел себя "как типовой", вы можете интегрировать его в этот механизм. Для этого в модуле объекта отчета должны быть реализованы экспортные процедуры, которые вызывают типовые функции глобальных модулей, такие как РаботаСДиалогами.СохранитьНастройкиОтчета.
Однако для простых внешних отчетов использование свойства формы Сохранять значения остается самым быстрым и предпочтительным вариантом.
Подведем итог: Для быстрого результата используйте свойства формы. Для профессиональной разработки в современных конфигурациях — ХранилищеОбщихНастроек и возможности СКД. При работе с внешними отчетами всегда помните об уникальности ключей сохранения, чтобы настройки не перемешивались между разными версиями файла.