Как можно сохранить отбор при закрытии обычной формы? Как здесь https://infostart.ru/1c/articles/88010/ но только для обычной формы и не динамического списка?
---
В итоге такое решение:

```1c
    Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    ПараметрыОтбор1 =Новый Структура;
    ПараметрыОтбор1 = ЭтаФорма.Отбор;
    СохранитьЗначение("ПараметрыОтбор1",ПараметрыОтбор1);
    КонецПроцедуры

    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ПараметрыОтбор1 = ВосстановитьЗначение("ПараметрыОтбор1");
    Если ПараметрыОтбор1<>Неопределено Тогда
    Для каждого Эл из ПараметрыОтбор1 Цикл
    Если Эл.Использование = Истина Тогда
    Имя2 = Эл.Имя;
    ЗаполнитьЗначенияСвойств(Список.Отбор.Найти( Имя2 ), Эл);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
```
---
Для толстого клиента доступны СохранитьЗначение и ВосстановитьЗначение которые могут сохранять значения произвольного типа под указаным именем.
---
Нашел как обращаться к этому значению в обработке, но как туда передать что я хочу сохранить? Какое-то наименование строкой передается
---
Может есть пример кода?
---
Сохранить отбор в форме списка? скриншот формы (отбора) можно увидеть?
---
На обычных формах есть встроенный функционал - история отборов, в два клика можно восстановить любой с ~10 последних.
---
Написал за минуту на коленке, возможно не заработает для диапазонов или его-то подобного.
После вставки кода нужно процедуры подвязать к событиям формы.

```1c
    Процедура ПриЗакрытии()
    СохранитьЗначение(КлючУникальностиМодуля(), Отбор);
    КонецПроцедуры

    Процедура ПриОткрытии()
    ОтборСохраненныйРанее = ВосстановитьЗначение(КлючУникальностиМодуля());
    Если ОтборСохраненныйРанее <> Неопределено Тогда
    Для Каждого ЭлементОтбора из ОтборСохраненныйРанее Цикл
    ЗаполнитьЗначенияСвойств(Отбор.Найти( ЭлементОтбора.Имя ), ЭлементОтбора);
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры

    Функция КлючИмениОтбора()
    Возврат "Например, полное имя модуля/формы, по красоте - получать с метаданных, но лень думать как" + "_Отбор";
    КонецФункции
```
---
СохранитьЗначение/ВосстановитьЗначение работает только для текущего пользователя.

Лучше так:

```1c
    ОчиститьСообщения();

    Настройки = Новый Соответствие;
    Настройки.Вставить("ДатаНачалаОтчета" , '2023-11-01');
    Настройки.Вставить("ДатаОкончанияОтчета", '2023-11-30');

    ХранилищеОбщихНастроек.Сохранить("Отчет.ЭтотОтчет", "Настройки", Настройки,, ИмяПользователя());

    ////////////////////////////////////////////////////////////­////////////////////////////////////////

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

    Сообщить(ДатаНачалаОтчета );
    Сообщить(ДатаОкончанияОтчета);
```

Таким образом можно получать/устанавливать настройки не только для текущего пользователя, но и любого другого по его имени. Т.е. можно переносить настройки любому пользователю.

Плюсик в карму Tormozit
---
примерно так, точность не гарантирую, смотреть в СП

```1c
    Процедура ПриЗакрытии()
    ПараметрыОтбор=Новый Структура;
    ПараметрыОтбор.Вставить("Отбор",ЭтаФорма.Отбор);
    СохранитьЗначение("ПараметрыОтбор",ПараметрыОтбор);

    ////

    Процедура ПриОткрытии()
    ПараметрыОтбор=ВосстановитьЗначение("ПараметрыОтбор");
    Если ПараметрыОтбор<>Неопределено Тогда
    Для сч=1 по ЭтаФорма.Отбор.Количество() Цикл
    ЭтаФорма.Отбор.Удалить[сч-1];
    КонецЦикла;
    Для каждого Эл из ПараметрыОтбор.Отбор Цикл
    ЭтаФорма.Отбор.Добавить(Эл.Значение,Эл.Имя,Эл.Представление);
    КонецЦикла;
    КонецЕсли;
```
---
В итоге такое решение:

```1c
    Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    ПараметрыОтбор1 =Новый Структура;
    ПараметрыОтбор1 = ЭтаФорма.Отбор;
    СохранитьЗначение("ПараметрыОтбор1",ПараметрыОтбор1);
    КонецПроцедуры

    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ПараметрыОтбор1 = ВосстановитьЗначение("ПараметрыОтбор1");
    Если ПараметрыОтбор1<>Неопределено Тогда
    Для каждого Эл из ПараметрыОтбор1 Цикл
    Если Эл.Использование = Истина Тогда
    Имя2 = Эл.Имя;
    ЗаполнитьЗначенияСвойств(Список.Отбор.Найти( Имя2 ), Эл);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
```