Уведомления
Очистить все

Как сохранить реквизиты формы в файл или как сохранить различные объекты в файл в 1С8

3 Записи
1 Пользователи
0 Likes
1,995 Просмотры
49dc5d9fe770f247ca425df82453f85b?s=80&d=mm&r=g Okolokompa Форум
 Urri
(@urri)
Eminent Member
Присоединился: 1 год назад
Записи: 15
Создатель темы  

Допустим мы хотим сохранить некоторые настройки или объекты в файл, в том числе табличный документ и таблицу значений.

Использовать будем следующие шаги:

1) Необходимые объекты представим в виде XML

2) Затем поместим всё в структуру.

3) Нашу структуру представим в виде JSON и сохраним на диск.

4) Затем прочитаем наш JSON и восстановим из файла наши объекты.

Небольшое отступление (в коде Вы увидите):

ИмяВидаРегистра - реквизит формы, тип Строка.

ДокументРегистратор - реквизит формы, тип Ссылка на документ.

СписокТаблицНастроек / ТаблицыНастроек - реквизит формы, тип Список значений, который в виде строк хранит имена таблиц значений на форме.

ТабличныйДокумент - реквизит формы, тип Табличный документ.


   
Цитата
49dc5d9fe770f247ca425df82453f85b?s=80&d=mm&r=g Okolokompa Форум
 Urri
(@urri)
Eminent Member
Присоединился: 1 год назад
Записи: 15
Создатель темы  

Сохраняем:

&НаКлиенте
Процедура СохранитьНастройки(Команда) 
	
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	
	ДиалогВыбораФайла.Заголовок = "Сохранить настройки в файл";
	ДиалогВыбораФайла.Фильтр    = "Файл JSON (*.json)|*.json|";
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
	
	ДиалогВыбораФайла.Показать(Новый ОписаниеОповещения("СохранитьНастройкиЗавершение", ЭтаФорма, Новый Структура("ДиалогВыбораФайла", ДиалогВыбораФайла)));  
	
КонецПроцедуры

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

&НаСервере
Функция ПолучитьXMLЗначения(п_Значение)
	
	ЗаписьXML = Новый ЗаписьXML; 
	
	ЗаписьXML.УстановитьСтроку(); 
	ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(п_Значение);
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); 
	
	Возврат ЗаписьXML.Закрыть();
	
КонецФункции

&НаСервере
Функция ПолучитьXMLТаблицыНастроек(ИмяТаблицы)
	
	ЗаписьXML = Новый ЗаписьXML; 
	
	ЗаписьXML.УстановитьСтроку();
	ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ЭтаФорма[ИмяТаблицы].Выгрузить()); 
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); 
	
	Возврат ЗаписьXML.Закрыть();
	
КонецФункции

   
ОтветитьЦитата
49dc5d9fe770f247ca425df82453f85b?s=80&d=mm&r=g Okolokompa Форум
 Urri
(@urri)
Eminent Member
Присоединился: 1 год назад
Записи: 15
Создатель темы  

Считываем:

&НаКлиенте
Процедура ЗагрузитьНастройки(Команда) 
	
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайла.Заголовок = "Выберите файл JSON";
	ДиалогВыбораФайла.ПолноеИмяФайла = "";  
	ДиалогВыбораФайла.Фильтр = "Файл JSON (*.json)|*.json|"; 
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;	
	ДиалогВыбораФайла.Показать(Новый ОписаниеОповещения("ЗагрузитьНастройкиПродолжение", ЭтаФорма, Новый Структура("ДиалогВыбораФайла", ДиалогВыбораФайла)));		
	
КонецПроцедуры 

&НаКлиенте
Процедура ЗагрузитьНастройкиПродолжение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
	
	ДиалогВыбораФайла = ДополнительныеПараметры.ДиалогВыбораФайла; 
	
	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;                      
	КонецЕсли;
	
	ЧтениеJSON = Новый ЧтениеJSON;  
	ЧтениеJSON.ОткрытьФайл(ДиалогВыбораФайла.ПолноеИмяФайла);
	п_СтруктураСохраненияНастроек = ПрочитатьJSON(ЧтениеJSON);            
	ЧтениеJSON.Закрыть();	
	
	Объект.ИмяВидаРегистра = "";
	ДокументРегистратор = "";
	ИмяВидаРегистраПриИзменении(Неопределено); 
	
	Объект.ИмяВидаРегистра = п_СтруктураСохраненияНастроек.ИмяВидаРегистра;
	ИмяВидаРегистраПриИзменении(Неопределено);
	
	УстановитьДокументРегистраторИзСохраненияНастроек(п_СтруктураСохраненияНастроек.ДокументРегистратор);
	УстановитьТабличныйДокументИзСохраненияНастроек(п_СтруктураСохраненияНастроек.ТабличныйДокумент);
	
	п_ТаблицыНастроек = п_СтруктураСохраненияНастроек.ТаблицыНастроек; 
	
	п_ЭтоПерваяТаблица = Истина;
	
	Для Каждого п_ТекТаблица из п_ТаблицыНастроек Цикл
		
		Если п_ЭтоПерваяТаблица = Истина Тогда
			п_ИмяТаблицы = "ТаблицаЗагружаемыхРеквизитов";
		Иначе 
			ДобавитьНастройку(Неопределено);
			п_ИмяТаблицы = СтрШаблон("ТаблицаЗагружаемыхРеквизитов%1", Строка(СчДобавленныхНастроек));
		КонецЕсли;
		
		УстановитьТаблицуНастроекИзСохраненияНастроек(п_ТекТаблица, п_ИмяТаблицы);    
		п_ЭтоПерваяТаблица = Ложь;
		
	КонецЦикла; 
	
	Элементы.ГруппаТаблицыНастроек.ТекущаяСтраница = Элементы.ГруппаТаблицаЗагружаемыхРеквизитов;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьДокументРегистраторИзСохраненияНастроек(ДокументРегистраторВXML) 
	
	ДокументРегистратор = ПроизвестиЧтениеДанныхИзXMLСервер(ДокументРегистраторВXML);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьТабличныйДокументИзСохраненияНастроек(ТабличныйДокументВXML) 
	
	ТабличныйДокумент.Очистить(); 
	ТабличныйДокумент = ПроизвестиЧтениеДанныхИзXMLСервер(ТабличныйДокументВXML, "ТабличныйДокумент");
	
КонецПроцедуры

&НаСервере
Процедура УстановитьТаблицуНастроекИзСохраненияНастроек(ТаблицаНастроекВXML, ИмяТаблицы) 
	
	п_ТЗ = ПроизвестиЧтениеТаблицыЗначенийИзXMLСервер(ТаблицаНастроекВXML);
	ЭтаФорма[ИмяТаблицы].Загрузить(п_ТЗ);
	
КонецПроцедуры

&НаСервере
Функция ПроизвестиЧтениеТаблицыЗначенийИзXMLСервер(СтрокаXML)
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаXML);
	ТипОбъектаXDTO = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "ValueTable");
	ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъектаXDTO);
	ОбъектXDTO.Проверить();
	
	ЧтениеXML.Закрыть();
	
	п_Результат = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);
	
	Возврат п_Результат;       
	
КонецФункции

&НаСервере
Функция ПроизвестиЧтениеДанныхИзXMLСервер(СтрокаXML, ТипДанных = Неопределено)
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаXML);
	Если НЕ ТипДанных = Неопределено Тогда
		п_Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип(ТипДанных));
	Иначе
		п_Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	КонецЕсли;
	
	ЧтениеXML.Закрыть();
	
	Возврат п_Результат;       
	
КонецФункции

   
ОтветитьЦитата
Поделиться: