Переноса данных из одной конфигурации в другую, перенос данных между обработками, да, в принципе, для любого переноса данных.
Функция сохранения таблицы значений в XML:
Функция СохранитьТаблицуЗначенийВXML(Таблица, ФайлXML)
Попытка
Запись = Новый ЗаписьXML();
Запись.ОткрытьФайл(ФайлXML);
Исключение
Сообщить("Ошибка при создание XML файла! " + Символы.ПС + ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("root");
МасКолонки = Новый Массив();
Запись.ЗаписатьНачалоЭлемента("columns");
Для Ном = 0 по Таблица.Колонки.Количество()-1 цикл
Колонка = Таблица.Колонки[Ном];
МасКолонки.Добавить(Колонка.Имя);
Запись.ЗаписатьНачалоЭлемента("colum");
Запись.ЗаписатьАтрибут("Name",Колонка.Имя);
Запись.ЗаписатьАтрибут("Type",Строка(Колонка.ТипЗначения));
Запись.ЗаписатьКонецЭлемента(); // colum
КонецЦикла;
Запись.ЗаписатьКонецЭлемента(); // columns
Запись.ЗаписатьНачалоЭлемента("records");
Для Каждого СтрТаблицы из Таблица цикл
Запись.ЗаписатьНачалоЭлемента("record");
Для каждого ИмяКолонки из МасКолонки цикл
Запись.ЗаписатьНачалоЭлемента(ИмяКолонки);
Значение = Строка(СтрТаблицы[ИмяКолонки]);
Запись.ЗаписатьСекциюCDATA(Значение);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента(); // records
Запись.ЗаписатьКонецЭлемента(); // root
Запись.Закрыть();
Возврат Истина;
КонецФункции
Функция чтения таблицы значений из XML:
Функция ЗагрузитьТаблицаЗначенийИзXML(ФайлXML)
Попытка
Чтение = Новый ЧтениеXML();
Чтение.ОткрытьФайл(ФайлXML);
Исключение
Сообщить("Ощибка при чтение данных из XML!" + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
ТЗ = Новый ТаблицаЗначений;
Атрибут = Новый Соответствие;
МассивКолонок = Новый Массив;
ТаблицаПостроена = Ложь;
// Строим таблицу значений
Пока Чтение.Прочитать() Цикл
// Данные по колонке пошли
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "colum" тогда
Атрибут.Очистить();
Пока Чтение.ПрочитатьАтрибут() цикл
Атрибут[Чтение.Имя] = Чтение.Значение;
КонецЦикла;
ТЗ.Колонки.Добавить(Атрибут["Name"], Новый ОписаниеТипов(Атрибут["Type"]));
МассивКолонок.Добавить(Атрибут["Name"]);
КонецЕсли;
// Данные по колонке закончились
Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "columns" тогда
ТаблицаПостроена = Истина;
КонецЕсли;
Если Не ТаблицаПостроена тогда
Продолжить;
КонецЕсли;
// Началась запись в таблице значений
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "record" тогда
ЗаписьТЗ = ТЗ.Добавить();
Пока Чтение.Прочитать() цикл
// Конец данных по записи
Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "record" тогда
Прервать;
КонецЕсли;
// Есть такая колонка в нашей ТаблицеЗначений
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и
МассивКолонок.Найти(Чтение.Имя) <> Неопределено тогда
ИмяКолонки = Чтение.Имя;
Чтение.Прочитать();
Если Чтение.ТипУзла = ТипУзлаXML.Текст тогда
ЗаписьТЗ[ИмяКолонки]= СокрЛП(Чтение.Значение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли; // Данные в таблице
КонецЦикла;
Возврат ТЗ;
КонецФункции
Комментариев нет:
Отправить комментарий