XDTO-пакеты, xml, xml schema

Публикация № 98019

Разработка - Системная интеграция - Обмен через XML

После долгого молчания, вызванного тем, что я сейчас больше читаю, чем пишу (чукча читатель, а не писатель), я решил поделиться с вами небольшим обзором, в котором хочу рассказать о том, что я узнал о XDTO-пакетах и обо всем, что с ними связано.

«ГлоL9;кая куL9;здра штеL9;ко будлануL9;ла боL9;кра и курдяL9;чит бокрёнка»
(первая ассоциация, пришедшая в голову
после прочтения "мана" о XDTO-пакетах)

Приветствую, многоуважаемый all!

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

С чего начинается?..

С чего начинаются XDTO-пакеты для неискушенного разработчика? Для меня они начались с вопроса: "А что это еще за хренотень в дереве метаданных?" И еще я знал, что это что-то про xml. Но мы начнем не с этого. А с объекта ФабрикаXDTO. Как можно догадаться из названия, это фабрика объектов (XDTO расшифровывается как XML Data Transfer Objects).

Небольшое лирическое отступление. Лучше понять, что такое "фабрика объектов", можно из замечательной книги "Приемы объектно-ориентированного проектирования. Паттерны проектирования" в частности, в разделе о шаблоне "Абстрактная фабрика", или "Фабричный метод". Книга, хочу заметить, действительно стоящая, но мозголомная, скорее формата "справочник", а не "учебник". Вдобавок все, что там написано, сложно применимо к 1С. Когда-нибудь я разозлюсь и напишу здоровенную статью о шаблонах (привет, kote!), а то досадно, что некоторые 1С-программистов даже считать не собираются. Инструмент не должен стоять на пути человека к вершинам профессионализма. Но пока не об этом.

Итак, говоря простым языком, фабрика объектов - это некое "устройство", умеющее принять на входе описание объекта и сгенерировать по этому описанию объект определенного типа, "пригодный к употреблению". Или несколько. То есть это в прямом смысле фабрика: загрузили "чертеж", и она пошла штамповать "продукцию" по "чертежу" (для дотошных: "сырье" в этом случае ваше процессорное время, электричество и т.д.).

Тут я просто вынужден послать вас ознакомиться с хорошей статьёй о простых типах в XDTO с диска ИТС. Если бы это было целесообразно, я бы всю ее скопипастил сюда, но зачем? И все же один пример я оттуда возьму. Для наглядности.

Вот так в статье описывается работа с объектом "Структура":

структурныйТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products", "Номенклатура"); 
номенклатура = ФабрикаXDTO.Создать(структурныйТип); 
номенклатура.Наименование = "Ботинки женские"; 
номенклатура.ЗакупочнаяЦена = 1000; 

Для этого примера я бы нарисовал такую диаграмму:

Обратите внимание, что объект "структурныйТип" (т.н. "чертеж") тоже был создан фабрикой, на основании "загадочных" строчек. Рассмотрим, что же это за строчки. Про метод "Тип" объекта "ФабрикаXDTO" синтакс-помощник пишет:

Синтаксис:
Тип(<  URIПространстваИмен>, <  Имя>) 

Возвращаемое значение:
Тип: ТипЗначенияXDTO; ТипОбъектаXDTO; Неопределено. 

Описание:
Получение типа XDTO.

Не слишком информативно. Тем не менее понятно, что на основании какого-то пространства имен и имени типа метод "Тип" создает нам необходимый "чертёж". Про пространства имен можно почитать, например, в статье "Коротко о пространствах имен (XML Namespaces)", или терзайте жужл запросом "xmlns". Вкратце же скажу, что это некая область, в которой вы можете определить свои xml-теги, и они будут означать именно то, что вы в них закладывали при определении. Например, тег < table> в пространстве имен, определяющем HTML-документ, означает описание таблицы, а в вашем собственном он может означать, например, блок описания стола. Чтобы их не путать и нужны пространства имен.

Тут есть очень важный момент, который сначала вводит в заблуждение. Название пространства имен напоминает адрес страницы в интернете, и сразу же хочется посмотреть, что там такое по этому адресу. Так вот. Технически название может быть любым, но разработчики договорились, что все будут использовать в качестве названия пространства имен URL, по которому в интернете находится страница с описанием этого пространства имен, понятным человеку. К тому же так обеспечивается уникальность названий пространств имен, поскольку в интернете не может быть двух страниц с одинаковым адресом. И "ФабрикаXDTO" при генерации типа XDTO, конечно же, не лезет в интернет ни за какими данными. К сожалению, не все соблюдают правило о публикации человеческих описаний (сволочи!), и уж тем более нехорошо использовать адреса на чужих доменах (как в примере). Мало ли какую информацию фирма 1С воткнет со временем на страницу http://www.1c.ru/demos/products. Это может вводить в заблуждение, поэтому в production-коде я настойчиво рекомендую использовать собственные домены и писать описания. Коллеги разработчики, давайте заботиться друг о друге.

Все же XDTO-пакеты

Поскольку мы выяснили, что данные о пространстве имен берутся не из интернета, возникает вполне резонный вопрос: откуда же тогда, черт побери?! И вот тут мы подходим к тому самому разделу "XDTO-пакеты" в дереве метаданных в конфигураторе. Внимательный читатель, наверное, заметил (если еще не забыл после моих лирических отступлений), что в примере мы использовали объект "ФабрикаXDTO", нигде его не создавая. Все верно, в глобальном контексте 1С есть такой объект (я бы сказал "синглтон"), который знает о куче разных пространств имен, уже описанных в конфигураторе и вообще в платформе. То есть для того, чтобы наш пример заработал, нам необходимо создать примерно такой XDTO-пакет:

То есть мы создали тип объекта "Номенклатура", в который добавили два свойства: "Наименование" и "ЗакупочнаяЦена". Обратите внимание, что при создании пакета мы задали ему то пространство имен, которое в дальнейшем будем использовать при создании объекта "структурныйТип". Если вы посмотрите конструктор свойств, то можете увидеть там много интересного. Например, для моего свойства "Наименование" я использовал тип "string (http://www.w3.org/2001/XMLSchema)". Запомните это пространство имен. В нем описаны все базовые типы, которые вы можете использовать в своих объектах, такие как "string", "int" и так далее. После того как мы добавили пакет, объект "ФабрикаXDTO" знает о нашем пространстве имен и описанных в нем типах.

Нужно помнить, что пространства имен, описанные в разделе дерева метаданных "XDTO-пакеты", доступны только на сервере. При попытке обратиться к ним из клиентского кода (так же как и при других ошибках) метод "Тип" вернет "Неопределено". Этот момент несколько раздражает при отладке, мне кажется, что лучше бы оно ругалось чем-нибудь вроде "Тип не найден", но "маємо те, що маємо".

В своих объектах вы можете использовать и собственные типы из вашего пространства имен. Например, давайте добавим единицы измерения:

В качестве типа для свойства "ЕдИзм" я установил тип "ЕдиницаИзмерения (http://www.1c.ru/demos/products1)", просто выбрав его из дерева определенных в конфигурации типов.

А вот код, который создает этот объект:

структурныйТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products1", "Номенклатура1"); 
номенклатура = ФабрикаXDTO.Создать(структурныйТип); 
номенклатура.Наименование = "Ботинки женские"; 
номенклатура.ЗакупочнаяЦена = 1000; 
единицаТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products1", "ЕдиницаИзмерения"); 
единица = ФабрикаXDTO.Создать(единицаТип); единица.Наименование = "шт."; 
единица.Коэффициент = 1.5; 
номенклатура.ЕдИзм = единица; 

Надеюсь, принцип понятен. Можете самостоятельно поиграться со свойствами, типами, объектами и прочим. Там есть куда "потыкать пальцем" и чего попробовать. А я тем временем продолжу.

Сериализировали-сериализировали

Что полезного мы уже можем извлечь из того, что знаем? Во-первых, объекты XDTO прекрасно сериализуются (XML же, как вы помните).

Дополним код вот таким фрагментом:

ИмяФайла = "D:\Temp\struct.xml"; 
МойXML = Новый ЗаписьXML; 
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); 
МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML); 
МойXML.ЗаписатьОбъявлениеXML(); 
ФабрикаXDTO.ЗаписатьXML(МойXML, номенклатура); 
МойXML.Закрыть(); 

На выходе мы получим вот такой файл:

< Номенклатура1 xmlns="http://www.1c.ru/demos/products1" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    < Наименование>Ботинки женские< Наименование> 
    < ЗакупочнаяЦена>1000< ЗакупочнаяЦена>
    < ЕдИзм>
        < Наименование>шт.< Наименование>
        < Коэффициент>1.5< Коэффициент>
    < ЕдИзм>
< Номенклатура1>

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

Но поскольку объекты сериализуются, то они так же замечательно и десериализуются.

Давайте попробуем:

структурныйТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products1", "Номенклатура1"); 
ИмяФайла = "D:\Temp\struct.xml"; 
МойXML = Новый ЧтениеXML; 
МойXML.ОткрытьФайл(ИмяФайла); 
номенклатура = ФабрикаXDTO.ПрочитатьXML(МойXML, структурныйТип); 
МойXML.Закрыть(); 
Сообщить(номенклатура.ЕдИзм.Наименование); 

Вы когда-нибудь разбирали xml-файлы построчно, вылавливая значки "больше"-"меньше" бесконечными "Найти" и "Сред/Лев/Прав"? А пользовались ли вы замечательным объектом "ЧтениеXML" для разбора файла по тегам, которые потом приходилось разгребать вручную в какую-нибудь структуру? Теперь, если у вас правильно описаны XDTO-пакеты и типы в них, вы можете загружать xml сразу в объект и дальше работать с ним как с объектом. На мой взгляд, это замечательно и удобно.

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

Попытка номенклатура = ФабрикаXDTO.ПрочитатьXML(МойXML, структурныйТип); 
Исключение Сообщить(ОписаниеОшибки()); // еще какая-нибудь обработка исключения 
Возврат; 
КонецПопытки; 

Что еще полезного можно получить из XDTO-пакетов? А вот что! Также мы можем очень просто выгружать объекты метаданных. В конфигурации есть пространство имен, в котором есть все типы XDTO присутствующих в конфигурации метаданных.

Добавим справочник "Клиенты", создадим в нем один элемент и напишем такой код:

// Получим объект СпрКлиенты = Справочники.Клиенты; 
Выборка = СпрКлиенты.Выбрать(); 
Пока Выборка.Следующий() Цикл 
КлиентОбъект = Выборка.ПолучитьОбъект(); 
Прервать; 
КонецЦикла; 
// Создадим ОбъектXDTO 
клиентыТип = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Клиенты"); 
клиент = ФабрикаXDTO.Создать(клиентыТип); 
// Заполним ОбъектXDTO и сохраним его 
ЗаполнитьЗначенияСвойств(клиент,КлиентОбъект); 
ИмяФайла = "D:\Temp\сlient.xml"; 
МойXML = Новый ЗаписьXML; 
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); 
МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML); 
МойXML.ЗаписатьОбъявлениеXML(); 
ФабрикаXDTO.ЗаписатьXML(МойXML, клиент); 
МойXML.Закрыть(); 

В первой части кода, там, где мы получаем объект, ничего интересного не происходит, мы просто получаем объект (весьма коряво, надо отметить, но для примера пойдёт).

Зато обратите внимание на пространство имен и имя объекта в строчке, где создается объект "клиентыТип". В пространстве имен "http://v8.1c.ru/8.1/data/enterprise/current-config" должны быть описаны все объекты метаданных конфигурации, в чем вы можете убедиться, если посмотрите его в конструкторе XDTO-пакетов. Дальше уже знакомая процедура - сохранение объекта в XML.

Вот что получилось у меня:

< ?xml version="1.0" encoding="UTF-8" ?> 
< CatalogObject.Клиенты
xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    < Ref>b0fc4df2-0a54-11e1-8797-ac728931524e< /Ref> 
    < DeletionMark>false< /DeletionMark> 
    < Code>000000001< /Code> 
    < Description>Тестовый клиент 1< /Description> 
    < ТипКлиента>непоняно< /ТипКлиента> 
< /CatalogObject.Клиенты>

Как видите, тут есть все реквизиты, включая стандартные ("Наименование", "Код"), а также ссылка ("Ref") и пометка на удаление ("DeletionMark").

Естественно, этот файл также можно загрузить обратно в объект. Код, надеюсь, вы уже можете написать сами.

В помощь юному падавану-сериализатору в 1С есть объект "СериализаторXDTO". Он также представлен как "синглтон", доступный в глобальном контексте, и как отдельный тип. В принципе, строки:

// Создадим ОбъектXDTO 
клиентыТип = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Клиенты"); 
клиент = ФабрикаXDTO.Создать(клиентыТип); 
// Заполним ОбъектXDTO 
ЗаполнитьЗначенияСвойств(клиент,КлиентОбъект); 

можно смело заменить на:

// Создадим ОбъектXDTO и заполним его 
клиент = СериализаторXDTO.ЗаписатьXDTO(КлиентОбъект); 

Код получился короче и работает более корректно. Например, если в справочнике "Клиенты" определены табличные части, то "ЗаполнитьЗначенияСвойств" с их заполнением не справится. А сериализатор - запросто. Теперь, когда (я надеюсь) вы понимаете основные принципы работы XDTO-пакетов, вы запросто разберетесь с тем, что еще можно делать с сериализатором. Да пребудет с вами сила синтакс-помощника. А я продолжу.

XDTO-пакет? Не нужен!

К этому моменту вы, наверное, задаете себе (а заодно и мне) вопрос: "Хорошо, ну вот у меня есть описанный в конфигурации тип в XDTO-пакете, есть xml, и все вроде бы хорошо. А что делать, если мне пришел какой-то новый xml, в другом формате, а я хочу работать с ним как с объектом? Опять конфигуратор открывать и описывать там тип?"

Конечно, без описания типа вам не обойтись. Но конфигуратор для этого не нужен. И тут нужно рассмотреть такую замечательную вещь, как xml schemа. XML-cхема - это как раз и есть описание типа, представленное (внимание!) в формате xml.

Давайте сделаем какой-нибудь небольшой XDTO-пакет, что-нибудь вроде этого:

А теперь нажмите на кнопку "Экспорт XML-схемы..." (выглядит как ящик с листиком бумаги и стрелочкой) и сохраните схему в файл address.xsd

У меня получилось вот что:

    
< xs:schema xmlns:tns="http://www.1c.ru/demos/products2"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.1c.ru/demos/products2"
attributeFormDefault="unqualified" elementFormDefault="qualified">
    < xs:complexType name="КлассификаторАдреса">
        < xs:sequence>
            < xs:element name="Город" type="xs:string"/>
            < xs:element name="Улица" type="xs:string"/>
            < xs:element name="НомерДома" type="xs:int"/>
            < xs:element name="НомерКвартиры" type="xs:int"/>
        < /xs:sequence>
    < /xs:complexType>
< /xs:schema>

Теперь удалите этот пакет из конфигурации, будто его и не было. Попробуем прочитать схему и создать по ней объект.

Вот код, который это делает:

ФайлыXSD = Новый Массив(); 
ФайлыXSD.Добавить("D:\Temp\adderss.xsd"); 
МояФабрикаXDTO = СоздатьФабрикуXDTO(ФайлыXSD); 
адресТип = МояФабрикаXDTO.Тип("http://www.1c.ru/demos/products2", "КлассификаторАдреса"); 
адрес = МояФабрикаXDTO.Создать(адресТип); 
адрес.Город = "Ленинград"; 
адрес.Улица = "3-я улица Строителей"; 
адрес.НомерДома = 25; 
адрес.НомерКвартиры = 12; 
ИмяФайла = "D:\Temp\address.xml"; 
МойXML = Новый ЗаписьXML; 
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); 
МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML); 
МойXML.ЗаписатьОбъявлениеXML(); 
МояФабрикаXDTO.ЗаписатьXML(МойXML, адрес); 
МойXML.Закрыть(); 

Здесь мы для разнообразия не стали использовать глобальный объект "ФабрикаXDTO", а создали собственный функцией "СоздатьФабрикуXDTO". Если вы посмотрите в отладчике на нашу фабрику ("МояФабрикаXDTO"), то увидите, что в коллекции пакетов у нее всего два пакета: "http://www.w3.org/2001/XMLSchema" и "http://www.1c.ru/demos/products2", в отличие от "синглтона" "ФабрикаXDTO", где их существенно больше. В качестве бонуса мы получили то, что этот код может быть полностью исполнен на клиенте, так как не зависит от метаданных конфигурации.

На выходе я получил xml-файл, в который был сериализован мой объект:

< ?xml version="1.0" encoding="UTF-8" ?> 
< КлассификаторАдреса 
xmlns="http://www.1c.ru/demos/products2" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    < Город>Ленинград< /Город> 
    < Улица>3-я улица Строителей< /Улица> 
    < НомерДома>25< /НомерДома> 
    < НомерКвартиры>12< /НомерКвартиры> 
< /КлассификаторАдреса>

Как вы видите, я поработал с объектом и сериализовал его без участия метаданных конфигурации. Таким образом, передавая вместе с xml-файлом также и XML-схему, вы можете быть уверенным, что тот, кто должен его получить, сможет разобраться, что с ним делать, а главное, как.

Пример десериализации приводить не буду, оставляю вам как самостоятельное упражнение.

Напоследок скажу, что можно выгрузить XML-схему всей вашей конфигурации, кликнув правой кнопкой по узлу "XDTO-пакеты". Результат получается поучительный, посмотрите.

Еще: если у вас есть xml-файл, с ним хочется поработать как с объектом, а XML-схему прислать никто не удосужился, вы можете воспользоваться замечательным инструментом xsd.exe из .NET Framework. (У себя я нашел его в папке "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\".) Пользоваться им очень просто: даете ему на вход xml, на выходе получаете xsd. Вообще-то этот xsd не всегда (или вообще никогда?) является файлом сразу же "готовым к употреблению" в 1С, но все равно это существенная помощь в создании XML-схемы.

Как видите, все оказалось достаточно просто.

На этом всё

Несмотря на то что статья оказалась неожиданно длинной, нельзя сказать, что все, что здесь описано, претендует на полноту. Пытливый исследователь XML-мира с легкостью напишет целую книгу по каждому абзацу этого небольшого обзора и еще ворох по тому, о чем здесь не сказано. Например, о том, что "вся эта кухня" тесно связана с web-сервисами. Тема обширна, так что дерзайте. Также я могу в чем-то заблуждаться, поэтому пишите комментарии - буду исправлять. Давайте учиться вместе.

А я желаю вам хорошего дня и хорошего кода. До новых встреч.

Прилагаю к статье dt-шник с примерами.

 

UPD.: Добавлено небольшое дополнение "XDTO-пакеты. Неименованные типы".

UPD.2: На инфостарте появились еще две прекрасные статьи об XDTO, так что если что-то не понятно из моей, обязательно посмотрите их: XDTO - это просто и XDTO - это просто, часть 2

Оригинал статьи в блоге автора

Скачать файлы

Наименование Файл Версия Размер
xdto_packets.zip

.zip 16,70Kb
13.01.13
326
.zip 16,70Kb 326 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Йожкин Кот 1081 12.11.11 01:10 Сейчас в теме
Спасибо! Все ясно и толково описано!
2. Armando 1393 12.11.11 01:34 Сейчас в теме
3. KliMich 12.11.11 02:52 Сейчас в теме
4. sytkosa 12.11.11 03:44 Сейчас в теме
А как быть когда к XML хранится и схема данных и сами данные? Как с таким XML работать? Самый простой пример таких файлов - файлы обменов XML
8. zfilin 2191 12.11.11 16:32 Сейчас в теме
Спасибо за положительные отзывы, это вдохновляет писать еще.

(4) К сожалению, вот так сразу я не отвечу на этот вопрос. Самый очевидный ответ - разбирать на части, но может быть там есть какие-то хитрости или готовые объекты/шаблоны к разбору? Не знаю. У меня в планах есть (тс-с, никому ни слова!) написать продолжение к этой статье, с углублением в подробности, может быть ответ сам "всплывет" там? Вообщем, следите за обновлениями.

(7) Всему свое время. Может быть и до них дойдет. А, с другой стороны, почему бы вам самому не сделать этого? А мы с удовольствием почитаем. =)
9. stoptime 313 13.11.11 01:44 Сейчас в теме
(8)
Огромное Вам спасибо, несколько раз подходил к этой теме и после первой попытки оставлял, не пробился через нечеловеческий язык описания предмета. После прочтения статьи появилась ясность в мыслях.
19. Evg-Lylyk 3089 14.11.11 11:45 Сейчас в теме
(8) Отличная статья 100+. Крайне полезная, отлично уловили про трудности с XML, после прочтения статьи буду делать по нормальному, спасибо.
5. владимирп 25 12.11.11 09:53 Сейчас в теме
Все доходчиво и понятно. Когда первый раз увидел объект XDTO возникла такая же ассоциация: Что это за зверь такой? Спасибо автору
6. kuntashov 415 12.11.11 12:19 Сейчас в теме
Отличная публикация! Must read для всех 1С:Специалистов.

p.s.
Новичкам начинать разбираться с шаблонами проектирования рекомендую не с "Приемы объектно-ориентированного проектирования. Паттерны проектирования", а с отличной "Head First Design Patterns".
7. UncleVader 128 12.11.11 13:43 Сейчас в теме
Еслиб также еще по вэб-сервисам пройтись...
10. shamant 4 13.11.11 12:19 Сейчас в теме
Большое спасибо, статейка получилась довольно интиресной и подталкивающей дальше разбираться с XML )

п.с.

А по вэб-сервисам пройтись действительно не помишало бы...
kuzyara; Мах; +2 Ответить
11. AlexanderAndreev 13.11.11 17:24 Сейчас в теме
12. vladshnurkoff 82 14.11.11 00:01 Сейчас в теме
Молодец, толково расписал! Спасибо!
13. Oleg_nsk 14.11.11 06:52 Сейчас в теме
Спасибо! Хоть кто-то нормальный языком объяснил что такое XDTO.
14. German 874 14.11.11 09:29 Сейчас в теме
Мне понравился ваш стиль изложения. Браво.
Очень ненавящево и хочется дочитать есть моменты для улыбки, странно что в вашем блоге такие статьи редкость, но все равно подписался
18. zfilin 2191 14.11.11 11:15 Сейчас в теме
Спасибо, как говорят стэндап-комики, "вы отличная публика".

(14) Благодарю. Увы, не всегда есть время писать статьи, потому и редкость.
15. malutin 14.11.11 09:50 Сейчас в теме
16. UginI 14.11.11 10:13 Сейчас в теме
17. iov 409 14.11.11 10:55 Сейчас в теме
(0) Браво... Талантливо преподнесено. Браво.
20. matrix2 14.11.11 12:06 Сейчас в теме
Спасибо за толковую статью. Совсем недавно надо было сделать веб-сервис и столкнулся с проблемой очень скудной документации по этой теме, благо хоть была демо конфигурация с примерами....
21. max082 14.11.11 13:37 Сейчас в теме
Я как раз в данный момент читаю "Технологии интеграции" Хрусталевой. Нормальная книга, но вот конкретно про XDTO там написано мало :( Так что спасибо автору за своевременную статью. Написано достаточно подробно и самое главное доступно
22. FLYYY1986 15.11.11 09:57 Сейчас в теме
Спасибо большое, очень понятно и доступно, будем юзать.
23. AAndryA 15.11.11 14:09 Сейчас в теме
Статья отличная, доходчиво и понятно, спасибо автору !
24. GreenFox 15.11.11 15:29 Сейчас в теме
Статья хорошая, о вот интересно кто нибудь использует этого зверя на практике в рабочих конфигурациях, а не просто примеры разобрали и все?
25. kuntashov 415 15.11.11 16:21 Сейчас в теме
(24) При использовании Web-сервисов не получится не использовать XDTO.

А не используют их в большей степени из-за того, что многим проще изобрести свой велосипед свой способ сериализации объектов в XML.

Благодаря автору статьи, очень надеюсь, таких будет еще немного меньше.
31. bulpi 177 16.11.11 17:24 Сейчас в теме
(25)
"При использовании Web-сервисов не получится не использовать XDTO"

Это не соответствует действительности. Не вводите народ в заблуждение.
37. kuntashov 415 17.11.11 07:43 Сейчас в теме
38. bulpi 177 17.11.11 13:34 Сейчас в теме
(37)
А чего тут пояснять? При использовании web-сервисов не обязательно использовать XDTO. Этой ветки в конфигураторе могло вообще не быть, и тем не менее веб-сервис работал бы.
39. kuntashov 415 17.11.11 13:46 Сейчас в теме
(38) Все равно не понятно, что вы имеете в виду. С простыми типами все понятно, а с объектами чуть посложнее как быть? Сериализовать вручную?
26. sipoju 15.11.11 17:50 Сейчас в теме
Статья отличная!
Надеюсь на такую же статью по Web-сервисам!
27. KliMich 16.11.11 02:15 Сейчас в теме
Статья отличная!
Раньше этого зверя обходил стороной...
Теперь постараюсь разобраться.
28. hotey 37 16.11.11 05:21 Сейчас в теме
Спасибо! Хороший материал.
29. vec435 15 16.11.11 09:04 Сейчас в теме
спасибо.все понятно,хотя читал мимоходом
30. ZLENKO 16.11.11 12:47 Сейчас в теме
Эх! Если бы мне эту статью год назад... А то я все волосы на голове вырвал пока написал обмен документами между 1С: Розница и 1С: Управление производственным предприятием через XDTO :-)
Не понимаю почему сама 1С не использует эту технологию для обмена. Сериализация больших объектов (например документы с десятками тысяч строк) происходит практически мгновенно, десериализация тоже очень быстрая.
42. gaglo 18.11.11 14:32 Сейчас в теме
Статья (и с дополнением) очень доступно описывает саму XDTO-технологию. Но чего, по-моему, не хватает в ней - так это обрисовать области (и границы, и условия) ее применения в 1С. По легкому намеку в конце статьи подумалось, что уважаемый zfilin именно на реализации web-сервисов накопил свой опыт. В (30) речь шла уже об обмене данными между разными конфигурациями. Голоса из клана 1С поминают еще обмен с "не 1С"-системами... Но всё это возможно и без XDTO, да наверное, и вообще без XML...
Так когда же стоит браться за XDTO, а когда не стоит?
43. zfilin 2191 18.11.11 15:48 Сейчас в теме
(42) gaglo, Вы меня разоблачили! Я специально не хотел затрагивать какую-то конкретную область применения XDTO именно из-за того, что практически в любом применении можно без XDTO обойтись. Сериализация это всего-лишь способ представления данных, поэтому какой именно механизм применять для получения нужного представления (XDTO или собственный или еще какой-нибудь) - не важно. В статье же не хотелось отвлекаться на такие подробности, а хотелось как-раз наоборот сосредоточиться на самом XDTO.

Что же касается самого вопроса - "Так когда же стоит браться за XDTO, а когда не стоит?"
Я бы сказал так. Если вы имеете дело с xml или с необходимостью передавать объекты как текст (сериализовывать их) то следует попробовать или хотя бы вдумчиво оценить возможность использовать XDTO. Это может существенно облегчить работу с вашими данными и объектами.

Но не стоит выключать голову, так как, возможно, именно ваша задача не имеет простого решения на XDTO-XML из-за ограниченности функционала XDTO или, собственно принципов XML. Все нужно критически оценивать.
Увы, вопрос "хорош ли XML вообще и в каких случаях" существенно шире рамок этой статьи. Лично я считаю, что в некоторых случаях применение xml исключительно вредно (например в сериализации простых табличных данных или массивов), но есть и другие мнения. И целые холивары.
samamoiloff; gaglo; +2 Ответить
44. gaglo 19.11.11 07:02 Сейчас в теме
(43) Вот уж чего не хотелось, так это разоблачать! "Тут разоблачать нечего, и так всё ясно." (С)
И тем более холивары про блеск и нищету XML заводить ;-] ( их уже было...)
Однако! Не согласен я с мыслью "какой именно механизм применять для ... - не важно". По-моему, так важно: один механизм легче, другой гибче, а третий я хорошо знаю и вообще к нему привык. И опять приходится включать голову - и выбирать.
Большое спасибо за описание этого механизма; видно, придётся действительно пробовать его использовать; тогда только и станет ясен вкус и цвет граблей...
45. kuntashov 415 19.11.11 11:41 Сейчас в теме
(44) Добавлю к (43) один формальный критерий выбора: XDTO однозначно следует рассматривать в качестве основного средства сериализации данных 1С, когда речь идет о реализации интеграции 1С с системами, средства разработки которых (или сами системы) имеют инструментальную поддержку XDTO, а именно, умеют на основе схемы XDTO или WSDL (если речь идет о web-сервисах) автоматически генерировать описания классов на языке, используемым этой системой разработки. Сокращает трудозатраты на разработку в разы.
48. zfilin 2191 21.11.11 22:14 Сейчас в теме
(44) Имелось ввиду "не важно для конечного результата". Для разработчика, разумеется, это исключительно важно.

(45) Согласен конечно же так.
52. zfilin 2191 30.11.11 17:49 Сейчас в теме
(42) Вот, кстати, только сегодня я совершенно случайно натолкнулся на еще одну область применения XDTO. Оказалось, что очень удобно сериализовать настройки КомпоновщикаНастроек СКД, чтобы куда-то их сохранить, а потом вновь открыть эти же настройки. Даже как-то стыдно стало, что не упомянул такую удобную вещь.
32. BubbleGumm 16.11.11 18:23 Сейчас в теме
Попробовал выполнить СериализаторXDTO.ЗаписатьXDTO(СправочникОбъект), возвращаемое значение имеет тип ЗначениеXDTO, а не ОбъектXDTO, при последующем сохранении в файл XML выгружается только GUID объекта. В справке указано следующее условие "Для типа записываемого значения должно быть преобразование в XDTO", что это значит ?
33. zfilin 2191 16.11.11 21:05 Сейчас в теме
(32) Проверьте тип переменной "СправочникОбъект". То, что вы описываете совершенно правильно для тех случаев, когда вы пытаетесь сериализовать ссылку.
Что касается справки, думаю там пропущено слово "возможно": "Для типа записываемого значения должно быть возможно преобразование в XDTO".
Для объектов конфигурации во встроенной фабрике "ФабрикаXDTO" оно всегда возможно, потому как в конфигурации всегда есть схема описания объектов метаданных в XDTO.
34. BubbleGumm 16.11.11 22:32 Сейчас в теме
(33) Да, спасибо, так получилось, но реквизиты ссылочного типа выгружаются все равно как GUID. Еще недопустимы незаполненные реквизиты имеющие тип перечисление.
35. zfilin 2191 16.11.11 22:41 Сейчас в теме
(34) Ну, тут ничего не сделаешь. Так и задумано. Ссылка - это GUID.
36. zfilin 2191 17.11.11 02:09 Сейчас в теме
40. Smithy 17.11.11 19:01 Сейчас в теме
(36) а как же рекомендации по оформлению схем XML: "Схема XML не должна содержать анонимных типов" ?
41. zfilin 2191 17.11.11 19:48 Сейчас в теме
(40) Не должна - не создавайте! =)
С другой стороны, на практике такие типы встречаются часто. Не всегда именно от тебя зависит какой будет схема. И надо же как-то с ними работать.
46. nshrek 9 19.11.11 15:32 Сейчас в теме
sipoju пишет:

Статья отличная!

Надеюсь на такую же статью по Web-сервисам!

присоединяюсь. спасибо
47. frkbvfnjh 593 21.11.11 15:29 Сейчас в теме
Наконец то хоть что-то стало понятно!
50. zfilin 2191 23.11.11 16:34 Сейчас в теме
51. AnotherSide 30.11.11 14:36 Сейчас в теме
Спасибо автору за статью, "доступно и всерьез", что называется. "Черный ящик" XDTO для меня ракрыт. Да здравствует Интеграция!
53. Raminus 01.12.11 13:41 Сейчас в теме
Супер, автор держи плюс!
54. Murom 05.12.11 18:21 Сейчас в теме
Очень интересная статья. Только есть вопрос. У меня есть файлик формата xml и есть его схема xsd. Как можно быстро проверить соответствует ли данный файлик формата xml его схеме xsd ?
55. zfilin 2191 06.12.11 00:07 Сейчас в теме
В таком объекте, как "Msxml2.DOMDocument.4.0" есть метод "validate".
Использовать очень просто - создается объект "Msxml2.DOMDocument.4.0", создается объект "Msxml2.XMLSchemaCache.4.0", загружается схема, связывается с объектом, загружается xml в объект и делается валидация. Вот тут очень хороший пример: http://www.stylusstudio.com/xmldev/200209/post81170.html
var xmlDoc   =  new ActiveXObject("Msxml2.DOMDocument.4.0");
var xsdCache = new ActiveXObject("Msxml2.XMLSchemaCache.4.0");

xsdCache.add("", "example.xsd"); 
xmlDoc.async   = false;
xmlDoc.schemas =  xsdCache; 
xmlDoc.load("example.xml");
var err = xmlDoc.validate();
if (err.errorCode == 0){
    WScript.Echo("Document is valid");
}else{
    WScript.Echo("Validation error:" + err.reason);
} 
Показать


Что же касается 1С-объектов, вроде ФабрикаXDTO, вот так с первого взгляда я отдельно метода "validate" не нашел. Можно попробовать загрузить xml в заранее подготовленную ФабрикуXDTO (с загруженной в нее схемой) при помощи "ФабрикаXDTO.ПрочитатьXML". При загрузке оно его валидирует и выдаст исключение, если что не так (об этом есть в статье).

Если можно еще проще, поделитесь, с удовольствием пополню свою коллекцию методов.
56. al2ko 69 06.12.11 07:58 Сейчас в теме
Спасибо за статью.
Никак не мог понять как при работе с web-сервисами передавать несколько значений. Теперь стало все проясняться.
57. wmalex86 29.12.11 08:50 Сейчас в теме
Очень понятно для начинающего. но где бы найти как заполнять сложные xdto пакеты. очень надо
58. wmalex86 29.12.11 08:52 Сейчас в теме
а кстати вопрос такой. как заполнить в пакете xdto значение если оно типа null... какой тип указать в пакете?
59. zfilin 2191 29.12.11 11:14 Сейчас в теме
(58) Давайте с примером, а-то что-то я так сходу не врубаюсь.
67. wmalex86 17.02.12 10:38 Сейчас в теме
(59) да все уже разобрался. просто поставил фильтр чтобы такие значения ненужные не записывались в пакет в принципе
68. zfilin 2191 17.02.12 11:08 Сейчас в теме
60. Yashazz 3473 01.01.12 02:11 Сейчас в теме
Не совсем понимаю, как создавать конструктором фабрику на основании схемы или пакета. Откуда взять саму схему или пакет? Т.е. концепцию-то я понимаю, а вот правильного захода с использованием имеющихся объектов и их методов да свойств пока не нащупал. Примеров опять же нету. Буду очень благодарен, если подскажете, как.
61. tmaker 02.01.12 11:30 Сейчас в теме
СпасибоЮ Разъяснил четко и доходчиво. Это тема для меня была просто темный лес.
62. nll.jojo 20.01.12 15:19 Сейчас в теме
спасибо автору - очень доходчиво
63. jko 01.02.12 11:50 Сейчас в теме
Не совсем понимаю, как создавать конструктором фабрику на основании схемы или пакета. Откуда взять саму схему или пакет? Т.е. концепцию-то я понимаю, а вот правильного захода с использованием имеющихся объектов и их методов да свойств пока не нащупал. Примеров опять же нету. Буду очень благодарен, если подскажете, как.
Вот и меня интересует подробный, да и ряд других вопросов.
64. zfilin 2191 01.02.12 12:13 Сейчас в теме
Товарищи, ну что ж вы. Пример-то был:

ФайлыXSD = Новый Массив();
ФайлыXSD.Добавить("D:\Temp\adderss.xsd");
МояФабрикаXDTO = СоздатьФабрикуXDTO(ФайлыXSD);

Создание на основании схемы из файла. Откуда взять схему или пакет, если есть только xml, вопрос риторический. Попробовать создать самому вручную или с помощью xsd.exe, опять-таки. Или стребовать оттуда, где вы взяли xml.
65. mc1c80 13.02.12 13:16 Сейчас в теме
Спасибо, порлезная обработка и статья.
66. zildar 2 16.02.12 08:21 Сейчас в теме
Спасибо! Отличная статья.
69. jhfrek 185 25.03.12 12:18 Сейчас в теме
Всё это хорошо, но как сделать из 1С 8 xml с таким содержанием в начале:
---------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<ED_Container xmlns="urn:customs.ru:Information:ExchangeDocuments:ED_Container:5.0.3" xmlns:CategoryCust="urn:customs.ru:Categories:3.0.0" xmlns:cat_ru="urn:customs.ru:CommonAggregateTypes:5.0.3" xmlns:clt_ru="urn:customs.ru:CommonLeafTypes:5.0.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DocumentModeID="1006058E">
---------------------------------------------------------------------------------
Сразу хочу сказать, что это сделано из сторонней программы, то есть не из 1С. У меня такое ощущение, что каким, то образом умудрились засунуть несколько пространственных имён или я что-то не понимаю?
70. zfilin 2191 08.04.12 16:45 Сейчас в теме
(69) jhfrek, Да, в xml может подтягиваться несколько пространственных имен. Например (см. скриншот).
Если я создам пакет с NS "http://www.1c.ru/demos/products2" в котором опишу тип "ЕдиницаИзмерения", а из пакета "http://www.1c.ru/demos/products1" его удалю, то смогу получить тип "ЕдиницаИзмерения" из другого NS, если использую директиву импорта.

На выходе у меня получится вот такой XML:
<?xml version="1.0" encoding="UTF-8" ?> 
<Номенклатура1 xmlns="http://www.1c.ru/demos/products1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <Наименование>Ботинки женские</Наименование> 
        <ЗакупочнаяЦена>1000</ЗакупочнаяЦена> 
        <ЕдИзм xmlns:d2p1="http://www.1c.ru/demos/products2">
                <d2p1:Наименование>шт.</d2p1:Наименование> 
                <d2p1:Коэффициент>1.5</d2p1:Коэффициент> 
        </ЕдИзм>
</Номенклатура1>
Показать


При вот такой XML-схеме:
<xs:schema xmlns:ns1="http://www.1c.ru/demos/products2" xmlns:tns="http://www.1c.ru/demos/products1" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.1c.ru/demos/products1" attributeFormDefault="unqualified" elementFormDefault="qualified">
        <xs:import namespace="http://www.1c.ru/demos/products2"/>
        <xs:complexType name="Номенклатура1">
                <xs:sequence>
                        <xs:element name="Наименование" type="xs:string"/>
                        <xs:element name="ЗакупочнаяЦена" type="xs:int"/>
                        <xs:element name="ЕдИзм" type="ns1:ЕдиницаИзмерения"/>
                </xs:sequence>
        </xs:complexType>
</xs:schema>
Показать


Ну, и в начале описания схемы видно, что подключаются несколько пространств имен: tns как основное, xs с базовыми типами и ns1 с нашим типом "ЕдиницаИзмерения".

Во общем, думаю, что стоит поискать в этом направлении. Но сразу скажу - другие программы могут гораздо свободнее обращаться с XML и 1С не всегда позволяет такую же гибкость.
Я не призываю к извращениям, но у меня были случаи, когда работа с XML начиналась с кое-какой "резни" XML как обычного текста, и только после этого он скармливался ФабрикеXDTO и так дальше. То же верно и в обратную сторону. XML формировался фабрикой, а потом дополнялся обычным "СтрЗаменить". Но тут нужно быть осторожным, а-то это все закончится тем, что опять будем весь XML руками педалить - вернулись к тому, от чего уходили.
Может быть, в сложном случае вам будет лучше воспользоваться сторонними объектами для работы с XML. Например, чем-нибудь из .NET. Принципы там те же, а возможностей больше. Собственно, я уже кое-что упоминал.
Прикрепленные файлы:
71. jhfrek 185 08.04.12 22:30 Сейчас в теме
Большое спасибо! Буду пробовать.
72. tata12-01 10.04.12 14:52 Сейчас в теме
Интересная статья. Еще хотелось бы разабраться с типами, что означает в типе item, подтипы, например items и другие?
Прикрепленные файлы:
73. zfilin 2191 10.04.12 17:00 Сейчас в теме
(72) tata12-01, Вы, видимо, не совсем поняли самое начало. Ветка "Типы объектов" содержит сложные типы, в отличие от ветки "Типы значений" и, в вашем случае, сложный тип item содержит свойство items (или, еще можно сказать поле items), которое само в свою очередь может быть какого-либо типа.
Т.е. все "подтипы", как вы их назвали (и что не верно) это те свойства, к которым вы можете обращаться у объекта типа item "через точку". Например, так:

типItem = ФабрикаXDTO.Тип("http://appius.ru/pdm", "item"); 
объектТипаItem = ФабрикаXDTO.Создать(типItem); 
объектТипаItem.Items = <что-то>; 
объектТипаItem.parameters = <что-то>; 
и т.д.


Почитайте про ООП что-нибудь, будет понятнее.
74. wmalex86 19.04.12 06:58 Сейчас в теме
НоваяЗаписьXML = Новый ЗаписьXML;
НоваяЗаписьXML.ОткрытьФайл(ДиалогСохраненияФайла.ПолноеИмяФайла);
НоваяЗаписьXML.ЗаписатьОбъявлениеXML();

НоваяЗаписьXML.ЗаписатьНачалоЭлемента("ФайлОбмена");
URI = "http://www.sample-package.org";
ТипОбъектаXDTOСоздаваемого = ФабрикаXDTO.Тип(URI, "DocumentObject.ПриходнаяНакладная");
НовыйОбъектXDTO = ФабрикаXDTO.Создать(ТипОбъектаXDTOСоздаваемого);
СсылкаДок = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(URI, "DocumentRef.ПриходнаяНакладная"), Док.УникальныйИдентификатор());

НовыйОбъектXDTO.ref = СсылкаДок;
НовыйОбъектXDTO.Date = Док.Дата;
НовыйОбъектXDTO.number = Док.Номер;
Контрагент = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(URI, "CatalogObject.Контрагенты"));
Контрагент.Ref = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(URI, "CatalogRef.Контрагенты"),Док.Контрагент.УникальныйИдентификатор());
Контрагент.Code = Док.Контрагент.Код;
Контрагент.Description = Док.Контрагент.Наименование;

ФабрикаXDTO.ЗаписатьXML(НоваяЗаписьXML, Контрагент,,,,НазначениеТипаXML.Явное);


НовыйОбъектXDTO.Контрагент = Контрагент.Ref;
ФабрикаXDTO.ЗаписатьXML(НоваяЗаписьXML, НовыйОбъектXDTO,,,,НазначениеТипаXML.Явное);

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

НоваяЗаписьXML.Закрыть();
75. wmalex86 19.04.12 07:03 Сейчас в теме
делал XDTO обмен для одной организации, использовал план обмена (самодельный)..он фиксировал изменения..а когда нужно было делать обмен, выполнялась процедура, которая перебирала изменения текущего узла созданного плана обмена и записывала в пакет, и тут же передавался этот в центральную базу, там записывался пакет с изменениями уже для меня, ну и соответственно принимались отправленные..всего в обмене участвовали 3 базы и одна центральная, которая собирала общую информацию и регистрировала их в плане обмена для передачи в другие базы
76. ph_1984 24.05.12 19:14 Сейчас в теме
В процедуре ОбъектСервер():

КлиентыТип = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Клиенты");
Клиент = ФабрикаXDTO.Создать(КлиентыТип);


// Заполним ОбъектXDTO
ЗаполнитьЗначенияСвойств(Клиент, КлиентОбъект);

переменная Клиент не содержит строк табличной части, так, после записи (ФабрикаXDTO.ЗаписатьXML(МойXML, клиент)), содержимое файла client.xml:

<?xml version="1.0" encoding="UTF-8"?><CatalogObject.Клиенты xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Ref>b0fc4df2-0a54-11e1-8797-ac728931524e</Ref><DeletionMark>false</DeletionMark>
Код
000000001
Показать полностью
<Description>Тестовый клиент 1</Description><ТипКлиента>непоняно</ТипКлиента></CatalogObj­ect.Клиенты>


В объекте КлиентОбъект (из приложенной демо базы) есть не пустая табличная часть.

Если вызывать СериализаторXDTO.ЗаписатьXDTO(КлиентОбъект), то табличные части появляются и в объекте XDTO и в файле.
77. zfilin 2191 24.05.12 20:38 Сейчас в теме
(76) Guran, Все правильно. Функцию ЗаполнитьЗначенияСвойств я использовал для примера. Она не работает с табличными частями.
В действительности лучше использовать СериализаторXDTO. Об этом есть в статье.

Если вам по какой-либо причине необходимо использовать именно ЗаполнитьЗначенияСвойств, табличные части придется заполнять вручную. Цикл, и все такое.
78. ZLENKO 09.07.12 17:27 Сейчас в теме
Странно что 1С до сих пор так и не использует XDTO сериализацию для обмена между различными конфигурациями 1С. Через конвертацию данных получается очень медленно.

Меня лично напрягает то что как только внесеш изменения в одну из конфигураций - надо выгружать XSD схему и загружать ее в базу приемник чтобы при чтении не возникла ошибка чтения. Было бы удобнее если бы ошибку при десериализации можно было проигнорировать.
79. psamt1k 28.08.12 19:11 Сейчас в теме
Огромнейшее спасибо за статью!
В наследство досталась база с веб-сервисами, и как ни крути не мог понять, что за "зверь" это "пространство имен" и прочее. Теперь все на своих "полочках".
80. Slon1c 19.09.12 12:47 Сейчас в теме
Можно выделить несколько задач, для решения которых используется механизм XDTO:

● обмен данными между конфигурациями системы «1С:Предприятие» с разными схемами данных;

● обмен данными на основе схем XML, не привязанных к той или иной конфигурации (например, обмен с информационными системами, построенными не на основе системы «1С:Предприятие»);

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

Механизм XDTO обладает следующими ключевыми свойствами:

● обеспечивает работу с XML,

● привычная модель работы с данными.

В настоящее время обмен данными с различными программными платформами и системами реализуется с использованием XML: XML-документы служат для представления данных, а схема XML используется для описания форматов и структур данных. Механизм XDTO позволяет создавать требуемые для обмена схемы XML и формировать XML-документы, удовлетворяющие этим схемам.

В то же время использование механизма XDTO позволяет выполнять эти действия в привычной для большинства разработчиков системы «1С:Предприятие» манере.

Разработчик имеет дело с типами и объектами данных, объекты данных содержат свойства, свойствам присваиваются значения и т. д. При манипулировании данными с помощью XDTO разработчик максимально изолирован от подробностей, связанных с тем, как эти данные представлены в XML. Конечно, совсем избавиться от этих подробностей невозможно, но важно, что они проявляются только там, где это действительно нужно.
81. Tangram 154 04.10.12 18:49 Сейчас в теме
Отличная статья. Как раз попалась пара задач загрузки XML документов из не1С систем. Скормил их в xsd.exe, получил схемы, закинул в макеты, документы прочитались влет. дальше только номенклатуру нашел по идентификаторам и все!
84. zfilin 2191 04.10.12 21:17 Сейчас в теме
(81) Tangram, Рад, что теории есть применение на практике. Спасибо за отзыв.
82. bzmax 04.10.12 19:49 Сейчас в теме
Отличная статья. Как раз для один-эснигов :)
Я эту тему просек еще в далеком 2006 когда впервые увидел этот объект метаданных. И с тех пор для меня любая интеграция 1с с каким либо сайтом делается в два счета через web-сервис.

А "невьезжание" многих в этот объект обусловлено тем, что 1С никакой документации по этому вопросу не публиковало.
А 1С документацию не публиковало, ссылаясь на то что это разработка не их (пакеты XDTO) и поэтому они не будут документировать. И что вся документация по этому вопросу уже написана.
И они абсолютно правы. Вот только "не свою" разработку не надо было называть "своим" названием XDTO.

Этот метод уже дааааааавным-давно применяется в web-мире. И называется SOAP - протокол. И пакеты соответственно
SOAP - пакетами.

Вот и смотрите документацию на эту тему.

P.S. СОВЕТ Если Вам придется интегрировать 1С с каким либо сайтом, а сайт будут разрабатывать сторонние программисты, то никогда(!) не говорите им "обмен с вашим сайтом будем производить XDTO пакетами". После такой фразы web-программист морщит лоб и пытается понять что это за зверь такой.
Изъясняйтесь проще. Скажите что обмен будет по SOAP протоколу, SOAP-пакетами через web-сервис. Вот тогда любой web-программер поймет Вас с полуслова.

P.P.S ЕЩЕ БОЛЕЕ ВАЖНЫЙ СОВЕТ В наш век интернет технологий помимо 1С нужно еще хоть чуточку интересоваться сетевыми и web-технологиями. Иначе вы так и останетесь "локальным один-эснигом", который только и может что проводки подкорректировать, да какую нибудь хитрую обработку сварганить. А сейчас намного выше ценяться специалисты которые один программный продукт могут связать с другим в онлайновом режиме.
Vladimir Litvinenko; Stas85_; Rego1337h; nana_rge; odin777; kliver; valafan; +7 Ответить
83. zfilin 2191 04.10.12 21:16 Сейчас в теме
(82) bzmax, Спасибо за интересный комментарий. Про SOAP в курсе, так как в 1С пришел (ну, в том числе) из PHP.
Постараюсь следовать вашим советам и не стать "локальным один-эснигом".
85. bzmax 04.10.12 22:28 Сейчас в теме
(83)
На здоровье. хорошего совета никогда не жалко.
Но вот то, что нашел время и доступно это все описал - за это громадный респект!!!
У самого знаний куча, да вот как то не удосужился хоть одну статейку написать.
Потому как ленивый очень :) Наверно потому и пошел в программисты, что бы за меня все компьютер считал :))

P.S. Кстати в "пятом пыхе" (PHP5) есть замечательный модуль парселки этих самых пакетов (soap/xdto).
И этот модуль великолепно производить серилизацию/десерилизацию.
Помню долго, очень долго смеялись с другом (Делали проект электронной очереди с регистрацией из интернета.)
Я ваял со стороны 1С, а друг со стороны Web на "пятом-пыхе". Тогда мы первый раз решили попробовать эти пресловутые пакеты. И когда делали испытательные коннекты, друг звонил мне по телефону и страшным голосом говорил -"Оффигеть тут мне какой то странный тип данных передается!!" на мой вопрос "какой?" он ответил -"Тип данных Справочник.Клиенты !!!" Откуда ему бедняге было знать что помимо типов integer, varchar, decimal и т.д. еще бывают и такие типы "Справочник.Номенклатура", "Документ.ЧекККМ" и т.п. :)
86. zfilin 2191 05.10.12 00:28 Сейчас в теме
87. torg1c 36 23.11.12 11:55 Сейчас в теме
88. Kazan 09.01.13 13:33 Сейчас в теме
А вот ответьте пожалуйста - замечательно и удобно это конечно плюс, а по скорости чтения как?
90. zfilin 2191 25.03.13 21:00 Сейчас в теме
(88) Kazan, Скорость не замерял, потому не скажу.

(89) anu, Все верно, это от того, что вы создаете новый элемент и он получает в базе новый UID. Вы попробуйте СериализаторXDTO использовать. Потому что ЗаполнитьЗначенияСвойств это совсем ручная работа, для демонстрации самого механизма. Не думаю, что кто-то пользуется этим на практике, когда есть сериализатор.
Если же хочется сделать все руками придется из xml получить UID и принудительно установить его новому элементу через УстановитьСсылкуНового, потому что ЗаполнитьЗначенияСвойств этого не делает (как и, например, не заполняет табличные части).
89. anu 25.03.13 19:25 Сейчас в теме
Перерыла кучу статей, публикаций про XDTO, где бы понятным языком было описание, примеры. Ваша статья сразу все по полочкам раставляет и описание, и примеры. У меня сразу вопрос появился, до этого я еще структуру xml файла изучала и его методы. И там был такой пример: сначала записывался элемент справочника в xml-фрагмент (насколько я конечно правильно выражаюсь), из него в текстовый документ. Потом из текстового документа с помощью объекта ЧтениеXML записываем в справочник этот элемент. Вот кусочек кода:

ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать(ПутьДляTXT);
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(ТекстДок.ПолучитьТекст());
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда
Об = ПрочитатьXML(ЧтениеXML);
Об.Записать();
КонецЕсли;

И потом я сравнила UID шестнадцатеричный, что был в файле и что получилось при записи объекта в справочник, они получились ОДИНАКОВЫМИ!

И вот попробовала Ваш второй пример выполнить, про клиента, когда мы заполняем из справочника объект XDTO. Я решила попробовать обратную запись из файла xml в базу 1С...когда выполняю кусок кода:
КлиентыТип = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config","CatalogObject.Клиенты");
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(Путь);
Клиент = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, КлиентыТип);
ЧтениеXML.Закрыть();
Об = Справочники.Клиенты.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(Об, Клиент);
Об.Записать();

UIDы в справочнике и файле разные...я так понимаю, из-за того, что вызываю метод СоздатьЭлемент, он сразу присваивает новый UID, а как по-другому написать, чтобы были одинаковые?
91. anu 25.03.13 22:27 Сейчас в теме
zfilin, понятно! Спасибо! Только не понятно, в первом случае (с текстовым документом), там одинаковый UID т.к. я тип не указала, а в описании про глобальный метод ПрочитатьXML написано --> "Если тип не указан, то будет произведена попытка определения типа значения непосредственно из представления XML", т.е. 2 варианта либо тип записывается в xml, либо конфигуратор его как-то определяет. До сериализатора я еще не дошла! Буду дальше изучать!
92. Oleg_nsk 240 04.04.13 20:43 Сейчас в теме
93. zfilin 2191 05.04.13 17:22 Сейчас в теме
(92) Не за что. =) Удачи в борьбе с XML. =)
94. Jogeedae 38 01.06.13 15:06 Сейчас в теме
недавно решал задачку - из пакета обмена 1С-ки выпилить некоторые изменения.
Пакет размером 10 Гб. Пытался использовать XML DOM и получал краш с нехваткой памяти.
Чтение через xdto не осилил - не понял как описать схему.
Ну а если не умеешь головой, то работай руками - парсил через чтениеxml и копировал данные в записьxml.
Хотелось бы всё же узнать как у XDTO с последовательным чтением огромных узлов? типа таких:
<data>
... - тут ~10 млн объектов
</data>
95. zfilin 2191 01.06.13 16:02 Сейчас в теме
(94) Jogeedae, На больших объемах данных не пробовал, если будете писать статью "Большие объемы данных XDTO и XML", скиньте ссылочку. Самому интересно.
97. M.Nikitin 2 28.10.14 09:28 Сейчас в теме
(95) Отличная статья! Может подскажите, я выгружаю справочник Номенклатура (для загрузки на сайт) , получаю xml вида:
<?xml version="1.0" encoding="UTF-8"?>

-<CatalogObject.Номенклатура xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config">

<IsFolder>false</IsFolder>

<Ref>ee539b18-9cca-4b7e-8008-99c5ee4eee04</Ref>

<DeletionMark>false</DeletionMark>

<Parent>e31bfb70-aab4-11e2-b620-0022b0530332</Parent>

Код
00000005999
Показать полностью
<Description>Поворотники диодные KEITI черные металл LS1-K</Description> <СтатьяЗатрат>00000000-0000-0000-0000-000000000000</СтатьяЗатрат> <Артикул>0183-766-2121 </Артикул> <БазоваяЕдиницаИзмерения>68f29c39-aab4-11e2-b620-0022b0530332</БазоваяЕдиницаИзмерения> <Весовой>false</Весовой> <ВесовойКоэффициентВхождения>0</ВесовойКоэффициентВхождения>­ <ВестиПартионныйУчетПоСериям>false</ВестиПартионныйУчетПоСер­иям> <ВестиУчетПоСериям>false</ВестиУчетПоСериям> <ВестиУчетПоХарактеристикам>false</ВестиУчетПоХарактеристика­м> <ЕдиницаДляОтчетов>e31bfba8-aab4-11e2-b620-0022b0530332</ЕдиницаДляОтчетов> <ЕдиницаХраненияОстатков>e31bfba8-aab4-11e2-b620-0022b0530332</ЕдиницаХраненияОстатков> <Комментарий/> <Набор>false</Набор> <НаименованиеПолное>Поворотники диодные KEITI черные металл LS1-K</НаименованиеПолное> <НоменклатурнаяГруппа>00000000-0000-0000-0000-000000000000</НоменклатурнаяГруппа> <НомерГТД>00000000-0000-0000-0000-000000000000</НомерГТД> <ОсновноеИзображение>00000000-0000-0000-0000-000000000000</ОсновноеИзображение> <ОсновнойПоставщик>00000000-0000-0000-0000-000000000000</ОсновнойПоставщик> <ОтветственныйМенеджерЗаПокупки>00000000-0000-0000-0000-000000000000</ОтветственныйМенеджерЗаПокупки> <СтавкаНДС>БезНДС</СтавкаНДС> <СтранаПроисхождения>00000000-0000-0000-0000-000000000000</СтранаПроисхождения> <Услуга>false</Услуга> <НоменклатурнаяГруппаЗатрат>00000000-0000-0000-0000-000000000000</НоменклатурнаяГруппаЗатрат> <ВидНоменклатуры>68f29c3a-aab4-11e2-b620-0022b0530332</ВидНоменклатуры> <ВестиСерийныеНомера>false</ВестиСерийныеНомера> <Комплект>false</Комплект> <ЦеноваяГруппа>00000000-0000-0000-0000-000000000000</ЦеноваяГруппа> <ЕдиницаИзмеренияМест>00000000-0000-0000-0000-000000000000</ЕдиницаИзмеренияМест> <ДополнительноеОписаниеНоменклатуры/> <ДополнительноеОписаниеНоменклатурыВФорматеHTML>false</Допол­нительноеОписаниеНоменклатурыВФорматеHTML> </CatalogObject.Номенклатура>
Показать


Можно ли развернуто выгрузить реквизиты ссылочного типа ?, например :
<>БазоваяЕдиницаИзмерения</>
<Ид>46127fbf-16f4-11e4-93b9-08863bd4c2c6</Ид>
<Наименование>Шт.</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<>БазоваяЕдиницаИзмерения</>
96. nicxxx 239 23.07.13 17:22 Сейчас в теме
98. M.Nikitin 2 28.10.14 11:08 Сейчас в теме
117. resonance 14.04.20 15:17 Сейчас в теме
(98)
Добрый день, подскажите, как Вам удалось реализовать "развертывание", реквизитов ссылочного типа? Пишу в ручную сейчас это, довольно объёмная работа. Можно ли это сделать с помощью XDTO? Или как решили Вы? Спасибо.
99. IgorS 44 19.11.14 12:02 Сейчас в теме
Хорошая статья. С XML работаю уже довольно давно, но всё в "ручном режиме" - ЧтениеXML, ЗаписьXML. Разобраться с XDTO никак руки не доходили. Теперь полработы сделано:)
Оставьте свое сообщение

См. также

Редактор объектов информационной базы 8.3 Промо

Универсальные обработки Обмен через XML v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.51 от 31.08.2020

2 стартмани

23.01.2019    30118    312    ROL32    39    

Улучшенная обработка универсального обмена данными в формате XML (УФ)

Универсальные обработки Внешние источники данных Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).

1 стартмани

23.06.2020    4260    49    Lem0n    0    

Загрузка из XML файла ЭДО в документ поступления для конфигураций 1С: Розница 2.2/2.3, Управление торговлей 10.3/11.4

Розничная торговля Обработка документов Документооборот и делопроизводство Обмен через XML v8 УТ10 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Внешние обработки загрузки данных из XML файлов формата ON_NSCHFDOPPRMARK ЭДО в документы поступления 1С Розница версия 2.2.10.19 и выше, Управление торговлей 10.3.52.2 и выше, Управление торговлей 11.4.5.63 и выше

1 стартмани

04.06.2020    11847    161    independ    105    

Выгрузка и загрузка XML для управляемых форм 8.3 (с отбором)

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

В работе постоянно приходится разделять в различные базы или объединять несколько организаций в одну базу, долгое время пользовался стандартной обработкой выгрузка-загрузка из UNIREPS 8.2, в режиме обычного приложения, но, к сожалению, для управляемого приложения стандартная обработка из UNIREPS 8.3 (Диск ИТС) не позволяет нормально сделать выгрузку с отбором, поэтому ей никогда не воспользовался. Решил что напишу обработку, которая позволит делать отборы в различных вариациях, кроме того, в обработках из UNIREPS (8.2 и 8.3) существенно отличается процесс загрузки предопределенных, что не всегда удобно при больших объемах данных. Обработка написана на базе UNIREPS 8.3, но есть существенные изменения. Но интерфейс доработан так, чтобы обработка была похожа на старую добрую обработку из UNIREPS 8.2, к которой все так привыкли.

1 стартмани

05.11.2019    9303    170    o.kovalev    14    

Преобразование XML файла в переменную структура, Загрузка в дерево значений

Обмен через XML v8 1cv8.cf Абонемент ($m)

Обработка, демонстрирующая работу процедур и функций по преобразованию XML файла в дерево значений, а также в переменную типа структура.

1 стартмани

14.09.2019    9002    12    vik070777    19    

Документы и Справочники в JSON

Обмен через XML v8 1cv8.cf Абонемент ($m)

Пример выгрузки всех данных Документа или Справочника в JSON

1 стартмани

20.06.2019    13296    17    Teut_Vlad    15    

Перенос документов из УТ 10.3 в УТ 11.4

Обмен через XML Перенос данных из 1C8 в 1C8 v8 v8::ОУ УТ10 УТ11 УУ Абонемент ($m)

Перенос основных документов из ут 10.3 в ут 11.4. Правила сделаны на основании помощника перехода, поэтому доступен перенос справочников и остатков.

3 стартмани

30.04.2019    10039    148    leobrn    10    

Универсальный обмен данными XML (с гибкими отборами и сохранением вариантов настроек)

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка предназначена для загрузки и выгрузки данных по правилам обмена в любых конфигурациях, реализованных на платформе 1С:Предприятие 8.3. Преимуществом перед типовой обработкой является добавленный функционал: #1. Установка произвольных фильтров на выгружаемые объекты при помощи механизма системы компоновки данных #2. Сохранение различных вариантов настроек (сохраняются правила обмена, фильтры выгрузки, параметры, настройки обработки) - что позволяет гибко настроить в базе-источнике фильтры для выгрузки объектов по различным правилам обмена для различных баз-приемников, сохранить выполненные настройки и в будущем уже пользоваться этими вариантами настроек. Проверялась на 1С:ERP Управление предприятием 2.4.7.141.

1 стартмани

29.04.2019    16281    279    sapervodichka    20    

Выгрузка и загрузка данных XML 8.3 на управляемых формах с отбором и конструктором запроса (в полной мере возможности реализованы для версии 1С:Предприятия 8.3 выше версии 8.3.5)

Обмен через XML Инструментарий разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

В этой форме всегда не хватало конструктора запросов для удобной выгрузки уникальных элементов по ссылке. Теперь он здесь есть. Как только стало возможным создавать конструктор запроса в управляемых формах, я добавил её в стандартную обработку. Необходимо напомнить, что обработка функционирует полноценно только с версии 8.3.5 1С:Предприятия 8.3.

1 стартмани

24.04.2019    8244    38    AlexandrSmith    1    

Альтернативное получение значения из хранилища значения. Свой ХранилищеЗначения.Получить();

Распределенная БД (УРИБ, УРБД) Обмен через XML v8 1cv8.cf Абонемент ($m)

Данная публикация не претендует на использование в продакшене, но когда "Нельзя, но очень хочется" в отношении получения ооочень больших данных из ХранилищаЗначения и когда сама платформа не может получить значение и падает, при этом, перед падением съедает почти всю память. Это своего рода костыль, в безвыходной ситуации. Речь пойдет про получение больших данных из хранилища значения в файловых базах на 32-х битной платформе. Данное не касается 64-х битных клиентов/серверов где нет ограничения на размер потребляемой памяти (верней есть, но доступно памяти гораздо больше, чем 32-х битному приложению без PAE).

1 стартмани

22.04.2019    8959    5    markers    0    

Выгрузка - загрузка данных в XML с отбором по организации Промо

Обмен через XML Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Выгрузка - загрузка данных в XML с отбором по организации (УФ)

1 стартмани

25.05.2014    47229    303    buganov    42    

Выгрузка и загрузка данных XML с гибкими отборами

Обмен через XML Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Обработка выгрузки и загрузки данных через XML между идентичными конфигурациями с возможностью установки произвольных отборов на выгружаемые объекты.

1 стартмани

07.04.2019    19586    481    sapervodichka    7    

Формирование xml файла ЭДО (СБИС, Диадок, Такском и т.п.) для типовых документов (счета-фактуры, накладные)

Внешние источники данных Обмен через XML Документооборот и делопроизводство Документооборот и делопроизводство v8 1cv8.cf Абонемент ($m)

Не все типовые документы типовых конфигураций 1С можно выгрузить в файл формата xml ЭДО. Например счет-фактуру, на текущий момент момент это не предусмотрено. Обработка позволяет сделать это.

4 стартмани

30.03.2019    40450    225    capitan    85    

Перенос данных КА 1.1 -> КА 2

Перенос данных из 1C8 в 1C8 Обмен через XML v8 КА1 КА2 Россия Абонемент ($m)

Перенос данных КА 1.1 => КА 2 с помощью правил обмена данными в формате XML КД 2 (переносятся остатки, документы, справочная информация).

5 стартмани

20.03.2019    17054    264    gudogu    143    

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1 Промо

Обмен через XML Зарплата Перенос данных из 1C8 в 1C8 Зарплата v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1. Позволяют вести параллельную работу в базах ЗУП редакций 2,5 и 3.1.

10 стартмани

06.03.2018    39844    153    kostya_whiskas    24    

Обработка для выгрузки и загрузки данных XML 8.3. С отбором, предпросмотром данных и сохранением настроек

Обмен через XML Перенос данных из 1C8 в 1C8 v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Обработка Выгрузки и загрузки данных XML 8.3 на управляемых формах. Универсальная обработка "Выгрузка и загрузка данных XML" производит полную или частичную выгрузку данных информационной базы в файл в формате XML. Впоследствии этот файл может быть загружен в информационную базу с помощью этой же обработки. Формат файла выгрузки отличается от формата файла, создаваемого при выгрузке по плану обмена, заголовочной частью. (Описание взято с ИТС)

1 стартмани

07.03.2019    15021    237    Gmix    7    

Правила обмена УПП 1.3 -> БП 3.0 (+ БП КОРП 3.0 + перенос остатков)

Перенос данных из 1C8 в 1C8 Обмен через XML v8 УПП1 КД БП3.0 БУ Абонемент ($m)

Актуальные правила обмена: УПП 1.3.137.1 -> БП 3.0.76.77; УПП 1.3.137.1 -> БП КОРП 3.0.76.77; УПП 1.3.128.1 -> БП 3.0.74.63; УПП 1.3.128.1 -> БП КОРП 3.0.74.63; УПП 1.3.123.3 -> БП 3.0.71.83; УПП 1.3.123.3 -> БП КОРП 3.0.71.83; УПП 1.3.118.1 -> БП 3.0.68.61; УПП 1.3.118.1 -> БП КОРП 3.0.68.61.

1 стартмани

04.03.2019    12532    289    Смешной 1С    44    

Выгрузка данных из Бухгалтерии ред. 3.0 в Управление небольшой фирмой, ред. 1.6

Обмен через XML Перенос данных из 1C8 в 1C8 v8 УНФ БП3.0 Россия УУ Абонемент ($m)

Выгрузка данных из 1С БП 3.0 в УНФ 1.6. Обработка переносит документы по банку, кассе, движения ТМЦ + справочники контрагентов, номенклатуры и другие связанные справочники. Полный список документов на скриншоте.

1 стартмани

08.02.2019    12733    215    dinarz    69    

Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3 Промо

Перенос данных из 1С7.7 в 1C8.X Обмен через XML v7.7 v8 1cv7.md Россия Абонемент ($m)

Воспользоваться современным средством переноса данных "Конвертация данных 3.0.5.3" можно только выгрузив из системы - источника данных XML в формате обмена данными EnterpriseData. В этой публикации можно скачать приемы выгрузки из 1С 7.7 универсального формата обмена для Конвертации данных 3. Выполняем перенос данных из «1С:Предприятие 7.7» в «1С:Предприятие 8.3». Используем Конвертацию данных КД 3.0 из 1c 7.7 --> 1С 8.3. На первой стадии еще не опубликовано иного способа подложить файл для Конвертации данных 3 кроме как сформировать его вручную, постараемся решить данную проблему.

1 стартмани

26.02.2018    39462    52    ksnik    3    

1С: Розница/УТ 10.3. ЕГАИС, загрузка акцизных марок в справочник Штрихкоды и Упаковки, регистр Акцизные марки из XML-сообщений входящих ТТН ЕГАИС + Печать акцизных марок

Розничная торговля Обработка справочников Обмен через XML Ценники Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Пакетная загрузка/обновление списка акцизных марок ЕГАИС из входящих ТТН ЕГАИС. Для 1С Розница 2.2.9.ХХХ/2.2.10.ХХХ//2.2.11.ХХХ/2.2.12.ХХХ/Управление торговлей 10.3.49.ХХХХ и выше с возможностью печати

1 стартмани

31.01.2019    22246    169    independ    123    

Ручная выгрузка и загрузка данных через универсальный обмен данными с настройками (расширение, платформа 8.3+)

Обработка документов Обработка справочников Обмен через XML Перенос данных из 1C8 в 1C8 v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Данное расширение (не требует изменения конфигураций) служит как надстройка для конфигураций, у которых обмен между базами происходит через универсальный формат (EnterpriseData), с использованием стандартных правил конвертации, которые уже есть в конфигурации. Интерфейс адаптирован для простых пользователей, сделан общий отбор по Организации для всех документов, имеется пару настроек для передачи в параметры конвертации, которые расположены в общем модуле конфигураций, а так же есть возможность выбора запуска - в фоне или в текущем сеансе. Теперь не нужно настраивать обмен между базами, для того чтоб просто перенести нужные документы. Подходит точно для УТ 11.4, БП 3.0.67, КА 2.4.5, Розница 2.2.9 (Обновление 1.2 от 02.03.2019)

2 стартмани

19.01.2019    23074    137    hakerxp    10    

Перенос данных КА 1.1.115.1 => БП 3.0.75.104 (перенос остатков, документов, зарплатный блок и справочной информации)

Перенос данных из 1C8 в 1C8 Обмен через XML v8 КА1 БП3.0 Россия Абонемент ($m)

Переносятся: остатки по счетам 01, 02, 10, 20, 41, 60, 62, 71, 97 и их субсчетам; документы; отдельно можно перенести справочники (номенклатура, контрагенты, договоры контрагентов, организации, склады, физические лица, сотрудники).

5 стартмани

22.12.2018    15563    364    gudogu    157    

Универсальный обмен данными в формате XML (2.1.8) 8.3 УФ с отбором и без модальности

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

К типовой обработке "Универсальный обмен данными в формате XML" добавлены отбор и возможность работать в конфигурациях с отключенным режимом модальности.

1 стартмани

07.11.2018    24146    308    nicxxx    7    

SOAP для чайников

Обмен через XML WEB v8 1cv8.cf Абонемент ($m)

Немножко про SOAP сервис. И пример работы с подключением и получением данных по SOAP за 5 минут.

1 стартмани

05.09.2018    49899    43    dusha0020    18    

003. Почему я больше не люблю "Выгрузку Загрузку XML"

Обмен через XML v8 1cv8.cf Абонемент ($m)

Ниже будет много букаф, но если коротко — можно ускорить этот инструмент в 1000 раз

1 стартмани

03.09.2018    7993    8    Nikola23    8    

Редактор движений документа. Сохранение в XML, обмен между базами, замена регистратора. Промо

Обработка документов Универсальные обработки Обмен через XML v8 Абонемент ($m)

Редактор набора записей движений документа. Позволяет сохранить набор записей в XML, в настройки пользователя, прочитать сохраненный XML в другой идентичной базе, заменить регистратор. Можно изменять порядок записей, менять активность, как массово, так и по одной и др. Тонкий клиент, управляемые формы.

1 стартмани

07.09.2016    41598    156    Aphanas    4    

Простой эмулятор вызова веб-сервиса 1С с просмотром результата

Обмен через XML WEB v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

24.04.2018    13000    19    anvolkov1cbit    9    

Правила переноса документов из ЗУП 2.5 в ЗУП 3.1

Обмен через XML Перенос данных из 1C8 в 1C8 Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Перенос документов, справочников и планов видов расчета из конфигурации 1С ЗУП 2.5 в ЗУП 3.1.

3 стартмани

28.03.2018    29630    413    Cobranet123    64    

Загрузка файлов грузовых таможенных деклараций из файлов ФТС формата xml (Альта софт, Сигма софт, Декларант +) Промо

Внешнеэкономическая деятельность (ВЭД) Обмен через XML Внешнеэкономическая деятельность (ВЭД) v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:" если что. Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные)

5 стартмани

09.08.2016    47070    189    capitan    315    

Пример заполнения/создания файла XML из XSD схемы, используя XDTO

Обмен через XML WEB v8 1cv8.cf Абонемент ($m)

Добрый день, коллеги! Наконец-то дошли руки написать сию статью. Хочу поделиться своим опытом по разбору xsd схемы используя Фабрику XDTO, а также связанным с этим XML файлом. Думаю, наверняка кому-то понадобится.

1 стартмани

21.12.2017    46935    sandybaev    24    

Правила переноса документов из ЗУП 2.5 в ЗУП 3.1

Перенос данных из 1C8 в 1C8 Обмен через XML Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Перенос документов из ЗУП 2.5 в ЗУП 3.1 - позволяет снизить объем работ при опытной эксплуатации ЗУП 3.1 параллельно с ЗУП 2.5.

1 стартмани

04.12.2017    33243    498    AntonH851    38    

XML JSON преобразователь

Обмен через XML v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

11.10.2017    16927    50    m-rv    4    

Усовершенствованный редактор правил обмена КД2 Промо

Обмен через XML v8 КД Абонемент ($m)

РПО-2М – мощный редактор правил обмена для КД 2. Позволяет ускорить свою разработку и ознакомление/доработку чужих правил обмена. Превосходство над встроенным редактором достигается за счет удобного функционального интерфейса, применения шаблонизации кода правил, богатого инструментария, упрощающего разработку, и интеграции с Инструментами Разработчика.

3 стартмани

16.09.2015    36461    185    Lem0n    40    

Простой способ передачи файла с клиента на сервер и обратно. Пример работы с XML

Практика программирования Обмен через XML v8 1cv8.cf Россия Абонемент ($m)

В статье представлен простенький пример передачи файла с клиента на сервер и с сервера на клиент. Плюс к этому разобраны методы работы с записью XML. Платформа 8.3.10.2466. Конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.49.21).

1 стартмани

05.09.2017    23743    16    Sergant007007    9    

Правила обмена ЗУП 3.1 - БП 2.0 и ЗУП 3.1 - УПП 1.3 (отражение, ведомости и справочники)

Перенос данных из 1C8 в 1C8 Обмен через XML Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::БУ v8::СПР БП2.0 БП3.0 ЗУП3.x Россия БУ Абонемент ($m)

Правила обмена для выгрузки документов "Отражение зарплаты в бухучете", "Ведомость в банк", "Ведомость в кассу", справочников "Сотрудники" и "Физические лица"

1 стартмани

01.08.2017    79550    1560    forseil    209    

«Горыныч - то НЕ НАСТОЯЩИЙ!» … или О Конвертации Данных ред.3 (КД 3) и обменах в универсальном формате Enterprise Data… доступным русско-народным языком

Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8 v8 КД Абонемент ($m)

Тем, кто хочет быстро разобраться с темой инструмента Конвертация данных 3.0 и технологией обмена по новому формату 1С, активно применяемому во всех новых конфигурациях от 1С на БСП, расширяющем возможности интеграции, пакет полезных материалов.

1 стартмани

13.06.2017    21740    142    Davlad_A    16    

1С:Интеграция ЕГАИС + Инвентаризация на ТСД Промо

Обработка справочников Обмен через XML Оптовая торговля Оптовая торговля v8 1cv8.cf Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Абонемент ($m)

Интеграция ЕГАИС модуля для 1С: 8.3 + модуль WMS контура для инвентаризации алкогольных марок на ТСД.

1 стартмани

10.12.2015    36915    27    JetBrain    5    

"Конвертация данных" + Git. Решение проблемы различий в файлах

Инструментарий разработчика Обмен через XML v8 КД Абонемент ($m)

Как известно, типовая конфигурация «Конвертация данных» обладает одним недостатком, мешающим работать с ней в Git-е. Если выгруженные из нее правила обмена загрузить в другую КД, а потом снова выгрузить, то полученные два файла будут очень сильно отличаться друг от друга, и при сравнении (diff) доработок будет невозможно провести код-ревью, равно как найти сами изменения, которые закоммитил разработчик.

1 стартмани

08.06.2017    25170    41    stas_ganiev    13    

Пообъектный разбор разметки

Инструментарий разработчика Обмен через XML v8 Абонемент ($m)

Обработка облегчает разбор разметки XML и позволяет обращаться с узлами (элементами, тэгами) почти как с объектами, не привлекая XDTO и не описывая формат предварительно. При этом обходится без загрузки всего файла в оперативную память, что позволяет читать файлы любого размера.

1 стартмани

26.04.2017    9345    4    9-pm    8    

XMPP(jabber) на чистом 1С

Обмен через XML v8 1cv8.cf Абонемент ($m)

На сайте infostart, есть несколько реализаций работы 1С с протоколом XMPP (jabber), но в основном они на использование сторонних библиотек (нативных), которые надо регистрировать в операционке (и только в винде), или на основе других систем - php, python и т.п. Предлагаю пример реализации отправки сообщения через этот протокол только средствами 1С.

1 стартмани

26.12.2016    16437    14    kodnik    10    

Простой универсальный обмен между отличающимися конфигурациями. Код открыт! (СериализаторXDTO,ПостроительDOM) +примеры использования Промо

Обмен через XML v8 1cv8.cf Абонемент ($m)

Очень удобная обработка всего с двумя "командами": Выгрузить(Что, Куда) Загрузить(Откуда)

1 стартмани

02.09.2015    23942    100    Mi4man    15    

Загрузка XML в дерево значений

Обмен через XML v8 1cv8.cf Абонемент ($m)

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

1 стартмани

17.11.2016    25151    52    starik-2005    26    

Навигатор по файлу обмена Промо

Универсальные обработки Обмен через XML v8 1cv8.cf Абонемент ($m)

Просмотр содержимого XML-файла выгрузки данных

1 стартмани

02.04.2014    30013    37    RocKeR_13    24