#0
by alexei366
Мне необходимо хранить ОбъектXDTO в базе, вроде всё просто: получаем xml строку ложим её в реквизит типа ХЗ, ну и в обратную сторону получаем объект через ФабрикуXDTO. Проблема следующая, ОбъектXDTO самописный и в нем есть обязательные свойства (обязательные теги я имею ввиду), но надо чтоб можно было сохранять как бы "черновик", который кстати нормально выгружается в строку xml но вот обратно ФабрикаXDTO считает что xml невалидный (что правда) и не создаёт ОбъектXDTO. Вопрос такой можно ли какимто образом сохранить непосредственно ОбъектXDTO в базе. P.S. единственное что пока придумал создавать в ПакетеXDTO клон объекта , у которого все поля необязательные.
#3
by alexei366
Очередной раз поднимаю тему + ещё 1 вопросик : если во врем хранилище формы сохранен ОбъектXDTO, будет ли заметны задержки при серверных вызовах формы, если при каждом из них будет использован метод ПолучитьИзВременногоХранилища данный объект и представим что в формате xml его размер будет составлять 10 мб
#4
by Serginio1
Посмотри про Версионность в 1С. Там объекты сохраняются через сериализацию XDTO, а вот загружаются через ЧтениеXML
#5
by alexei366
Данный Объект не является Объектом базы (не справочник не документ), так что Сериализатор мне не поможет
#6
by Fragster
нужно правильный тип при разворачивании обратно (и туда тоже). У тебя же пакет XDTO/WS схема описаны?
#7
by Serginio1
Смотри РазборПредставленияОбъектаXML А какая разница У тебя есть объектXDTO. Объект XDTO прекрасно сериализуется в текст Фабрика.ЗаписатьXML(ЗаписьXML, Объект);. А вот обратно можно по аналогии с версионностью
#8
by alexei366
Но он пока неиспользуется в WS, мож потом. Смысл в том что выгрузить в строку невалидный "черновик" (в плане наличия обязательных полей) объект я могу, а обратно в Объект в строку уже нет.
#9
by Serginio1
У него не все поля заполнены, поэтому при десериализации у него и выпадают. Для того, что бы поля не можно было не сериализовать нужно вроде как установить минимальное количество в 0.
#10
by alexei366
Serginio1 ты попробуй посредством ФабрикиXDTO загрузить какойнить объект, удалив из его xml какой-нибудь обязательный элемент (к примеру наверно Ref-ссылка)
#11
by alexei366
Схема XSD внешняя, не я её придумал, и я уже в начале писал "P.S. единственное что пока придумал создавать в ПакетеXDTO клон объекта , у которого все поля необязательные.". Такчто хочу узнать есть ли другие варианты решения.
#12
by AaNnDdRrEeYy
Собирай черновик сначало в другой тип данных например структуру или тз и сохраняй его хоть в хранилище значений, а когда собереш до конца заполниш XDTO, никак ты файл с помощью XDTO не прочитаешь если он не валидный, только используя чтение xml но это геморно.
#14
by AaNnDdRrEeYy
XDTO такая штука что она может без проблем записать такую фигню что сама потом прочитать не сможет. Перед записью нужно вызывать метод Проверить для предотврашения такой ситуаций.
#16
by alexei366
AaNnDdRrEeYy эт я знаю, думал насчет своего какогото гавна для хранения чернового варианта, но хотел всетаки хранить в xml строке созданной по xsd.
#17
by alexei366
Serginio1 да я это уже и сам делал и использую, мне пока на лево от вопроса не надо.
#19
by alexei366
Ладно вопрос попроще. Я создаю ОбъектXDTO на остнове типа, и при выгрузке в строку имя корневого элемента устанавливается такое же как имя типа. Как мне правильно создать ОбъектXDTO на основе корневого свойства ПакетаXDTO (или только после создания ОбъектаXDTO сделать КорневойЭлемент.Наименование = "Корневой элемент";)
#21
by Serginio1
Это понятно. Я так понимаю, что Для загрузки в клон, тебе нужно подменить тип объекта в строке. Можно отдельно создать пакет, полный клон только с необязательными свойствами, и выгрузить схему в файл. И с объектом работать через фабрику с загруженной схемой Фабрика = СоздатьФабрикуXDTO("ПутьКФайлу.xsd");
#22
by alexei366
А вот Фабрика = СоздатьФабрикуXDTO("ПутьКФайлу.xsd"); если каждый раз при получении объекта (или серверном вызове) мне xsd подгружать, то чувствую тормоза наверно будут. Я думал мож другой вариант есть преобразовать невалидный xml в ОбъектXDTO. Наверно придётся запариться и сделать как посоветовал .
#25
by AaNnDdRrEeYy
а я чувствую что первая xsd схема не сможет прочитать файл созданный второй xsd схемой, простанства имен то у них разные
#28
by Serginio1
Структуру можешь создать Для каждого свойство из ОбъектXDTO.Свойства Цикл Резулт.Вставить(свойство.ИмяПоля,ОбъектXDTO[Свойство.Имя]); КонецЦикла
#29
by alexei366
там не всё так просто. Там у меня получается Структура которая имеет значения типа структура или массив или какойто простой тип, и в свою очередь массив имеет в своих элементах структуру, и т.д.
#30
by alexei366
да на самом деле, можно хоть в том же пакете содать новый тип (черновик), единственное чем будут отличаться xml, так только названием корневого элемента, на что в свою очередь ФабрикеXDTO вообще н а с р а т ь.
#31
by Serginio1
Ну можешь исследовать Свойство.Тип и рекурсивно вызывать для свойств массивов или структур.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- v8: Выбор партии при продаже в УТ 10.2
- НДС в авансовом отчете - Не заполнено значение реквизита "Дата документа сторонн
- OpenVPN как дать доступ клиентам во внутреннюю локалку?
- v7: проблема выгрузки строк неограниченной длинны
- Объект не найден вместо наименования всех объектов Контрагентов
- 82 Самописная. Как в поле построителя отчета поместить вычисляемое поле
- v7: Пропали заполненные регламентированные отчеты
- Ошибка при добавлении узла в набор узлов
- v7: ТиС сканер штрихкода metrologic ms 5145 RS-232
- Граница запрета изменения данных
- УФ Как можно задать при копировании документа что копировать, а что нет?
- Как программно прописать и считать ПВХ в документ.
- Долго выводится структура подчиненности НЕ под полными правами
- Ошибка формата файла обмена ИмяУзла = УдалениеОбъекта
- Документ Заказ покупателя
- Справка 2-НДФЛ для передачи в ИФНС
- ограничение доступа по складу
- v8: Ошибка при создании базы в SQL 2008
- Процедура контроля остатков при резервировании в УТ 10.3
- Снова 1C 8.2 + Apache 2.2 + WEB клиент