Как сохранить и восстановить отборы на форме в 1С 8.3 Управляемое приложение

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

При переходе с обычных форм на управляемое приложение разработчики часто сталкиваются с вопросом сохранения пользовательских настроек и отборов. В обычном приложении для этих целей использовались процедуры СохранитьЗначение() и ВосстановитьЗначение(). В управляемом приложении 1С:Предприятие 8.3 механизмы работы с настройками кардинально изменились. Разберем подробно, как правильно сохранять отборы на форме, передавать их между формами и обеспечивать их восстановление при повторном открытии.

Вариант 1. Использование встроенного автосохранения данных формы

Платформа 1С позволяет настроить автоматическое сохранение реквизитов формы без написания программного кода. Этот вариант подходит, если отборы привязаны к конкретным реквизитам формы (например, организации, контрагенту или периоду).

Рассмотрим шаги для настройки автосохранения в Конфигураторе:

  1. Откроем нужную форму в Конфигураторе и перейдем в палитру свойств самой формы.
  2. Найдем свойство «Автоматическое сохранение данных в настройках» и установим его значение в Использовать.
  3. Перейдем на вкладку «Реквизиты» в редакторе формы.
  4. В колонке «Сохранение» отметим галочками те реквизиты, значения которых должны автоматически сохраняться и восстанавливаться при открытии.

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

Вариант 2. Программное сохранение через ХранилищеОбщихНастроек

Если требуется сохранить сложную структуру данных, отбор динамического списка или применить логику, аналогичную прежним функциям СохранитьЗначение() и ВосстановитьЗначение(), используем объект платформы ХранилищеОбщихНастроек или соответствующие функции БСП.

Проанализируем работу с ХранилищеОбщихНастроек. Метод Сохранить() принимает три основных параметра: ключ объекта, ключ настроек и сохраняемое значение.

Рассмотрим пример сохранения структуры отборов на сервере:


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

Для восстановления сохраненных данных при повторном открытии формы используем метод Загрузить():


&НаСервере
Процедура ВосстановитьНастройкиОтбора()
    
    КлючОбъекта = "ФормаСписка_ДокументыПродажи";
    КлючНастроек = "ОтборыПользователя";
    
    СтруктураНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек);
    
    Если ТипЗнч(СтруктураНастроек) = Тип("Структура") Тогда
        СтруктураНастроек.Свойство("Контрагент", ОтборКонтрагент);
        СтруктураНастроек.Свойство("ПериодСвязи", ОтборПериод);
    КонецЕсли;
    
КонецПроцедуры

Важное замечание по поводу ключа настроек: платформа 1С автоматически сохраняет данные в разрезе текущего пользователя системы. Добавлять имя пользователя в КлючОбъекта или КлючНастроек не нужно — платформа сделает это самостоятельно.

Кроме того, помните о типах данных: в хранилище можно сохранять ссылки, простые типы, массивы, структуры и соответствия. Передавать напрямую ТаблицаЗначений через метод Выгрузить() нельзя, так как таблица значений не является сериализуемым типом данных для сохранения в некоторых контекстах.

Вариант 3. Использование функций БСП (Библиотеки Стандартных Подсистем)

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


&НаСервере
Процедура СохранитьНастройкиЧерезБСП()
    
    Настройки = Новый Структура("Организация", ОтборОрганизация);
    ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("МояОбработка", "НастройкиОтбора", Настройки);
    
КонецПроцедуры

&НаСервере
Процедура ВосстановитьНастройкиЧерезБСП()
    
    Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("МояОбработка", "НастройкиОтбора");
    Если ТипЗнч(Настройки) = Тип("Структура") Тогда
        Настройки.Свойство("Организация", ОтборОрганизация);
    КонецЕсли;
    
КонецПроцедуры

Вариант 4. Передача отборов из вспомогательной формы отбора в основную форму

Часто отбор настраивается в отдельной всплывающей форме, а применяться должен к списку на основной форме. Разберем схему взаимодействия двух форм с использованием объекта ОписаниеОповещенияОЗакрытии.

На основной форме создается обработчик нажатия кнопки открытия настройки отборов и процедура оповещения о закрытии:


&НаКлиенте
Процедура ОткрытьФормуНастройки(Команда)
    
    // Подготавливаем параметры для открытия формы
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Контрагент", ОтборКонтрагент);
    
    // Создаем описание оповещения о закрытии формы настройки
    ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗакрытииФормыНастроек", ЭтотОбъект);
    
    // Открываем форму настройки модально или блокируя окно владельца
    ОткрытьФорму("ВнешняяОбработка.МояОбработка.Форма.ФормаНастройкиОтбора", 
                 ПараметрыФормы, 
                 ЭтаФорма, 
                 ,,, 
                 ОписаниеОповещения, 
                 РежимОткрытияОкнаАвтономный);
                 
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытииФормыНастроек(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
    
    Если ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда
        // Получаем возвращенные из формы отбора данные
        ОтборКонтрагент = РезультатЗакрытия.Контрагент;
        
        // Применяем новые отборы к списку
        ОбновитьСписокНаСервере();
        
        // Сохраняем новые настройки
        СохранитьНастройкиОтбора();
    КонецЕсли;
    
КонецПроцедуры

В самой форме настройки отборов при закрытии передаем выбранные значения в качестве результата закрытия:


&НаКлиенте
Процедура ПрименитьИЗакрыть(Команда)
    
    РезультатСтруктура = Новый Структура;
    РезультатСтруктура.Вставить("Контрагент", РеквизитКонтрагент);
    
    // Закрываем форму с передачей результата
    Закрыть(РезультатСтруктура);
    
КонецПроцедуры

Вариант 5. Сохранение отборов Динамического Списка

Если на форме используется ДинамическийСписок, платформа предоставляет встроенный инструмент управления отборами через КомпоновщикНастроек.

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


&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
    
    // Сохраняем пользовательские настройки компоновщика
    Настройки.Вставить("ОтборСписка", Список.КомпоновщикНастроек.ПользовательскиеНастройки);
    
КонецПроцедуры

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

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

← На главную