Имя: Пароль:
1C
1С v8
Чтение 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
20 Зойч
 
04.02.14
14:24
(11) ФабрикаXDTO - глобальная переменная
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс