Имя: Пароль:
1C
 
Получить значение объекта XDTO
0 Krabobor
 
20.11.14
13:15
Сильно не пинать, только учусь.

Есть хмл со строками типа
<ЗаполнятьРеквизит Тип="Перечисление" Вид="ЗаполнятьРеквизит" Идентификатор="ЧерезСоответствие">Из реквизита исходного документа через соответствие</ЗаполнятьРеквизит>

Получаем объектХДТО, и в нем есть доступ только к полям "Тип", "Вид", "Идентификатор". Подскажите как достучаться в объектеХДТО именно к значению "Из реквизита исходного документа через соответствие"?
1 Krabobor
 
20.11.14
13:44
апну
2 Jaap Vduul
 
20.11.14
13:57
По-умолчанию, вроде через свойство __content
3 Krabobor
 
20.11.14
14:06
(2) ничего такого нет
4 Serginio1
 
20.11.14
14:14
Бери отладчик и спотри.
ЗаполнятьРеквизит=объектХДТО.ЗаполнятьРеквизит;
Тип=ЗаполнятьРеквизит.Тип
Вид=ЗаполнятьРеквизит.Вид
5 Fragster
 
гуру
20.11.14
14:14
нужно сделать пакетXDTO и у него сделать свойство с формой "текст", тогда в него попадет твое содержимое
6 Krabobor
 
20.11.14
14:15
(4) в том то и фокус что доступ к полям "Тип", "Вид", "Идентификатор" есть, а к самому значению НЕТ
7 Serginio1
 
20.11.14
14:15
А до Из реквизита исходного документа через соответствие
не получится. Только через разбор XML
8 Krabobor
 
20.11.14
14:16
(5) подскажи как?
9 Serginio1
 
20.11.14
14:16
10 Fragster
 
гуру
20.11.14
14:17
получилось без пакета:


чтение = Новый ЧтениеXML;
чтение.УстановитьСтроку(стр);
Объ = ФабрикаXDTO.ПрочитатьXML(чтение);
Сообщить(Объ.Последовательность().ПолучитьТекст(0))
11 Fragster
 
гуру
20.11.14
14:18
(8) с пакетом правильнее, но долго объяснять
12 Krabobor
 
20.11.14
14:20
(10) действительно работает! спасибо.
(11) если не затруднит объясни)
13 Serginio1
 
20.11.14
14:21
(10) Спасибо. Не знал
14 Fragster
 
гуру
20.11.14
14:22
(12) ну лень мне
15 Serginio1
 
20.11.14
14:24
(14) Да ладно. Поделись опытом.
16 Serginio1
 
20.11.14
14:25
15+ Пожалуйста
17 DS
 
20.11.14
15:27
Кстати, тоже не знал. Будем пользовать.
18 Fragster
 
гуру
20.11.14
15:28
в двух словах для того же случая -

а) создаем схему (для данного случая:):

<xs:schema xmlns:tns="test.test" xmlns:xs="http://www.w3.org/2001/XMLSchema"; targetNamespace="test.test" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:complexType name="ЗаполнятьРеквизит">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Тип" type="xs:string"/>
                <xs:attribute name="Вид" type="xs:string"/>
                <xs:attribute name="Идентификатор" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:schema>если указать правильные типы - то примитивные типы (даты, числа, булево...) в 1с сразу станут правильными значениями

код будет такой:
Фабрика = СоздатьФабрикуXDTO("D:\temp\схема.xsd");
чтение = Новый ЧтениеXML;
чтение.УстановитьСтроку(стр);
Тип = Фабрика.Тип("test.test", "ЗаполнятьРеквизит");
Объ = Фабрика.ПрочитатьXML(чтение,Тип);
Сообщить(Объ.__content)


б) создаем пакет в конфе:
http://wstaw.org/m/2014/11/20/0.png

код будет такой:
чтение = Новый ЧтениеXML;
чтение.УстановитьСтроку(стр);
Тип = ФабрикаXDTO.Тип("test.test", "ЗаполнятьРеквизит");
Объ = ФабрикаXDTO.ПрочитатьXML(чтение,Тип);
Сообщить(Объ.Текст);
19 Fragster
 
гуру
20.11.14
15:29
+ к схеме и пакету - правильная работа со списками (нет отсутствующих свойств, нет прыжков между объектомXDTO и спискомXDTO)
20 DS
 
20.11.14
15:30
(18) Это понятно. Почему пакетом правильнее? Какой-то подвох в (10) таится?
21 Fragster
 
гуру
20.11.14
15:33
(20) необязательные свойства, примитивные типы, работа со списками
22 Fragster
 
гуру
20.11.14
15:34
контроль структуры загружаемых/выгружаемых данных, опять же
23 Serginio1
 
20.11.14
17:34
(18) Спасибо