и вновь XDTO-фабрика

1. НебаЖитель 16.08.13 12:32 Сейчас в теме
Имеем код:

	ЗаписьXML = Новый ЗаписьXML;
	
	ЗаписьXML.УстановитьСтроку("UTF-8");
	ЗаписьXML.ЗаписатьОбъявлениеXML();					
	
	////////////////////////////////////////////////////////////­//////
	
	//создаем запись
	ТипОбъектаЗаписьИмпорта = ФабрикаXDTO.Тип("http://localhost/ws1", "InformationRegisterRecordSet.КонтактнаяИнформация");
	НоваяЗаписьИмпорта      = ФабрикаXDTO.Создать(ТипОбъектаЗаписьИмпорта);
		
	////
	
	ТипФильтрРегистра   = ФабрикаXDTO.Тип("http://localhost/ws1", "InformationRegisterRecordKey.КонтактнаяИнформация");
	НовыйФильтрРегистра = ФабрикаXDTO.Создать(ТипФильтрРегистра);
		
	НовыйФильтрРегистра.Объект 	= XMLСтрока("00000000-0000-0000-0000-000000000000");
	НовыйФильтрРегистра.Тип 	= XMLСтрока("Тест");
	НовыйФильтрРегистра.Вид		= XMLСтрока("Тест");
		
	////
	
	ТипЗаписьРегистра   = ФабрикаXDTO.Тип("http://localhost/ws1", "InformationRegisterRecord.КонтактнаяИнформация");
	НоваяЗаписьРегистра = ФабрикаXDTO.Создать(ТипЗаписьРегистра);
	
	НоваяЗаписьРегистра.Объект		  = XMLСтрока("00000000-0000-0000-0000-000000000000");
	НоваяЗаписьРегистра.Тип			  = XMLСтрока("Тест");
	НоваяЗаписьРегистра.Вид			  = XMLСтрока("Тест");
	НоваяЗаписьРегистра.Представление = XMLСтрока("Тест");
	
	////
	
	НоваяЗаписьИмпорта.Filter  = НовыйФильтрРегистра; 
	
	ТипЗапись   = ФабрикаXDTO.Тип("http://localhost/ws1", "Records.КонтактнаяИнформация");
	НоваяЗапись = ФабрикаXDTO.Создать(ТипЗапись);
	
	НоваяЗапись.Record.Добавить(НоваяЗаписьРегистра);
	НоваяЗаписьИмпорта.Records = НоваяЗапись;
	
	////
	
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, НоваяЗаписьИмпорта, "InformationRegisterRecord.КонтактнаяИнформация", "http://localhost/ws1",,НазначениеТипаXML.Явное);
		
	////////////////////////////////////////////////////////////­//////
	
	//удаляем пространство имен
	Результат = ЗаписьXML.Закрыть();
Показать


Результат кода:

<?xml version="1.0" encoding="UTF-8"?>
<InformationRegisterRecord.КонтактнаяИнформация xmlns="http://localhost/ws1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="InformationRegisterRecordSet.КонтактнаяИнформация">
	<Filter>
		<Объект>00000000-0000-0000-0000-000000000000</Объект>
		<Тип xsi:type="xs:string">Тест</Тип>
		<Вид xsi:type="xs:string">Тест</Вид>
	</Filter>
	<Records>
		<Record>
			<Объект>00000000-0000-0000-0000-000000000000</Объект>
			<Тип xsi:type="xs:string">Тест</Тип>
			<Вид xsi:type="xs:string">Тест</Вид>
			<Представление xsi:type="xs:string">Тест</Представление>
		</Record>
	</Records>
</InformationRegisterRecord.КонтактнаяИнформация>
Показать


А хотелось бы (явное указание типа в свойстве "Объект"):

<?xml version="1.0" encoding="UTF-8"?>
<InformationRegisterRecord.КонтактнаяИнформация xmlns="http://localhost/ws1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="InformationRegisterRecordSet.КонтактнаяИнформация">
	<Filter>
		<Объект xsi:type="CatalogRef.Контакты">00000000-0000-0000-0000-000000000000</Объект>
		<Тип xsi:type="xs:string">Тест</Тип>
		<Вид xsi:type="xs:string">Тест</Вид>
	</Filter>
	<Records>
		<Record>
			<Объект xsi:type="CatalogRef.Контакты">00000000-0000-0000-0000-000000000000</Объект>
			<Тип xsi:type="xs:string">Тест</Тип>
			<Вид xsi:type="xs:string">Тест</Вид>
			<Представление xsi:type="xs:string">Тест</Представление>
		</Record>
	</Records>
</InformationRegisterRecord.КонтактнаяИнформация>
Показать


Может кто знает, как это реализовать?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Evil Beaver 8107 16.08.13 12:53 Сейчас в теме
(1) НебаЖитель, никак. А зачем это вам?
3. НебаЖитель 16.08.13 13:08 Сейчас в теме
(2) Evil Beaver, для того что бы СериализаторXDTO в другой базе его съел)
6. xzorkiix 34 16.08.13 13:32 Сейчас в теме
(1),(2) а что если , как это было в http://forum.infostart.ru/forum24/topic73409/message944769/#message944769 , тогда правда я пошел не потому пути - но мысль была одна пересобрать xml так, как это надо было мне :)
7. НебаЖитель 16.08.13 13:49 Сейчас в теме
(6) xzorkiix, от фабрики придется отказаться?) как не хотелось бы....
4. kasper076 101 16.08.13 13:17 Сейчас в теме
НовыйФильтрРегистра.Объект    = XMLСтрока("00000000-0000-0000-0000-000000000000");

Может потому, что собственно тип объекта-то и не указан?
5. НебаЖитель 16.08.13 13:20 Сейчас в теме
(4) kasper076,

	ТипОбъект   = ФабрикаXDTO.Тип("http://localhost/ws1", "CatalogRef.Контакты");
	НовыйФильтрРегистра.Объект = ФабрикаXDTO.Создать(ТипОбъект, XMLСтрока("00000000-0000-0000-0000-000000000000"));


Не помогает
8. НебаЖитель 16.08.13 17:51 Сейчас в теме
Проблему решил. Оказалось все просто. Если кому интересно, могу рассказать
9. logos 208 16.08.13 17:54 Сейчас в теме
(8) Так не стоит интриговать, Рассказывайте.
10. НебаЖитель 16.08.13 18:35 Сейчас в теме
Вообщем у свойства которого нам необходимо явное определение типа, задаем тип - anyType (http://www.w3.org/2001/XMLSchema)

Далее добавил новый тип - CatalogRef.Контакты, AnyRef (http://v8.1c.ru/8.1/data/enterprise)

Ну и присваиваю значение:

	
ТипОбъект   = ФабрикаXDTO.Тип("http://localhost/ws1", "CatalogRef.Контакты");
НоваяЗапись.Объект = ФабрикаXDTO.Создать(ТипОбъект, XMLСтрока("00000000-0000-0000-0000-000000000000"));


Итог:
<Filter>
  <Объект xsi:type="CatalogRef.Контакты">00000000-0000-0000-0000-000000000000</Объект>
</Filter>
11. Evil Beaver 8107 18.08.13 00:58 Сейчас в теме
(10) НебаЖитель, вы извращенец :) Эмулируете платформенные типы данных своими собственными.
Чтобы "СериализаторXDTO в другой базе его съел" вы должны в своей базе писать объект тоже СериализаторомXDTO, а не фабрикой.
Кстати, в один файл можно писать разными способами, половину файлов фабрикой, половину сериализатором. А указание типов у вас разное именно потому, что вы пишете Фабрикой, а читаете Сериализатором. Они создают разный по структуре XML текст. Это обоснованно, но лень расписывать в рамках комментария.
Создавать ваш файл надо сериализатором, тогда в другой базе он прочитается. И не надо городить огород со своими типами данных вида anyType.
12. НебаЖитель 18.08.13 23:14 Сейчас в теме
(11) Evil Beaver, это не я, это тз такое))

Задача просто сделать обмен между разными базами. Структура данных совершенно разная. Вот и приходится...
13. Evil Beaver 8107 19.08.13 09:38 Сейчас в теме
(12) НебаЖитель, понятно. Все равно, использовать нужно какой-то один способ сериализации, когда работаете со стандартными типами платформы. Фабрика и Сериализатор делают разный XML.
14. Alexion 44 19.08.13 11:07 Сейчас в теме
Для баз разной структуры фабрику не использовал, писал так:

Процедура ЗаписатьДанные(ЗаписьXML, Данные) Экспорт

Если ТипЗнч(Данные) = Тип("СправочникОбъект.Пользователи") Тогда
ПользователиЗаписатьXML(ЗаписьXML, Данные);
Иначе
// В данном случае, нет данных, которые требуют нестандартной обработки
// Записываем данные с помощью стандартного метода
ЗаписатьXML(ЗаписьXML, Данные);
КонецЕсли;

КонецПроцедуры

Процедура ПользователиЗаписатьXML(ЗаписьXML, Пользователь)

ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject.Пользователи");
ЗаписатьXML(ЗаписьXML, Пользователь.Ссылка, "Ref", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, Пользователь.Наименование, "Description", НазначениеТипаXML.Явное);
ЗаписьXML.ЗаписатьКонецЭлемента();

КонецПроцедуры
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)