|
Ошибка при записи ФабрикаXDTO.ЗаписатьXML ( | ☑ | ||
---|---|---|---|---|
0
Dunstan
03.05.16
✎
18:36
|
Разбираюсь с XML.
При записи ФабрикаXDTO.ЗаписатьXML (МойXML,Таблица) дает ошибку:Ошибка преобразования данных XDTO: Объект XDTO может быть записан только в форме элемента XML текст процедуры: Функция _Таблица(BeginDate,EndDate,NameOfFile) Экспорт ТипНоменклатура = ФабрикаXDTO.Тип("http://www.sample-package.org","Good"); ТипСтрока = ФабрикаXDTO.Тип("http://www.Strings.com","String"); ТипТаблица = ФабрикаXDTO.Тип("http://www.Strings.com","Array"); ТипКод = ФабрикаXDTO.Тип("http://www.sample-package.org","_Code"); ТипУИД = ФабрикаXDTO.Тип("http://www.sample-package.org","_UID"); ТипНаименование = ФабрикаXDTO.Тип("http://www.sample-package.org","_Name"); ТипКолВо = ФабрикаXDTO.Тип("http://www.Strings.com","_Number"); ТипСумма = ФабрикаXDTO.Тип("http://www.Strings.com","_Amount"); ДатаОкончания = Новый Граница(EndDate,ВидГраницы.Включая); ДатаНачала = НачалоДня(BeginDate); Запрос = Новый Запрос("ВЫБРАТЬ | ОстаткиНоменклатурыОбороты.Номенклатура, | ОстаткиНоменклатурыОбороты.КоличествоОборот, | ОстаткиНоменклатурыОбороты.СуммаОборот |ИЗ | РегистрНакопления.ОстаткиНоменклатуры.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ОстаткиНоменклатурыОбороты"); Запрос.УстановитьПараметр("ДатаНачала",ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания",ДатаОкончания); Выборка = Запрос.Выполнить().Выбрать(); Таблица = ФабрикаXDTO.Создать(ТипТаблица); Пока Выборка.Следующий() Цикл Строка = ФабрикаXDTO.Создать(ТипСтрока,); Номенклатура = ФабрикаXDTO.Создать(ТипНоменклатура); Номенклатура.Name = ФабрикаXDTO.Создать(ТипНаименование,Выборка.Номенклатура.Наименование); Номенклатура.Code = ФабрикаXDTO.Создать(ТипКод,Выборка.Номенклатура.Код); Номенклатура.UID = ФабрикаXDTO.Создать(ТипУИД,XMLСтрока(Выборка.Номенклатура.УникальныйИдентификатор())); Строка.Good = Номенклатура; Строка.Number = ФабрикаXDTO.Создать(ТипКолВо,Выборка.КоличествоОборот); Строка.Amount = ФабрикаXDTO.Создать(ТипСумма,Выборка.СуммаОборот); Таблица.ListOf.Добавить(Строка); КонецЦикла; Таблица.Проверить(); Если ЗначениеЗаполнено(NameOfFile) Тогда МойXML = Новый ЗаписьXML; ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); МойXML.ОткрытьФайл(NameOfFile, ПараметрыЗаписиXML); МойXML.ЗаписатьОбъявлениеXML(); ФабрикаXDTO.ЗаписатьXML (МойXML, Таблица,"Table","http://www.Strings.com",ФормаXML.Элемент,НазначениеТипаXML.Явное); МойXML.Закрыть(); КонецЕсли; Возврат Таблица; КонецФункции |
|||
1
Dunstan
04.05.16
✎
11:39
|
и тишина
|
|||
2
mehfk
04.05.16
✎
11:44
|
Экстрасенс-одинэсника - редкая профессия.
|
|||
3
4St
04.05.16
✎
13:29
|
http://www.sample-package.org
Что это за пространство имен? В конфигурации присутствует пакет XDTO с таким URI? Как в отладчике отображается вот этот объект? Таблица = ФабрикаXDTO.Создать(ТипТаблица); |
|||
4
Dunstan
04.05.16
✎
14:31
|
(3) Свое пространство имен
Таблица отображается как объект XDTO |
|||
5
Dunstan
04.05.16
✎
14:33
|
(3) да XDTO c таким URL есть в конфе
пробовал и такой вариант: ФабрикаXDTO.ЗаписатьXML (МойXML, Таблица) |
|||
6
Лефмихалыч
04.05.16
✎
14:35
|
версия платформы?
|
|||
7
Dunstan
04.05.16
✎
14:42
|
(6) 1С:Предприятие 8.3 (8.3.8.1652)
|
|||
8
Лефмихалыч
04.05.16
✎
14:42
|
(7) на 8.3.7 воспроизводится?
|
|||
9
Dunstan
04.05.16
✎
14:46
|
(8) была ошибка и в 8,3,6
поменял на 1С:Предприятие 8.3 (8.3.8.1652) |
|||
10
RomaH
naïve
04.05.16
✎
15:04
|
(4) а должен быть список, вроде
|
|||
11
RomaH
naïve
04.05.16
✎
15:05
|
Таблица.ListOf - а нет - это д.б. список
|
|||
12
4St
04.05.16
✎
15:54
|
(5) Обрати внимание вот сюда:
ТипСтрока = ФабрикаXDTO.Тип("http://www.Strings.com","String";); ... Строка.Good = Номенклатура; Возможно, у тебя в схеме свойство "Good" у типа "http://www.Strings.com","String" имеет форму "Атрибут" или "Текст". А должен быть "Элемент". Возможно, ругается на какое-то другое свойство. Локализовать можно так: прямо в коде расставляем такие строки: "ОбъектXDTO.Проверить()", где "ОбъектXDTO" заменяем на подозрительный объект. На каком объекте свалится, тот и надо изучать внимательно. |
|||
13
4St
04.05.16
✎
16:06
|
С XDTO удобнее работать через функции-обертки, по крайней мере там, где скорость не критична.
//ленивая функция для создания дочернего объекта XDTO по его имени Функция xmlСоздатьДочернийЭлементXDTO(ТекущийЭлемент,Имя,ПрисвоитьСразу = Истина) Экспорт _Свойство = ТекущийЭлемент.Свойства().Получить(Имя); ТипНовогоЭлемента = _Свойство.Тип; // _Фабрика = xmlПолучитьФабрикуПоПространствуИмен(_Свойство.URIПространстваИмен);//это если подключаемые фабрики из схем, не входящих в состав конфигурации _Фабрика = ФабрикаXDTO; НовыйЭлемент = _Фабрика.Создать(ТипНовогоЭлемента); Если ПрисвоитьСразу И Не НовыйЭлемент = Неопределено Тогда Если ТипЗнч(ТекущийЭлемент[Имя]) = Тип("СписокXDTO") Тогда ТекущийЭлемент[Имя].Добавить(НовыйЭлемент); Иначе ТекущийЭлемент[Имя] = НовыйЭлемент; КонецЕсли; КонецЕсли; Возврат НовыйЭлемент; КонецФункции И дальше вместо Номенклатура = ФабрикаXDTO.Создать(ТипНоменклатура); Номенклатура.Name = ФабрикаXDTO.Создать(ТипНаименование,Выборка.Номенклатура.Наименование); Номенклатура.Code = ФабрикаXDTO.Создать(ТипКод,Выборка.Номенклатура.Код); Номенклатура.UID = ФабрикаXDTO.Создать(ТипУИД,XMLСтрока(Выборка.Номенклатура.УникальныйИдентификатор())); Строка.Good = Номенклатура; пишем так: xmlСоздатьДочернийЭлементXDTO(Строка, "Good "); Строка.Good.Name = ФабрикаXDTO.Создать(ТипНаименование,Выборка.Номенклатура.Наименование); Строка.Good.Code = ФабрикаXDTO.Создать(ТипКод,Выборка.Номенклатура.Код); Строка.Good.UID = ФабрикаXDTO.Создать(ТипУИД,XMLСтрока(Выборка.Номенклатура.УникальныйИдентификатор())); // Строка.Good = Номенклатура; это уже не нужно |
|||
14
4St
04.05.16
✎
16:08
|
И еще: вместо
Номенклатура.Code = ФабрикаXDTO.Создать(ТипКод,Выборка.Номенклатура.Код) наверняка можно будет написать гораздо проще: Номенклатура.Code = Выборка.Номенклатура.Код; Но это тоже неправильно, потому что Номенклатура.Код надо получить еще в запросе, а здесь писать уже Выборка.Номенклатура_Код; То же самое с наименованием и прочими полями через точку. Скорость вырастает на порядок, уверяю. |
|||
15
Dunstan
04.05.16
✎
16:12
|
4St Спасибо большое. Буду пробовать.
|
|||
16
4St
04.05.16
✎
16:27
|
Перечитал еще раз, валится ведь здесь:
ФабрикаXDTO.ЗаписатьXML (МойXML, Таблица,"Table","http://www.Strings.com",ФормаXML.Элемент,НазначениеТипаXML.Явное); Т.е. все объекты валидные. Что будет, если вызвать просто ФабрикаXDTO.ЗаписатьXML (МойXML, Таблица,"Table"); ? |
|||
17
Dunstan
04.05.16
✎
16:30
|
имеет форму "Атрибут" или "Текст". А должен быть "Элемент".
вот где собака порылась! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |