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