Совсем недавно передо мной встала задача, сделать внешнюю обработку в УТ11, которая как известно работает полностью на управляемых формах. Какое же было мое удивление, когда я обнаружил, что у управляемой формы реквизиты заведенные как реквизиты формы, при закрытии и открытии ее заново могут сохраняться и восстанавливаться, точно так же как это было в 8.1, достаточно только поставить напротив галочку сохраненять и в свойствах формы выбрать "АвтоматическоеСохранениеДанныхВНастройках" - Использовать. А что же делать с реквизитами, которые выступают в роли реквизитов объектов ? Погуглив и так ничего толком не найдя, я приступил к экспериментам. Делюсь полученнными результатами.
Поскольку в платформе (8.2.16.362) механизим сохранения реквизитов объектов так и не был найден, осталось только одно - это програмное сохранение настроек при закрытии обработки и программное восстановление при открытии.
За основу примера была взята обработка с конкурса БиТа отсюда Результаты конкурса для участников INFOSTART EVENT 2012 от Первого Бита. за что им кстати огромное спасибо.
К обработке, для наглядности, я еще добавил 2 реквизита. Реквизит1 - тип строка и Реквизит2 -тип "Произвольный", чтобы было еще что-то, кроме "таблицы значений".
Итак, обо всем по порядку:
I. Было создано две процедуры:
1.
&НаСервере
Процедура СохранитьНастройки()
КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
Настройки = Новый Соответствие;
Настройки.Вставить("ТаблицаЗначений", Объект.Свойства.Выгрузить());
Настройки.Вставить("Реквизит1", Объект.Реквизит1);
Настройки.Вставить("Реквизит2", Объект.Реквизит2);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек, Настройки);
КонецПроцедуры
и
2.
&НаСервере
Процедура ВосстановитьНастройки()
КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек);
Если ТипЗнч(ЗначениеНастроек) = Тип("Соответствие") Тогда
ЗначениеИзНастройки = ЗначениеНастроек.Получить("ТаблицаЗначений");
Объект.Реквизит1 = ЗначениеНастроек.Получить("Реквизит1");
Объект.Реквизит2 = ЗначениеНастроек.Получить("Реквизит2");
Объект.Свойства.Загрузить(ЗначениеИзНастройки);
КонецЕсли;
КонецПроцедуры
II. Затем эти процедуры были прописаны в соответствующих процедурах, выполняющихся при открытии и закрытии формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ВосстановитьНастройки();
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
СохранитьНастройки()
КонецПроцедуры
Если же по каким то причинам планируется использовать не типовую или не основанную на БСП конфигурацию, то можно заменить текст процедур ВосстановитьНастройки() и СохранитьНастройки() так :
&НаСервере
Процедура ВосстановитьНастройки()
КлючОбъекта = "Обработка.ЗадачаПоУТ_11_шаблон";
КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
ОписаниеНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
Значение ="";
ИмяПользователя = "";
//ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек);
ЗначениеНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);
Если ТипЗнч(ЗначениеНастроек) = Тип("Соответствие") Тогда
ЗначениеИзНастройки = ЗначениеНастроек.Получить("ТаблицаЗначений");
Объект.Реквизит1 = ЗначениеНастроек.Получить("Реквизит1");
Объект.Реквизит2 = ЗначениеНастроек.Получить("Реквизит2");
Объект.Свойства.Загрузить(ЗначениеИзНастройки);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройки()
КлючОбъекта = "Обработка.ЗадачаПоУТ_11_шаблон";
КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
ОписаниеНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
Значение ="";
ИмяПользователя = "";
Настройки = Новый Соответствие;
Настройки.Вставить("ТаблицаЗначений", Объект.Свойства.Выгрузить());
Настройки.Вставить("Реквизит1", Объект.Реквизит1);
Настройки.Вставить("Реквизит2", Объект.Реквизит2);
//ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек, Настройки);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
КонецПроцедуры
Как это все работает, можно посмотреть скачав приложенную к статье обработку.