Имя: Пароль:
1C
1С v8
Свойства XDTO. Мой hello world всё никак не взлетает.
,
0 camojiet
 
27.06.16
11:25
Имею дело с XDTO в первый раз. Нужно разобрать файл: https://drive.google.com/file/d/0B82lvpMvgeieWkNpUGRKanZYNlE/view?usp=sharing
выцыганил у поставщика файла xsd файл:
https://drive.google.com/file/d/0B82lvpMvgeiedlNHempmWFRRa1k/view?usp=sharing

Сначала пытался считать XSD прямо из файла, потом плюнул, сделал чистую конфигурацию и загрузил в неё один объект - XDTO пакет, на основании XSD файла.
Получился вот такой пакет: http://screencast.com/t/RuFG9tmYvM , со "Свойством", как я понял через которое и нужно считывать данные. В статьях, которые я изучал, в основном отталкиваются от ТипаXDTO, и ни о каком свойстве пакета упоминания я не видел. Как это называется? Корневое свойство? Как его прочитать?
1 Ёпрст
 
27.06.16
11:27
(0) почитай, там 3 статьи.. есть и еще, в поиске
http://catalog.mista.ru/public/167459/
2 camojiet
 
27.06.16
11:33
Прочитаю ещё раз, но уже завтра. Сегодня хоть какой-нибудь бы результат.
3 camojiet
 
27.06.16
11:53
Везде в статьях считывают по типу. Я пробую считать по типу вот так:

ЧтениеТекста = Новый ЧтениеТекста("E:\1C\Test.xml",КодировкаТекста.UTF8);
СтрокаXML = ЧтениеТекста.Прочитать();
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Тип_Attachment = ФабрикаXDTO.Тип("http://xml_vmtp_exchage.org/docs","TObjectService";);
    Документ = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,Тип_Attachment);

Вылетает ошибка:

Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://xml_vmtp_exchage.org/docs}TObjectService - [1,748]
Проверка дополнительного свойства:
    форма: Элемент
    имя: Header
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://xml_vmtp_exchage.org/docs}TObjectService

Зачем при чтении этого TObjectService проверяется Header я не понимаю, так как Header к нему не относится.

Считать корневое свойство не понимаю как. Пробую по типу:
ПакетXDTO = ФабрикаXDTO.Пакеты.Получить("http://xml_vmtp_exchage.org/docs";);Документ = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ПакетXDTO.КорневыеСвойства[0].Тип);
тоже ничего.

Как обратиться к корневому свойству?
4 Nolan
 
27.06.16
12:07
XDTOТипСтрока = Прокси.ФабрикаXDTO.Тип("Пространство имен твоего пакета", "UpdateFile"); // Определяем нужный тип пакета
    
XDTOСтрока  = Прокси.ФабрикаXDTO.Создать(XDTOТипСтрока) // твой пакет со всеми свойствами
5 Nolan
 
27.06.16
12:09
Только без прокси. (4)
6 camojiet
 
27.06.16
12:10
"UpdateFile" <- вот тут у меня что должно быть?
7 Nolan
 
27.06.16
12:12
Это обращение к твоему типу объекта. у тебя их 5 судя по фото. например TActRow
8 camojiet
 
27.06.16
12:13
У меня корневой элемент описан как <xs:element name="Attachment">. Как узнать его тип?
ФабрикаXDTO.Тип("http://xml_vmtp_exchage.org/docs";, "Attachment"); возвращает неопределено, но это собственно и не тип.
9 camojiet
 
27.06.16
12:16
(7) Возвращается пустой объект http://screencast.com/t/0s7Y291Z
10 hhhh
 
27.06.16
12:24
(8) ФабрикаXDTO. это вы берете пакет из вашей конфигурации. А вам надо пакет из чужой конфигурации. Из той схемы.
11 camojiet
 
27.06.16
12:26
Знающие. Ответьте пожалуйста на один вопрос - могу ли я прочитать в своём случае все объекты типа TObjectService например, минуя обращение к Attachment? Или нужно копать именно в сторону Attachment, который является свойством?

(1) Прочитал ещё раз все три XDTO это просто. Там все корневые элементы пакета - complextype, а тут какой - то element. Может так вообще нельзя.
12 camojiet
 
27.06.16
12:27
(10) Да я уже сделал чистую конфу и пробую на ней. Моя фабрика находится в ФабрикаXDTO и я её там вижу в пакетах.
13 camojiet
 
27.06.16
12:56
Вобщем прочитал без xsd.

ЧтениеТекста = Новый ЧтениеТекста("E:\1C\Test.xml",КодировкаТекста.UTF8);
СтрокаXML = ЧтениеТекста.Прочитать();
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Документ = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Все переменные - строковые. Жаль конечно, но не получилось понять как что же это за свойство, надо ли вообще к нему обращаться и в итоге могло бы из этого xsd файла получиться что-то сериализованное.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший