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

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

Имеем код:

	Запись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 6291 16.08.13 12:53 Сейчас в теме
(1) НебаЖитель, никак. А зачем это вам?
3. НебаЖитель 16.08.13 13:08 Сейчас в теме
(2) Evil Beaver, для того что бы СериализаторXDTO в другой базе его съел)
6. xzorkiix 32 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 48 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 144 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 6291 18.08.13 00:58 Сейчас в теме
(10) НебаЖитель, вы извращенец :) Эмулируете платформенные типы данных своими собственными.
Чтобы "СериализаторXDTO в другой базе его съел" вы должны в своей базе писать объект тоже СериализаторомXDTO, а не фабрикой.
Кстати, в один файл можно писать разными способами, половину файлов фабрикой, половину сериализатором. А указание типов у вас разное именно потому, что вы пишете Фабрикой, а читаете Сериализатором. Они создают разный по структуре XML текст. Это обоснованно, но лень расписывать в рамках комментария.
Создавать ваш файл надо сериализатором, тогда в другой базе он прочитается. И не надо городить огород со своими типами данных вида anyType.
12. НебаЖитель 18.08.13 23:14 Сейчас в теме
(11) Evil Beaver, это не я, это тз такое))

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

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

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

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

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

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

КонецПроцедуры
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

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

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Ведущий программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день

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