Имя: Пароль:
1C
1С v8
Ошибка при созданни фабрики XDTO на основе xsd
0 metanal
 
09.07.12
11:30
Здравствуйте. помогите разобраться. при выполнении кода

[code]
Пути = Новый Массив();
Пути.Добавить(ПутьКФайлуСхемы);
Фабрика = СоздатьФабрикуXDTO(Пути);
[/code]

возникает ошибка:

{Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (СоздатьФабрикуXDTO)
   Фабрика = СоздатьФабрикуXDTO(Пути);
по причине:
Ошибка проверки модели XDTO: xdto-package-3.3    пакет: http://**/awms
Импортируемый пакет типов 'http://**/user-objects' не определен

поиск ничего дельного пока не дал...
1 sapphire
 
09.07.12
11:31
(0) И? Значит не определен тип.
2 Skylark
 
09.07.12
11:32
По ходу что-то не нравится в схеме. Попробуй схему импортировать вручную в конфигурацию.
3 metanal
 
09.07.12
11:33
в файле xsd. есть строчка с импортом. там тоже какая то ошибка. щас постараюсь текст достать
4 metanal
 
09.07.12
13:13
"не удалось разрешить импортируемую схему для пространства имен"
5 metanal
 
09.07.12
13:16
содержимое импортируемого файла property.xsd:

<uo:schema xmlns:uo="http://**/awms/user-objects" xmlns="http://**/awms/user-objects"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          targetNamespace="http://**/awms/user-objects" elementFormDefault="qualified"
          attributeFormDefault="unqualified" version="1.0.0.1">
   <xs:complexType...
   <uo:complexType... и т.д.

содержимое главного файла:

<xs:schema targetNamespace="http://**/awms" xmlns:awms="http://**/awms"
          xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:uo="http://**/awms/user-objects"
          elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0.0.2">
   <xs:import namespace="http://**/awms/user-objects" schemaLocation="property.xsd"/>
6 sapphire
 
09.07.12
13:18
(5) Вроде как с такими конструкциями xs:import namespace 1С не работает :(
7 metanal
 
09.07.12
13:29
а эту ошибку я уже не в 1С прочитал. ее мне visual studio показывает
8 metanal
 
09.07.12
13:34
без импорта действительно заработало. но с импортом тоже хотелось бы разобраться
9 Саша Питерский
 
09.07.12
13:45
(5) Почему у тебя первая схема описана как uo:schema, а не xs:schema?
10 metanal
 
09.07.12
13:51
файл не я писал. я только разбираюсь. но мне тоже было бы интересно услышать ответ на этот вопрос
11 Саша Питерский
 
09.07.12
13:54
(10) Лично у меня проблем с конструкцией import не возникало.
Попробуй поменяй uo на xs и посмотри что получится.
12 metanal
 
09.07.12
13:57
ругается на все типы <uo:
13 metanal
 
09.07.12
13:58
"недопустимый дочерний элемент"
14 Саша Питерский
 
09.07.12
14:18
(13) Заменяй все на xs
15 metanal
 
09.07.12
17:18
теперь возникла другая проблема:

xsd:
<xs:element name="warehouses">
                   <xs:annotation>
                       <xs:documentation>список логических складов</xs:documentation>
                   </xs:annotation>
                   <xs:complexType>
                       <xs:sequence>
                           <xs:element name="warehouse" maxOccurs="unbounded">
                               <xs:annotation>
                                   <xs:documentation>логический склад</xs:documentation>
                               </xs:annotation>
                               <xs:complexType mixed="true">
                           
                                   <xs:attribute name="wh_name" use="required">
                                       <xs:simpleType>
                                           <xs:restriction base="xs:ID">
                                               <xs:maxLength value="30"/>
                                           </xs:restriction>
                                       </xs:simpleType>
                                   </xs:attribute>
                                   <xs:attribute name="wh_UID" type="awms:_GUID" use="required"/>
                               </xs:complexType>
                           </xs:element>
                           <xs:element name="defaultWH" type="xs:IDREF" minOccurs="0">
                               <xs:annotation>
                                   <xs:documentation>Склад "по умолчанию", который возвращается, пользователям, не прописанным в security.xml  </xs:documentation>
                               </xs:annotation>
                           </xs:element>
                       </xs:sequence>
                   </xs:complexType>

файл xml:

<warehouses>
       <warehouse wh_name="WH1" wh_UID="{009e8f41-412c-11dd-8b47-000feaf1b3e0}">Склад AWMS
         
       </warehouse>
   </warehouses>

при попытке чтения через сериализатор возникает ошибка:

{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (ПрочитатьXDTO)
   Сериализатор.ПрочитатьXDTO(КорневойОбъектXDTO.warehouses.warehouse);
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: wh_name    Форма: Атрибут    Тип: {http://www.w3.org/2001/XMLSchema}anySimpleType


кто знает куда копать?
16 Саша Питерский
 
09.07.12
17:27
(15) Что это за xml файл такой без заголовков и определенного namespace?

Что вот этой строкой хочется получить?
Сериализатор.ПрочитатьXDTO(КорневойОбъектXDTO.warehouses.warehouse);
17 metanal
 
09.07.12
17:29
таблицу значений с 1 строкой. или соответствие.что угодно с типом 1С а не объектXDTO
18 Саша Питерский
 
09.07.12
17:37
(17) А где у xml заголовок? Где в xsd описание того, в какой тип 1С должен превратиться wh_UID?
19 metanal
 
09.07.12
17:38
я только выдержки из файлов выложил.сами по себе файлы очень большие
20 metanal
 
09.07.12
17:39
а можно по подробнее про описание типа в xsd?
21 metanal
 
09.07.12
17:39
наверное этого мне и не хватает
22 Саша Питерский
 
09.07.12
18:11
Надо начать с того, что проверить, что файл соответствует схеме.
23 metanal
 
09.07.12
19:35
весь файл очень большой. я уверен что что-нибудь да не так. а как все таки привязать тип атрибута к типу 1С?
24 Саша Питерский
 
10.07.12
09:28
Загрузить схему в конфигурацию, затем открыть ее на редактирование, выбрать атрибут и выбрать у него тип, соответствующий нужному объекту 1С.
25 metanal
 
10.07.12
10:56
спасибо. попробую
26 metanal
 
10.07.12
15:02
вот что получилось:
http://gyazo.com/0488edd7a7a44ff02aff6fce11cf37ab

я правильно понимаю , что мне нужно назначить Тип элемента? из какого пространства имен выбирать тип. 1с core?

все варианты которые удалось пробовать не лишают меня ошибки из (15)
27 Саша Питерский
 
10.07.12
15:05
(26) Приведи код вызова конструктора, которым ты создаешь тип Сериализатор.
28 metanal
 
10.07.12
15:07
Пути = Новый Массив();
   Пути.Добавить("C:\Documents and Settings\Администратор\Рабочий стол\Metadata\awms new.xsd");
   Фабрика = СоздатьФабрикуXDTO(Пути);
   
   Сериализатор = Новый СериализаторXDTO(Фабрика);
       
   ЧтениеXML = Новый ЧтениеXML;
   ЧтениеXML.ОткрытьФайл("C:\Documents and Settings\Администратор\Рабочий стол\Metadata\Разработка\awms.xml");
   КорневойОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML, Неопределено);
   ЧтениеXML.Закрыть();
   
   Сериализатор.ПрочитатьXDTO(КорневойОбъектXDTO.warehouses.warehouse);
29 Саша Питерский
 
10.07.12
15:14
1. Тебе нужно указать тип элемента, то есть сказать например, что в указанном атрибуте хранится значение типа СправочникСсылка.Склады.
Если посмотреть список пакетов, то такую информацию можно найти в пакете
http://v8.1c.ru/8.1/data/enterprise/current-config

2. Если ты меняешь тип в загруженном пакете, то потом либо внеси изменения в свой xsd, либо поменяй свой код создания фабрики на создание из метаданных, а не из файла

3. Я бы еще попробовал в код
   КорневойОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML, Неопределено);
В качестве второго параметра не указывать неопределено, а либо вообще его пропустить, либо явно указать тип, который ты из файла читаешь.
30 metanal
 
10.07.12
15:18
если не указывать "неопределено" вываливалось с ошибкой.

мне не обязательно привязывать к складам. мне бы хотя бы реквизит wh_name указать как строку.

пространства имен http://v8.1c.ru/8.1/data/enterprise/current-config
у меня почему то нет. конфа не типовая
31 Саша Питерский
 
10.07.12
15:21
(30) С какой ошибкой? Раз ошибка, значит укажи конкретный тип.

Про хотя бы указать как строку не понял.
КорневойОбъектXDTO.warehouses.warehouse.__content разве у тебя не является строкой?

Указанное пространство имен указывает на твою текущую конфигурацию. Ей все равно, типовая конфа или нет.
32 metanal
 
10.07.12
15:24
на строку вроде больше не ругается:

КорневойОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML);

но теперь тип не определяется )
сейчас буду пробывать.

свойства __content к сожалению у меня и в помине нет.
33 metanal
 
10.07.12
15:31
и пакет я всегда экспортирую. до этого я хотя бы догадался
34 metanal
 
10.07.12
16:45
для wh_name в xsd проовал указывать все возможные типы из пространства имен http://v8.1c.ru/8.1/data/core.

ничего это не изменило

<xs:attribute name="wh_name" use="required" type="ns1:**">
35 Саша Питерский
 
10.07.12
16:50
Если я правильно понимаю как должна работать платформа, Сериализатор по GUID вернет тебе ссылку на элемент склада.

У тебя GUID содержится в поле wh_UID.
Соответственно можно попытаться в сериализатор передать
КорневойОбъектXDTO.warehouses.warehouse.wh_UID

Зачем ты пихаешь в схему типы из http://v8.1c.ru/8.1/data/core я не понимаю, поэтому ничего сказать не могу.
36 metanal
 
10.07.12
16:59
затем что со складом это частный случай. потом у меня типы которые можно только как структуру прочитать. у меня возникает подозрение что мне вообще сериализация не нужна. а работать просто с фабрикой придется...
37 metanal
 
10.07.12
16:59
спасибо за помощь
38 Саша Питерский
 
10.07.12
17:03
Я предполагаю, что если ты укажешь тип из пространства имен что я указал, платорма сама тебе при чтении подставит нужную ссылку.
Я предполагаю что Сериализация нужна тогда, когда у тебя в xml есть GUID ссылки из ИБ, но при этом в самой схеме нет возможности указать пространство имен 1С.

Если в твоем xml GUID указан вообще не из 1С взятый, то никакую автоматическую сериализацию ты не сделаешь.
39 metanal
 
11.07.12
16:36
кто знает почему при чтении типа атрибута я всегда получаю AnySimpleType, хотя у меня например явно задан тип

xsi:type = "boolean"
Независимо от того, куда вы едете — это в гору и против ветра!