Добрый день всем!
собственно хочется с Вами обсудить вопросы по XDTO тематике
Цель:
импорт XML файла посредством XDTO пакетов, из (совсем не стандартной) базы 1С8.3 во внешнюю среду.
Получатель CRM программа написанная C#.
прочитал несколько раз это:http://infostart.ru/public/167459/ все три публикации, ни черта не понял.
К примеру для начала надо выгрузить им регистр сведений "Курсы валют".
У меня на данный момент есть только XDTO пакет.
Что делать дальше?
Как должен выглядеть код?
Тема для меня новая, ранее с этим не сталкивался, но есть желание узнать.
собственно хочется с Вами обсудить вопросы по XDTO тематике
Цель:
импорт XML файла посредством XDTO пакетов, из (совсем не стандартной) базы 1С8.3 во внешнюю среду.
Получатель CRM программа написанная C#.
прочитал несколько раз это:
К примеру для начала надо выгрузить им регистр сведений "Курсы валют".
У меня на данный момент есть только XDTO пакет.
Что делать дальше?
Как должен выглядеть код?
Тема для меня новая, ранее с этим не сталкивался, но есть желание узнать.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Копать в сторону фабрики XDTO
В первой из упомянутых вами статей, например:
И далее по тексту.
В первой из упомянутых вами статей, например:
ипОбъектаСписок = ФабрикаXDTO.Тип(“http://super-puper/collections ”, “Список”);
// Создаем объект списка
ОбъектСписок = ФабрикаXDTO.Создать(ТипОбъектаСписок);
И далее по тексту.
На самом деле все очень просто - сначала описываем пакет: Во вложении схема..
А вот код по формированию xml из XDTO
И сформированный xml
Основное удобство - работа с объектом XDTO - т.е. например ЗаполнитьЗначенияСвойств(ЗапросXTDO, МояСсылка) и т.д., ЗаписьXML - это только линейная запись, а в объект XDTO можно писать в произвольном порядке..., очень простое обратное преобразование.
При это в Имени задаешь то что у тебя, в локальном имени - то что будет в имени xml
PS - при экспорте xsd схемы если заполнено локальное имя, то имя теряется..
А вот код по формированию xml из XDTO
URIПространстваИменЗаписи = "https://api.novaposhta.ua/xml/qw";
ТипЗапросXTDO = ФабрикаXDTO.Тип(URIПространстваИменЗаписи, "root");
ЗапросXTDO = ФабрикаXDTO.Создать(ТипЗапросXTDO);
ЗапросXTDO.КлючДоступа = ПолучитьAPIКлюч();
ЗапросXTDO.Модель = "Common"; // api 2.0 Новой почты
ЗапросXTDO.Метод = "getDocumentStatuses";
ЗаписьXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
ЗаписьXML.УстановитьСтроку(ПараметрыЗаписиXML);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ЗапросXTDO);
ДанныеXML = ЗаписьXML.Закрыть();
ПоказатьИ сформированный xml
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="https://api.novaposhta.ua/xml/qw" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<apiKey>*******************</apiKey>
<modelName>Common</modelName>
<calledMethod>getDocumentStatuses</calledMethod>
</root>
Основное удобство - работа с объектом XDTO - т.е. например ЗаполнитьЗначенияСвойств(ЗапросXTDO, МояСсылка) и т.д., ЗаписьXML - это только линейная запись, а в объект XDTO можно писать в произвольном порядке..., очень простое обратное преобразование.
При это в Имени задаешь то что у тебя, в локальном имени - то что будет в имени xml
PS - при экспорте xsd схемы если заполнено локальное имя, то имя теряется..
Прикрепленные файлы:
Вот пример кода:
ЗаписьXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина);
ЗаписьXML.ОткрытьФайл("E:\Работа\XDTO\тест 1\Выгрузка валют.xml", ПараметрыЗаписиXML);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Данные");
Выборка = Справочники.Валюты.Выбрать();
Пока Выборка.Следующий() Цикл
ТипЗначенияXDTO = ФабрикаXDTO.Тип("Выгрузка", "СписокВалют");
СписокXDTO = ФабрикаXDTO.Создать(ТипЗначенияXDTO);
ТипЗначениXDTO = ФабрикаXDTO.Тип("Выгрузка", "Валюта");
ВалютаXDTO = ФабрикаXDTO.Создать(ТипЗначениXDTO);
ВалютаXDTO.Наименование = Выборка.Наименование;
ВалютаXDTO.Код = Выборка.Код;
СписокXDTO.Валюта = ВалютаXDTO;
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, СписокXDTO.Валюта);
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
Показать
Вот схема:
<xs:schema xmlns:tns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="Выгрузка" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="Валюта">
<xs:sequence>
<xs:element name="Наименование" type="xs:string"/>
<xs:element name="Код" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="СписокВалют">
<xs:sequence>
<xs:element name="Валюта" type="tns:Валюта" nillable="true"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema xmlns:tns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="Выгрузка" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="Валюта">
<xs:sequence>
<xs:element name="Наименование" type="xs:string"/>
<xs:element name="Код" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="СписокВалют">
<xs:sequence>
<xs:element name="Валюта" type="tns:Валюта" nillable="true"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Хочу выгрузить для начала просто справочник Валюты.
вот результат обработки:
<?xml version="1.0" encoding="UTF-8"?>
<Данные>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>RUB</Наименование>
<Код>643</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Доллар</Наименование>
<Код>840</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Евро</Наименование>
<Код>978</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Иена</Наименование>
<Код>392</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Тенге</Наименование>
<Код>398</Код>
</Валюта>
</Данные>
вот результат обработки:
<?xml version="1.0" encoding="UTF-8"?>
<Данные>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>RUB</Наименование>
<Код>643</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Доллар</Наименование>
<Код>840</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Евро</Наименование>
<Код>978</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Иена</Наименование>
<Код>392</Код>
</Валюта>
<Валюта xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Наименование>Тенге</Наименование>
<Код>398</Код>
</Валюта>
</Данные>
Вот так
ЗаписьXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина);
ЗаписьXML.УстановитьСтроку(ПараметрыЗаписиXML);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ТипДанных = ФабрикаXDTO.Тип("Выгрузка", "Данные");
ТипЭлемента = ФабрикаXDTO.Тип("Выгрузка", "Валюта");
Данные = ФабрикаXDTO.Создать(ТипДанных);
Выборка = Справочники.Валюты.Выбрать();
Пока Выборка.Следующий() Цикл
ВалютаXDTO = ФабрикаXDTO.Создать(ТипЭлемента);
ЗаполнитьЗначенияСвойств(ВалютаXDTO, Выборка);
Данные.Валюта.Добавить(ВалютаXDTO);
КонецЦикла;
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Данные);
СтрокаДанных = ЗаписьXML.Закрыть();
ПоказатьПрикрепленные файлы:
выгрузка.xsd
Результат :
И выводы - не надо писать xml частями, можно записать объект целиком, все можно описать в пакете, можно и нужно пользоваться ЗаполнитьЗначенияСвойств() - прилично сокращает объем кода.
Дополнение - Ключевые поля лучше выносить в атрибуты - повышает читабельность результата (в том же самом нотепад++ узлы можно свернуть и видны только атрибуты с именем узла - удобно)
XML |
---|
<?xml version="1.0" encoding="UTF-8"?>
<Данные xmlns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Валюта Код="978">
<Наименование>EUR</Наименование>
</Валюта>
<Валюта Код="840">
<Наименование>USD</Наименование>
</Валюта>
</Данные> Показать |
Дополнение - Ключевые поля лучше выносить в атрибуты - повышает читабельность результата (в том же самом нотепад++ узлы можно свернуть и видны только атрибуты с именем узла - удобно)
Тебе проще использовать Вэб сервисы. По Wsdl создадутся нужные классы и проще их дергать.
Второй вариант это ODATALinq to ODATA
Второй вариант это ODATA
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот