Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Чтение XDTO

Добрый день.
Пытаюсь прочитать такой xml файл с помощью XDTO:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация>
    <Документ>
        <Ид>d9679a46-7041-11e7-89cf-50e549e0b489</Ид>
        <Номер>MS-0000947б</Номер>
        <Дата>2017-07-24</Дата>
        <ХозОперация>Отпуск товара</ХозОперация>
    </Документ>
</КоммерческаяИнформация>
Сделал XDTO-пакет:

Пытаюсь прочитать
Код:
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
   
    тОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.commerceml.org", "КоммерческаяИнформация"));
   
Получаю ошибку

Где я накосячил?
Ответ:
Но, но, полегше ))
Вопрос: Чтение из XML в объект XDTO - ругается на недостающе тэги

Добрый день. Подскажите, плиз, есть ли возможность читать объект XDTO не целиком по схеме, а только те тэги, что есть в наличии в файле? Т.е. в схеме определено 10 полей, а фактически выгружается 8, т.к. 2 оставшихся в текущем контексте смысла не имеют.

фрагмент кода:

Чтение = Новый ЧтениеXML;
Попытка
    Чтение.ОткрытьФайл(Файл);
Исключение
    Возврат Неопределено;
КонецПопытки;

Чтение.Прочитать();//читаем заголовок. его надо пропустить

Чтение.Прочитать();//читаем тэг <document> 


Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл
    Данные = ФабрикаXDTO.ПрочитатьXML(Чтение); <------ругается тут. 

пример ошибки:

{ВнешняяОбработка.ИмпортXML_модуль.МодульОбъекта()}: Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {xbd}Account
Проверка свойства 'AccountType':
    форма: Элемент
    имя: {xbd}AccountType
    тип: {
Отсутствует обязательное свойство
Ответ: уже разобрался. сделал их необязательными в схеме. В пакете XDTO в поле "Минимальное количество" нужно поставить 0 (по-умолчанию там указано 1)
Вопрос: Чтение xml с помощью XDTO

Добрый день.
Можно ли прочитать с помощью XDTO файл такой структуры?
Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!--Остатки 08.09.2016 16:30:21-->
<data>
  <tires>
    <cae>001139</cae>
    <rest_sorm>0</rest_sorm>
    <rest_mkrs>0</rest_mkrs>
    <rest_sk2>0</rest_sk2>
    <rest_sk3>0</rest_sk3>
    <rest_sk4>0</rest_sk4>
    <rest_sk5>0</rest_sk5>
    <rest_sk6>более 40</rest_sk6>
    <rest_sk8>0</rest_sk8>
  </tires>
  <tires>
    <cae>001139</cae>
    <rest_sorm>0</rest_sorm>
    <rest_mkrs>0</rest_mkrs>
    <rest_sk2>0</rest_sk2>
    <rest_sk3>0</rest_sk3>
    <rest_sk4>0</rest_sk4>
    <rest_sk5>0</rest_sk5>
    <rest_sk6>более 40</rest_sk6>
    <rest_sk8>0</rest_sk8>
  </tires>
  <rims>
    <cae>001139</cae>
    <rest_sorm>0</rest_sorm>
    <rest_mkrs>0</rest_mkrs>
    <rest_sk2>0</rest_sk2>
    <rest_sk3>0</rest_sk3>
    <rest_sk4>0</rest_sk4>
    <rest_sk5>0</rest_sk5>
    <rest_sk6>более 40</rest_sk6>
    <rest_sk8>0</rest_sk8>
  </rims>
  <rims>
    <cae>001139</cae>
    <rest_sorm>0</rest_sorm>
    <rest_mkrs>0</rest_mkrs>
    <rest_sk2>0</rest_sk2>
    <rest_sk3>0</rest_sk3>
    <rest_sk4>0</rest_sk4>
    <rest_sk5>0</rest_sk5>
    <rest_sk6>более 40</rest_sk6>
    <rest_sk8>0</rest_sk8>
  </rims>
</data>
Если бы все "rims" и "tires" были бы сгруппированы в свои теги верхнего уровня, например, "all_rims", "all_tires" тогда было бы понятно какой структуры должен быть XDTO пакет.
А тут что-то не соображу.
Ответ:
Да, смотри в сторону асинхронных вызовов
Вопрос: Передать пространство имен фабрики XDTO в другую БД

Я создал описание сложного объекта в XDTO, мне нужно обратиться к нескольким различным конфигурациям и получить оттуда заполненный объект XDTO на основании этого описания.

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

Я не знаю как передать описание объекта XDTO в другую конфигурацию, сериализовать его не удается.

Может кто-нить что-нить подсказать?
Ответ: Zerro,

Спасибо!
Можно сказать так и сделал
Вопрос: Обмен данными. Пакет XDTO. Регистр сведений

Добрый день.
Такая задача, произвести обмен данными между двумя ИБ.
Нужно выгрузить записи для регистра сведений.
Как правильно сформировать xdto схему, независимый регистр сведений? Пробовал экспортировать схему, но не понимаю, как по этой схеме записывать(Проблема с отбором).
Как правильно сформировать данные по созданной схеме в регистр сведений?
У кого-нибудь подобная задача была?
Ответ: В дереве конфигурации можно экспортировать xsd схему, описывающая структуру каждого созданного в конфигурации объекта. Если описывать подробнее, то мне нужно из одной базы, записи регистра сведений(подчиненный регистратору) перенести в другую базу, где регистр сведений независимый. Проблема с формированием xml. Вместо выборки через запрос у меня выборка из ПланаОбмена(зарегистрированные изменения). Проблема в описании отбора(Filter), через пакет xdto. Пакет xdto(xsd схема принимающей стороны) содержится только в ИБ источника.
Вопрос: Ошибка преобразования данных XDTO составного типа

Народ, не нашёл ответа на такой вопрос.
Есть реквизит составного типа (простые типы + ссылка справочника). В схеме xsd описывается как:
<xs:element name="Значение" nillable="true"/>

При выгрузке значений примитивных типов - всё нормально.
При попытке присвоить ссылку вываливается ошибка
Ошибка отображения типов:
Отображение типа 'СправочникСсылка.ЗначенияСвойствОбъектов' в тип '{'
Есть предложения по решению, кроме как вручную создавать объект XDTO из ссылки?
Ответ: Ап.
Можно ли заставить 1С автоматически преобразовывать ссылку для реквизита составного типа (если Значение примитивного типа, всё работает, если ссылка - валится ошибка):

НовыйОбъектXDTO["Значение"] = Значение;[/1С]


Если ручками преобразовывать Значение к объекту XDTO, всё благополучно отрабатывает:

[1С]ТипXDTOРеквизита = ФабрикаXDTOКорреспондента.Тип(";, "CatalogRef.ЗначенияСвойствОбъектов");                    НовыйОбъектXDTO["Значение"] = ФабрикаXDTOКорреспондента.Создать(ТипXDTOРеквизита, Значение.УникальныйИдентификатор());

Вопрос: Сравнить пакеты XDTO

Всем привет. Обновляю конфу. В пакет XDTO EnterpriseData_1_3_7 вносил изменения. В обновлении также есть изменения этого пакета. Блин как посмотреть то что было внесено мной?
ОтчетОСравнении дает только
Ответ:
Нашел решение.
В конвертации 3.0 есть механизм сравнения версий форматов.
Формат данных - Сравнение версий формата.
В конфигураторе у измененной базы изменил имя пространства имен. И экспортировал схему в файл.
У типовой просто экспортировал схему в файл.
Затем загрузил эти версии форматов в конвертацию и воспользовался сравнением.
Вопрос: XDTO

Есть 2 базы, одна база опубликована на веб сервере. Есть типовой обмен между этими базами. Выполняются запросы WSПрокси.execute(Запрос) и читаются данные. Мне нужно добавить новые объекты к этому чтению. Подскажите куда смотреть, из какой базы и т.д.
Ответ: () нет это совсем другое
Вопрос: XDTO - Тип свойства не определен

Всем привет.
Камраден, подскажите кто знает.
Конфы самопильные.
Ситуация:
Есть два xdto-пакета. Первый описывает структуру справочника "Договоры", второй описывает документ "Поступление" в котором есть реквизит "Договор".
Два пакета связаны с тем, что это два разных web-сервиса.
Думал максимально облениться и в пакете документа для типа "Договор" указать договор из первого пакета. (см. скрины). Пространство имен обозвал одинаково. Тип "Contract" установил в "Открытый", а то мало ли, private и пошел вон отседова.
При проверке выводится болт в служебных сообщениях.

Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: Invoice пакет:
Тип '{http://www.bla-bla.ru/apt_mis}Contract' свойства 'Contract' не определен

Что можно сделать? Или не выпендриваться и скопировать содержимое пакета "Договор" в документ?

ЗЫ. По форуму искал. Не нашел.
ЗЗЫ. Но искал хреново. =)
Ответ: Чета похоже починил.
Разбил два пакета на разные пространства имен и в нужный пакет добавил директиву импорта.
Вопрос: Ошибка преобразования данных XDTO

Доброе утро.

При разборе XML файла фабрикой XDTO выпадает ошибка

{Форма.Форма.Форма()}: Ошибка при вызове метода контекста (ПрочитатьXML)
Объект=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: IsNullValue Форма: Атрибут Тип: {... »»

По идее, без указания типа объекта, должен получиться не сериализованный объект XDTO.

Даже если описать все типы объектов, все равно выпадает эта ошибка.

Падает на строчке

<PatientID IsNullValue="true" xsi:nil="true" xmlns:xsi="... »»" />.

Разработчики системы источника говорят, что тег IsNullValue="true" нужен для установки значения в значение Null,

если оставить просто xsi:nil="true" xmlns:xsi="... »»", то значение будет просто проигнорировано.

Но именно из-за этого тега у нас не работает загрузка данных в 1с из ESB шины данных.

Вопрос, можно ли как-то обработать данный тег (в идеале) или хотя бы проигнорировать?

Обработка проверки

Конфигурация пустышка, но с пакетами.

Файл на котором все и падает

Ответ: () Все это заменяет одна строка
Фабрика = СоздатьФабрикуXDTO(ПутьК_XSD);