Выгрузка данных XML (XDTO). Обмен XML.

1. Grubly 25.07.18 00:30 Сейчас в теме
Товарищи, доброго дня.

Только начинаю постигать работу с XML в 1С. Изучаю пакеты XDTO.

Прошу вашей помощи, столкнулся со следующей проблемой:

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

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

Функция СериализоватьОбъект(Ссылка) Экспорт
    Значение = Ссылка.ПолучитьОбъект();    
    ЗаписьXML = Новый ЗаписьXML();
    ЗаписьXML.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение);
    СтрокаXML = ЗаписьXML.Закрыть();

    Возврат СтрокаXML;
    
КонецФункции 

Показать


Функция возвращает XML-файл следующего вида:

<DocumentObject.СчетНаОплатуПокупателю 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>b8e93499-0153-11e6-bdd5-00306758cebf</Ref>
    <DeletionMark>false</DeletionMark>
    <Date>2016-04-13T13:00:19</Date>
    <Number>ПК00-000001</Number>
    <Posted>true</Posted>
    <Организация>a2028b2c-c124-11e1-886b-001e5848397d</Организация>
    <Склад>a2028b32-c124-11e1-886b-001e5848397d</Склад>
    <ПодразделениеОрганизации>00000000-0000-0000-0000-000000000000</ПодразделениеОрганизации>
    <Контрагент>b8e93494-0153-11e6-bdd5-00306758cebf</Контрагент>
    <ДоговорКонтрагента>b8e93495-0153-11e6-bdd5-00306758cebf</ДоговорКонтрагента>
    <АдресДоставки>196158, г. Санкт-Петербург, Московское ш., дом № 28, литера А, помещение 1Н</АдресДоставки>
    <ОрганизацияПолучатель>a2028b2c-c124-11e1-886b-001e5848397d</ОрганизацияПолучатель>
    <СтруктурнаяЕдиница>a58e6af7-7925-11e3-a577-00306758cebf</СтруктурнаяЕдиница>
    <Ответственный>aa00559e-ad84-4494-88fd-f0826edc46f0</Ответственный>
    <Комментарий/>
    <ВалютаДокумента>9c00bd3d-c124-11e1-886b-001e5848397d</ВалютаДокумента>
    <КратностьВзаиморасчетов>1</КратностьВзаиморасчетов>
    <СуммаСкидки>0</СуммаСкидки>
    <КурсВзаиморасчетов>1</КурсВзаиморасчетов>
    <СуммаВключаетНДС>true</СуммаВключаетНДС>
    <СуммаДокумента>40000</СуммаДокумента>
    <ТипЦен>00000000-0000-0000-0000-000000000000</ТипЦен>
    <УдалитьУчитыватьНДС>false</УдалитьУчитыватьНДС>
    <УдалитьСтатусОплаты/>
    <Руководитель>a58e6afb-7925-11e3-a577-00306758cebf</Руководитель>
    <ГлавныйБухгалтер>a58e6afb-7925-11e3-a577-00306758cebf</ГлавныйБухгалтер>
    <УдалитьЗаРуководителяПоПриказу/>
    <УдалитьЗаГлавногоБухгалтераПоПриказу/>
    <ДокументБезНДС>false</ДокументБезНДС>
    <ДополнительныеУсловия>bd299647-dc5b-11e4-88f9-00306758cebf</ДополнительныеУсловия>
    <ЗаГлавногоБухгалтераНаОсновании>00000000-0000-0000-0000-000000000000</ЗаГлавногоБухгалтераНаОсновании>
    <ЗаРуководителяНаОсновании>00000000-0000-0000-0000-000000000000</ЗаРуководителяНаОсновании>
    <Товары>
        <Номенклатура>b8e93498-0153-11e6-bdd5-00306758cebf</Номенклатура>
        <Содержание/>
        <Количество>2</Количество>
        <Цена>20000</Цена>
        <Сумма>40000</Сумма>
        <ПроцентСкидки>0</ПроцентСкидки>
        <СуммаСкидки>0</СуммаСкидки>
        <СтавкаНДС>НДС18</СтавкаНДС>
        <СуммаНДС>6101.69</СуммаНДС>
    </Товары>
</DocumentObject.СчетНаОплатуПокупателю>

Показать


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

Так как конфигурация базовая и не имеет возможности редактирования, я создал расширение, выгрузил из основной конфигурации XML-схему (Экспорт XML-Схемы данных конфигурации) и загрузил данную схему в новый пакетXDTO в созданном расширении.
В данном пакете я переименовал объект, чтобы изменить название тега "АдресДоставки" заменил на "AdressDostavki"


Далее в коде я использовал ФабрикаXDTO:
Функция ФабрикаОбъект(Ссылка) Экспорт
    
    
    МойXML = Новый ЗаписьXML;
    ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
    МойXML.ОткрытьФайл("C:\Users\811776\Desktop\ВыгрузкаСчетов",  ПараметрыЗаписиXML);
    МойXML.ЗаписатьОбъявлениеXML();
    
    
    
    ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config","DocumentObject.СчетНаОплатуПокупателю");
    
    МойXML.Закрыть();

    
КонецФункции


Показать


Но в "ТипОбъекта" осталось старое значение "АдресДоставки" вместо "AdressDostavki"

Я подумал что проблема в пространстве имен и попробовал изменить пространство имен в моём пакетеXDTO в расширении, но при переименовании 1С выдает ошибку^
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}DocumentRef.ПередачаОСВАренду' свойства 'Ref' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.Контрагенты' свойства 'Контрагент' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.ДоговорыКонтрагентов' свойства 'ДоговорКонтрагента' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.Организации' свойства 'Организация' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.Пользователи' свойства 'Ответственный' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enter

.....и т.д.


Знающие люди, подскажите, что это за ошибка и как с ней бороться?
Подразумеваю что это из-за переименования стандартно пространства имен
"http://v8.1c.ru/8.1/data/enterprise/current-config"




____________________________________________________________­_________
Конфигурация "Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.53.39)",
Платформа 1С:Предприятие 8.3 (8.3.12.1529)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ZOMI 143 25.07.18 16:32 Сейчас в теме
Оспади... Согласуете все реквизиты, которые нужны и за 1 час делается внешняя обрботка/печформа с выгрузкой

в виде

    ЗаписьXML = Новый ЗаписьXML;
        
        
        ЗаписьXML.ОткрытьФайл(ПутьККаталогу+"\"+НазваниеФайла, "windows-1251"); //Открываем файл из переменной «Путь», указанной на форме обработки
        ЗаписьXML.ЗаписатьОбъявлениеXML(); // Так как мы создаем документ-XML ,а не фрагмент, то необходимо в начало его поместить объявление    
        
        ЗаписьXML.ЗаписатьНачалоЭлемента("Файл"); //записываем первый элемент
        
        ЗаписьXML.ЗаписатьНачалоЭлемента("СвУчДокОбор");
        ЗаписьXML.ЗаписатьАтрибут("ИдПол", ИдКонтрагента);
        ЗаписьXML.ЗаписатьНачалоЭлемента("СвОЭДОтпр");
        ЗаписьXML.ЗаписатьАтрибут("ИННЮЛ", ИНН");
        ЗаписьXML.ЗаписатьАтрибут("ИдЭДО", ИдЭДО);
        
        ЗаписьXML.ЗаписатьКонецЭлемента();
        ЗаписьXML.ЗаписатьКонецЭлемента();/
        
        ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
Показать


и т.д.

В чем необходимость XDTO в вашем случае?
LomayaZakat; +1 Ответить 1
3. Grubly 25.07.18 17:06 Сейчас в теме
(2) Ну я посчитал, что так будет проще в дальнейшем изменять и дополнять существующую структуру. По итогу ведь 1С будет принимать файлы из сторонней ИС, поэтому в дальнейшем потребуется загрузка XML в соответствии с тем, что я вышлю. А загрузка XML с помощью пакетов XDTO вроде как самая быстрая и удобная из возможных.

Поэтому и выбрал XDTO, чтобы создать структуру, выгрузить для сторонней ИС и в дальнейшем загружать файлы XML исходя из исходной структуры XDTO.

Про Ваш способ записи я читал, но мне показалось неудобным выгружать XML без пакетаXDTO, а загружать с пакетомXDTO

Если я неправ, прошу меня поправить )
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот