Уведомления
Очистить все
1С:Предприятие 8.x
3
Записи
1
Пользователи
0
Likes
1,995
Просмотры
Создатель темы 17/12/2023 6:13 дп
Допустим мы хотим сохранить некоторые настройки или объекты в файл, в том числе табличный документ и таблицу значений.
Использовать будем следующие шаги:
1) Необходимые объекты представим в виде XML
2) Затем поместим всё в структуру.
3) Нашу структуру представим в виде JSON и сохраним на диск.
4) Затем прочитаем наш JSON и восстановим из файла наши объекты.
Небольшое отступление (в коде Вы увидите):
ИмяВидаРегистра - реквизит формы, тип Строка.
ДокументРегистратор - реквизит формы, тип Ссылка на документ.
СписокТаблицНастроек / ТаблицыНастроек - реквизит формы, тип Список значений, который в виде строк хранит имена таблиц значений на форме.
ТабличныйДокумент - реквизит формы, тип Табличный документ.
Создатель темы 17/12/2023 6:16 дп
Сохраняем:
&НаКлиенте Процедура СохранитьНастройки(Команда) ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); ДиалогВыбораФайла.Заголовок = "Сохранить настройки в файл"; ДиалогВыбораФайла.Фильтр = "Файл 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.Закрыть(); КонецФункции
Создатель темы 17/12/2023 6:19 дп
Считываем:
&НаКлиенте Процедура ЗагрузитьНастройки(Команда) ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Заголовок = "Выберите файл 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.Закрыть(); Возврат п_Результат; КонецФункции