Имя: Пароль:
1C
1С v8
Ошибка преобразования данных XDTO
0 FReIM
 
01.09.15
09:51
Доброе утро.

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

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

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

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

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

<PatientID IsNullValue="true" xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchem... »»" />.

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

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

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

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

Обработка проверки
http://ifolder.su/44151012
Конфигурация пустышка, но с пакетами.
http://ifolder.su/44151013
Файл на котором все и падает
http://ifolder.su/44151014
1 Radkt
 
01.09.15
14:16
(0) Читал как текст, так хмл от пфр тоже не разбиралась 1с кой
2 Serginio1
 
01.09.15
14:21
Попробуй загружаться не через глобальную фабрику а через

Фабрика=СоздатьФабрику(ПутьК_XSD)
Ну и многого 1С не понимает
3 Radkt
 
01.09.15
15:05
v8: Чтение xml по схеме xsd
возможно подойдет
4 Serginio1
 
01.09.15
15:39
(3) Все это заменяет одна строка
Фабрика = СоздатьФабрикуXDTO(ПутьК_XSD);
5 FReIM
 
02.09.15
16:34
Это уже все делал.
и из набора схем и в конфу пакеты грузил и даже через  СоздатьФабрикуXDTO(). Толку ноль.
И разбирал. Через создать фабрику тоже.
Сейчас распарсил через Документ DOM. Но просто не понимаю. Неужели 1с не понимает сложные типы данных и директивы импорта. Все есть в конфе, а не работает. Ни на 8.2 ни на 8.3.
6 FReIM
 
02.09.15
16:48
<xs:complexType name="EsbString">
                <xs:simpleContent>
                    <xs:extension base="xs:string">
                        <xs:attribute default="false" name="IsNullValue" type="xs:boolean" />
                    </xs:extension>
                </xs:simpleContent>
            </xs:complexType>
Не понимает сию конструкцию 1с.
7 Serginio1
 
02.09.15
16:52
Попробуй через v8: v8: Использование сборок .NET в 1С 7.x и 8.x
специально для этого и делал
8 Serginio1
 
02.09.15
17:30
9 FReIM
 
03.09.15
14:29
Спасибо, но немного не то. Схема есть, предоставлена разработчиком. Взаимодействие с веб сервисом не нужно. Разобрал XML с помощью DOM. DOM не понимает специальные атрибуты.
Но просто не понятно почему XML не разбирается с помощью XDTO. То ли недоработка платформы, то ли не соответствие данной схемы стандартам принятым в 1с.
10 Serginio1
 
03.09.15
14:41
(9) Так я тебе и показываю как десериализовать из XML в объект Net. 1C много чего не понимает.
11 Serginio1
 
03.09.15
14:44
То есть ты с помощью wscfblue описываешь классы Net.
Например
public Object ПолучитьЗаказИзФайла(string ИмяФайла)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(EdiSoftDocumentOrder.DocumentOrder));

            EdiSoftDocumentOrder.DocumentOrder res;
            using ( FileStream fs = new FileStream(ИмяФайла, FileMode.Open))
            {
            res = (EdiSoftDocumentOrder.DocumentOrder) serializer.Deserialize(fs);
        }

            return new AutoWrap(res);

        
        
        }
12 jk3
 
06.09.15
23:03
(0) Считываешь XML в строку, вырезаешь через СтрЗаменить() тэги, которые стандартная 1С-ная фабрика XDTO не понимает, и скармливаешь полученную строку фабрике. В простых случаях это помогает.