Сохранение настроек диалога в 1С

Фирма "1С"Желание: Хочется что бы диалог показывал при открытие те параметры с которыми был он закрыт.

Стандартные решения:

  1. На на панели инструментов могут быть кнопку с действиями "Сохранить значения" и "Восстановить значения". Но тут должно быть желание нажимать эти кнопки при закрытие окна и открытие
  2. Применить при открытие процедуру ВосстановитьЗначение при закрытие СохранитьЗначение. Недостаток: придется для каждого поля прописывать процедуру. Трудозатратно.

Есть еще решение сохранять данные с диалога в реестр.

Процедура ЗаписьПараметровВРеестр()
Перем Право;
Перем результат, значение;

//--- констаныт	---	
HKEY_CURRENT_USER = 2147483649;
KEY_CREATE_SUB_KEY = 8; // создание подразедал

reg = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\"+
ИмяКомпьютера()+ "rootdefault:StdRegProv");

// проверка прав в реестре
reg.CheckAccess(HKEY_CURRENT_USER,"Software1C",
KEY_CREATE_SUB_KEY, Право);
Если Право = Ложь тогда
	Сообщить("Нет прав для работы с реестром");
КонецЕсли;

// создание подраздела
результат = reg.CreateKey(HKEY_CURRENT_USER, "Software1CSettings");
Если результат  0 тогда
	Сообщить(результат);
	Сообщить("Ошибка при создание раздела в реестре");
КонецЕсли;

//  ========= Запись параметров 
Для номер_элемента = 0 по ЭлементыФормы.Количество()-1 Цикл
	элемент = ЭлементыФормы[номер_элемента];
	Если элемент.Данные = "" тогда
		Запись = Новый ЗаписьXML();
		Запись.УстановитьСтроку();
		ЗаписатьXML(Запись,элемент.Значение);
		стрЗначение = Запись.Закрыть();
		результат = reg.SetStringValue(HKEY_CURRENT_USER,
		"Software1CSettings", 
		строка(элемент.Данные), стрЗначение);
	КонецЕсли;
КонецЦикла;
КонецПроцедуры

И сообветсвенно чтение из реестра. Вешаем на откртие диалога.

Процедура ЧтениеПараметровИзРеестра()
Перем Право;
Перем результат, значение;

//--- констаныт	---	
HKEY_CURRENT_USER = 2147483649;
KEY_CREATE_SUB_KEY = 8; // создание подразедал

reg = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\"+
ИмяКомпьютера()+ "rootdefault:StdRegProv");

// проверка прав в реестре
reg.CheckAccess(HKEY_CURRENT_USER,"Software1C",
KEY_CREATE_SUB_KEY, Право);
Если Право = Ложь тогда
	Сообщить("Нет прав для работы с реестром");
КонецЕсли;

// создание подраздела
результат = reg.CreateKey(HKEY_CURRENT_USER, "Software1CSettings");
Если результат  0 тогда
	Сообщить(результат);
	Сообщить("Ошибка при создание раздела в реестре");
КонецЕсли;

// ======== чтение параметров ===========
чтение = Новый ЧтениеXML();

для номер_элемента = 0 по ЭлементыФормы.Количество()-1 цикл
	элемент = ЭлементыФормы[номер_элемента];
	Если элемент.Данные  "" тогда
		результат = reg.GetStringValue(HKEY_CURRENT_USER,
		"Software1CSettings",строка(элемент.Данные),значение);
		Если результат = 0 и значение  "" тогда
			чтение.УстановитьСтроку(значение);
			объект = ПрочитатьXML(чтение);
			элемент.Значение = объект;
		КонецЕсли;
	КонецЕсли;
КонецЦикла;
КонецПроцедуры

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *