Имя: Пароль:
1C
1С v8
Сохранение настроек СКД в обработке
0 badboychik
 
28.12.11
14:14
Задача такая - есть обработка (не отчет) которая выступает как отчет, на основе СКД. И нужно сделать сохранение настроек вариантов отчета. Делаю на панели стандартные кнопки "Сохранить настройки" и "Восстановить настройки", ставлю галки у формы - Сохранять значения, т.е. все как надо. Для настроек СКД есть реквизит КомпоновщикНастроек.

Но прикол в том, что нифига не сохраняется! После открытия и восстановления настроек отчет вообще не выводится и настройки пустые. Какой тогда смысл в галочках, где автоматическое сохранение значений выбраных реквизитов??

Ладно, делаем руками:

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

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

Та же картина - ничего не сохраняется.
Посмотрел типовую, УниверсальныйОтчет, там вообще эти галочки не стоят и сохранение делается через РегистрСведений.СохраненныеНастройки

КАК проще все таки сделать сохранение вариантов настроек СКД в своей обработке?
1 fimanich
 
28.12.11
14:19
Тоже с аналогичной ситуацией сталкивался. Пришлось подключаться к механизму, аналогичному тому про который ты пишешь (РегистрСведений.СохраненныеНастройки)
Еще можно метод СохранитьЗначение() использовать, но мне это не подошло, хотелось, чтобы можно было сохранять разные варианты настроек, а не последний.
2 Axel2009
 
28.12.11
14:22
//ПолучитьXMLДляСКД() - получает XML для СКД
//Параметры:
//СхемаКомпоновкиДанных - Схема СКД
//Возвращает XML для СКД
Функция ПолучитьXMLДляСКД (Настройки) Экспорт
   
   Текст = "";
   
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.УстановитьСтроку();
   СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Настройки, "settingsComposition", "http://v8.1c.ru/8.1/data-composition-system/settings");
   Текст = ЗаписьXML.Закрыть();
   
   Возврат Текст;
   
КонецФункции

//ПолучитьСКДИзXML() - получает СКД из XML
//Параметры:
//СхемаКомпоновкиДанных - Схема СКД
//Возвращает XML для СКД
Функция ПолучитьСКДИзXML (ТекстXML) Экспорт
   
   ЧтениеXML = Новый ЧтениеXML;
   ЧтениеXML.УстановитьСтроку(ТекстXML);
   Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("НастройкиКомпоновкиДанных"));
   
КонецФункции


Процедура СохранитьНастройки(Отчет, Форма, ИмяОбъекта = Неопределено) Экспорт
   
   Перем СохраненнаяНастройка;
   
   СтруктураНастройки = Новый Структура;
   СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
   СтруктураНастройки.Вставить("ИмяОбъекта", ?(ИмяОбъекта = Неопределено, Строка(Отчет), ИмяОбъекта));
   СтруктураНастройки.Вставить("НаименованиеНастройки", ?(Отчет.мТекущаяНастройка = Неопределено, Неопределено, Отчет.мТекущаяНастройка.НаименованиеНастройки));
   СтруктураНастройки.Вставить("СохраненнаяНастройка", ПолучитьXMLДляСКД (Отчет.КомпоновщикНастроек.ПолучитьНастройки()));
   СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Ложь);
   СтруктураНастройки.Вставить("СохранятьАвтоматически", Ложь);
   
   Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);
   
КонецПроцедуры // СохранитьНастройки()

Функция ВосстановитьНастройки(Отчет, Форма, ИмяОбъекта = Неопределено) Экспорт
   
   Перем СохраненнаяНастройка;
   
   СтруктураНастройки = Новый Структура;
   СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
   СтруктураНастройки.Вставить("ИмяОбъекта", ?(ИмяОбъекта = Неопределено, Строка(Отчет), ИмяОбъекта));
   СтруктураНастройки.Вставить("НаименованиеНастройки", ?(Отчет.мТекущаяНастройка = Неопределено, Неопределено, Отчет.мТекущаяНастройка.НаименованиеНастройки));
   
   Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);
   
   Если Результат <> Неопределено Тогда
           
       Отчет.мТекущаяНастройка = Результат;
       Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПолучитьСКДИзXML (Результат.СохраненнаяНастройка));
           
   Иначе
       
       Отчет.мТекущаяНастройка = СтруктураНастройки;
       
   КонецЕсли;
   
КонецФункции // ВосстановитьНастройки()
3 badboychik
 
29.12.11
05:51
охренеть... одно радует, что настройки хранящиеся в регистре можно быстро скопировать другому пользователю
4 guitar_player
 
29.12.11
07:17
Возьми какой нибудь типовой отчет и на основе него сделай свой