Как правильно реализовать сохранение реквизитов и табличных частей внешней обработки в управляемых формах?

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

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

Использование штатного механизма сохранения

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

Программное сохранение нестандартных данных

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

Для того чтобы дополнить процесс сохранения собственными данными, используем обработчик ПриСохраненииДанныхВНастройкахНаСервере. Этот метод позволяет встроить наши данные (например, выгруженную табличную часть) в общую структуру настроек.


&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
    // Добавляем табличную часть в структуру настроек
    Настройки.Вставить("frФильтры", Объект.Банк_Фильтры.Выгрузить());
КонецПроцедуры

Для восстановления данных, которые мы сохранили вручную, используем парный обработчик ПриЗагрузкеДанныхИзНастроекНаСервере. В нем мы считываем данные из структуры и загружаем их обратно в реквизиты или табличные части формы.


&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
    // Получаем данные из структуры
    Данные = Настройки.Получить("frФильтры");
    Если Данные <> Неопределено Тогда
        Объект.Банк_Фильтры.Загрузить(Данные);
    КонецЕсли;
КонецПроцедуры

Как гарантировать вызов событий сохранения

Существует важный нюанс: события ПриСохраненииДанныхВНастройкахНаСервере и ПриЗагрузкеДанныхИзНастроекНаСервере могут не вызываться, если платформа считает, что сохраняемые данные не были изменены. Чтобы гарантированно инициировать процесс сохранения при закрытии формы, необходимо принудительно установить флаг модифицированности. Для этого в модуле формы перед закрытием или в обработчике закрытия формы установим:

СохраняемыеВНастройкахДанныеМодифицированы = Истина;

Этот простой шаг заставляет 1С выполнить все процедуры сохранения, даже если пользователь не вносил видимых изменений в поля с установленным свойством сохранения.

Разбор нюансов работы с объектами формы

В процессе работы часто возникает вопрос: как обращаться к реквизитам? В современных управляемых формах использование ЭтаФорма или ЭтотОбъект для доступа к реквизитам является допустимым, но во многих случаях избыточным. Мы можем обращаться к реквизитам формы напрямую по их имени, так как контекст исполнения (на сервере) уже учитывает текущую форму.

Также важно отметить, что описанный механизм отлично работает как для внешних обработок, встроенных в справочник ДополнительныеОтчетыИОбработки, так и для файлов, открываемых пользователем вручную через меню Файл - Открыть. Платформа корректно обрабатывает настройки пользователя для таких файлов, сохраняя их в контексте текущего пользователя и информационной базы.

Подведем итог:

  1. Для простых полей используйте свойство Сохранение = Данные в настройках реквизита.
  2. Для табличных частей и сложных данных используйте событийные обработчики ПриСохраненииДанныхВНастройкахНаСервере и ПриЗагрузкеДанныхИзНастроекНаСервере.
  3. Всегда устанавливайте СохраняемыеВНастройкахДанныеМодифицированы = Истина, чтобы гарантировать вызов логики сохранения.

Такой подход является профессиональным стандартом разработки на платформе 1С:Предприятие 8, исключает необходимость написания громоздкого кода для перебора элементов формы и обеспечивает стабильную работу пользовательских настроек.

← На главную