Имя: Пароль:
1C
1С v8
Несоответствие между схемой XSD и выгруженным XML файлом.
,
0 ugroblin
 
19.12.14
11:29
Доброго дня всем.

Наткнулся на такую проблему:
Выгрузил схему конфигурации, в ней у справочник контрагенты первым указан ЭтоГруппа, потом ссылка:
<xs:complexType name="CatalogObject.Контрагенты">
<xs:sequence>
<xs:element name="IsFolder" type="xs:boolean"/>
<xs:element name="Ref" type="tns:CatalogRef.Контрагенты"/><xs:element name="DeletionMark" type="xs:boolean"/>
<xs:element name="Parent" type="tns:CatalogRef.Контрагенты"/><xs:element name="Code" type="xs:string"/>

Выгружаю через ВыгрузкуЗагрузкуДанныхXML (через метод             ЗаписатьXML(ЗаписьXML, Объект))

В выгрузке сперва идет ссылка, потом ЭтоГруппа.
<CatalogObject.Контрагенты>
            <Ref>64668ee5-fb5d-11e3-8e87-d8d385ebba58</Ref>
            <IsFolder>false</IsFolder>
            <DeletionMark>false</DeletionMark>
            <Parent>00000000-0000-0000-0000-000000000000</Parent>
            <Code>90001673       </Code>

Если этот же файл загружать - загружается нормально, а вот при загрузке файла из внешней системы (сделанного по высланной схеме) выдается ошибка. Если в этом внешнем файле поменять местами реквизиты ЭтоГруппа и Ссылка, то загружается нормально.

Вопросы: почему платформа выгружает нерабочую схему? можно ли исправить?
PS. Писать для каждого справочника свой XDTO пакет совсем не хочется.
1 Maxus43
 
19.12.14
11:33
что мешает в схеме местами поменять? а не в данных уже менять?
2 Fragster
 
гуру
19.12.14
11:35
чтобы выгружать по схеме - надо выгружать СериализатоXDTO.ЗаписатьXML, а не просто ЗаписатьXML
3 Fragster
 
гуру
19.12.14
11:35
они немного разные :(
4 ugroblin
 
19.12.14
11:41
(1) Там во многих справочниках такая ситуация. + хотелось бы понять почему платформа так себя ведет.
(2) я не использую XDTO. Захотели с внешней системы своими силами ко мне выгружать готовые хмлки- я им выгрузил схему всей конфигурации (правой кнопкой на XDTO-пакеты в дереве конфигурации). Если платформа использует другую схему для сериализации через метод ЗаписатьXML, то где её взять?
5 ugroblin
 
19.12.14
11:43
Совсем забыл: платформа 8.3.5.1119
6 ugroblin
 
19.12.14
11:57
Мне сейчас надо отловить все несоответствия между выгружаемым ХМЛ и схемой. Потом исправленную схему отправить на согласование, на той стороне будут свой механизм выгрузки дорабатывать. И всё из-за того, что схема выгружаемая платформой и схема используемая ей же при сериализации/десериализации объекта стандартным методом  отличаются.

Кто нибудь знает как вытащить валидную схему(через которую работают ЗаписатьXML/ПрочитатьXML)?
7 Fragster
 
гуру
19.12.14
12:38
(6) проще заменить вызовы на СериализаторXDTO.ххх
8 tridog
 
19.12.14
12:58
(4) Ты выгрузил схему XDTO-фабрики. Эту схему использует XDTO-сериалихатор, чтобы файл соответствовал схеме нужно писать им.

Касательно просто ЗаписатьXML() - не факт, что там вообще запись идет по какой-либо схеме.
9 RomaH
 
naïve
19.12.14
13:32
<CatalogObject.Контрагенты>
            <Ref>64668ee5-fb5d-11e3-8e87-d8d385ebba58</Ref>
            <IsFolder>false</IsFolder>

и <CatalogObject.Контрагенты>
            <IsFolder>false</IsFolder>            <Ref>64668ee5-fb5d-11e3-8e87-d8d385ebba58</Ref>

это вообще-то с точки зрения XML идентичные записи

просто загрузка во внешней системе написана криво
10 ugroblin
 
19.12.14
13:42
(9)  загрузка во внешней системе написана криво.

Загрузка происходит из внешней системы в через стандартный метод ПрочитатьXML(). Именно в 1С от перестановки местами атрибутов работает/не работает загрузка.
11 ugroblin
 
19.12.14
13:42
(10) из внешней системы в 1С
12 RomaH
 
naïve
19.12.14
13:44
(11) ничего не понял
1С не может загрузить файл с другом порядком атрибутов?
13 ugroblin
 
19.12.14
13:49
(12) Да.
Я сформировал схему, в ней сперва IsFolder потом Ref. Передал эту схему другой компании, они написали выгрузку у себя (не из 1С). Эта выгрузка, сделанная по схеме, не грузится в 1С методом ПрочитатьXML. В файле ручками ставлю Ref перед IsFolder - успешно загружается.

Если из 1С выгрузить через ЗаписатьXML, то в файле Ref стоит перед IsFolder. Такой файл тоже нормально загружается.
14 Fragster
 
гуру
19.12.14
14:37
(9) это не идентичные записи. Строгий или нет порядок -  настраивается в схеме, возможны ли пропуски, возможны ли дополнительные произвольные элементы - также в ней настраивается.