В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных – ЗаписьXML и ЧтениеXML.
Запись данных справочника в XML-файл:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Запись = Новый ЗаписьXML; Запись.ОткрытьФайл(ПутьКФайлу); Запись.ЗаписатьОбъявлениеXML(); // формируем корневой элемент Запись.ЗаписатьНачалоЭлемента("Клиенты"); Выборка = Справочники.Клиенты.Выбрать(); Пока Выборка.Следующий() Цикл // для каждого клиента формируем свой элемент Запись.ЗаписатьНачалоЭлемента("Клиент"); // запишем код клиента в атрибут тега Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код)); // Наименование клиента запишем в текст элемента Запись.ЗаписатьТекст(Выборка.Наименование); // закрываем элемент клиента Запись.ЗаписатьКонецЭлемента(); КонецЦикла; // закрываем корневой элемент xml-документа Запись.ЗаписатьКонецЭлемента(); // закрыть файл Запись.Закрыть(); |
Чтение данных из XML-файла в справочник:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ПутьКФайлу); Спр=""; // чтение осуществляется по одному тегу Пока Чтение.Прочитать() Цикл // анализируем тип элемента и его имя Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если Чтение.Имя="Клиент" Тогда // создаем новый элемент справочника Спр = Справочники.Клиенты.СоздатьЭлемент(); // читаем атрибуты Пока Чтение.ПрочитатьАтрибут() Цикл Если Чтение.Имя="Код" Тогда Спр.Код = Число(Чтение.Значение); КонецЕсли; КонецЦикла; КонецЕсли; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда // заполняем наименование созданного ранее элемента Спр.Наименование = Чтение.Значение; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // требуется записать информацию про клиента Спр.Записать(); КонецЕсли; КонецЦикла; |
Создадим обработку в типовой конфигурации для экспорта плана счетов. Структура xml-файла должна быть такой. Корневой элемент xml-документа соответствует плану счетов в целом. В нем располагаются подчиненные элементы с именем Счет, содержащие информацию о счетах. В качестве содержимого элементов указывается наименование счета. Остальные данные записываются в качестве атрибутов (код, признаки валютного, количественного учета и пр.). В качестве подчиненных элементов для элемента Счет задаются элементы, обозначающие его субсчета с теми же атрибутами. Приведем код процедуры экспорта плана счетов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Процедура Выполнить() Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"v7plus.dll")<>1 Тогда Предупреждение("Компонента не обнаружена"); Возврат; КонецЕсли; Анализатор=СоздатьОбъект("AddIn.XMLParser"); Корень=Анализатор.СоздатьДокумент(); План=Корень.СоздатьПодчиненныйЭлемент("ПланСчетов"); Счет=СоздатьОбъект("Счет.Основной"); Родитель=СоздатьОбъект("Счет.Основной"); Счет.ВыбратьСчета(); Пока Счет.ПолучитьСчет()=1 Цикл // если это счет, а не субсчет Если Счет.Уровень()=1 Тогда Родитель.НайтиПоКоду(Счет.Код); СчетXML=План.СоздатьПодчиненныйЭлемент("Счет"); СчетXML.УстановитьАтрибут("Код", Счет.Код); СчетXML.УстановитьАтрибут("Валютный", Счет.Валютный); СчетXML.УстановитьАтрибут("Количественный", Счет.Количественный); СчетXML.УстановитьАтрибут("Забалансовый", Счет.Забалансовый); Если Счет.Активный=1 Тогда СчетXML.УстановитьАтрибут("вид","активный"); ИначеЕсли Счет.Активный=2 Тогда СчетXML.УстановитьАтрибут("вид","пассивный"); Иначе СчетXML.УстановитьАтрибут("вид","активно-пассивный"); КонецЕсли; СчетXML.Значение=Счет.Наименование; Иначе Если Счет.ПринадлежитГруппе(Родитель)=1 Тогда СубсчетXML=СчетXML.СоздатьПодчиненныйЭлемент("Субсчет"); СубсчетXML.УстановитьАтрибут("Код", Счет.Код); // аналогично устанавливаем все атрибуты на элемент СубсчетXML СубсчетXML.Значение=Счет.Наименование; КонецЕсли; КонецЕсли; КонецЦикла; Корень.Записать(КаталогПрограммы()+"plan.xml"); КонецПроцедуры |
В результате будет получен файл, вот его фрагмент: