Имеем код:
Результат кода:
А хотелось бы (явное указание типа в свойстве "Объект"):
Может кто знает, как это реализовать?
Запись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.КонтактнаяИнформация>
ПоказатьМожет кто знает, как это реализовать?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1),(2) а что если , как это было в http://forum.infostart.ru/forum24/topic73409/message944769/#message944769 , тогда правда я пошел не потому пути - но мысль была одна пересобрать xml так, как это надо было мне :)
Вообщем у свойства которого нам необходимо явное определение типа, задаем тип - anyType (http://www.w3.org/2001/XMLSchema)
Далее добавил новый тип - CatalogRef.Контакты, AnyRef (http://v8.1c.ru/8.1/data/enterprise)
Ну и присваиваю значение:
Итог:
Далее добавил новый тип - CatalogRef.Контакты, AnyRef (
Ну и присваиваю значение:
ТипОбъект = ФабрикаXDTO.Тип("http://localhost/ws1", "CatalogRef.Контакты");
НоваяЗапись.Объект = ФабрикаXDTO.Создать(ТипОбъект, XMLСтрока("00000000-0000-0000-0000-000000000000"));
Итог:
<Filter>
<Объект xsi:type="CatalogRef.Контакты">00000000-0000-0000-0000-000000000000</Объект>
</Filter>
(10) НебаЖитель, вы извращенец :) Эмулируете платформенные типы данных своими собственными.
Чтобы "СериализаторXDTO в другой базе его съел" вы должны в своей базе писать объект тоже СериализаторомXDTO, а не фабрикой.
Кстати, в один файл можно писать разными способами, половину файлов фабрикой, половину сериализатором. А указание типов у вас разное именно потому, что вы пишете Фабрикой, а читаете Сериализатором. Они создают разный по структуре XML текст. Это обоснованно, но лень расписывать в рамках комментария.
Создавать ваш файл надо сериализатором, тогда в другой базе он прочитается. И не надо городить огород со своими типами данных вида anyType.
Чтобы "СериализаторXDTO в другой базе его съел" вы должны в своей базе писать объект тоже СериализаторомXDTO, а не фабрикой.
Кстати, в один файл можно писать разными способами, половину файлов фабрикой, половину сериализатором. А указание типов у вас разное именно потому, что вы пишете Фабрикой, а читаете Сериализатором. Они создают разный по структуре XML текст. Это обоснованно, но лень расписывать в рамках комментария.
Создавать ваш файл надо сериализатором, тогда в другой базе он прочитается. И не надо городить огород со своими типами данных вида anyType.
Для баз разной структуры фабрику не использовал, писал так:
Процедура ЗаписатьДанные(ЗаписьXML, Данные) Экспорт
Если ТипЗнч(Данные) = Тип("СправочникОбъект.Пользователи") Тогда
ПользователиЗаписатьXML(ЗаписьXML, Данные);
Иначе
// В данном случае, нет данных, которые требуют нестандартной обработки
// Записываем данные с помощью стандартного метода
ЗаписатьXML(ЗаписьXML, Данные);
КонецЕсли;
КонецПроцедуры
Процедура ПользователиЗаписатьXML(ЗаписьXML, Пользователь)
ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject.Пользователи");
ЗаписатьXML(ЗаписьXML, Пользователь.Ссылка, "Ref", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, Пользователь.Наименование, "Description", НазначениеТипаXML.Явное);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура ЗаписатьДанные(ЗаписьXML, Данные) Экспорт
Если ТипЗнч(Данные) = Тип("СправочникОбъект.Пользователи") Тогда
ПользователиЗаписатьXML(ЗаписьXML, Данные);
Иначе
// В данном случае, нет данных, которые требуют нестандартной обработки
// Записываем данные с помощью стандартного метода
ЗаписатьXML(ЗаписьXML, Данные);
КонецЕсли;
КонецПроцедуры
Процедура ПользователиЗаписатьXML(ЗаписьXML, Пользователь)
ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject.Пользователи");
ЗаписатьXML(ЗаписьXML, Пользователь.Ссылка, "Ref", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, Пользователь.Наименование, "Description", НазначениеТипаXML.Явное);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот