|   |   | 
| 
 | Чтение XML из фабрики XDTO | ☑ | ||
|---|---|---|---|---|
| 0
    
        alex_inter 04.02.14✎ 13:24 | 
        Всем добрый день!
 Очень прошу помощи,так как сам уже бьюсь головой об стену от отчаяния-третье сутки пошли,как не могу решить коварную проблему: Есть работающий обмен между двумя базами(причем,работающий довольно давно). Со стороны периферии с использованием стандартного механизма обмена данных (ПланыОбмена.Периферия.ЭтотУзел().ПолучитьОбъект().ЗаписатьСообщениеОбмена()) выгружаются данные в XMLку. На принимающей стороне создается ФабрикаSDTO : Фабрика = СоздатьФабрикуXDTO(Пути); В путях указаны пути к загруженной СхемеXML, содержащей описания всего обмена. И затем читаются оттуда данные: Фабрика.ПрочитатьXML(ЧтениеXML); Что мне надо было добавить: Справочник, Регистр сведений с данными по этому справочнику и в уже существующий документ табличную часть с элементом этого справочника. Как итог: справочник сам переносится (ПриборыУчета), регистр сведений ПоказанияПрибороУчета тоже переносится. А добавленная табличная часть приборы учета в документе ФактВыпускаДеталей не переносится. И,причем, хитро как-то себя ведет: Она состоит вот из чего: <xs:complexType name="DocumentObject.ФактВыпускаДеталей"> <xs:sequence> <xs:element name="Ref" type="tns:DocumentRef.ФактВыпускаДеталей"/> <xs:element name="DeletionMark" type="xs:boolean"/> <xs:element name="Date" type="xs:dateTime"/> <xs:element name="Number" type="xs:string"/> <xs:element name="Posted" type="xs:boolean"/> <xs:element name="Утвержден" type="xs:boolean"/> <xs:element name="Комментарий" type="xs:string"/> <xs:element name="Участок" nillable="true"/> <xs:element name="КомментарийТабель" type="xs:string"/> <xs:element name="ЦеныКонкурентов" type="tns:DocumentTabularSectionRow.ФактВыпускаДеталей.ЦеныКонкурентов" minOccurs="0" maxOccurs="99999"/> <xs:element name="ПриборыУчета" type="tns:DocumentTabularSectionRow.ФактВыпускаДеталей.ПриборыУчета" minOccurs="0" maxOccurs="99999"/> <xs:element name="Табель" type="tns:DocumentTabularSectionRow.ФактВыпускаДеталей.Табель" minOccurs="0" maxOccurs="99999"/> <xs:element name="ТабельВспомогательнойСлужбы" type="tns:DocumentTabularSectionRow.ФактВыпускаДеталей.ТабельВспомогательнойСлужбы" minOccurs="0" maxOccurs="99999"/> </xs:sequence> Сама табличная часть: <xs:complexType name="DocumentTabularSectionRow.ФактВыпускаДеталей.ПриборыУчета"> <xs:sequence> <xs:element name="ТекущиеПоказания" type="xs:decimal"/> <xs:element name="ПоказаниеНаНачалоМесяца" type="xs:decimal"/> <xs:element name="ПредыдущиеПоказания" type="xs:decimal"/> <xs:element name="РасходСНачалаМесяца" type="xs:decimal"/> <xs:element name="ПредыдущаяДата" type="xs:dateTime"/> <xs:element name="ПриборУчета" type="tns:CatalogRef.ПриборыУчета"/> <xs:element name="ЕдИзм" type="tns:CatalogRef.КлассификаторЕдиницИзмерения"/> </xs:sequence> </xs:complexType> Повторюсь,без Приборов учета все переносится нормально. И,примитивные типы в самой табличной части отдельно тоже переносятся, то есть,если убрать 2 последних строки, касающихся ссылок на справочники(Приборы учета и Ед изм), то все работает. Как выше описано, в документе 3 табличные части,если оставить строку с данными по приборам учета и какую-нибудь одну(например,цены конкурентов), то тоже все работает. А все 3 табличные части не переносит. Вот сообщение ошибки: {ПланОбмена.АвтоломXDTO.МодульОбъекта(32)}: Ошибка при вызове метода контекста (ПрочитатьXML) ОбъектXDTO = ФабрикаАвтолом.ПрочитатьXML(ЧтениеXML); по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {http://v8.1c.ru/8.1/data/enterprise/current-config}DocumentObject.ФактВыпускаЛома - [42,5] Проверка свойства 'ПриборыУчета': форма: Элемент имя: {http://v8.1c.ru/8.1/data/enterprise/current-config}ПриборыУчета тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}DocumentTabularSectionRow.ФактВыпускаЛома.ПриборыУчета по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: {http://v8.1c.ru/8.1/data/enterprise/current-config}DocumentObject.ФактВыпускаЛома Проверка свойства 'ПриборыУчета': форма: Элемент имя: {http://v8.1c.ru/8.1/data/enterprise/current-config}ПриборыУчета тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}DocumentTabularSectionRow.ФактВыпускаЛома.ПриборыУчета Не установлено значение одного из следующих свойств: Какого и почему-не понятно. Но,ощущение,что не нравится ему,что по одному документу я пытаюсь большще,чем 2 строки табличной части впихнуть. Установка nillable=true не помогла. <xd:DocumentObject.ФактВыпускаДеталей xsi:type="xd:DocumentObject.ФактВыпускаДеталей"> <xd:Ref>6d28ca0a-2fbd-11e3-84f6-6c626dd3b698</xd:Ref> <xd:DeletionMark>false</xd:DeletionMark> <xd:Date>2013-11-04T12:00:00</xd:Date> <xd:Number>CNnkzpr0308</xd:Number> <xd:Posted>true</xd:Posted> <xd:Утвержден>false</xd:Утвержден> <xd:Комментарий/> <xd:Участок xsi:type="xd:CatalogRef.ПодразделенияОрганизаций">dad0a3cd-76e7-11e1-be1f-0015174f770e</xd:Участок> <xd:КомментарийТабель/> <xd:ЦеныКонкурентов> <xd:Конкурент>664c5246-9e7d-11dd-b428-0018fe80729a</xd:Конкурент> <xd:Цена3А>6000</xd:Цена3А> <xd:Цена5А>4800</xd:Цена5А> <xd:Цена12А>5300</xd:Цена12А> <xd:Примечание/> </xd:ЦеныКонкурентов> <xd:Табель> <xd:ПодразделениеОрганизации>dad0a3cd-76e7-11e1-be1f-0015174f770e</xd:ПодразделениеОрганизации> <xd:Сотрудник>c2b65716-b5cb-11e1-98f1-0015174f770e</xd:Сотрудник> <xd:ВидИспользованияРабочегоВремени>de61ee6a-fb83-4494-9032-bb7e39d7bc7d</xd:ВидИспользованияРабочегоВремени> <xd:Часов>8</xd:Часов> <xd:Спецификация>00000000-0000-0000-0000-000000000000</xd:Спецификация> <xd:Тоннаж>0</xd:Тоннаж> </xd:Табель> <xd:ПриборыУчета> <xd:ТекущиеПоказания>2563</xd:ТекущиеПоказания> <xd:ПоказаниеНаНачалоМесяца>964</xd:ПоказаниеНаНачалоМесяца> <xd:ПредыдущиеПоказания>544</xd:ПредыдущиеПоказания> <xd:РасходСНачалаМесяца>1599</xd:РасходСНачалаМесяца> <xd:ПредыдущаяДата>2014-02-04T00:00:00</xd:ПредыдущаяДата> <xd:ПриборУчета>8d27a98a-8a47-11e3-8cd0-0018fe80729a</xd:ПриборУчета> <xd:ЕдИзм>3e3e360d-5b9c-11dc-8f63-00155863db4a</xd:ЕдИзм> </xd:ПриборыУчета> </xd:DocumentObject.ФактВыпускаДеталей> | |||
| 1
    
        Maxus43 04.02.14✎ 13:28 | 
        возможно файл данных тупо невалиден схеме, есть методы проверки xml на соответсвие его схеме, не в 1с их тоже полно.
 в 1с это Фабрика.Проверить(); | |||
| 2
    
        Maxus43 04.02.14✎ 13:30 | 
        >>Не установлено значение одного из следующих свойств
 почти наверняка невалиден, в схеме свойство обязательное, в файле данных его нет | |||
| 3
    
        alex_inter 04.02.14✎ 13:32 | 
        Так вот же все тут заполнено:    <xd:ПриборыУчета>
 <xd:ТекущиеПоказания>2563</xd:ТекущиеПоказания> <xd:ПоказаниеНаНачалоМесяца>964</xd:ПоказаниеНаНачалоМесяца> <xd:ПредыдущиеПоказания>544</xd:ПредыдущиеПоказания> <xd:РасходСНачалаМесяца>1599</xd:РасходСНачалаМесяца> <xd:ПредыдущаяДата>2014-02-04T00:00:00</xd:ПредыдущаяДата> <xd:ПриборУчета>8d27a98a-8a47-11e3-8cd0-0018fe80729a</xd:ПриборУчета> <xd:ЕдИзм>3e3e360d-5b9c-11dc-8f63-00155863db4a</xd:ЕдИзм> </xd:ПриборыУчета> по схеме оно так выглядит: <xs:complexType name="DocumentTabularSectionRow.ФактВыпускаЛома.ПриборыУчета"> <xs:sequence> <xs:element name="ТекущиеПоказания" type="xs:decimal"/> <xs:element name="ПоказаниеНаНачалоМесяца" type="xs:decimal"/> <xs:element name="ПредыдущиеПоказания" type="xs:decimal"/> <xs:element name="РасходСНачалаМесяца" type="xs:decimal"/> <xs:element name="ПредыдущаяДата" type="xs:dateTime"/> <xs:element name="ПриборУчета" type="tns:CatalogRef.ПриборыУчета"/> <xs:element name="ЕдИзм" type="tns:CatalogRef.КлассификаторЕдиницИзмерения"/> </xs:sequence> </xs:complexType> | |||
| 4
    
        alex_inter 04.02.14✎ 13:34 | 
        И,по проверке:Фабрику проверить нельзя, вначале надо получить объект из этой фабрики: 
 ОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML); А у меня на этом-то месте эта ошибка и вылетает! | |||
| 5
    
        Maxus43 04.02.14✎ 13:38 | 
        (4) в 1с нельзя, а в других програмках работы с xml можно, в 1с при выгрузке удобно проверять так.
 После фразы "Не установлено значение одного из следующих свойств" ниже точно ничего нет? обычно указывается конкретное свойство | |||
| 6
    
        Maxus43 04.02.14✎ 13:39 | 
        Как выгружаешь?     | |||
| 7
    
        alex_inter 04.02.14✎ 13:41 | 
        Выгружаю стандартными механизмами обмена.
 На стороне периферии: ПланыОбмена.Периферия.ЭтотУзел().ПолучитьОбъект().ПрочитатьСообщениеОбмена(); ПланыОбмена.Периферия.ЭтотУзел().ПолучитьОбъект().ЗаписатьСообщениеОбмена(); | |||
| 8
    
        Зойч 04.02.14✎ 13:41 | 
        не ту фабрику создаешь     | |||
| 9
    
        Зойч 04.02.14✎ 13:42 | 
        Юзай глобальную фабрику     | |||
| 10
    
        alex_inter 04.02.14✎ 13:42 | 
        После "Не установлено значение одного из следующих свойств"
 ничего нет. И. мне кажется, это не причина. Он просто как-то странно себя ведет. Если убрать из файла выгрузки 2 другие табличные части (Цены конкурентов и Табель) то все грузится | |||
| 11
    
        alex_inter 04.02.14✎ 13:45 | 
        (9) Как?     | |||
| 12
    
        Maxus43 04.02.14✎ 13:46 | 
        и ксатти иногда важен порядок свойств. Попробуй в файле расположить таб части в порядке как в схеме     | |||
| 13
    
        alex_inter 04.02.14✎ 13:47 | 
        Все приверяла-в обеих конфах одинаковый порядок и в схеме тоже. (12)     | |||
| 14
    
        Maxus43 04.02.14✎ 13:47 | 
        в файле у тебя приборыучета после табеля идут, в схеме наоборот     | |||
| 15
    
        alex_inter 04.02.14✎ 13:55 | 
        (14) 
 Блин,как же тебя отблагодарить!!!! Спасибо тебе большое!Весь день ходишь как по заколдованному кругу-меняешь одно,другое. А тут свежий взгляд!! Точно!В порядке дело было!Огромное спасибо!Вот просто промеж глаз попало!Спасибо! Хорошего дня и всех благ всем сочуствующим! | |||
| 16
    
        alex_inter 04.02.14✎ 13:56 | 
        Всем большое спасибо!!     | |||
| 17
    
        Maxus43 04.02.14✎ 13:58 | 
        :)
 вот, даже помогать приятно :) | |||
| 19
    
        Maxus43 04.02.14✎ 14:23 | 
        (18) wiki:XML_Schema     | |||
| 20
    
        Зойч 04.02.14✎ 14:24 | 
        (11) ФабрикаXDTO - глобальная переменная     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |