Переноса данных из одной конфигурации в другую, перенос данных между обработками, да, в принципе, для любого переноса данных.
Функция сохранения таблицы значений в 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.Текст тогда ЗаписьТЗ[ИмяКолонки]= СокрЛП(Чтение.Значение); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; // Данные в таблице КонецЦикла; Возврат ТЗ; КонецФункции
Комментариев нет:
Отправить комментарий