Вопрос про XDTO. #451659


#0 by ll13
При выгрузке в XML через XDTO, все реквизиты должны быть заполнены(либо инициализированны пустыми значениями), иначе потом невозможно буде загрузить с помощью Объект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML) Вопрос : кто нибудь пользует XDTO для обмена между разнородными конфами ? Ведь вышеуказанный факт делает бесполезным XDTO в реальных условиях, когда у документа 50 реквизитов, обязательны 5, остальные 45 нужно инициализировать пустыми значениями...(
#1 by Рэйв
Пусть побьют меня камнями, но слово "XDTO" слышу первый раз....Наверное я отсталый...Поэтому предпочитаю КД 2.0
#2 by Живой Ископаемый
Не переноси остальные 45 вообще - делов-то... исключи их схемы вовсе
#3 by ll13
Исключал, не работает ( Т.е. если в неком Объекте есть реквизит Реквизит1, а в файле переноса XML его нет то Объект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML) выдаст ошибку ...
#4 by Живой Ископаемый
что-то ты не так  делаешь
#5 by ll13
Скиньте пример если есть.
#6 by Живой Ископаемый
есть книжка в сети.. переход от в80 к в81... ссылку конечно не дам.. там целая глава про хдто
#7 by ll13
У меня есть эта книга, там есть "игрушечный" пример, который разумеется отлично работает, перенести документ с 3-мя реквизитами проблемы не составляет. Проблема - когда в документе есть к примеру 100 реквизитов, а обязательных для заполнения не больше 10-ти, в таком случае все остальные реквизиты необходимо, при выгрузке инициализировать пустыми значениями, т.е. ВСЕ реквизиты должны существовать в сериализованном виде.
#8 by acsent
покажи код
#9 by Obiz
Вообще-то XDTO предполагался скорее для обмена между 1С и другими программами, а не между 2-мя базами. Зачем так изголяться, когда есть Конвертация данных?
#10 by Obiz
Да, слегка отстал, XDTO появилось на 8.1
#11 by acsent
XDTO позволяет одним движение превратить XML в объект (не обязательно объект бд)
#12 by acsent
Удобно для хранения настроек
#13 by Kasper076
Абсолютно прав. Но и тоже прав. Разбирался в свое время с этой темой. Все реквизиты объекта должны быть заполнены иначе, при загрузке, 1С не модет создать объект из его XML-представления. Вот полезная ссылка
#14 by ll13
Превратить то превратишь, но только при условии что XML содержит ВСЕ реквизиты объекта(в том числе незаполненные). Эта особенность делает XDTO бесполезным при обмене данными между разнородными конфами. Кроме того крайне не надёжным, пример : Настроена перенос документа Д1 из базы Б1 в документ Д2 из базы Б2. Состав реквизитов документа не идентичен. Все работает отлично. Далее в базе Б2 у документа Д2 добавляем реквизит НеобязательныйНикомуНеНужныйРеквизит. И... все перенос больше не работает, его надо переписывать и дописывать сериализацию реквизита НеобязательныйНикомуНеНужныйРеквизит... Ссылку читал там игрушечный пример который работает замечательно, но где в реальность Вы видели документ с 3-ме реквизитами ?! )
#15 by ll13
Подниму ветку, проблема преобразования из XML -> Объект 1С, при отсутствии нескольких реквизитов в XML осталась не решена , можь кто решил эту задачу ?
#16 by Oftan_Idy
Да, с чего вы взяли что должны быть все реквизиты в пакете XDTO? Все зависит от того как описана модель (xsd). Для типа объета укажите фасет "Минимальное количество" = 0, и элемент можно вообще не включать в пакет.
#17 by Kasper076
У типа объекта я не нашел фассета "Минимальное количество". Только у свойств оно есть.
#18 by Oftan_Idy
Да, сори у свойства
#19 by ll13
А может у кого есть реально работающий пример обмена данными между конфами различной структуры, построенный на XDTO ?
#20 by Kasper076
Т.е. те свойства у которых фасет МинимальноеКоличесто = 0 могут быть незаполненными? И вытекает ли отсюда, что те свойства у которых фасет МаксимальноКоличество = 0 могут быть в объекте источнике, но отсутствовать в объекте приемнике?
#21 by quest
странно, реквизти может быть не обязательным. Либо тип открытым.
#22 by Kasper076
Как это в XSD-схеме обозначить?
#25 by ll13
В таком случае что я делаю неправильно ? 1). Создал в конфигурации Документ1, с единственным реквизитом Реквизит1. 2). Экспортировал XML-схему конфы в файл shema.xsd 3). Выгрузил Документ1 при помощи кода: Пути = Новый Массив; Пытаюсь загрузить документ: Получаю : Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XDTO: НачалоСвойства: {    Форма: Элемент    Тип: {    Документ1 = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); ..... Если при выгрузке Реквизит1 заполнить то всё отлично работает. Как это можно обойти ?
#26 by ll13
Подниму...
#28 by quest
выгрузи схему xsd. посмотри описание. на край - забей болт на 1С и сам опиши как тебе надо.
#29 by ll13
Выгрузил, посмотрел ... вопрос в том что я там должен(не должен) увидеть. Схема как схема, урезал её оставив в ней описание только одного(выгружаемого) документа. результат тот же...(
#30 by Sonny
Тоже пытался одолеть эту ошибку. В конце концов плюнул и написал свою выгрузку/загрузку через XML без использования встроенных сериализаторов. Подозреваю, что как ни извращайся со схемой при выгрузке, результирующий файл будет одинаковым. Во всяком случае мне не удалось добиться, чтобы информация о необязательных реквизитах попадала в файл выгрузки. Есть подозрение, что СериализаторXDTO при загрузке все же должен "знать": какие реквизиты являются необязательными. А откуда он это узнает, если в файле об этом ни байта? Возможно успеха добиться можно, используя схему при загрузке данных.
#31 by ll13
Тоже не помогает уже пробовал подсунуть схему результат тот же :(
#32 by niko8
Не очень вникал ч суть проблемы. Но что ознасает свойставо Возможно пустое. XDTO использовал для работы с Web сервисом. А для выгрузки и загрузки документов в XML существует обработка на ИТС, можно поковырять ее и посмотреть как там реализованно.
#33 by ll13
Ничего не означает, в теории признак того что свойство может быть пустым, на практике это ничего не меняет. Свойства "Фиксированное" и "По умолчанию" так же не влияют на формирование xml-документа...
#34 by Kasper076
Я тут вот о чем подумал. Если при загрузке через свойство глобального контекста СериализаторXDTO 1С использует XSD схему той конфы, в которую мы загружаем данные. Эту схему мы изменить ни как не можем. Следовательно при загрузке нужно использовать нашу собственную схему, которую мы использовали при выгрузке.В результате будет создан некий объект из сериализованных данных. Но он не будет являться объектом БД (т.е. справочником или документом). Но значениями свойств этого объекта можно уже будет заполнить свойства объекта БД. Что-то вроде ЗаполнитьЗначенияСвойств(ОбъкетXDTO,ОбъектБД).
#35 by ll13
Вариант вполне жизнеспособный. Ещё вариант: у необязательных реквизитов в схеме поставить на всякий случай nillable="true", затем при выгрузке заполняем реквизиты которые нужны и вызываем процедуру Затем с чистой совестью пишем ОбъектXDTO в XML
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С