0. Evil Beaver 6396 24.12.12 17:31 Сейчас в теме

XDTO - это просто

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты.
Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

Перейти к публикации

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
93. dimk@a 06.01.13 18:21 Сейчас в теме
Evil Beaver, спасибо за статью! Очень хороший пинок чтоб разобраться с }{DTO. Ждем продолжения.
94. hame1e00n 509 07.01.13 19:39 Сейчас в теме
Автор, большое спасибо за статью! Ждем продолжения :-)
95. dyak84 08.01.13 00:21 Сейчас в теме
спасибо за статью.Она написана простим и доступным языком. "Учится никогда не поздно" .Автор так держать.
96. dyak84 08.01.13 00:22 Сейчас в теме
спасибо за статью.Она написана простим и доступным языком .Автор так держать.
97. Flashback1979SE 09.01.13 08:36 Сейчас в теме
98. DownloadMASTER 10.01.13 08:55 Сейчас в теме
Как я уже говорил, это сокращение от XML Data Transfer Objects, что по-русски означает “XML-объекты переноса данных”.
Оказывается, это не какой-то всемирно принятый стандарт, поддерживаемый платформой 1С. Наоборот, аббревиатура XDTO родилась в недрах фирмы 1С и представляет собой ее собственный креатив. Нигде, кроме как в сфере 1С, вы не встретите данного сочетания букв.
Мне не ведомы истинные мотивы создания целой подсистемы, но кажется, что основная цель - это создание простой объектной модели доступа к XML документам

XDTO-пакет это изобретение 1С для того, чтобы создавать/импортировать/редактировать XML схемы.
То есть 1С реализовала у себя редактор всемирно принятого стандарта - XML schema.
99. Evil Beaver 6396 10.01.13 09:43 Сейчас в теме
(98) DownloadMASTER, Нет. Редактор пакета XDTO позволяет создавать модели данных. Разница есть. Например, во второй части статьи приведен пример со свойством "Форма" и "Локальное имя". В стандартах XML такого понятия нет, а в пакете XDTO (а значит в модели данных) - есть. Подробности позже, отдельной статьей, или, если будет конкретный вопрос, то здесь.
101. DownloadMASTER 10.01.13 18:42 Сейчас в теме
(99)
Разница есть. Например, во второй части статьи приведен пример со свойством "Форма" и "Локальное имя". В стандартах XML такого понятия нет, а в пакете XDTO (а значит в модели данных) - есть.

Сделайте "Экспорт XML-схемы..."
На выходе получите XML-схему по стандарту.
Evil Beaver, что я в данном случае не улавливаю?
100. ZLENKO 10.01.13 13:36 Сейчас в теме
Странно... Почему-то всех больше интересует "форма" чем "содержание" по данному вопросу.
103. Ksu 16.01.13 09:04 Сейчас в теме
Здорово! Тема интересная и статья очень полезная!
105. pass_developer 16.01.13 20:41 Сейчас в теме
Спасибо за статьи. Да, ссылка в начале не на продолжение...
106. sa1m0nn 22 18.01.13 13:10 Сейчас в теме
107. expert.1c8 22.01.13 23:51 Сейчас в теме
Будет и третья часть еще?
108. CratosX 10.02.13 02:52 Сейчас в теме
У кого трудности в понимании XML - яндекс выложил неплохое видео http://events.yandex.ru/events/shri/msk-2012/talks/555/
zzz14; Dr.ZIG; +2 Ответить
109. Alex_1066 09.03.13 01:57 Сейчас в теме
Статья хорошая. Автору - респект! Некоторые трения в комментах тоже полезны. Главное не переходить на личности. У каждого "свой" уровень - и не обязательно выше, или ниже. Просто другой. Давайте уважительно относиться друг к другу. Это же хорошо, что все разные. Короче всем респект - особенно автору за особенный :) читательский интерес. Жаль не могу задать хорошего вопроса - пока ещё не в теме :)
111. Evil Beaver 6396 27.03.13 18:59 Сейчас в теме
ТипОбъектаСписок = ФабрикаXDTO.Тип(“http://super-puper/collections”, “Список”);


А в конфигурации пакет у вас такой есть? Фрагмент текста показывает методику работы, приемы. Он не является самодостаточным в стиле "вбил-заработало".

Полноценный пример во вложениях к статье №3
112. rfcor 71 30.04.13 10:05 Сейчас в теме
Ставлю заслуженный плюс! Во многом благодаря статьям автора я освоил веб-сервисы и успешно реализовал нужный функционал на практике.
114. nick_krsk 11.10.13 11:53 Сейчас в теме
Очень хорошая статья!
До этого с XDTO не был знаком вообще.
Обязательно прочитаю остальные части :)
115. MakcTLT63 9 18.11.13 14:01 Сейчас в теме
Спасибо. Отличная статья.
116. kruglay 104 07.02.14 08:26 Сейчас в теме
Тема огонь)) Спасибо автору!
117. kote 501 07.02.14 16:29 Сейчас в теме
Все это хорошо, но больно муторно работать с этим хозяйством (в контексте web-сервисов)..
В общем - "фтопку" XDTO - даешь REST сервисы!
119. Evil Beaver 6396 07.02.14 17:44 Сейчас в теме
(117) kote, думаете, будет проще? А меня вот терзают смутные сомнения, что проще не станет))
118. lesenoklenok 23 07.02.14 16:51 Сейчас в теме
Спасибо за интересную статью.
120. RustamTurn 11.03.14 13:20 Сейчас в теме
Отличная статья, спасибо
121. Andrey@ 16.03.14 12:17 Сейчас в теме
Спасибо автору статьи за информацию!Никогда не интересовало, что такое XDTO.Теперь появился интерес.
122. zakov 02.04.14 10:49 Сейчас в теме
Для меня пока это темный лес... Добавлю в закладки, спасибо, буду изучать...
123. Gonja 22.06.14 23:41 Сейчас в теме
Внакомился с этим «зверем» XDTO вскользь, но так и оставил напоследок, а данная статья приоткрыла завесу. Ставлю жирный плюс.
124. OBEH 26.07.14 23:42 Сейчас в теме
По моему, сейчас появились более компактные и более понятные для пользователя форматы.
О них, для сравнения, хотелось бы узнать. Ну и перспективы.
Уж слишком муторный формат XDTO. В топку его. И на больших объемах, вообще, беда. Приходится руками писать что-то свое.
125. Evil Beaver 6396 27.07.14 09:18 Сейчас в теме
(124) OBEH, писать что-то свое?? Эта фраза выдает в вас строителя велосипедов. XDTO - это не формат, а библиотека классов. Формат это XML. Да, он избыточен и многословен, но объемы это несущественно. В 1С можно заменить XML на FastInfoset, получится меньший объем без переписывания кода. А XDTO - это не формат. Теоретически, можно реализровать запись XDTO в JSON.
126. baracuda 2 03.02.15 11:14 Сейчас в теме
Применение в коде

Как уже говорилось, для создания объектов XDTO применяется ФабрикаXDTO. Чтобы создать объект, фабрика должна знать его тип. Делается это следующим образом:


// Создается объект языка 1С с типом “ТипОбъектаXDTO”
// Первый параметр пространство имен, второй - имя типа в пространстве имен.
ТипОбъектаСписок = ФабрикаXDTO.Тип(“http://super-puper/collections”, “Список”);

// Создаем объект списка
ОбъектСписок = ФабрикаXDTO.Создать(ТипОбъектаСписок);

// обход сотрудников для выгрузки
Пока Выборка.Следующий() Цикл
ТипОбъектаСотрудник = ФабрикаXDTO.Тип(“http://super-puper/employees”, “Сотрудник”);
Сотрудник = ФабрикаXDTO.Создать(ТипОбъектаСотрудник);

// Свойство “ФИО” объявлено в схеме
Сотрудник.ФИО = Выборка.Наименование;

// Добавление “Сотрудников” в “Список”
ОбъектСписок.Добавить(Сотрудник);

КонецЦикла;

// А теперь, запись в поток XML

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку(); // запись в строку

ФабрикаXDTO.Записать(Запись, ОбъектСписок);
ДанныеXML = Запись.Закрыть(); // документ готов!
Показать


Я правильно понимаю, что это тоже самое что и создать пакетXDTO вручную??
127. Evil Beaver 6396 03.02.15 15:49 Сейчас в теме
(126) baracuda, э... нет, неправильно. В вашем примере кода никаких ПакетовXDTO вообще не создается. Не понял вопроса...
128. Alexei_fox 41 17.02.15 07:30 Сейчас в теме
Как с помощью XDTO получить вот такую строку в xml ? <Картинка Описание="Описание">путь к картинки относительно xml файла.jpg</Картинка>

Так то не проблема !!!
<Картинка>
<Описание>import_files/88/8868f46e-9d44-11e4-acb8-001e90f93bad_6098c20e-a850-11e4-85dc-001e90f93bad.jpeg</Описание>
</Картинка>

А разработчик приемника хочет именно <Картинка Описание="Описание">путь к картинки относительно xml файла.jpg</Картинка> ...

Есть мысли у кого ?
129. vlad.frost 186 19.02.15 11:53 Сейчас в теме
(128) Для того, чтобы выполнить требование разработчика приёмника, для поля "Описание" свойство "Форма" установите в значение "Атрибут", а не "Элемент"

kasper076; +1 Ответить
131. Infector 142 01.01.16 22:24 Сейчас в теме
Коллеги, а реально ли соорудить XML, не записывая результат в файл? Мне, например, сразу к сайту нужно обращаться через XML (конкретнее - уже небезызвестный ВЕТИС).
132. Evil Beaver 6396 02.01.16 14:38 Сейчас в теме
(131) Infector, см. метод ЗаписьXML.УстановитьСтроку()
133. Infector 142 02.01.16 20:02 Сейчас в теме
(132)

ЗаписьXML 	= Новый ЗаписьXML;
		
ЗаписьXML.УстановитьСтроку("windows-1251"); 
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ЗапросСписокСтран_XDTO, "getAllCountryListRequest");
    


Ошибок нет. Однако же как из "ЗаписьXML" теперь выдрать XML-файл в текстовом его представлении? Как через временный файл - понятно, но плодить файловые операции не хочется, быстродействию они обычно не способствуют.
134. pablo_escobar 02.01.16 22:58 Сейчас в теме
(133) Infector,
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
// Запись документа XML
...
СтрXML = ЗаписьXML.Закрыть();
Infector; +1 Ответить
135. Infector 142 03.01.16 12:48 Сейчас в теме
(134) pablo_escobar, Спасибо за подсказку, работает.
136. Evil Beaver 6396 03.01.16 17:50 Сейчас в теме
(134) pablo_escobar, дай человеку рыбу и он будет сыт один день. Научи его пользоваться синтакс-помощником и он будет сыт всегда.
necropunk; +1 Ответить
137. smaximaa 28.01.16 09:33 Сейчас в теме
(131) Infector, я например так делаю
Фабрика = ПроксиПодсистемаОбработкиЗаявок.ФабрикаXDTO;
SubmitApplicationRequest = Фабрика.Создать(Фабрика.Тип(
										"http://api.vetrf.ru/schema/cdm/application/ws-definitions",
										"submitApplicationRequest"));
138. Infector 142 28.01.16 17:04 Сейчас в теме
(137) smaximaa,

Ну про это понятно.
Я вот про эту часть (пример заимствовал в одной из публикаций, если знаете другой метод - в студию):
ВысылаемыйЗапрос - здесь тело XML в строковом виде, до этого приходилось XML только в файлы писать.
	
	MSXML = Новый COMОбъект("MSXML2.XMLHTTP.4.0");
	
	MSXML.open("POST", ИмяСервера, 0,ПараметрыПодключения_ВЕТИС.Login,ПараметрыПодключения_ВЕТИС.Password);
	MSXML.setRequestHeader("Accept", "text/xml; charset=utf-8");
		
	MSXML.setRequestHeader("SOAPAction", ИмяСервиса);
		
	Попытка
		MSXML.send(ВысылаемыйЗапрос);
		Ответ = MSXML.responseText;
	Исключение
		Сообщить("Ошибка выполнения запроса",СтатусСообщения.Важное);
		Ответ = "";
	КонецПопытки;	
	
Показать


Ну с общей помощью в этом моменте разобрался. А так да, пакетов у ВЕТИСа накачал, примерно так запросы и собираю
141. Spade 17.05.16 12:01 Сейчас в теме
Отличная статья! Очень познавательно. Спасибо. Продолжайте в том же духе!
142. NikVit 31.05.16 21:05 Сейчас в теме
а в семерке кто-нибудь занимался?

143. Evil Beaver 6396 31.05.16 21:24 Сейчас в теме
144. user_2010 442 24.06.16 16:54 Сейчас в теме
Подскажите, плз!
Разрабатываю веб-сервис, который будет добавлять запись в справочник.
При вызове веб-сервиса передаются параметры - значения полей добавляемой записи.
Полей много, все их перечислять в параметрах метода веб-сервиса - это нормально? Или можно как-то использовать пакет XDTO, который мы настроили для записи справочника?
145. user_2010 442 24.06.16 17:34 Сейчас в теме
(144) user_2010, кажется, я поспешила с вопросом... для параметра метода выбрала тип из моего XDTO.
146. AlexanderKai 28.06.16 11:44 Сейчас в теме
Нужно постоянно переделывать схемы XSD, чтобы они "вписались" в XDTO.
Да и чтение не особо удобно.
148. user_2010 442 28.06.16 14:18 Сейчас в теме
подскажите, плз...
1. создали свой пакет XDTO, в нем описали свой тип данных Kontr - например запись справочника Контрагенты (поля: Code, Name, INN, KPP).
2. в веб-сервисе мне передают в качестве параметра Kontr.
Вопрос: как мне обратиться, например, к INN в процедуре веб-сервиса? Kontr.INN?
149. vpaoli 28 25.08.16 21:01 Сейчас в теме
По поводу "Наоборот, аббревиатура XDTO родилась в недрах фирмы 1С и представляет собой ее собственный креатив. Нигде, кроме как в сфере 1С, вы не встретите данного сочетания букв."

Вы скорее ошибаетесь. В мире java уже давно есть понятие DTO (data transfer object) . Сам лично использовал такие объекты для того чтобы отображать java- классы базы данных в объекты интерфейса. Есть и технологии представления таких объектов в XML, например здесь - http://www.tsjensen.com/blog/post/2006/12/27/Simple+XML+To+DTO+And+Back+Again
150. Evil Beaver 6396 05.09.16 11:50 Сейчас в теме
(149) vpaoli, я не ошибаюсь. Термин "XDTO" именно в таком написании и такой семантике - это креатив 1С, а не некий международный стандарт.
А DTO - да, общепринятый профессиональный термин.
151. user629541_79276140580 16.12.16 09:02 Сейчас в теме
152. NAlex 3 12.01.17 12:53 Сейчас в теме
Респект автору! Качественная, хорошая статья.
153. Jivchic 93 09.02.17 06:39 Сейчас в теме
Здравствуйте,
столкнулся с задачей,

читаю xml ФабрикаXDTO, без использования ПакетовXDTO

для элементов со значением все в порядке:
<Роль>Покупатель</Роль> //вернет "Покупатель"

а там где пустые элементы засада...
<ИНН/> //вернет ОбъектXDTO
<Роль></Роль> //вернет ОбъектXDTO

1) подскажите пожалуйста как определить что там пусто?

2) или принять так что если это тип ОбъектXDTO (т.е. конечный объект, не список, то и нету там ничего... ?)
155. Evil Beaver 6396 31.08.17 11:29 Сейчас в теме
(153) Если чтение нетипизированное, то проверять на пустоту или список надо будет постоянно и вручную. Через методы Установлено() и проверку на ТипЗнч() = Тип("СписокXDTO")

Без "подсказки" в виде СхемыXML парсер XDTO преобразовывает xml в дерево объектов, как может и как умеет.
154. Vhett 29.08.17 14:34 Сейчас в теме
Я наверное даун. Но куда код то писать?
156. Vhett 01.09.17 13:09 Сейчас в теме
Как написать правильно, чтоб отчёт в XML выгрузил?

ЗаписьXML = Новый ЗаписьXML;
	  ЗаписьXML.ОткрытьФайл("c:\test\file.xml");
	  СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Отчеты.ОтчетПоПродажамВXLS.Создать(), "(Не совсем понял, что за НазначениеТипа, название XDTO-пакета?)", "http://www.sample-package.org");
	  ЗаписьXML.Закрыть();
157. Трактор 1191 16.01.18 12:12 Сейчас в теме
Ошибка в строке:
ФабрикаXDTO.Записать(Запись, ОбъектСписок);

У объекта ФабрикаXDTO есть только метод ЗаписатьXML
158. user986487 07.06.18 23:09 Сейчас в теме
Всем кто интересуется данной темой, советую почитать вот эту статью Механизм XDTO. Очень хорошо все расписано и разобраны все свойства из Типа значения, Типа объекта, Свойства.
159. Evil Beaver 6396 09.06.18 18:47 Сейчас в теме
(158) да, неплохая статья. Но есть ощущение, что я ее уже видел на другом ресурсе, а тут - перепечатка. Могу ошибаться, конечно.
160. FilatovRA 149 25.06.18 17:52 Сейчас в теме
Может кому-нибудь упростит задачу полный работающий код для записи:
ТипОбъектаСписок = ФабрикаXDTO.Тип("http://www.sample-package.org", "Сотрудники");

// Создаем объект списка
ОбъектСписок = ФабрикаXDTO.Создать(ТипОбъектаСписок);
Запрос = новый запрос;
Запрос.Текст = "ВЫБРАТЬ
|	Сотрудники.Наименование КАК Наименование
|ИЗ
|	Справочник.Сотрудники КАК Сотрудники";

ВЫборка = Запрос.Выполнить().Выбрать();
СписокОбъекта = ОбъектСписок.ПолучитьСписок("Сотрудник");
// обход сотрудников для выгрузки
Пока Выборка.Следующий() Цикл
ТипОбъектаСотрудник = ФабрикаXDTO.Тип("http://www.sample-package.org", "Сотрудник");
Сотрудник = ФабрикаXDTO.Создать(ТипОбъектаСотрудник);

// Свойство "ФИО" объявлено в схеме
Сотрудник.Наименование = Выборка.Наименование;

// Добавление "Сотрудников" в "Список"
СписокОбъекта.Добавить(Сотрудник);

КонецЦикла;

// А теперь, запись в поток XML

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку(); // запись в строку

ФабрикаXDTO.ЗаписатьXML(Запись, ОбъектСписок);
ДанныеXML = Запись.Закрыть(); // документ готов!
Показать
161. olezhe 20 01.12.18 20:28 Сейчас в теме
Автор, спасибо за подробную статью.

Но в статье слетели иллюстрации!
162. serko8547 95 11.12.18 13:50 Сейчас в теме
АВТОР! ОТДЕЛЬНАЯ тебе благодарность за ДОСТУПНОЕ пояснение про страшного? непонятного и зубастого зверя XDTO!
163. koln 16.12.18 20:18 Сейчас в теме
Спасибо за статью. Довольно многое прояснилось.
164. Jacki 04.03.19 14:39 Сейчас в теме
Спасибо, статья замечательная!
Но картинки на внешних ресурсах не отображаются
165. user642695_crocus.vladikina 27.06.19 09:58 Сейчас в теме
почему не работают владеющие свойства ? вроде похоже на xdto - нигде не написано про владеющие свойства, но на инфостарте есть статья. Расскажите пожалуйста - почему они не работают ?
166. user642695_crocus.vladikina 27.06.19 10:01 Сейчас в теме
почему свойства то есть то нет ? как это манипулирует данными ?
167. user642695_crocus.vladikina 27.06.19 10:02 Сейчас в теме
кстати, забыла написать - не все примеры здесь на сайте работающие ....
168. Evil Beaver 6396 27.06.19 20:45 Сейчас в теме
(167) Вы когда спрашиваете, вы не забывайте уточнять. Что такое "не работают владеющие свойства"? Как именно они у вас не работают? Какой именно пример "здесь на сайте" не работает? Статьям этим 7 лет и прочло их много людей. У них как-то работало... Дайте больше деталей, пожалуйста, что вы делаете, что именно не получается, как выглядят сообщения об ошибках...
zurapa; vlad.frost; +2 Ответить
169. user642695_crocus.vladikina 28.06.19 12:24 Сейчас в теме
да. приходится смотреть сколько им лет ! спасибо
(168)
170. user642695_crocus.vladikina 28.06.19 12:25 Сейчас в теме
вопрос решен без статей
171. zurapa 01.08.19 09:41 Сейчас в теме
Шикарнейшая статья.
А вы ещё где-то публикуетесь? Или только на этом ресурсе?
У этой статьи протухли картинки, что портит впечатление от статьи. Не самое лучшее решение - размещать картинки на сторонних сервисах картинок, которые не имеют перспектив долгожителей типа itmage.ru.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Специалист техподдержки 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Полный день

Системный аналитик 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Полный день

Программист 1С
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Тестировщик 1С
Москва
зарплата от 70 000 руб.
Полный день

Программист 1С
Воронеж
зарплата от 100 000 руб. до 150 000 руб.
Полный день