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

13.01.13

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

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

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

Наименование Файл Версия Размер
xdto_packets.zip
.zip 16,70Kb
334
.zip 16,70Kb 334 Скачать

«Глокая куздра штеко будланула бокра и курдячит бокрёнка»
(первая ассоциация, пришедшая в голову
после прочтения "мана" о 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

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

См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134931    722    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68416    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34168    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46289    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9207    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20244    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 45650 руб.

10.07.2018    67442    41    122    

46

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150712    367    375    

501
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
99. IgorS 43 19.11.14 12:02 Сейчас в теме
Хорошая статья. С XML работаю уже довольно давно, но всё в "ручном режиме" - ЧтениеXML, ЗаписьXML. Разобраться с XDTO никак руки не доходили. Теперь полработы сделано:)
100. engineer74 26.07.15 16:24 Сейчас в теме
Может кто-нибудь напишет статью, посвященную обмену между базами разных конфигураций на основе xdto. когда объект1 из База1 надо "запихать" в объект2 Базы2
101. ZLENKO 398 29.07.15 16:08 Сейчас в теме
(100) engineer74, "Может кто-нибудь напишет статью, посвященную обмену между базами разных конфигураций на основе xdto. когда объект1 из База1 надо "запихать" в объект2 Базы2"

Я бы написал, но в первой версии обмена через XDTO код не особо изящный получился - заплюют :-)
А переписывать смысла особо нет...
engineer74; +1 Ответить
102. Casey1984 3 18.09.15 12:28 Сейчас в теме
"Итак, говоря простым языком, фабрика объектов - это некое "устройство", умеющее принять на входе описание объекта и сгенерировать по этому описанию объект определенного типа, "пригодный к употреблению"." - вот! Вот чего иногда не хватает в документации/статьях и т.п., так это кратких и наглядных описаний. Однозначно плюс.
103. Алексей777 92 16.10.15 10:31 Сейчас в теме
Спасибо, отличная статья.
104. AlexanderKai 18.11.15 13:39 Сейчас в теме
Есть схема xsd. При записи через Фабрика.ЗаписатьXML в xml-файле проставляются типы, как записать xml файл без типов?
105. NN2P 414 20.01.17 10:28 Сейчас в теме
Александр, спасибо за отличную статью. Нашел опечатку:

ФайлыXSD.Добавить("D:\Temp\adderss.xsd");

И ниже по коду:

ИмяФайла = "D:\Temp\address.xml";

Мелочь, конечно, но прошу исправить.
106. zfilin 2337 24.01.17 18:01 Сейчас в теме
(105) Спасибо за хороший отзыв.

Это не опечатка, все верно.
Командой ФайлыXSD.Добавить("D:\Temp\adderss.xsd"); в массив добавляется путь к СХЕМЕ, а
это - ИмяФайла = "D:\Temp\address.xml"; просто имя СОХРАНЯЕМОГО xml-файла.
107. Gorr 40 01.03.17 17:09 Сейчас в теме
Лучшая статья про XDTO. Коротко и по сути! Плюс!
108. fedor40 705 04.07.17 21:24 Сейчас в теме
А как быть с иерархическим справочником. Как его описать и загрузить?
109. ZhakeKZ 08.01.18 14:21 Сейчас в теме
Спасибо большое !
Отличная статья !

По Вашему примеру написал выгрузку данных в XML
Получатель просит к нему отдельно XSD файл.
Можете подсказать, как выгрузить XSD схему в другой файл ?

Вот мой код:
	ХМЛ_данные=Новый ЗаписьXML;
	ХМЛ_данные.ОткрытьФайл("C:\TEMP\Organiz.xml");
	ХМЛ_данные.ЗаписатьНачалоЭлемента("Root_1С");
	ВыборкаСпр=Справочники.Организации.Выбрать();
	Пока ВыборкаСпр.Следующий() Цикл 
		Если ВыборкаСпр.ЭтоГруппа Тогда Продолжить; КонецЕсли;
		ТекОбъект = ВыборкаСпр.ПолучитьОбъект();
		ФабТек = СериализаторXDTO.ЗаписатьXDTO(ТекОбъект);
		ФабрикаXDTO.ЗаписатьXML(ХМЛ_данные, ФабТек,,,,НазначениеТипаXML.Явное);
	КонецЦикла;
	ХМЛ_данные.ЗаписатьКонецЭлемента(); // Root_1С
	ХМЛ_данные.Закрыть();
Показать
110. zfilin 2337 10.01.18 20:08 Сейчас в теме
(109) Возможно, вам поможет вот этот пункт -
Прикрепленные файлы:
111. zfilin 2337 10.01.18 20:10 Сейчас в теме
(109) Разумеется, будет выгружено xsd всей конфы, думаю, что там можно порезать и оставить только необходимое.
К сожалению, как сделать это программно или выгрузить xsd только для одного объекта (спр.Орагнизации) я не подскажу. Давно не занимался этим вопросом.
112. Negator 03.07.18 10:58 Сейчас в теме
Народ, а подскажите как используя XSD-схему собирать XML с несколькими корневыми свойствами?
Я создал фабрику XDTO, создал столько объектов сколько у меня корневых свойств (с соответствующими типами), заполнил их - как их теперь собрать в один XML-файл?
113. Vallerikk 19.07.18 13:54 Сейчас в теме
Друзья, подскажите, как реализовать такое?


<offer id="338850">
<name>а/ш 275/35*20 W TS830 P FR XL CONTINENTAL TBL</name>
<param name="Артикул">01324249</param>
<param name="Артикул производителя">0353964</param>
<param name="Ширина протектора">275</param>
<param name="Высота профиля">35</param>
<param name="Диаметр обода в дюймах">20"</param>
<param name="Индекс скорости">W</param>
<param name="Индекс нагрузки">102</param>
<param name="Тип шины">фрикционная шина</param>
<param name="Сезон">зима</param>
<param name="Бренд">CONTINENTAL</param>
<param name="Модель">TS830 P</param>
<stores>
<store id="2791f977-730d-11db-ad64-001111410f5e">1</store>
<store id="3d120f7d-ae54-11e7-897d-5cf3fc94635c">4</store>
</stores>
</offer>
114. user1082361 04.11.18 13:40 Сейчас в теме
Подскажите с такой проблемой:
читаю файлы xml с сайта ФНС. Через фабрику XDTO обхожу циклом данные.
На одном файле выдает ошибку "Итератор для значения не определен". В проблемном файле данные по одной организации.
Цикл простейший:
Для Каждого Строка Из Данные.Документ Цикл
Для Каждого Контрагент ИЗ Контрагенты Цикл
Если СокрЛП(Контрагент.ИНН) = Строка.СведНП.ИННЮЛ Тогда
Контрагент.СведенияССЧР = Строка.СведССЧР.КолРаб;
Контрагент.ГодОтчетности = Прав(Строка.ДатаСост,4);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Как обойти эту проблему?
P.S.: С XDTO только начал работать :)
115. user638318_itc.35 06.11.18 10:48 Сейчас в теме
Добрый день!

Статья замечательная, достаточно подробно описано, но возникают более глубокие вопросы.

Я создаю xml файл используя пакеты XDTO. Файл сформировался отлично, данные в него загружены.
При открытии файла в notepad++ в нем отсутствуют переносы строк. Т.е. он в одну строку.
В принципе, при открытии через XML Explorer или Edge проблем никаких и нормально парсится, но все равно, удобнее смотреть через notepad++.

Так же выявился "косяк" с пространствами имен.
XDTO самостоятельно присваивает свои пространства имен, дублируя полный адрес в каждой записи.
Например:
<d4p1:Сумма>0.00</d4p1:Сумма>

Буду признателен за разъяснения и новые знания.
116. user638318_itc.35 07.11.18 08:47 Сейчас в теме
(115) Вопрос снят, разобрался... )
Оказывается, для того, чтобы 1С сделала файл с переносами строк необходимо прописать параметры документа.
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина, Истина);

Для решения проблемы с пространствами имен, я вначале создал корневой элемент руками, прописал все пространства имен через метод ЗаписатьСоответствиеПространстваИмен, а уже потом использовал XDTO для всех остальных записей.
XDTO увидел эти псевдонимы и корректно создал файл.
118. user1654599 02.01.23 14:37 Сейчас в теме
Объясните такую вещь. Есть документ с табличной частью и реквизитами в 1с Надо из этого документа сделать XML файл, где реквизиты документа соответствовали бы узлам XML, а данные этих реквизитов записывались бы в соответствующие узлы XML, документа как это сделать. Я не понял.
119. user1654599 02.01.23 18:27 Сейчас в теме
По идее, все это должно выглядеть совсем иначе. Необходимо вместо дуратского XDTO создать конструктор XML документа. Суть конструктора очень простая. В каждом др документе в конце создаётся конструктор xml документа, затем по аналогии с конструктором печати определяются необходимые узлы документа и задаётся их иерархия по следующкму алгоритму, определи реквизиты документа, выступающие в роли главных узлов xml схемы, определи реквизиты документа 1с выступающие в качестве подчинённых узлов документа, типы данных определяются исходя из типов реквизитов, в конце или в начале работы конструктора xml документа просьба задать пространство имён и все конструктор сам по аналогии с констуктором печати создаст нужный xml документ. Точно также должен быть создан конструктор чтения XML документа. В котором, те или иные атрибуты XML документа связываются с соответствующими реквизитами справочников или реквизитами документов или создаются новые справочники и документы с соответствующими реквизитами, которые соответствуют узлам xml. И все
Никакого XDTO, не нужно.
Оставьте свое сообщение