В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных –
ЗаписьXML и
ЧтениеXML .
Запись данных справочника в XML-файл:
Код 1C v 8.х Запись = Новый ЗаписьXML;
Запись. ОткрытьФайл( ПутьКФайлу) ;
Запись. ЗаписатьОбъявлениеXML( ) ;
Запись. ЗаписатьНачалоЭлемента( "Клиенты" ) ;
Выборка = Справочники. Клиенты. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Запись. ЗаписатьНачалоЭлемента( "Клиент" ) ;
Запись. ЗаписатьАтрибут( "Код" , Строка( Выборка. Код) ) ;
Запись. ЗаписатьТекст( Выборка. Наименование) ;
Запись. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
Запись. ЗаписатьКонецЭлемента( ) ;
Запись. Закрыть( ) ;
Чтение данных из XML-файла в справочник:
Код 1C v 8.х Чтение = Новый ЧтениеXML;
Чтение. ОткрытьФайл( ПутьКФайлу) ;
Спр= "" ;
Пока Чтение. Прочитать( ) Цикл
Если Чтение. ТипУзла = ТипУзлаXML. НачалоЭлемента Тогда
Если Чтение. Имя= "Клиент" Тогда
Спр = Справочники. Клиенты. СоздатьЭлемент( ) ;
Пока Чтение. ПрочитатьАтрибут( ) Цикл
Если Чтение. Имя= "Код" Тогда
Спр. Код = Число( Чтение. Значение) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
ИначеЕсли Чтение. ТипУзла = ТипУзлаXML. Текст Тогда
Спр. Наименование = Чтение. Значение;
ИначеЕсли Чтение. ТипУзла = ТипУзлаXML. КонецЭлемента Тогда
Спр. Записать( ) ;
КонецЕсли ;
КонецЦикла ;
Создадим обработку в типовой конфигурации для экспорта плана счетов. Структура xml-файла должна быть такой. Корневой элемент xml-документа соответствует плану счетов в целом. В нем располагаются подчиненные элементы с именем Счет, содержащие информацию о счетах. В качестве содержимого элементов указывается наименование счета. Остальные данные записываются в качестве атрибутов (код, признаки валютного, количественного учета и пр.). В качестве подчиненных элементов для элемента Счет задаются элементы, обозначающие его субсчета с теми же атрибутами. Приведем код процедуры экспорта плана счетов.
Код 1C v 7.x Процедура Выполнить()
Если ЗагрузитьВнешнююКомпоненту( КаталогПрограммы( ) + "v7plus.dll" ) < > 1 Тогда
Предупреждение( "Компонента не обнаружена" ) ;
Возврат ;
КонецЕсли ;
Анализатор= СоздатьОбъект( "AddIn.XMLParser" ) ;
Корень= Анализатор. СоздатьДокумент( ) ;
План= Корень. СоздатьПодчиненныйЭлемент( "ПланСчетов" ) ;
Счет= СоздатьОбъект( "Счет.Основной" ) ;
Родитель= СоздатьОбъект( "Счет.Основной" ) ;
Счет. ВыбратьСчета( ) ;
Пока Счет. ПолучитьСчет( ) = 1 Цикл
Если Счет. Уровень( ) = 1 Тогда
Родитель. НайтиПоКоду( Счет. Код) ;
СчетXML= План. СоздатьПодчиненныйЭлемент( "Счет" ) ;
СчетXML. УстановитьАтрибут( "Код" , Счет. Код) ;
СчетXML. УстановитьАтрибут( "Валютный" , Счет. Валютный) ;
СчетXML. УстановитьАтрибут( "Количественный" , Счет. Количественный) ;
СчетXML. УстановитьАтрибут( "Забалансовый" , Счет. Забалансовый) ;
Если Счет. Активный= 1 Тогда
СчетXML. УстановитьАтрибут( "вид" , "активный" ) ;
ИначеЕсли Счет. Активный= 2 Тогда
СчетXML. УстановитьАтрибут( "вид" , "пассивный" ) ;
Иначе
СчетXML. УстановитьАтрибут( "вид" , "активно-пассивный" ) ;
КонецЕсли ;
СчетXML. Значение= Счет. Наименование;
Иначе
Если Счет. ПринадлежитГруппе( Родитель) = 1 Тогда
СубсчетXML= СчетXML. СоздатьПодчиненныйЭлемент( "Субсчет" ) ;
СубсчетXML. УстановитьАтрибут( "Код" , Счет. Код) ;
СубсчетXML. Значение= Счет. Наименование;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
Корень. Записать( КаталогПрограммы( ) + "plan.xml" ) ;
КонецПроцедуры
В результате будет получен файл, вот его фрагмент:
Код
<?xml version="1.0" encoding="windows-12Sl" ?> - <ПланСчетов>
<Счет Код="00" Валютный="0" Количественный="0" Забалансовый="0" вид="активно-пассивный">Вспомогательный</Счет>
- <Счет Код="01" Валютный="0" Количественный="0" Забалансовый="0" вид="активный">
Основные средства
<Субсчет Код="01.1" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">ОС в организации</Субсчет> <Субсчет Код="01.2" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">Выбытие ОС</Субсчет> </Счет>
- <Счет Код="02" Валютный="0" Количественный="0" Забалансовый="0" вид="пассивный">
Амортизация ОС
А теперь приведем код для импорта плана счетов из xml-файла в новую конфигурацию. Код модуля соответствующей обработки должен содержать процедуру Выполнить(), которая имеет такой вид.
Код 1C v 7.x Процедура Выполнить()
Если ЗагрузитьВнешнююКомпоненту( КаталогПрограммы( ) + "v7plus.dll" ) < > 1 Тогда
Предупреждение( "Внешняя компонента не найдена" ) ;
Возврат ;
КонецЕсли ;
Анализатор= СоздатьОбъект( "AddIn.XMLParser" ) ;
Файл= Анализатор. СоздатьДокумент( ) ;
Файл. Загрузить( КаталогПрограммы( ) + "plan.xml" ) ;
План= Файл. ВыбратьУзел( "ПланСчетов" ) ;
кол= План. КоличествоПодчиненных( ) ;
Счет= СоздатьОбъект( "Счет.Основной" ) ;
Для инд= 1 по кол Цикл
СчетXML= План. ПолучитьПодчиненныйПоНомеру( инд) ;
КолСубсчетов= СчетXML. КоличествоПодчиненных( ) ;
Если КолСубсчетов> 1 Тогда
Счет. Новый( 1 ) ;
Иначе
Счет. Новый( 0 ) ;
КонецЕсли ;
Счет. Код= СчетXML. ПолучитьАтрибут( "Код" ) ;
Счет. Наименование= СчетXML. Значение;
Счет. Валютный= СчетXML. ПолучитьАтрибут( "Валютный" ) ;
Счет. Количественный= СчетXML. ПолучитьАтрибут( "Количественный" ) ;
Счет. Забалансовый= СчетXML. ПолучитьАтрибут( "Забалансовый" ) ;
Если СчетXML. ПолучитьАтрибут( "вид" ) = "активный" Тогда
Счет. Активный= 1 ;
ИначеЕсли СчетXML. ПолучитьАтрибут( "вид" ) = "пассивный" Тогда
Счет. Активный= 2 ;
Иначе
Счет. Активный= 3 ;
КонецЕсли ;
Счет. Записать( ) ;
Если КолСубсчетов> 1 Тогда
Счет1 = СоздатьОбъект( "Счет.Основной" ) ;
Для инд1 = 2 По кол_субсчетов Цикл
Субсчет= СчетXML. ПолучитьПодчиненныйПоНомеру( инд1 ) ;
Счет1 . Новый( 0 ) ;
Счет1 . Код= Субсчет. ПолучитьАтрибут( "Код" ) ;
Счет1 . Записать( ) ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;