XDTO - это просто, часть 2

18.12.17

Разработка - Механизмы платформы 1С

Моя первая статья про XDTO получила широкую поддержку. Большое спасибо всем, кто оставил отзывы. Видно, что тема является актуальной, посему - продолжение.

XDTO - это просто, часть 2

 

Обновление 28.01.2013:

Опубликована очередная статья: //infostart.ru/public/171019/

В предыдущей статье было дано небольшое введение в механизм XDTO, предлагаемый платформой 1С. Это вторая часть серии про XDTO, где предлагается рассмотреть основные моменты создания модели типов XDTO с помощью схем XML, т.к. понятие модели типов фундаментально для XDTO, и без понимания того, какие типы бывают сложно двигаться дальше.

Стоит также отметить, что данная статья, по сути, является прямым продолжением первой статьи, т.е. все, что будет написано ниже должно было быть включено в первую статью, но она, неожиданно для меня, получилась довольно большой и ее пришлось разбить на две. Таким образом, обе статьи следует считать одной, тема здесь и там рассматривается одна и та же - самые основы-основ XDTO с минимумом "внутренностей". Более детальные обзоры требуют понимания фундамента, поэтому, данная вводная часть, хоть и не так интересна, но, тем не менее, просто обязана быть. Еще раз, хочу обратить внимание - если материал статьи Вам и так известен, пролистайте ее, а в комментариях напишите те вопросы, которые нужно осветить подробно в будущих статьях.

 

Liquid XML Studio

Как я уже говорил, для разработки схем я пользуюсь Liquid XML Studio, а стало быть примеры схем будут приведены для этой программы. Разумеется, никто не запрещает создавать схемы любыми другими редакторами, например XML Spy или Oxygen. Старый добрый Блокнот тоже никто не отменял ;). Да, забыл! В 1С есть встроенный редактор типов XDTO. Он чуть лучше, чем блокнот, поэтому, запросто можно использовать его для небольших схем.

Какие бывают типы?

Как я уже говорил, фундаментальным понятием для XDTO является модель типов, т.е. совокупность всех прикладных (полезных бизнес-логике) типов данных. Прикладных типов может быть много, но по принципу построения все они похожи.

Во-первых, типы делятся на простые (simple) и составные (complex). Составные типы могут иметь несколько моделей содержимого, но XDTO поддерживает только простые последовательности свойств - так называемые sequence. Вдаваться в особенности моделей содержимого не будем. Sequence - это просто перечень свойств, как реквизиты справочника, например. Остальные в рамках данной темы нам не интересны.

Простые типы представляют данные, которые можно выразить одним строковым значением, например даты, строки и числа. Составные, как следует из названия, это типы содержащие несколько значений.

Стандарты XML представляют большое количество базовых типов данных. Все их перечислять нет смысла, некоторые будут в примерах, при необходимости, их можно найти в стандартах w3c, а также в гугле.

Типы могут наследовать друг-друга, так же, как в любимом всеми ООП. Например, “ФизЛицо” с атрибутами имени, номера паспорта и адресом может наследоваться типами “Сотрудник” и “Клиент”. На наследовании останавливаться не будем, думаю, все знают, что это такое. Кроме того, свойства в составных типах данных могут иметь так называемую “повторяемость”, т.е. встречаться в документе более 1 раза. По-простому, это называется список.

Как тип данных может выглядеть в XML?

Рассмотрим небольшой тип данных, который описывает одно сообщение в сетевом чате типа аськи:
У сообщения есть уникальный номер, дата-время его поступления на сервер и, собственно, тело сообщения. Здесь интересный момент. Составной тип данных может выглядеть в XML разными способами, но логически означать одно и тоже. В XDTO, как в средстве “логической” обработки данных, все типы будут обрабатываться из языка 1С одинаково, но физически в потоке XML они могут быть представлены разными способами.
Способов представления всего три: Элемент, Атрибут и Текст. Все очень просто - элементы пишутся в XML, как элементы, атрибуты - как атрибуты, а текст - как текст (логично, правда?). Напомним, как выглядят эти вещи в синтаксисе XML:

 

 

Обратите внимание, свойства number и date представлены в виде атрибутов, а тело сообщения представлено в виде текста. Если вы разрабатываете свой тип данных, то способы размещения выбирать вам. Атрибут или Элемент - можно холиварить, но в конечном итоге - это дело вкуса.

Никто не запрещает оформить наш тип данных вот так:

 

 

Ровно те же самые данные, но выглядят иначе. Для XDTO это важно, т.к. при чтении потока XML, платформа должна понимать, как отобразить XML на бизнес-объект XDTO. Об особенностях настройки этого момента в XDTO расскажу ниже.

Конструирование типа в Liquid

Рассмотрим создание указанной модели типов в Liquid. Перво-наперво, создадим чистую схему и зададим ей уникальное пространство имен (вспоминаем первую статью).
В корневом элементе схемы щелкнем правой кнопкой и выберем Add child->Complex type.

Будет добавлен новый тип. Назовем его Message, а в качестве базового укажем string. Базовый тип означает, что наш новый тип в конечном итоге является строкой. Это позволит помещать тело сообщения в текстовый узел XML (см. первую картинку, выше).

 

 

Теперь, добавим 2 атрибута - номер и дату сообщения. Правой кнопкой щелкаем на типе Message, выбираем Add child->Attribute. Задаем имя атрибута и тип его значения. Для number - это будет тип decimal (число), для date - dateTime.

Тип Message готов, теперь нужно создать объект пакета сообщений MessagePackage, как в приведенном примере.

Добавляем новый составной тип (корневой элемент, Add child->Complex type), задаем ему имя типа MessagePackage. Базовый тип не указываем.

Теперь еще один момент. Чтобы составной тип мог содержать другие элементы, нужно указать ему модель содержимого. Как я уже говорил, XDTO поддерживает только Sequence. Добавляем в MessagePackage дочерний элемент (правой кнопкой, Add child) и выбираем Sequence. Появится такая серая кракозябла, в которую впоследствии и надо добавлять дочерние элементы.

Щелкнем на этой кракозябле, укажем Add Child - > Element. Для элемента зададим имя (любое), а главное - тип значения - наш тип Message.

В результате получится такая картинка:

 

 

Теперь, нам надо указать, что Message может повторяться несколько раз внутри MessagePackage. Для этого, в контекстном меню элемента Message (того, который красненький, ведь это именно он должен повторяться) выберем пункт Cardinality.

Данное свойство позволяет указать особенности повторяемости. Как правило, элементы повторяются либо неограниченное число раз (1..unbounded), либо являются необязательными (т.е. повторяются  от 0 до 1 раз). Если cardinality не указан, что считается, что элемент обязательный и присутствует только один раз.

Для особо тяжелых случаев в свойствах элемента можно настроить точную повторяемость с помощью Min Occurs и Max Occurs. Например, можно указать, что элемент должен встречаться не менее 2-х и не более 10-раз.

Сообщений в нашем пакете может быть одно и более. Указываем Cardinality “1..unbounded”. Теперь элемент Message может повторяться более в пакете более 1 раза. В XDTO такой элемнет будет не просто свойством, а СпискомXDTO.

Обратите внимание, тип Message унаследован от string, а это значит он ЯВЛЯЕТСЯ строкой, просто у этой строки есть 2 дополнительных свойства. Кроме того, само тело сообщения не имеет какого-то имени, к которому можно обратится через точку.

Здесь вступает в игру противоречие между концепцией хранения данных в XML и объектной моделью языка 1С. Например, в общем случае, мы можем объявить тип Message, и из языка 1С задать значение number одной строкой кода:

message.number = 12;

Но что делать, если в схеме нет имени свойства (как в нашем примере с текстом), или свойство называется message-idXML не запрещает дефисы в именах, а вот компилятору 1С вряд ли понравится переменная с дефисом в имени. Мне кажется, это одна из причин, по которой в 1С разделили понятие “Схемы” и понятие “Модели данных”. XML не может однозначно отображаться на объектную модель языка. Требуются дополнительные настройки, а значит, термины, понятия и объекты...

Вернемся в Конфигуратор

Итак, представим, что в корпоративной сети нашей фирмы есть внутренний чат, который называется Corporative Messaging System, сокращенно CMS. Протокол обмена сообщениями - приведенная выше схема. По сети гуляют пакеты сообщений в виде приведенных фрагментов XML. Давайте напишем для этой системы генератор спама на языке 1С.

Сама CMS написана не на 1С, а на Турбо Бейсике 1.0 (чтобы было ясно, что XDTO применимо не только к обмену 1С->1С). При помещении файла XML в специальный каталог он подхватывается сервером CMS и транслируется дальше по сети. Архитектура не ахти какая, но это же Бейсик 1.0, так что не придираемся :)

Импорт схемы в конфигуратор

Первое, что мы должны сделать, это выяснить к какому пространству имен относятся типы почтовой системы. В Liquid надо выбрать корневой элемент схемы и открыть окно свойств из контекстного меню. В списке свойств ищем “targetNamespace”. Допустим в нашем примере пространство имен называется “urn:my-company/cms

Теперь, нам надо загрузить схему в конфигуратор. Это мы делали в прошлой статье: щелкаем правой кнопкой на ветке ПакетыXDTO и выбираем “Импорт схемы XML”.
Теперь, откроем на редактирование новый Пакет XDTO и посмотрим, что у него внутри.

 

 

Ага, все знакомо, только что это за __content в типе Message? Это как раз то, что платформа предлагает в качестве свойства для текстового содержимого объекта. Модель XDTO предлагает “заменители” для тех имен XML-схемы, которые не могут использоваться в качестве имен переменных в языке 1С. Давайте откроем окно свойств для элемента __content в типе Message.

 

 

Обратите внимание, на пункт “Локальное имя”. Он означает то, как свойство представлено в самом файле XML. Пункт “Имя” вверху - то, как объект выглядит в языке 1С. В идеале, они должны совпадать, но если вдруг они различаются, то здесь можно настроить трактовку подобных различий.

Также стоит обратить внимание на пункт “Форма”. Сейчас там стоит “Текст”, это значит, что значение расположено в текстовом узле. Например, если система CMS станет писать message.number не в атрибут, а в обычный элемент, то нам нужно будет поменять поле “Форма” и указать “Элемент”, чтобы новые файлы корректно обрабатывались. А если поле number еще и переименуется в message-id, то надо будет откорректировать “Локальное имя”. Таким образом, независимо (почти) от того, как данные оформлены внутри XML, мы можем настроить то, как они будут выглядеть в языке, а значит при изменении схемы XML нам не придется переписывать код.

Если нам не нравится писать Message.__content = “Hello”, то можно задать другое значение в поле “Имя”. При этом файл будет читаться без ошибок, опираясь на настройку "Форма" и "Локальное имя".

Что там насчет генератора спама?

Да, да. Я не забыл :) Создаем обработку, вешаем на нее большую кнопку и всю необходимую инфраструктуру настроек (текст спама, список адресатов и т.п.).

В самом интересном месте, там где должен формироваться XML документ, код будет выглядеть следующим образом:

ПакетСообщений = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms"),"MessagePackage");

Для Каждого
Адресат Из СписокАдресатов Цикл

   
Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms"),"Message");

   
Сообщение.number = Адресат.Номер;
   
Сообщение.date = ТекущаяДата();
   
Сообщение.__content = "Купите дубленку";

   
ПакетСообщений.Добавить(Сообщение);

   
Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms"),"Message");

   
Сообщение.number = Адресат.Номер;
   
Сообщение.date = ТекущаяДата();
   
Сообщение.__content = "Уран недорого";

   
ПакетСообщений.Message.Добавить(Сообщение);

КонецЦикла;


Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ФайлПочтовойСистемы);
ФабрикаXDTO.ЗаписатьXML(Запись, ПакетСообщений);
Запись.Закрыть();

На этом все. Файл со списком сообщений будет корректно сформирован в том месте, где мы указали.

А теперь, следите за руками!

В приведенном примере кода объект Сообщение создается 2 раза. Угадайте, что будет, если убрать вторую строчку “Сообщение = ФабрикаXDTO.Создать”? А будет вот что:

После добавления первого сообщения пакет сообщений содержит 1 элемент. После второго добавления в дерево будет добавлен еще раз тот же самый объект. Загадка: сколько объектов "Сообщение" будет записано в файл XML?

Будет записан только один объект. И этот эффект абсолютно нигде не документирован. Происходит следующее: объект XDTO представляет собой единый граф XML документа. Т.е. все вложенные элементы уникальны, и по объекту XDTO можно гулять вверх-вниз, определяя, какой XML записан выше или ниже объекта. Если мы возьмем объект Message, который уже помещен внутрь списка и присвоим его куда-то еще (например в другой список) то он удалится из первого списка. Объект уникален. Он не будет скопирован в другое место, он будет перемещен, а его связи перестроены.

Еще один пример. Есть тип “Должность” со свойствами “Название” и “Оклад”.

Записываем список сотрудников, где все они имеют должность “Рабочий”

ДолжностьРабочий = СоздатьДолжностьXDTO(); // Фабрика.Создать(.. ля-ля-ля);
СписокСотрудников = СоздатьСписокСотрудников(); // Фабрика.Создать(.. "НекийСписок")
Для Каждого Сотрудник Из Сотрудники Цикл

   
xdtoСотрудник = ФабрикаXDTO.Создать("namespace","Сотрудник");
   
xdtoСотрудник.Должность = ДолжностьРабочий; // Это всегда один и тот же объект
   
СписокСотрудников.Добавить(xdtoСотрудник);

КонецЦикла;

ФабрикаXDTO.Записать(ЗаписьXML, СписокСотрудников);

Объект “ДолжностьРабочий” будет гулять от сотрудника к сотруднику, и должность окажется назначенной только у последнего в списке. У всех остальных Должность будет пустой, т.к. она по очереди “перепрыгнула” от одного к другому.

В заключение

В моем редакторе получается 8 страниц. По-моему, для одной статьи даже много и нужно прерваться.

В этой статье мы рассмотрели то, как создаются XML схемы с помощью Liquid и как они отображаются в объекты XDTO. В других редакторах схем они создаются практически так же. Были рассмотрены разные способы задания объектов в XML, определились с терминами “Атрибут”, “Элемент”, “Текстовый узел”. Кроме того, в приведенном примере рассмотрен один нюанс, который с непривычки сложно понять. При присваивании объекта XDTO куда-либо в другом объекте, первый объект удаляется из своего старого места (если он имел таковое), и помещается в новое место. Нельзя один раз создать маленький повторяющийся объект (вроде "Должности"), а потом помещать его в несколько разных других объектов.

На этом предлагаю остановиться. Более подробно копать XDTO будем в одной из следующих статей.

В следующей серии:

Создание собственных Фабрик

Тонкости сериализации

Стандартная XDTO сериализация, с чем едят "СериализаторXDTO" и чем он отличается от "Фабрики".

Запись/чтение XDTO в поток XML, особенности anyType.

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7409    bayselonarrend    19    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5937    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    17621    YA_418728146    26    

71

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11208    dsdred    44    

130

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23747    SeiOkami    48    

135

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18812    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14722    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. siwa99 4 09.01.13 14:44 Сейчас в теме
Хочу побудить автора на продолжение. Хорошая статья. Дружище, не сбавляй темп.
POWone; zeropal; creatermc; primara; user777757; +5 Ответить
2. dyak84 09.01.13 18:46 Сейчас в теме
Автор спасибо за статью очень достойное продолжение предыдущей, все очень занимательно и интересно. Полностью согласен с (1). не збавляй темп. СПАСИБО
zeropal; primara; user777757; +3 Ответить
3. Unicorn31 45 09.01.13 22:07 Сейчас в теме
+1
pas545; primara; gigabyte-leha; Mogilnikova; +4 2 Ответить
4. p1l1gr1m 10.01.13 00:47 Сейчас в теме
Приятно читать статью написанную хорошим, грамотным русским языком. Плюс
pas545; zeropal; creatermc; primara; Alligator84; user777757; Mogilnikova; +7 1 Ответить
5. abc2000 83 10.01.13 02:33 Сейчас в теме
Особенно заинтересовало создание собственных Фабрик. Требую продолжения.
:)
pas545; primara; user777757; +3 Ответить
6. DERL 10.01.13 09:41 Сейчас в теме
Все очень грамотно и четко расписано, с множеством скринов. Автор молодец, вот молодец! :)
pas545; creatermc; primara; user777757; Zhen_e; +5 1 Ответить
7. kuza_87 28 10.01.13 11:19 Сейчас в теме
Спасибо огромное автору. Статья - Супер!
8. kuza_87 28 10.01.13 11:20 Сейчас в теме
Ждём продолжение)))
creatermc; primara; user777757; +3 Ответить
34. bek_bassar 26.02.13 14:49 Сейчас в теме
Попытался сделать обработку примерно как описано в статье, но ни тут то было. В первой же строке выдает сообщение
{Форма.Форма.Форма(8)}: Ошибка при вызове метода контекста (Тип)
ПакетСообщений = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms"),"MassagePackage");
по причине:
Несоответствие типов (параметр номер '2')
я как понял с MassagePackage что то не то. Где корать?
36. a-novoselov 1158 30.04.13 12:12 Сейчас в теме
(34) Смотри (35). Если изменить код, то будет работать. Нужно поименовать элементы списка в схеме, и добавлять через Пакет.ИмяЭлемента.Добавть(ЭлементXDTO);
9. Den_D 54 10.01.13 15:33 Сейчас в теме
Неистово плюсую. Прочитал обе части одним махом. Жду с нетерпением следующих.
pas545; Alligator84; +2 1 Ответить
10. DitriX 2101 10.01.13 17:02 Сейчас в теме
Вот вопрос по этой картинке:

Тут очень интересный эффект, если не поставить тут минимальное количество 0, а максимальное "-1", то не корректно формируется XDTO пакет.
Во всяком случае когда форма стоит Элемент.

Вот тут хотелось бы узнать ваше мнение, откуда такой прикол?
11. Evil Beaver 8243 10.01.13 17:35 Сейчас в теме
(10) DitriX, Не понял вопрос... Если НЕ поставить минимальное 0, а максимальное -1, то что будет некорректно?
Некорректно будет работать пример кода, взятый из статьи? Ага, скриншот неправильный, так, как на скриншоте это не список получится, а единичный элемент. А вот если в Liquid сделать, как в статье написано, то после импорта в пакете как раз будет стоять 0 и -1.

Или я не понял вопрос...
12. DitriX 2101 10.01.13 18:07 Сейчас в теме
(11) в этом то и был вопрос, вы говорили о массиве, а там массив не выйдет, т.е. показали конечный вариант для элемента, а это не интересно, вы же дальше оперируете массивом, но если делать по аналогии, то работать не будет.

И зачем вы везде суете этот Liquid? Опционально, можно и его описать, но качать платный (ну или древний бесплатный) софт, ставить в систему, создавать в нем без контекста схемы, потом сохранять схему, потом загружать схему.
Вам не кажется это стрельбой из пушки по воробьям?

Мне, и думаю большинству из читающих, было бы интереснее познать дзен тонкостей именно в 1С :) ибо именно с ним и работаем. А то так залезешь на чужой сервак, а там буфер отключен, передача данных отключена, а в 1С делать не можем.

Перефразируя скажу так - если человек решит что то сделать по статье, без помощи Liquid, он ничего более-менее адекватного не сможет сделать, или столкнется с теми же приколами что и я, и, думаю, вы также.

В чем тогда польза статьи?

Учтите, вам 90% плюсов ставят авансом, т.е. при надобности все будут рассчитывать на статью, а вот в ней тонкостей то и нету.

Что то вы уж очень сильно затягиваете весь процесс создания статей.
Делайте их хотя бы по главам, людям же потом искать их все :)

Если хотите больше плюсов и повисеть на главной, то вопрос снимаю, если для людей делаете - делайте все в одной статье.
Не хватает так же схем в прикрепленных файлах.

На заметку - как вы думаете, почему любой пример программирования, в первую очередь, начинается с "Hello world!"? Я думаю, потому что вы сразу видите результат своей работы, от которого можно отталкиваться. А у вас результат то и не приведен. Вы сейчас описываете голый сервер, без клиента, а весь смак то в клиенте, в настройке его и оперированием полученных данных.


З.Ы. Ничего личного, извините если выглядит как наезд, но эта тема меня действительно интересует, но примеры скудные и по пользе тянет на четверть статьи.

З.З.Ы. Может я не прав, и других все это устраивает, тогда я просто пойду лесом :)
abasovit; serg_zz; ivecon; xa1ter; Alligator84; alyonchik; Gorr; invertercant; SirYozha; Yimaida; +10 3 Ответить
14. Evil Beaver 8243 10.01.13 22:24 Сейчас в теме
(12) DitriX, Во-первых, большое спасибо за конструктивную критику. Во-вторых, попробую пояснить кое-какие моменты.
зачем вы везде суете этот Liquid


Про Liquid пишу, потому, что сам пользуюсь им постоянно. Я настолько к нему привык, что набиваю схемы, практически не пользуясь мышкой - как текст. Стандартным редактором в 1С я не пользуюсь со времен 8.1. В нем нельзя даже было переместить свойства вверх-вниз, а создание схемы было сущей пыткой. В 8.2 ситуация лучше, но до Liquid далеко. Разумеется, этот пакет необязателен, просто это мой рабочий инструмент, поэтому и пишу про него.
Мне, и думаю большинству из читающих, было бы интереснее познать дзен тонкостей именно в 1С :) ибо именно с ним и работаем. А то так залезешь на чужой сервак, а там буфер отключен, передача данных отключена, а в 1С делать не можем.

Вот здесь, поясните, пожалуйста - что за сервак, какой именно буфер? Не понял, о чем это и как это относится к XDTO? Буду также признателен за намек - какой именно дзен нужно пояснить? Там довольно много разного дзена :)

На заметку - как вы думаете, почему любой пример программирования, в первую очередь, начинается с "Hello world!"? Я думаю, потому что вы сразу видите результат своей работы, от которого можно отталкиваться. А у вас результат то и не приведен. Вы сейчас описываете голый сервер, без клиента, а весь смак то в клиенте, в настройке его и оперированием полученных данных.


Я, возможно, плохо умею объяснять. Тематику статей я видел по-другому. Если бы я хотел, чтобы объясняли мне, то хотел бы услышать то, как система построена. А построена она на понятии модели данных - системы типов, которой предстоит оперировать. Именно об этом эти 2 статьи. Скорее всего, Вы правы. Нужен какой-то Hello World, но мне казалось, что он даст не понимание работы XDTO, а то, как им пользоваться. Я представлял себе повествование несколько иначе, от фундамента - к принципам работы и только потом - как пользоваться.

Перефразируя скажу так - если человек решит что то сделать по статье, без помощи Liquid, он ничего более-менее адекватного не сможет сделать, или столкнется с теми же приколами что и я, и, думаю, вы также.


На мой взгляд, как раз "приколы" стандартного редактора можно понять, только если понимаешь сами схемы и то, чем они отличаются от пакетов. Отличаются они тем, что в пакете есть ряд свойств, которых нет в схемах - та самая настройка "Форма", "Локальное имя" и т.п. (см. статью 2). Понимая что лежит "под" пакетом, можно понять - что от тебя хочет 1С-овский редактор XDTO.

Что то вы уж очень сильно затягиваете весь процесс создания статей.
Делайте их хотя бы по главам, людям же потом искать их все :)

Статьи я пишу в свободное от работы и домашних дел время. Первую статью написал перед самым Новым годом, когда дела уже закончились, вторую - в новогодние каникулы. Сейчас грядет сдача годовой отчетности, поэтому, следующая статья, возможно, будет с задержкой - банально не будет времени.
Кроме того, на Инфостарте я недавно. Насколько я понял - статью нельзя разбить на страницы. Если она будет длинной, то ее неприятно без конца листать вниз. Если Вы знаете, как статью можно разбить на страницы - научите меня, пожалуйста.
Если хотите больше плюсов и повисеть на главной, то вопрос снимаю, если для людей делаете - делайте все в одной статье.

Тема довольно обширная, хочется рассказать много, а это требует определения что сначала, что потом, время опять же... Про плюсы - это Вы зря. Когда появилась идея, не имел ни малейшего понятия, сколько будет плюсов. И потом - зачем они? Как я понял, кроме чувства собственной важности они ничего не дают, их нельзя конвертировать в какие-то бонусы... Моя реальная цель - поделиться опытом. Поэтому, я всячески благодарен за критику и за сообщения - о чем нужно написать. Это поможет создать статьи, которые более полезны сообществу, нежели те, которые будут сообщать о том, что кажется полезным мне одному.
abasovit; GorDAn; Alligator84; alyonchik; fuxic; manserg; Mogilnikova; veiuper; Starky; Armaggik; unichkin; mvgfirst; CratosX; +13 Ответить
15. DitriX 2101 11.01.13 00:26 Сейчас в теме
(14)
А то так залезешь на чужой сервак, а там буфер отключен, передача данных отключена, а в 1С делать не можем.

Ну вот смотрите, пример из жизни - есть клиенты, у них параноидальный IT отдел, ничего не установить, инета нету, буфер отключен между РДП, т.е. отдельно у себя схемку не накидаешь. А у них стоят андроид отчеты, в которых я юзаю xdto (в новой версии я от них вообще откажусь, но мы не об этом), и вот тут придет мне капут, или ручками ксерить то что накидал в ликвид, или в 1С юзать. Это крайняя ситуация, но и в нужный момент может просто этой программы под рукой не быть.

Я представлял себе повествование несколько иначе, от фундамента - к принципам работы и только потом - как пользоваться.

Это хорошо, но вот лично вы - прежде чем программировать за 1С - изначально прочитали всю литературу, которая шла в коробке? Сомневаюсь, вы хотели сразу что то сделать, что бы что то увидеть. И это логично.


На мой взгляд, как раз "приколы" стандартного редактора можно понять, только если понимаешь сами схемы и то, чем они отличаются от пакетов.

Ну тут я согласен, есть ньюансы.

Если Вы знаете, как статью можно разбить на страницы - научите меня, пожалуйста.

Думаю, что никак нельзя. Но обратитесь в поддержку инфостарта :) Может и сделают.
А вообще можно основные моменты осветить и прикрепить вордик к публикации, такой вордик и при себе иметь удобно и печатать сразу все можно будет.

Про плюсы - был сарказм. Инфостарт - это место, где большему числу откровенно пофиг на карму, плюсы и прочее. Я думаю вы и сами это заметили :)
13. DoctorRoza 10.01.13 20:28 Сейчас в теме
Отмечусь, информация нужная!
16. Kopman 24 11.01.13 06:34 Сейчас в теме
Хороший цикл статей, доступно..
Планируется ли анализ производительности относительно других вариантов разбора XML.
XDTO- удобно, но хотелось бы понять какая цена этого удобства:-)
17. artmicro 11.01.13 14:59 Сейчас в теме
XDTO очень и очень клевая вещь. У нас например, построен обмен данными между разными конфигурациями именно через XDTO. Да и при обмене с многими внешними системами, тоже удобно использовать XDTO, если требуется создать какого-то вида XML. По факту это Вам и для REST-a подойдет да и вообще, для любого действия с XML. Главное конечно, здравый смысл. Статья хорошая, но тема, как говорится, не расскрыта. Ждем продолжения :)
18. zoytsa 14.01.13 00:16 Сейчас в теме
Хотелось бы больше полемики в комментах :-)
19. Bukaska 140 14.01.13 00:18 Сейчас в теме
Требуем продолжения банкета!
20. Ksu 16.01.13 08:45 Сейчас в теме
Огромное спасибо автору! Очень полезная статья!
И большая работа!
21. sikuda 677 17.01.13 09:54 Сейчас в теме
На будущие статьи. Хотелось освятить тему обработки ошибок XDTO. Когда файл не читается и это происходит из не соответствия данных и схем. Когда я занимался этим в 1С ничего вразумительного найти не смог. Может сейчас дело подвинулось?
22. Evil Beaver 8243 17.01.13 11:58 Сейчас в теме
Дело не может продвинуться. Если файл не соответствует схеме, он читаться не будет. Единственный способ - выяснять - где произошло несоответствие. Стандартное сообщение об ошибке таких данных не предоставляет, но можно программно получить объект ИнформацияОбОшибке(), у него есть свойство Причина. При ошибке XDTO там будет еще один объект ИнформацияОбОшибке().
Если обойти их все рекурсивно, то дойдем до самого нижнего ИнформацияОбОшибке(), где будет сказано - какой именно узел XDTO выдал исключение. Если есть возможность, посмотрите конфигурацию БГУ, общий модуль Диагностика. Там как раз используется такой подход.
user811769; Vladimir Litvinenko; servs; +3 Ответить
28. servs 66 26.01.13 18:11 Сейчас в теме
Автор, добавь (22) в статью.
23. ksai 18.01.13 16:35 Сейчас в теме
Evil Beaver, сильно интересует дата выхода следующей статьи. Понимаю, что написание статей - занятие на чистом альтруизме, и пытаться определить конкретные сроки (и желательно ближайшие:) совсем непросто, но всё-таки?

P.S. спасибо за полезную информацию в обеих заметках.
24. Evil Beaver 8243 18.01.13 18:52 Сейчас в теме
В процессе. Сейчас горячая пора, годовой отчет. Времени в обрез, по ночам очень не хочется. Надеюсь на понимание.
25. pass_developer 19.01.13 14:04 Сейчас в теме
Надеюсь, что следующая статья выйдет скоро...
26. pass_developer 19.01.13 14:04 Сейчас в теме
Надеюсь,что следующая статья выйдет скоро...
27. daho 8 20.01.13 18:11 Сейчас в теме
Круто!! Очень доступно и толково написано. Что по сути то после нескольких опытов - с этой технологией не приходилось еще парится... но очень заинтересовало!
29. hame1e00n 524 28.01.13 00:56 Сейчас в теме
30. irishka77 28.01.13 10:18 Сейчас в теме
Спасибо, хорошо написано!Жду продолжения.
31. mvgfirst 6 18.02.13 17:17 Сейчас в теме
Я с XML недавно - статью начал читать из-за того что встала предо мной задача, разобрать XML-файлик от сторонней системы, и сейчас вижу что этот самый XDTO-пакет очень даже облегчит мне жизнь.
Однако размышляя над его использованием вспомнил о своих мучениях по исследованию обработки "Обмен с сайтом", в которой разбор XML идет без использования XDTO фабрик. Хотя как по мне этобыло бы мега удолнее.

Перед тем как ринутся в самостоятельное переписываение этой (достаточно типовой обработки) хотелось бы услышать мнения автора вчем недостатки применения фабрик XDTO в этой обработке и каковы по мнению автора мотивы отказа разработчиков 1С от использования фабрик XDTO в обмене?
Ведь CommerceML - достаточно стандартизированный протокол обмена, и пакет для него уже должен существовать.
32. Evil Beaver 8243 18.02.13 17:51 Сейчас в теме
Перед тем как ринутся в самостоятельное переписываение этой (достаточно типовой обработки) хотелось бы услышать мнения автора вчем недостатки применения фабрик XDTO в этой обработке и каковы по мнению автора мотивы отказа разработчиков 1С от использования фабрик XDTO в обмене?


К сожалению, я не в курсе. Ни о недостатках, ни тем более о причинах отказа 1С от XDTO в данном случае. Причина отказа, например, может быть в том, что на момент написания не было такой вещи, как XDTO, например, во времена 8.0. Это, конечно, только гипотеза :)

CommerceML - достаточно стандартизированный протокол обмена, и пакет для него уже должен существовать.


Вполне возможно. Ищите готовую XML-схему для CommerceML, создавайте на ее основе фабрику (см. статью №3) и вперед.
33. mvgfirst 6 18.02.13 19:09 Сейчас в теме
(32)
Ищите готовую XML-схему для CommerceML, создавайте на ее основе фабрику (см. статью №3) и вперед.

ну поиск схемы много времени не занял )
Схема CommerceML
Буду разбираться
37. tolyan_ekb 105 31.07.13 10:52 Сейчас в теме
(32)Как будет происходить запись, если в схеме тип "Message" сразу сделать подтипом "MessagePackage" и в нем прописать его атрибуты номер и дату?
35. a-novoselov 1158 30.04.13 12:09 Сейчас в теме
(0) Платформа 8.2.18.61
Приведенный в статье код не заработал. Пришлось изменить на:
ПакетСообщений = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "Package")); 

	Для ш = 1 по 20 Цикл 

	    Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "Message")); 

	    Сообщение.number = ш; 
	    Сообщение.date = ТекущаяДата(); 
	    Сообщение.text = "Купите дубленку"; 

	    ПакетСообщений.MessageList.Добавить(Сообщение); 

	    Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "Message")); 

	    Сообщение.number = ш; 
	    Сообщение.date = ТекущаяДата(); 
	    Сообщение.text = "Уран недорого"; 

	    ПакетСообщений.MessageList.Добавить(Сообщение); 

	КонецЦикла; 

	Запись = Новый ЗаписьXML;
	ИмяВрем = ПолучитьИмяВременногоФайла("txt");
	Запись.ОткрытьФайл(ИмяВрем); 
	ФабрикаXDTO.ЗаписатьXML(Запись, ПакетСообщений); 
	Запись.Закрыть();
Показать


При схеме:
Прикрепленные файлы:
serg_zz; POWone; skillhoster; +3 Ответить
42. check2 379 20.02.14 20:45 Сейчас в теме
(35) a-novoselov, у меня и этот не заработал.
ФабрикаXDTO.Тип("urn:my-company/cms","Package") возвращает Неопределено.
1С:Предприятие 8.2 (8.2.18.82)
43. check2 379 20.02.14 22:13 Сейчас в теме
(35) a-novoselov, Надо бы ещё отметить, что всё это работает, только если вы не на клиенте управляемой формы. В обычной форме или на сервере всё идёт на ура. Именно по этому у меня не работало и возвращало Неопределено.
38. MakcTLT63 5 18.11.13 14:02 Сейчас в теме
39. mumilkin 24.11.13 15:47 Сейчас в теме
А теперь, следите за руками!

Огромное спасибо за описание этого бага/фичи!!!
40. Evil Beaver 8243 24.11.13 18:31 Сейчас в теме
(39) mumilkin, не за что. Хотя это не баг. Это логичное поведение, если помнить, что объекты должны быть выстроены в единый граф. Один и тот же объект не может находиться в двух узлах дерева XML одновременно.
41. lesenoklenok 35 10.02.14 09:59 Сейчас в теме
Спасибо за интересный материал.
44. zakov 03.04.14 01:55 Сейчас в теме
В БСП в подсистеме "Контактная информация" используется XDTO, можно там глянуть пример необычного варианта использования технологии... Спасибо за статью! Хотелось бы конечно больше практики и отображение результата, но все думаю понимают, что это не вместишь в краткую статью... Статьи прежде всего ценны для изучения фундаментальных основ, все очень доступно...
45. Anton64 192 14.06.14 21:15 Сейчас в теме
Спасибо за статью. Представленный код, к сожалению, у меня не заработал. После некоторых исследований получилось следующим образом:
ПространствоИмен = "url:my-company";
	ТипОбъекта =  ФабрикаXDTO.Тип(ПространствоИмен, "MessagePackage");
	ПакетСообщений = ФабрикаXDTO.Создать(ТипОбъекта); 
	
//Сообщения - это табличная часть обработки
	Для Каждого Адресат Из Сообщения Цикл 
		
		Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("url:my-company","Message")); 
		
		Сообщение.number = Адресат.НомерСтроки; 
		Сообщение.date = ТекущаяДата(); 
		Сообщение.__content = Адресат.ТекстСообщения; 
		
		ПакетСообщений.Message.Добавить(Сообщение); 
		
	КонецЦикла; 
Показать


Я так понял, что в пространстве имен, если это не http, не должно быть слэшей. ФабрикаXDTO.Тип и ФабрикаXDTO.Создать неправильно стоят запятые в статье. В ПакетСообщений надо указывать куда добавляешь, т.е. Message.
46. ::Green:: 52 06.08.14 15:33 Сейчас в теме
Опечатки в статье:
1)
Есть:
ПакетСообщений = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms"),"MessagePackage");

Надо:
ПакетСообщений = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms","MessagePackage"));

2)
Есть:
Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms"),"Message");

Надо:
Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms","Message"));

3)
Есть:
ПакетСообщений.Добавить(Сообщение);

Надо:
ПакетСообщений.Message.Добавить(Сообщение);


Результат в части "А теперь следите за руками!" дал совсем другой результат от описанного автором:

Код: (привязан по событию к кнопке)
Процедура КнопкаСпамНажатие(Элемент)
	
	ПакетСообщений = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "MessagePackage"));
	
	Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "Message"));
	Сообщение.number = 1;
	Сообщение.date = ТекущаяДата();
	Сообщение.__content = "Первая строка";
	ПакетСообщений.Message.Добавить(Сообщение);
	
	//Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "Message"));
	Сообщение.number = 2;
	Сообщение.date = ТекущаяДата();
	Сообщение.__content = "Вторая строка";
	ПакетСообщений.Message.Добавить(Сообщение);
	
	//Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "Message"));
	Сообщение.number = 3;
	Сообщение.date = ТекущаяДата();
	Сообщение.__content = "Третья строка";
	ПакетСообщений.Message.Добавить(Сообщение);

	Запись = Новый ЗаписьXML;
	Запись.ОткрытьФайл("C:\test2.xml");
	ФабрикаXDTO.ЗаписатьXML(Запись, ПакетСообщений);
	Запись.Закрыть();
	
КонецПроцедуры
Показать


Результат: (файл C:\test2.xml)

MessagePackage xmlns="urn:my-company/cms" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Message number="3" date="2014-08-06T19:34:41">Третья строка</Message>
<Message number="3" date="2014-08-06T19:34:41">Третья строка</Message>
<Message number="3" date="2014-08-06T19:34:41">Третья строка</Message>
</MessagePackage>
serg_zz; kos_47; Gavri1a; pa_dima; naumenko_alex; Armaggik; Brook; Vladimir Litvinenko; andy23; +9 Ответить
48. sanfoto 502 30.10.14 06:22 Сейчас в теме
(46) ::Green::,
насколько я понял ниже описанную строку надо добавлять ПЕРЕД КАЖДЫМ СООБЩЕНИЕМ!!
Сообщение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("urn:my-company/cms", "Message"));
59. crosby 280 11.08.15 16:14 Сейчас в теме
(46) ::Green::, зачем же Вы в исходном коде закомментировали строки создание объектов типа "message"? Вот у вас и лезет везде только последнее сообщение, о чем как раз автор и говорил! ))
47. sanfoto 502 29.10.14 14:05 Сейчас в теме
(0)
Message.__content ------- блин у меня не прокатывает,

.....................
			МояФабрикаXDTO = СоздатьФабрикуXDTO(ИмяФайлаСхемы); 
			СтруктурныйТип_XDTO = МояФабрикаXDTO.Тип("Order_Kontur_EDI","eDIMessage");
			ФайлXML = МояФабрикаXDTO.ПрочитатьXML(ЧтениеXML,СтруктурныйТип_XDTO);

ФайлXML----- все почти корретно... но нету блин .__content


пс:
Кстати XSD файл схемы удобно создавать АВТОМАТИЧЕСКИ файликом от MS VisualStudio - xsd.exe
49. sanfoto 502 30.10.14 07:54 Сейчас в теме
(47) sanfoto,
хм Ошибочка у меня вышла... я сформировал файликом от VisualStudio ... схему и загрузил в 1С,
но не обратил внимание что НЕТУ ТИПОВ, а есть только СВОЙСТВА))
ИСПРАВИЛ это дело .. добавил ТИПЫ.... теперь не создается объект ((((

{Форма.Форма.Форма(84)}: Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XDTO:
Чтение объекта типа: {Order_Kontur_EDI}eDIMessage - [13,12]
Проверка дополнительного свойства:
форма: Элемент
имя: interchangeHeader: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {Order_Kontur_EDI}eDIMessage
50. Evil Beaver 8243 30.10.14 22:35 Сейчас в теме
(49) sanfoto, что я могу сказать: пилите, Шура, пилите) Ошибка "структура не соответствует типу" означает нарушение схемы XML. Примерно где-то в строке 13 файла XML, но это ориентировочная цифра, не всегда может быть точной. Файлы посмотреть ваши сейчас совсем времени нет. Покопайте, там полюбому где-то мелкая ошибка.
51. sanfoto 502 31.10.14 08:48 Сейчас в теме
(50)

ладно зайдем с другого конца.... )))
ФайлXML=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)


читает файл и создает объект.... (есно не совсем корректно,
<requestedQuantity unitOfMeasure="PCE">2.000</requestedQuantity>
Выделенное красным в Прочитанном объекте...отсутствует напрочь.... остальное верно все. )
вопрос:
Можно как ни-буть выдрать схему(для ФибрикиXDTO) из "ФайлXML=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)" ?
52. sanfoto 502 31.10.14 09:29 Сейчас в теме
(51)

пока получилось только путем изменения исходной строки... но это считаю неверным путем))
<requestedQuantity unitOfMeasure="PCE">2.000</requestedQuantity>
/// меняем на понятную для 1с
<requestedQuantity> <unitOfMeasure>"PCE"</unitOfMeasure> <body>2.000</body> </requestedQuantity>
53. sanfoto 502 31.10.14 15:32 Сейчас в теме
(50)
я понял наконец то))), что в ПакетXDTO надо навставлять НУЖНЫЕ "Директивы импорта"- для проставки НУЖНЫХ типов (например добавил "http://v8.1c.ru/8.1/data/core")
--------------------
{Форма.Форма1.Форма(79)}: Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XDTO:
Чтение объекта типа: {Order_Kontur_EDI}eDIMessage - [13,12]
Проверка свойства 'id':
форма: Атрибут
имя: id
тип: {http://v8.1c.ru/8.1/data/core}LocalStringItemType: Ошибка преобразования данных XDTO:
Значение: ecf486b0-0614-4b83-9fde-5947ce407b06 Тип: {http://v8.1c.ru/8.1/data/core}LocalStringItemType - [13,12]


наконец то хоть что-то прочиталось используя схему МоегоПакетаXDTO.... хоть и вылетело в ошибку.. но прочитало!!!! )))
54. sanfoto 502 03.11.14 10:29 Сейчас в теме
(0)
короче ну их нафиг эти схемы... несколько дней попыток и я плюнул))
прочитал недостающие значения в массив из ЧтениеXML, а остальное нормально и в "ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)"

			ЧтениеXML. ОткрытьФайл(ИмяФайла);
//////////////+ т.к. ОдинЦе не читало в ФабрикеXDTO значения	"requestedQuantity"		
			requestedQuantity = Новый Массив;
			Пока ЧтениеXML.Прочитать() Цикл
				Если ЧтениеXML.Имя  = "requestedQuantity" Тогда
					ЧтениеXML.Прочитать();
					requestedQuantity.Добавить(ЧтениеXML.Значение);
					ЧтениеXML.Прочитать();
				КонецЕсли;
			КонецЦикла;
//////////////- т.к. ОдинЦе не читало в ФабрикеXDTO значения	"requestedQuantity"		
			 ЧтениеXML. ОткрытьФайл(ИмяФайла);
			 ФайлXML = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML) ;
Показать
55. sanfoto 502 03.12.14 16:57 Сейчас в теме
(54) sanfoto, (0) Evil Beaver

таки я правильно СХЕМЫ делал.... ошибка была не в самой СХЕМЕ))
оказывается надо в ИСХОДНОМ XML в открытие первого тэга ВПИХНУТЬ имя Пространства имен ФабрикиXDTO
УРРА теперь и Тэги читаются Значения "__Content" и могу сам создавать XML файлы)), правда перед записью удалять надо пространство имен))
	СтрокаXML = СтрЗаменить(СтрокаXML, "<eDIMessage", "<eDIMessage xmlns=""RECADV_Kontur"" ");
	ЧтениеXML = Новый  ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаXML);
		
	ТипacceptedQuantity = ФабрикаXDTO.Тип("RECADV_Kontur", "eDIMessage");  
	СвояФабрика = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипacceptedQuantity);


Помогла публикация http://infostart.ru/public/311011/
bgazobeton; +1 Ответить
56. Alexei_fox 47 17.02.15 08:39 Сейчас в теме
Как с помощью XDTO получить вот такую строку в xml ? <Картинка Описание="Описание">путь к картинки относительно xml файла.jpg</Картинка>

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

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

Есть мысли у кого ?
57. Evil Beaver 8243 17.02.15 10:09 Сейчас в теме
(56) Alexei_fox, создаете тип "Картинка", унаследованный от типа xs:string. Данному типу задаете атрибут "Описание".
В XDTO текстовый узел будет называться __content. (перечитайте статью, там как раз это написано)
58. Alexei_fox 47 19.02.15 01:13 Сейчас в теме
(57) Ога - спасибо , разобрался !
60. veiuper 25.11.15 22:18 Сейчас в теме
Благодарю за серию статей.
Может подскажете: как при записи XDTO объекта избавиться от добавления в xml файл атрибутов пространства имен (xmlns, xmlns:xs, xmlns:xsi)?
61. Evil Beaver 8243 27.11.15 09:52 Сейчас в теме
(60) veiuper, никак. Они нужны же. А зачем вам от них избавляться?
62. veiuper 29.11.15 21:30 Сейчас в теме
(61) Делаю выгрузку в госреестры из 1С для медицинских организаций. Теги должны точно соответствовать приказу, а точнее быть без атрибутов. Удалить в принципе не проблема, просто подумал есть свойство которого я не вижу...
63. Evil Beaver 8243 29.11.15 22:02 Сейчас в теме
(62) veiuper, теги не должны мешать чтению XML. Я, конечно, допускаю, что на стороне госорганизации чтение XML делается посимвольно, утилитой, которую писал школьник на делфи, но, скорее всего, там все же промышленный парсер, которому это не мешает.
64. veiuper 02.12.15 00:01 Сейчас в теме
(63) да просто в приказе однозначно сформулирована позиция по этому поводу. При наличии атрибутов при сдаче данного конкретного реестра случаев оказания медицинской помощи не будет пройден первый этап форматно-логического контроля на стороне сервера госорганизации. Скорее всего вы правы, что это не помешает чтению, но позиция однозначная и экспериментировать, а потом "краснеть" не хочется :)
Или сказать по другому - недостаток опыта в сдаче реестров госотчетности и не знание на текущий момент сервисов для "первичного тестирования" выгрузки (если таковые имеются) накладывают подобные ограничения.
65. Hubbitus 18.08.16 11:59 Сейчас в теме
Никак не могу понять, как 1С заставить правильно трактовать предоставленный WSDL, и вместо дефолтных нэймспейсов типа:
                                <m:code>upsert</m:code>
                                <m:context>qwerty</m:context>

делать (пробелы в теге вставлены просто чтобы не слетало форматирование):
                                < code>upsert</code >
                                < context>qwerty</context >

для типов {http://www.w3.org/2001/XMLSchema}string?

Подробный вопрос с WSDL и кодом есть на форуме мисты - http://www.forum.mista.ru/topic.php?id=778870

Буду очень благодарен за ответ.
66. oksana.krokhina 22.02.17 12:19 Сейчас в теме
Добрый день! Есть xml-схема,файл (во вложении). Схему импортирую в 1с, все ок. В файле могут встречаться элементы такого вида:
<param name="Бренд">Sols</param>
<param name="Размер экрана" unit="дюйм">27</param>

Так вот, сделала также как в вашей статье, но при чтении файла не могу добраться до текстового значения элемента "param" (реквизит "__content"). Получаю только значения атрибутов:

Как получить помимо имя параметра его значение? Т.е. не только "Бренд", но и "Sols"

Заранее спасибо!
Прикрепленные файлы:
XSDIllan.xsd
products.xml
67. AlX0id 11.03.17 10:03 Сейчас в теме
(66)
Полагаю, создать свойство в типе param, у которого поставить форму Текст. Ну если еще сами не разобрались, конечно %)
68. mvxyz 326 09.08.17 22:25 Сейчас в теме
Хорошие статьи. Спасибо автору за работу! Помогли понять основы.
69. rabid_otter 134 24.08.17 15:10 Сейчас в теме
Спасибо за статьи.
Но есть вопрос - если нужно выгружать только ссылку на свойство объекта, а не целый объект. Как это сделать - указывать в типе UID, а выгружать объекты предварительно самому?
70. Evil Beaver 8243 24.08.17 16:41 Сейчас в теме
(69) Раскройте мысль, пожалуйста. Не совсем понятно, что нужно сделать
71. rabid_otter 134 25.08.17 08:38 Сейчас в теме
(70) я сделал свою XDTO-схему, выгрузил номенклатуру, все ок. в выгруженном файле json, в свойствах объекта номенклатуры каждый раз выгружается единица измерения как объект, то есть:

{
"ID": "746283f6-2399-11e7-8516-f832e486c9b0",
"FullPath": "1 (Готовая продукция 43 счет)",
"Code": "00-00007771",
"StockNumber": "КЕ",
"Name": "Котлеты от енота",
"ItemType": "Товар",
"MeasuringUnit": {
"ID": "39e33be4-5d60-11e6-845b-f832e486c9b0",
"Code": "796 ",
"Name": "шт"
},
"WeightUsage": false,
"Weight": "0",
"VolumeUsage": false,
"Volume": "0",
"Individual": false,
"Dimensions": {
"ID": "751c4471-9eb7-11e5-8e4a-0016e6d8441f",
"Code": "000001161",
"Name": "200x200 мм",
"FirstDimension": "200",
"SecondDimension": "200"
},
"BasicMaterial": {
"ID": "39e9aa37-73fc-11e6-8473-f832e486c9b0",
"Code": "000000012",
"Name": "Мясо",
"FullName": "Мясо"
}
}

а надо

{
"ID": "746283f6-2399-11e7-8516-f832e486c9b0",
"FullPath": "1 (Готовая продукция 43 счет)",
"Code": "00-00007771",
"StockNumber": "КЕ",
"Name": "Котлеты от енота",
"ItemType": "Товар",
"MeasuringUnit": "39e33be4-5d60-11e6-845b-f832e486c9b0",
"WeightUsage": false,
"Weight": "0",
"VolumeUsage": false,
"Volume": "0",
"Individual": false,
"Dimensions": "751c4471-9eb7-11e5-8e4a-0016e6d8441f",
"BasicMaterial": "39e9aa37-73fc-11e6-8473-f832e486c9b0"
}
72. Evil Beaver 8243 28.08.17 17:10 Сейчас в теме
JSON-воплощение XDTO я не пробовал ни разу. Весьма вероятно там есть и ошибки, и какие-то неизвестные мне параметры.

Навскидку предположу, что вы сериализуете не ЕдиницаИзмеренияСсылка, а ЕдиницаИзмеренияОбъект.
73. rabid_otter 134 06.09.17 15:31 Сейчас в теме
(72) сериализую объект XDTO, то есть создаю объект XDTO "ЕдиницаИзмерения", заполняю, и присваиваю в поле объекта "Номенклатура", полученный результат выгружаю в JSON. а ссылку во что вывести, в 36-символьную строку? так надо до этого выгрузить объект чтобы найти его по ссылке.
74. Evil Beaver 8243 07.09.17 16:16 Сейчас в теме
(73)шта?? Можно кусок кода?
75. websamson 307 15.12.17 05:46 Сейчас в теме
Приведенный пример кода у меня не заработал. Сделал так:
	
        ТипПакетСообщений = ФабрикаXDTO.Тип("urn:my-company/cms", "MessagePackage");
	ПакетСообщений = ФабрикаXDTO.Создать(ТипПакетСообщений);
	
	СообщениеТип = ФабрикаXDTO.Тип("urn:my-company/cms", "Message");
	
	лСообщение = ФабрикаXDTO.Создать(СообщениеТип);
	лСообщение.number = "111";
	лСообщение.date = ТекущаяДата();
	лСообщение.__content = "тест 111";
	ПакетСообщений.Message.Добавить(лСообщение);
	
	лСообщение = ФабрикаXDTO.Создать(СообщениеТип);
	лСообщение.number = "222";
	лСообщение.date = ТекущаяДата();
	лСообщение.__content = "тест 222";
	ПакетСообщений.Message.Добавить(лСообщение);
	
	ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
	МойXML = Новый ЗаписьXML;
	ИмяФайла = "G:\1CBases\XDTO\out.xml";
	МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML);
	МойXML.ЗаписатьОбъявлениеXML();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ПакетСообщений);
	МойXML.Закрыть();
Показать
76. Evil Beaver 8243 15.12.17 11:22 Сейчас в теме
Приведенный пример кода у меня не заработал

А как именно он у вас не заработал? Разверзлась геена, вышел сотона и зохавал компьютер?
77. websamson 307 18.12.17 03:47 Сейчас в теме
(76)
А как именно он у вас не заработал?

Неверный синтаксис:
ПакетСообщений.Добавить(Сообщение);

а должно быть
ПакетСообщений.Message.Добавить(Сообщение);
78. Evil Beaver 8243 18.12.17 12:22 Сейчас в теме
79. dimasts 22 01.04.18 21:15 Сейчас в теме
Не могу понять, как заставить фабрику прочитать значение из строки:
<Контрагент xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CatalogRef.Контрагенты">3722b978-d17a-11e5-89f0-001fc663b5b0</Контрагент>

Все объекты без проблем читаются методом = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)
и только контрагент имеет один атрибут type со значением CatalogRef.Контрагенты, куда девается ссылка?

Пакеты xdto вообще не использую, так как все объекты нормально читаются, но походу надо создать маленький пакет специально для этой строки.

Подскажите пожалуйста, как должен выглядеть этот микро-пакет или надо всё-таки создавать огромный пакет для всех объектов?
80. dimasts 22 01.04.18 21:30 Сейчас в теме
Вот так выглядит объект присланный из 1С:Буха


<DocumentObject.СписаниеСРасчетногоСчета>
<Ref>e281bb39-ae5c-11e7-800a-001fc663b5b0</Ref>
<DeletionMark>false</DeletionMark>
<Date>2017-09-01T12:00:00</Date>
<Number>0000-000073</Number>
<Posted>true</Posted>
<ВидОперации>ОплатаПоставщику</ВидОперации>
<Налог>00000000-0000-0000-0000-000000000000</Налог>
<ВидНалоговогоОбязательства>Налог</ВидНалоговогоОбязательств­а>
<Организация>18c3a136-79e7-11e2-a885-001e5848397d</Организация>
<СчетОрганизации>eda21e5a-c5f8-11e6-80ac-001fc663b5b0</СчетОрганизации>
<ПодразделениеОрганизации>00000000-0000-0000-0000-000000000000</ПодразделениеОрганизации>
<СчетБанк>720e525d-1a5e-4857-b82b-610d225f372a</СчетБанк>
<НомерВходящегоДокумента>56</НомерВходящегоДокумента>
<ДатаВходящегоДокумента>2017-09-01T00:00:00</ДатаВходящегоДокумента>
<Контрагент xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CatalogRef.Контрагенты">3722b978-d17a-11e5-89f0-001fc663b5b0</Контрагент>
<СчетКонтрагента>3722b977-d17a-11e5-89f0-001fc663b5b0</СчетКонтрагента>
<СуммаДокумента>3246</СуммаДокумента>
<СчетУчетаРасчетовСКонтрагентом>00000000-0000-0000-0000-000000000000</СчетУчетаРасчетовСКонтрагентом>
<СубконтоДт1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<СубконтоДт2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<СубконтоДт3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<ПодразделениеДт>00000000-0000-0000-0000-000000000000</ПодразделениеДт>
<СтатьяДвиженияДенежныхСредств>00000000-0000-0000-0000-000000000000</СтатьяДвиженияДенежныхСредств>
<УдалитьФизЛицо>00000000-0000-0000-0000-000000000000</УдалитьФизЛицо>
<НазначениеПлатежа>Оплата услуг аренды по договору №06 - электроэнергия за март-июль 2017 г. НДС не облагается</НазначениеПлатежа>
<Ответственный>cddb4819-e96e-11e4-9fea-6cf0496ec16c</Ответственный>
<Комментарий>Загружен из Клиент-Банка</Комментарий>
<ДокументОснование xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<ДоговорКонтрагента>3722b979-d17a-11e5-89f0-001fc663b5b0</ДоговорКонтрагента>
<ВалютаДокумента>11ed985f-79e7-11e2-a885-001e5848397d</ВалютаДокумента>
<Содержание_УСН>Оплата поставщику.</Содержание_УСН>
<Графа4_УСН>0</Графа4_УСН>
<Графа5_УСН>0</Графа5_УСН>
<Графа6_УСН>0</Графа6_УСН>
<Графа7_УСН>0</Графа7_УСН>
<ДоходыЕНВД_УСН>false</ДоходыЕНВД_УСН>
<РасходыЕНВД_УСН>false</РасходыЕНВД_УСН>
<НДС_УСН>0</НДС_УСН>
<УдалитьРучнаяНастройка_УСН>false</УдалитьРучнаяНастройка_УС­Н>
<РучнаяКорректировка>false</РучнаяКорректировка>
<НеПодтвержденоВыпискойБанка>false</НеПодтвержденоВыпискойБа­нка>
<НалоговыйПериод>0001-01-01T00:00:00</НалоговыйПериод>
<ПлатежнаяВедомость xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<РегистрацияВНалоговомОргане>00000000-0000-0000-0000-000000000000</РегистрацияВНалоговомОргане>
<Налогоплательщик>00000000-0000-0000-0000-000000000000</Налогоплательщик>
<РасшифровкаПлатежа>
<Row>
<ДоговорКонтрагента>3722b979-d17a-11e5-89f0-001fc663b5b0</ДоговорКонтрагента>
<СпособПогашенияЗадолженности>Автоматически</СпособПогашения­Задолженности>
<Сделка xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<СуммаПлатежа>3246</СуммаПлатежа>
<КурсВзаиморасчетов>1</КурсВзаиморасчетов>
<СуммаВзаиморасчетов>3246</СуммаВзаиморасчетов>
<СтавкаНДС>БезНДС</СтавкаНДС>
<СуммаНДС>0</СуммаНДС>
<СтатьяДвиженияДенежныхСредств>00000000-0000-0000-0000-000000000000</СтатьяДвиженияДенежныхСредств>
<СчетУчетаРасчетовСКонтрагентом>a2912351-d8b0-4471-8bb7-faa192adf582</СчетУчетаРасчетовСКонтрагентом>
<СчетУчетаРасчетовПоАвансам>821358d4-6d13-40c0-aa96-a1a619a1f966</СчетУчетаРасчетовПоАвансам>
<КратностьВзаиморасчетов>1</КратностьВзаиморасчетов>
<РасходыУСН>0</РасходыУСН>
<НДСУСН>0</НДСУСН>
<РаспределятьРасходыУСН>false</РаспределятьРасходыУСН>
<СчетНаОплату>00000000-0000-0000-0000-000000000000</СчетНаОплату>
<ВидПлатежаПоКредитамЗаймам/>
</Row>
</РасшифровкаПлатежа>
<ПеречислениеЗаработнойПлаты/>
<РеквизитыКонтрагента>
<Row>
<Реквизит>Идентификатор</Реквизит>
<Значение>TXID526001672549</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>Идентификатор</Реквизит>
<Значение>BBAN40802810803000004151/042202803</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>НаименованиеРасширен</Реквизит>
<Значение>ИП Туманов Евгений Дмитриевич</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>КПП</Реквизит>
<Значение/>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>НаименованиеДетально</Реквизит>
<Значение>ИП Туманов Евгений Дмитриевич</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>БИК</Реквизит>
<Значение>042202803</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>КорСчет</Реквизит>
<Значение>30101810700000000803</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>Банк</Реквизит>
<Значение>ПРИВОЛЖСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК"</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>РасчСчет</Реквизит>
<Значение>40802810803000004151</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
<Row>
<Реквизит>Наименование</Реквизит>
<Значение>ИП Туманов Евгений Дмитриевич</Значение>
<Представление/>
<ТипКонтрагента/>
</Row>
</РеквизитыКонтрагента>
<ПеречислениеДепонентов/>
<ПеречислениеНДФЛ/>
<НалоговыйАгентНДС/>
</DocumentObject.СписаниеСРасчетногоСчета>
81. Evil Beaver 8243 04.04.18 18:44 Сейчас в теме
(79) Пакет создавать необязательно. Более того, такой XML лучше считывать глобальным методом ПрочитатьXML, а не фабрикой.
82. dimasts 22 04.04.18 22:23 Сейчас в теме
(81) У меня объекты по другому именуются, по-этому ПрочитатьXML не подойдет. Всё удалось прочитать, но остался один вопрос для шлифовки навыка так сказать: Ссылка на форум
Если есть предложения буду благодарен
83. su_mai 90 28.05.18 15:38 Сейчас в теме
Лучше поздно чем никогда... Андрей, надо не "кракозябла", а "кракозябра"... :)
84. su_mai 90 28.05.18 15:46 Сейчас в теме
Очепятка...
Теперь элемент Message может повторяться более в пакете более 1 раза.
В XDTO такой элемнет будет не просто свойством, а СпискомXDTO.
85. maxim33 31.07.18 12:10 Сейчас в теме
В файле прикреплен ТипОбъекта, этот тип у свойства kind другого ТипаОбъекта. Тип "Смешанный". Как этому типу установить Текст, свойство с формой ФормаXML.Текст отсутствует у этого типа. Нужно заполнить этот параметр для вызова web сервиса. Т.е. в запросе должно выглядеть вот так:
<xdms:kind >Письмо подразделения</xdms:kind>
Как возможно добиться этого?
Прикрепленные файлы:
86. redtram 53 23.08.18 09:50 Сейчас в теме
Комрады, измаялся весь, не могу создать схему XDTO годную.

Задача: преобразовать JSON в xdto с помощью ФабрикаXDTO.ПрочитатьJSON.
Как в схеме XDTO описать массивы JSON вида:
[
{
"offices": [
      "8340", "8341" 
    ]
}
]

(тут проблема с тем что внутри массива просто SimpleType неименованный)
и
"deliveryAddress": {
      "": null
    }

(тут проблема с тем что имени у элемента ComlexType-а нет :( )
87. koln 17.12.18 16:15 Сейчас в теме
Сложновато для понимания с наскока, но хоть что-то проясняется. Спасибо за статью.
88. vlhown 11.04.19 11:28 Сейчас в теме
Столкнулся с тем, что если в схеме есть поля с дефолтными или фиксированными значениями, то при создании XDTO-объекта они прекрасно создаются, а при записи этого объекта в XML выкидываются.
Никто не знает, как лечить?
89. stentor123 20.10.19 18:31 Сейчас в теме
Как правильно задать в фабрике XDTO подобный тип объекта? Кто-то сталкивался. Элемент с атрибутами.
<error code="124">Неправильный номер телефона: +7999999999999</error>
90. Evil Beaver 8243 21.10.19 10:24 Сейчас в теме
(89) тип ErrorMessage или какое угодно другое имя. Внутри свойство code с типом string и представлением "Атрибут". Далее свойство "message" с типом string и преставлением "Текст"

Все, тип готов. Осталось разместить его в элемент с именем error и указанный кусок XML будет готов.
91. plpt 28.01.20 18:23 Сейчас в теме
отличная серия статей
92. user649917_romanrc 06.02.20 17:00 Сейчас в теме
Автор, спасибо огромное за труд, очень помогли статьи в освоении работы с фабрикой XDTO. Сейчас делаю выгрузку по заданной схеме XSD и зашел в тупик. Прошу помочь новичку, где ошибаюсь. Мне нужно чтобы было так:

<?xml version="1.0" encoding="UTF-8"?>
<JobOrders>
<JobOrder>
<Number xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">09/2017</Number>
</JobOrder>
...............................
<JobOrders>

Но сейчас получается так:
<?xml version="1.0" encoding="UTF-8"?>
<JobOrders>
<JobOrder>
<Number xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<string>А000000009</string>
</Number>
</JobOrder>
..........................
</JobOrders>
93. user649917_romanrc 06.02.20 17:18 Сейчас в теме
Вот текст кода:

ИмяФайла = "D:\Temp\joborders.xml"; 
	ЗаписьXML = Новый ЗаписьXML; 
	ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); 
	ЗаписьXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML); 
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьНачалоЭлемента("JobOrders");
	/////////////
	//запрос
	////////////
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		ЗаписьXML.ЗаписатьНачалоЭлемента("JobOrder");
		ТипДокЗН          = ФабрикаXDTO.Тип("http://1c.kamaz.ru/zakaz", "JobOrder");
		ДокЗН = ФабрикаXDTO.Создать(ТипДокЗН);
		ДокЗН.Number = Выборка.Номер;
		ЗаписьXML.ЗаписатьНачалоЭлемента("Number");
		ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
		ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs","http://www.w3.org/2001/XMLSchema");
		
		ЗаписатьXML(ЗаписьXML, ДокЗН.Number,,"http://1c.kamaz.ru/zakaz", НазначениеТипаXML.Явное);

		ЗаписьXML.ЗаписатьКонецЭлемента();
		ЗаписьXML.ЗаписатьКонецЭлемента();
	КонецЦикла;

	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();
Показать
94. user649917_romanrc 06.02.20 17:29 Сейчас в теме
Если записываю фабрикой, получаю следующее:
<?xml version="1.0" encoding="UTF-8"?>
<JobOrders>
<JobOrder>
<JobOrder xsi:type="JobOrder" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://1c.kamaz.ru/zakaz">
<Number>А000000009</Number>
</JobOrder>
</JobOrder>
</JobOrders>

Т.е. тогда у меня не получается, чтобы родительский элемент <JobOrder> выводился без указания типа и пространства имен, а в самом элементе "Number" нужно и то и другое.
95. MaCCapAkIII 26.08.20 19:48 Сейчас в теме
Здравствуйте

&НаКлиенте
Процедура Работай(Команда)
	ИмяФайла = "e:\cloud\YandexDisk\main\freelance\ХХХХ\b.1043\test.xml";
	ОбъектXDTO = РаботайНаСервере();
	ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML);
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьБезОбработки(ОбъектXDTO);
КонецПроцедуры

&НаСервереБезКонтекста
Функция РаботайНаСервере()
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	
	МагазинXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("ВыгрузкаТоваров", "Магазин"));
	МагазинXDTO.МагазинНаименование = СериализаторXDTO.XMLСтрока(Справочники.Склады.НайтиПоНаименованию("Склад ""ГРЕЦИЯ"""));
	МагазинXDTO.МагазинАдрес = XMLСтрока("Проспект Орджоникидзе 123");
	
	СписокТоваровXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("ВыгрузкаТоваров", "ТоварыНабор"));
	
	ТоварXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("ВыгрузкаТоваров", "Товар"));
	ТоварXDTO.ТоварУИД = СериализаторXDTO.XMLСтрока(Справочники.Номенклатура.НайтиПоКоду("ГР-00016757"));
	ТоварXDTO.ТоварНаименование = Справочники.Номенклатура.НайтиПоКоду("ГР-00016757").Наименование;
	
	СписокТоваровXDTO.Товар.Добавить(ТоварXDTO);
	
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, СписокТоваровXDTO);
	
	//ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, МагазинXDTO);
	
	Возврат ЗаписьXML.Закрыть();
КонецФункции
Показать


Схема



Схема она же:

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio Developer Edition 9.0.11.3078 (http://www.liquid-technologies.com)-->;
<xs:schema elementFormDefault="qualified" targetNamespace="ВыгрузкаТоваров" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="Магазин">
        <xs:simpleContent>
            <xs:extension base="xs:anySimpleType">
                <xs:attribute name="МагазинНаименование" type="xs:string" />
                <xs:attribute name="МагазинАдрес" type="xs:string" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="Товар">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="ТоварУИД" type="xs:string" />
                <xs:attribute name="ТоварНаименование" type="xs:string" />
                <xs:attribute name="ТоварХарактеристика" type="xs:string" />
                <xs:attribute name="ТоварЕдиницаИзмерения" type="xs:string" />
                <xs:attribute name="ТоварШтрихкод" type="xs:string" />
                <xs:attribute name="ТоварОстаток" type="xs:decimal" />
                <xs:attribute name="ТоварЦена" type="xs:decimal" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="ТоварыНабор">
        <xs:sequence>
            <xs:element xmlns:q1="ВыгрузкаТоваров" name="Товар" type="q1:Товар" minOccurs="0" maxOccurs="unbounded" />
        </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">
<Товар ТоварУИД="553f4203-97de-11e8-adcd-b8975a349484" ТоварНаименование=" Авто смазка TYTAN TL-40(150 мл)"/>
</ТоварыНабор>
96. user1654599 29.08.21 18:42 Сейчас в теме
а что такое свойство request, какому типу данных оно соответствует . Поэтому и выдаётся ошибка.
97. KrakoZyabl 77 08.06.23 14:55 Сейчас в теме
Понятная статья, без лишних прибамбасов .Спасибо!!!
Оставьте свое сообщение