|
Чтение 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 - глобальная переменная
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |