Меню

1с сохранение настроек динамических списков

Сохранение настроек динамического списка (несколько)

Задача такая: Есть настройки окна формы по отборам ( Вид заказа, Состояние и т.д.). Нужно сохранить настройки эти в список. Нашла в интернете такой способ:

Как связать звено элемента динамического списка с выбранным элементом из списка?
как связать звено элемента динамического списка с выбранным элементом из списка в коде? .

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

Сохранение настроек.
Есть много чекбоксов. Как можно сохранить у файл или инифайл то, отмечен ли каждый чекбокс.

ЛюбознательнаяЯ, Что-то код непонятный. Не разбирался конкретно, но в СП заглянул — абсолютно не то.

СтандартноеХранилищеНастроекМенеджер (StandardSettingsStorageManager)
ПолучитьСписок (GetList)
Синтаксис:

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

Тип: Строка.
Имя пользователя, настройки которого получаются.
Если не указан, то получаются настройки текущего пользователя.
Если указан пользователь, не являющийся текущим пользователем, т.е. делается попытка обратиться к настройкам, не принадлежащим текущему пользователю, то требуется наличие у текущего пользователя права АдминистрированиеДанных .
Возвращаемое значение:

Получает список настроек из хранилища.
Значениями элементов списка являются ключи настроек.

Сервер, толстый клиент, внешнее соединение.

А дальше смотрим куда предлагает СП — !см. в Настройки, автоматически сохраняемые в системном хранилище»

Настройки динамического списка:

Хранилище Пользовательских настроек динамического списка

+ «.» +

источник

Сохранение/восстановление настроек динамического списка

Идея не моя, я ее только докрутил под себя. Вычитал основу тут.

Основные моменты и предпосылки:

1) Преобразуем настройки списков так, чтобы их можно было сохранять

2) в 95% случаев при открытии формы нам нужно, чтобы восстановилось последнее состояние формы, а не по умолчанию или список выбора сохраненной настройки(которую еще и сохранить до этого нужно было)

Читайте также:  netgear wgr614v9 сброс настроек

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

После небольшой работы мозгами получилось следующее:

&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )

ксНастройкиСервер . ВосстановитьНастройкиСписка ( ЭтаФорма );

&НаКлиенте
Процедура ПриЗакрытии ()

ксНастройкиСервер . СохранитьНастройкиСписка ( ЭтаФорма );

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

Внедряем в конфигурацию общий модуль ксНастройкаСервер с таким содержанием:

Процедура СохранитьНастройкиСписка ( пФорма , пИмяСписка = «» ) Экспорт

Настройки = Новый Соответствие ;
ПриСохраненииДанныхВНастройках ( Настройки , пФорма , пИмяСписка );

ХранилищеНастроекДанныхФорм . Сохранить ( пФорма . ИмяФормы ,, Настройки );

Процедура ВосстановитьНастройкиСписка ( пФорма , пИмяСписка = «» ) Экспорт

Настройки = ХранилищеНастроекДанныхФорм . Загрузить ( пФорма . ИмяФормы );

Если ТипЗнч ( Настройки ) = Тип ( «Соответствие» ) Тогда

ПриЗагрузкеДанныхИзНастроек ( Настройки , пФорма , пИмяСписка );

Процедура ПриСохраненииДанныхВНастройках ( Настройки , пФорма , пИмяСписка = «» ) Экспорт

Если ЗначениеЗаполнено ( пИмяСписка ) Тогда

УстановитьНастройкиДинСпискаВСоответствиие ( Настройки , пФорма [ имяСписка ], пИмяСписка );

Процедура УстановитьНастройкиДинСпискаВСоответствиие ( пСоответствие , пСписок , пИмяСписка = «» )

префиксКлюча = ПрефиксКлючаНастроекСписка ( пИмяСписка );

пСоответствие . Вставить ( префиксКлюча + «Группировка» , СериализоватьГруппировки ( пСписок . Группировка ) );
пСоответствие . Вставить ( префиксКлюча + «Отбор» , СериализоватьОтбор ( пСписок . Отбор ) );
пСоответствие . Вставить ( префиксКлюча + «Порядок» , СериализоватьПорядок ( пСписок . Порядок ) );
пСоответствие . Вставить ( префиксКлюча + «УсловноеОформление» , СериализоватьУсловноеОформление ( пСписок . УсловноеОформление ) );

Функция ПрефиксКлючаНастроекСписка ( пИмяСписка )

Если ЗначениеЗаполнено ( пИмяСписка ) Тогда

префиксКлюча = пИмяСписка + «_» ;

Процедура ПриЗагрузкеДанныхИзНастроек ( Настройки , пФорма , пИмяСписка = «» ) Экспорт

Если ЗначениеЗаполнено ( пИмяСписка ) Тогда

УстановитьНастройкиИзСоответствияВДинСписок ( Настройки , пФорма [ имяСписка ], пИмяСписка );

Процедура УстановитьНастройкиИзСоответствияВДинСписок ( пСоответствие , пСписок , пИмяСписка = «» )

префиксКлюча = ПрефиксКлючаНастроекСписка ( пИмяСписка );

ДесериализоватьГруппировки ( пСоответствие [ префиксКлюча + «Группировка» ] , пСписок . Группировка );
ДесериализоватьОтбор ( пСоответствие [ префиксКлюча + «Отбор» ] , пСписок . Отбор );
ДесериализоватьПорядок ( пСоответствие [ префиксКлюча + «Порядок» ] , пСписок . Порядок );
ДесериализоватьУсловноеОформление ( пСоответствие [ префиксКлюча + «УсловноеОформление» ] , пСписок . УсловноеОформление );

// Группировки
Функция СериализоватьГруппировки ( пГруппировки )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «Группировки» );
Для Каждого цЭлементГруппировки Из пГруппировки . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементГруппировки );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Читайте также:  jiayu g4 настройка звука

Процедура ДесериализоватьГруппировки ( пНастройки_Группировка , пГруппировка )

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

Функция СериализоватьПорядок ( пПорядок )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «Порядок» );
Для Каждого цЭлементПорядка Из пПорядок . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементПорядка );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Функция ДесериализоватьПорядок ( пНастройки_Порядок , пПорядок )

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

Функция СериализоватьОтбор ( пОтбор )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «Отборы» );
Для Каждого цЭлементОтбора Из пОтбор . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементОтбора );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Процедура ДесериализоватьОтбор ( пНастройки_Отбор , пОтбор )

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

Читайте также:  как сохранить настройки microsoft outlook 2010

Процедура СкопироватьЭлементыОтбораРекурсивно ( пОтборОткуда , пОтборКуда );

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

Функция СериализоватьУсловноеОформление ( пУсловноеОформление )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «УсловноеОформление» );
Для Каждого цЭлементУсловногоОформления Из пУсловноеОформление . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементУсловногоОформления );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Функция ДесериализоватьУсловноеОформление ( пНастройки_УсловноеОформление , пУсловноеОформление )

пУсловноеОформление . Элементы . Очистить ();
Если пНастройки_УсловноеОформление <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML ();
ЧтениеXML . УстановитьСтроку ( пНастройки_УсловноеОформление );
ЧтениеXML . ПерейтиКСодержимому ();
Если ЧтениеXML . ТипУзла = ТипУзлаXML . НачалоЭлемента И ЧтениеXML . Имя = «УсловноеОформление» Тогда
ЧтениеXML . Прочитать ();
Пока ЧтениеXML . ТипУзла <> ТипУзлаXML . КонецЭлемента И ЧтениеXML . Имя <> «УсловноеОформление» Цикл
ПолеУсловногоОформленияXML = СериализаторXDTO . ПрочитатьXML ( ЧтениеXML );
ПолеУсловногоОформления = пУсловноеОформление . Элементы . Добавить ();
ЗаполнитьЗначенияСвойств ( ПолеУсловногоОформления , ПолеУсловногоОформленияXML );
Для Индекс = 0 по ПолеУсловногоОформленияXML . Оформление . ДоступныеПараметры . Элементы . Количество ()- 1 Цикл
ЗаполнитьЗначенияСвойств ( ПолеУсловногоОформления . Оформление . ДоступныеПараметры . Элементы [ Индекс ],
ПолеУсловногоОформленияXML . Оформление . ДоступныеПараметры . Элементы [ Индекс ]);
КонецЦикла;
Для Индекс = 0 по ПолеУсловногоОформленияXML . Оформление . Элементы . Количество ()- 1 Цикл
ЗаполнитьЗначенияСвойств ( ПолеУсловногоОформления . Оформление . Элементы [ Индекс ],
ПолеУсловногоОформленияXML . Оформление . Элементы [ Индекс ]);
КонецЦикла;
Для каждого ЭлементОтбораXML ИЗ ПолеУсловногоОформленияXML . Отбор . Элементы Цикл
ЭлементОтбора = ПолеУсловногоОформления . Отбор . Элементы . Добавить ( ТипЗнч ( ЭлементОтбораXML ));
СкопироватьЭлементыОтбораРекурсивно ( ЭлементОтбораXML , ЭлементОтбора );
КонецЦикла;
Для каждого ПолеXML ИЗ ПолеУсловногоОформленияXML . Поля . Элементы Цикл
Поле = ПолеУсловногоОформления . Поля . Элементы . Добавить ();
ЗаполнитьЗначенияСвойств ( Поле , ПолеXML );
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;

источник

Добавить комментарий

Adblock
detector