Имя: Пароль:
1C
1С v8
XDTO
0 leech001
 
06.11.11
23:04
Создал xml схему такого содержания

<xs:schema xmlns:tns="http://www.vet1.org" xmlns:xs=" www.w3.org/2001/XMLSchema »»" targetNamespace=" www.vet1.org »»" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xs:complexType name="data">
      <xs:sequence>
          <xs:element name="header" type="tns:header" maxOccurs="unbounded"/>
      </xs:sequence>
  </xs:complexType>
  <xs:complexType name="header">
      <xs:simpleContent>
          <xs:extension base="xs:string">
              <xs:attribute name="version_xmlfile" type="xs:string" use="required"/>
              <xs:attribute name="programm_name" type="xs:string" use="required"/>
              <xs:attribute name="guid_station" type="xs:string" use="required"/>
          </xs:extension>
      </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="xml1c">
      <xs:sequence>
          <xs:element name="data" type="tns:data" maxOccurs="unbounded"/>
      </xs:sequence>
  </xs:complexType>
</xs:schema>

написал такой код выгрузки

Чтение=Новый ЧтениеXML;
Чтение.ОткрытьФайл("d:\3\shema.xsd");

НПДОМ=Новый ПостроительDOM;
НДДОМ=НПДОМ.Прочитать(Чтение);

НПСхем=Новый ПостроительСхемXML;
НоваяСхема=НПСхем.СоздатьСхемуXML(НДДОМ);

НаборСхем=Новый НаборСхемXML;
НаборСхем.Добавить(НоваяСхема);

Фабрика=Новый ФабрикаXDTO(НаборСхем);

ТипЕ1Объекта=Фабрика.Тип("http://www.vet1.org","xml1c");
Корень=Фабрика.Создать(ТипЕ1Объекта);


ТипЕ2Объекта=Фабрика.Тип("http://www.vet1.org","data");
data=Фабрика.Создать(ТипЕ2Объекта);

ТипЕ3Объекта=Фабрика.Тип("http://www.vet1.org","header");
header=Фабрика.Создать(ТипЕ3Объекта);

header.version_xmlfile="111";
header.programm_name="222";
header.guid_station="333";

data.header.Добавить(header);
Корень.data.Добавить(data);

Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("d:\3\222.xml");
Запись.ЗаписатьОбъявлениеXML();
Фабрика.ЗаписатьXML(Запись,Корень);

Запись.Закрыть();


не могу понять как мне передать текст в элемент "header" чтоб получилось в итогк вот так


<?xml version="1.0" encoding="UTF-8"?>
<xml1c xmlns="http://www.vet1.org" xmlns:xs=" www.w3.org/2001/XMLSchema »»" xmlns:xsi=" www.w3.org/2001/XMLSchem... »»">
  <data>
      <header version_xmlfile="111" programm_name="222" guid_station="333">444</header>
  </data>
</xml1c>


интересует значение 444 как его туда записать ??? В пакете для типа "header" создал свойство "text" с формой Текст, но при попытке записать туда кодом

header.text="444";

вываливается ошибка

{Обработка.Обработка1.Форма.Форма.Форма(36)}: Поле объекта не обнаружено (text)
header.text="444";


Помогите пойжалуста разъясните как же туда что то записать.
1 Лефмихалыч
 
06.11.11
23:07
попробую сразбегу - может не text, а value?
2 leech001
 
06.11.11
23:11
Скорректировал как вы и посоветовали до такого кода нужный вроде блок

header.version_xmlfile="111";
header.programm_name="222";
header.guid_station="333";
header.value="444";

РЕЗУЛЬТАТ :(

{Обработка.Обработка1.Форма.Форма.Форма(36)}: Поле объекта не обнаружено (value)
header.value="444";
3 МишельЛагранж
 
06.11.11
23:58
ну тогда header.text.value="444";
... а вообще когда 1С документацию создаст??
4 leech001
 
07.11.11
09:46
я пробовал выше использовать код

header.text="444";

вываливается ошибка

{Обработка.Обработка1.Форма.Форма.Форма(36)}: Поле объекта не обнаружено (text)
header.text="444";

как видите он сразу ругается на поле "text" и походу как то правильно ругается если посмотреть код схемы то там вообще нет упоминания про свойство текст :( Однако в самом пакете откуда выгружал оно есть. Наверное текст туда как то передается без указания свойства текст. Но вот как ?

Если бы небыло типа "header" то передал бы просто

data.header="444";

но так как используется тип то такая запись сразу становится в системе не корректной :( И не дает так произвести внесение данных.
5 Feanor
 
07.11.11
09:48
Объясните, плз, зачем нужно это XDTO, по простому как-то
6 leech001
 
07.11.11
09:54
Для более удобной работы с XML. Как я понимаю если использовать XDTO то мы начинаем работать с XML как просто с объектом то есть абстрагируемся от его там тегов и прочей мути.
Да и вариантов в 1С не особо много как по другому можно.
1. Последовательная работа нативно быстро, но очень геморна в коде.
2. DOM модель тормозная если xml достаточно большой. Она же его весь в память пихает :(

ну а 3 тока сраное комбинирование DOM для схемы данных и XDTO чтоб там как объектами манипулировать.

Вот я как то так понял эту хреновину.
7 Feanor
 
07.11.11
10:16
(6) ага, спасибо, получается, это некоторый шаблон для хмл документа.

по сабжу можно попробовать отладчиком посмотреть свойства объектов, мб чего-нить найдется, куда записать 444 нужно.
8 DmitrO
 
07.11.11
10:26
(6)ну вообще-то, XDTO это тоже все в памяти.
9 DmitrO
 
07.11.11
10:30
(6) и кстати, фабрику тебе можно по проще создать так:
Фабрика = СоздатьФабрикуXDTO("d:\3\shema.xsd");
10 leech001
 
07.11.11
10:40
DmitrO спасибо за подсказку, просто код из примера брал.
А по делу можете подсказать как мне текст елементу то записать ?
11 DmitrO
 
07.11.11
10:46
(10)Неа, не могу ничо сказать. Имхо XDTO подразумевает, что текст может существовать только в простом типе, в комплексном типе текста быть не должно.
12 DmitrO
 
07.11.11
11:05
Цитата из документации по 8.1 (т.к. документация по XDTO для 8.2 на ИТС отсутствует, видать засекречена, дети-шпионы мля)

Свойства объектов должны представляться в XML только как элементы.
Представление свойств как атрибутов XML не влияет на эквивалентность исходной и результирующей схем. Однако имеется ряд ограничений:
·      в атрибуте не может быть представлено значение объектного типа, - только типов-значений;
·      в атрибуте не могут быть представлены свойства с множественными значениями;
·      В случаях полиморфных типов у свойства, представленного как атрибут XML может происходить искажение типа значения. А именно, при присваивании значения свойству тип значения приводится точно к типу свойства, так как только для значения свойства в элементе XML можно указать атрибут xsi:type, который позволяет точно указать тип значения свойства.
Как следствие, не надо использовать simpleContent для complexType, так как эта модель подразумевает использование для хранения значений свойств атрибутов и текста включающего элемента XML.
13 leech001
 
07.11.11
11:26
Вот же блин засада :( "Не надо использовать" а если такой XML заказчик передает и ведь он валидный в плане XML'я :(

Спасибо DmitrO за разъяснения. Одно не понятно, зачем они тогда XDTO сделали если в таком подрезанном варианте оно только для внутренних реализация обмена и годно.
14 Feanor
 
07.11.11
11:28
(13) 1С-стайл ))))
15 DmitrO
 
07.11.11
11:31
(13)XDTO это просто стандарт над стандартом. Сам xml шире чем XDTO. XDTO ограничивает xml.
Получается, что тебе надо использовать DOM.
16 leech001
 
07.11.11
12:07
DmitrO спасибо так и делал, но решил извратиться и сделать на XDTO. Два дня курил его и вляпался в простейший вроде случай описания XML и не смог его описать с помощью этих фабрик :(

Спасибо всем кто откликнулся на мой проблем ....
Закон Брукера: Даже маленькая практика стоит большой теории.