Заметки по разработке и администрированию 1С.
22.09.2016
1С чтение xml с помощью XDTO
CODE = «КЗ000005152» PRICE = «88.64406» />
CODE = «КЗ000005153» PRICE = «61.52542» />
Т.е. тут у нас список прайслистов в объекте PricesList , где каждый отдельный прайслист содержит два свойства: код и цену.
Следующий листинг поможет разобрать xml:
лЧтение . ОткрытьФайл ( лФайл . ПолноеИмя ); //лФайл — это файл xml
лОбъектXDTO = лФабрика . ПрочитатьXML ( лЧтение );
Для Каждого PriceList Из лОбъектXDTO . PricesList . PriceList Цикл
лКодПрайсЛиста = PriceList . CODE ;
В этой статье попробую рассказать о механизме XDTO, рассказать постараюсь только суть — без воды.
XDTO (XML Data Transfer Objects) — это разработка фирмы 1С и ни в каком другом языке программирования эту аббревиатуру не встретишь.
Основное назначение этого механизма — обмен данными, как с другой конфигурацией 1С, так и со сторонними приложениями. Кроме этого XDTO используется для описания параметров и возвращаемых значений web-сервисов, а также для произвольной обработки данных.
Основная «полезность» механизма XDTO заключается в том, что он позволяет работать (чтение и запись) с XML-файлом как с объектом 1С — «через точку» и не думать при этом о тегах и атрибутах XML.
Реализован механизм XDTO при помощи объекта конфигурации «Пакет XDTO». Этот объект в действительности является обычной XML-схемой (XSD) т.е. описывает структуру какого-либо XML-документа.
Средствами 1С мы можем:
- превратить XSD-файл в объект «пакет XDTO»;
- добавить новый «пакет XDTO» и редактировать его так, как нам нужно;
- превратить «пакет XDTO» в XSD-файл.
Действия с XDTO пакетом
Для успешного импорта XML-схемы (XSD) в XDTO пакет, необходимо наличие в XSD-файле атрибута «targetNamespace» с указанием пространства имен, иначе импортировать схему не удастся.
Не хватает атрибута «targetNamespace»
Пространство имен обычно указывается URL-подобной строкой (хотя на самом деле это может быть любая строка) и служит для того, чтобы избежать путаницы в том случае, если в разных XDTO пакетах у нас имеются объекты с одинаковым названием.
Таким образом понятно, что названия объектов должны быть уникальны в пределах одного пространства имен (по сути в пределах одного XDTO пакета)
Пространство имен в XSD-файле
XSD-файл можно сделать самому — написать руками в блокноте или сделать XDTO пакет прямо в конфигураторе, кроме этого можно воспользоваться какой-нибудь специализированной программой (например Liquid XML Studio) или онлайн сервисом (Google в помощь) которые умеют создавать XSD-файлы из XML. При использовании программ и сервисов нужно быть осторожным, так как по моему опыту результат их работы (XSD-файл) очень часто не подходит для использования в 1С — неправильно указываются типы данных и, как следствие, записать XML-файл при помощи такого XDTO пакета не удастся. В качестве примера приведу два XDTO пакета для одного и того же XML-файла.
Сравнение XDTO пакетов
Слева тот, что создан руками, справа — программой.
Работа с XDTO в 1С неразрывно связана с объектом «ФабрикаXDTO». Именно этот объект читает и записывает данные из/в XML-файл(а), а также создает все нужные объекты с которыми можно привычно работать «через точку».
Перейдем к практике.
Допустим у нас есть файл заказ вот такого вида:
Маленький IT блог с характером 1С.
Страницы
Поиск по блогу
воскресенье, 10 мая 2015 г.
Грабли метода ПрочитатьXML() объекта ФабрикаXDTO
Фабрика XDTO — это библиотека типов, которая описывает определенные структуры XML. В языке программирования платформы 1С имеется объект ФабрикаXDTO, который содержит все пакеты XDTO, имеющиеся в конфигурации, а также предопределенные пакеты (например, пакет типов XML схемы). У данного объекта метод ПрочитатьXML(), позволяет читать элементы данных XDTO указанного типа из объекта чтения XML:
ФайлXML = Новый ЧтениеXML;
ФайлXML.УстановитьСтроку(СтрокаXML);
Пока ФайлXML.Прочитать() Цикл
Если ФайлXML.ЛокальноеИмя = «Message» И ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML);
КонецЕсли;