|
Чтение данных из файла XML и запись данных в файл XML с использованием 1С
|
Для обмена данными между 1С-решениями - как между собой, так и со сторонней
системой - существует много возможностей. Это через планы обмена, и разовые
загрузки и выгрузки данных при помощи обработки Универсальный обмен данными в формате XML и всякие другие. Здесь будет представлен вариант выгрузки и загрузки данных обработкой без использования правил,
с использованием функций записи и чтения XML с использованием 1С. А воспользуемся мы этими функциями записи и чтения XML для выгрузки и загрузки данных физических лиц. Выгружать и загружать будем наименование, дату рождения, ИНН.
Обработка может выгружать данные из, например, ЗУП 3.1 и загружать, например, в БП 3.0 или ЕРП. Это одни из самых распространенных конфигураций.
Также добавим
в обработку таблицу значений, в которую будем загружать прочитанные данные из
файла. В этой таблице значений добавим пару колонок. в которой покажем, найдено
физическое лицо или нет. Обработчики создания новых физических лиц реализованы в
рамках примера не будут.
Открываем конфигуратор и создаем новую внешнюю обработку.
Добавляем форму обработки и на нее помещаем две кнопки: Загрузить данные и
Выгрузить данные. Также на форму добавим таблицу значений и путь к файлу
для записи и чтения данных в формате XML.
Для наглядности перед записью данных в формате XML в
файл выведем эти данные в таблицу значений. Добавим кнопку на форму Заполнить
список физических лиц и по нажатию на нее выберем запросом данные из справочника
Физические лица, затем результат выборки поместим в таблицу значений.
Заполнение списка физических лиц производится при помощи запроса к справочнику
Физические лица и дальнейшим помещением результата в табличную часть. Листинг
здесь не приводится.
Теперь поместим в обработчик кнопки "Выгрузить данные" следующий код:
Если Не ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда
Возврат;
КонецЕсли;
Если Объект.ФизическиеЛица.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ФайлЗаписи = Новый ЗаписьXML;
ФайлЗаписи.ОткрытьФайл(Объект.ПутьКФайлу, "UTF-8");
ФайлЗаписи.ЗаписатьОбъявлениеXML();
ФайлЗаписи.ЗаписатьНачалоЭлемента("ФизическиеЛица");
ФайлЗаписи.ЗаписатьНачалоЭлемента("Конфигурация");
ФайлЗаписи.ЗаписатьТекст(ПолучитьВерсиюМетаданных());
ФайлЗаписи.ЗаписатьКонецЭлемента();
Для Каждого ТекСтрока Из Объект.ФизическиеЛица Цикл
ФайлЗаписи.ЗаписатьНачалоЭлемента("ФизическоеЛицо");
ФайлЗаписи.ЗаписатьАтрибут("Наименование", ТекСтрока.ФизическоеЛицо);
ФайлЗаписи.ЗаписатьАтрибут("ДатаРождения", Строка(Формат(ТекСтрока.ДатаРождения, "ДФ=dd.MM.yyyy")));
ФайлЗаписи.ЗаписатьАтрибут("ИНН", ?(ЗначениеЗаполнено(ТекСтрока.ИНН), ТекСтрока.ИНН, "000000000000"));
ФайлЗаписи.ЗаписатьКонецЭлемента();
КонецЦикла;
ФайлЗаписи.ЗаписатьКонецЭлемента();
В обработчике кнопки Загрузить данные вставим иной код. В ходе
выполнения чтения из файла XML в данном примере данные помещаются в структуру для передачи в функцию для заполнения табличной части.
У пользователя может быть свой алгоритм обработки прочитанных данных.
Если Не ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда
Возврат;
КонецЕсли;
ФайлПроверки = Новый Файл(Объект.ПутьКФайлу);
Если НЕ ФайлПроверки.Существует() Тогда
Возврат;
КонецЕсли;
ФайлПроверки = Неопределено;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(Объект.ПутьКФайлу);
СтруктураДанныхФЛ = Новый Структура;
Сч = 0;
Пока ЧтениеXML.Прочитать() Цикл
ОбработкаПрерыванияПользователя();
Если (ЧтениеXML.Имя = "ФизическоеЛицо") И (ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
Наименование = СокрЛП(ЧтениеXML.ПолучитьАтрибут("Наименование"));
ДатаРождения = СокрЛП(ЧтениеXML.ПолучитьАтрибут("ДатаРождения"));
ИНН = СокрЛП(ЧтениеXML.ПолучитьАтрибут("ИНН"));
СтруктураДанныхФЛ.Вставить("СтрокаДанных" + Сч, Наименование + "::" + ДатаРождения + "::" + ?(ИНН = "000000000000", "", ИНН));
Сч = Сч + 1;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
ЗаполнитьТЧФизическиеЛица(СтруктураДанныхФЛ);
В результате получилась обработка, в которой сначала в файл
XML выгружаются данные. Затем - по нажатию кнопки загрузки данных - загружаются
из файла XML. загруженные данные для наглядности
помещаются в таблицу значений на форме.
Пример обработки и файла для чтения данных можно скачать
тут
|
|