![]() |
![]() |
![]() |
|
Проблема с ЗаполнитьЗначенияСвойств элементов XDTO с неопределенным типом. | ☑ | ||
---|---|---|---|---|
0
0xFFFFFF
12.11.10
✎
09:46
|
Хочу выгрузить номенклатуру и базовую единицу через ХДТО.
Если делаю только номенклатуру, то все ок: //Номенклатура - это поле на форме Пути = Новый Массив(); Пути.Добавить("C:\Temp\1.xsd"); Фабрика = СоздатьФабрикуXDTO(Пути); ТипНоменклатураОбъектХДТО = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Номенклатура"); НоменклатураОбъектХДТО = Фабрика.Создать(ТипНоменклатураОбъектХДТО); ЗаполнитьЗначенияСвойств(НоменклатураОбъектХДТО, Номенклатура.ПолучитьОбъект()); ЗаписьХМЛ = Новый ЗаписьXML; ЗаписьХМЛ.ОткрытьФайл("C:\Temp\1.xml"); Фабрика.ЗаписатьXML(ЗаписьХМЛ, НоменклатураОбъектХДТО); ЗаписьХМЛ.Закрыть(); Если же добавляю выгрузку единицы: ТипЕдиницаОбъектХДТО = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.ЕдиницыИзмерения"); ЕдиницаОбъектХДТО = Фабрика.Создать(ТипЕдиницаОбъектХДТО); ЗаполнитьЗначенияСвойств(ЕдиницаОбъектХДТО, Номенклатура.ЕдиницаХраненияОстатков.ПолучитьОбъект()); То ругается на ЗаполнитьЗначенияСвойств Ошибка установки значения свойства 'Владелец' по причине: Ошибка отображения типов: Отображение типа 'СправочникСсылка.Номенклатура' в тип '{http://www.w3.org/2001/XMLSchema}string' |
|||
1
0xFFFFFF
12.11.10
✎
09:47
|
Далее, смотрю в схеме тип элемента
<xsd:element name="Owner" type="v8ent:AnyRef"/> Т.е. Владелец описан как AnyRef. Оно и понятно - поскольку у справочника могут быть владельцы разных типов. |
|||
2
0xFFFFFF
12.11.10
✎
09:48
|
В связи с чем вопрос.
Как полю ЕдиницаОбъектХДТО.Owner присвоить тип, равный ТипНоменклатураОбъектХДТО = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Номенклатура"); Перед ЗаполнитьЗначенияСвойств? Уж очень неохота каждое поле описывать... |
|||
3
0xFFFFFF
12.11.10
✎
09:51
|
Пытаюсь использовать метод приведения типов
Фабрика.Привести(ТипНоменклатураОбъектХДТО, ЕдиницаОбъектХДТО.Owner); Но он не работает, т.к. ЕдиницаОбъектХДТО - является объектом ХДТО, а ЕдиницаОбъектХДТО.Owner - уже видимо нет.. |
|||
4
0xFFFFFF
12.11.10
✎
10:02
|
поднимем
|
|||
5
0xFFFFFF
12.11.10
✎
10:31
|
Да, и как записать два объекта ХДТО в ХМЛ? В форумах периодически поднимается эта тема, но народ пишет "все, разобрался". А как разобрался... короч одни вопросы.
|
|||
6
DmitrO
12.11.10
✎
10:34
|
Единица = Номенклатура.ЕдиницаХраненияОстатков.ПолучитьОбъект();
ТипВладельцаХДТО = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogRef.Номенклатура"); ЕдиницаОбъектХДТО.Owner = Фабрика.Создать(ТипВладельцаХДТО, Единица.Владелец); ЗаполнитьЗначенияСвойств(ЕдиницаОбъектХДТО, Единица,, "Owner"); |
|||
7
DmitrO
12.11.10
✎
10:36
|
(5) Ответ: по спецификации XML в файле может быть только один корневой элемент. Делай выводы.
|
|||
8
0xFFFFFF
12.11.10
✎
10:48
|
(6) Отлично! Работает.
(7) Понял, сделал так: ЗаписьХМЛ = Новый ЗаписьXML; ЗаписьХМЛ.ОткрытьФайл("C:\Temp\1.xml"); ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Данные"); Фабрика.ЗаписатьXML(ЗаписьХМЛ, НоменклатураОбъектХДТО); Фабрика.ЗаписатьXML(ЗаписьХМЛ, ЕдиницаОбъектХДТО); ЗаписьХМЛ.ЗаписатьКонецЭлемента(); ЗаписьХМЛ.Закрыть(); Только вот будет ли читаться через Сериализатор... Или нужно записывать с помощью DOM? |
|||
9
DmitrO
12.11.10
✎
11:28
|
(8) будет читаться
|
|||
10
DmitrO
12.11.10
✎
11:32
|
(8) совет.
лучше еще вот это добавить: ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Данные"); ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config"); ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); разницу увидишь в выходных данных. |
|||
11
DmitrO
12.11.10
✎
11:34
|
a читать так:
ЧтениеXML.ПерейтиКСодержимому(); //Переходим на узел начало элемента Данные ЧтениеXML.Прочитать(); //Читаем узел следующий за узлом Данные Пока ЧтениеXML.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл Объект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); //тут можно записать Объект КонецЦикла; |
|||
12
0xFFFFFF
12.11.10
✎
11:56
|
ок, пасиб
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |