Как прочитать xml через фабрику? #580064


#0 by mikecool
Как то научился через фабрику выгружать в хмл А теперь бы хотелось прочитать. Подскажите последовательность - что за чем пожалуйста типа прочитать созданный мною хмл и создать выгруженные объекты
#0 by mikecool
Как то научился через фабрику выгружать в хмл А теперь бы хотелось прочитать. Подскажите последовательность - что за чем пожалуйста типа прочитать созданный мною хмл и создать выгруженные объекты
#1 by mikecool
выгружал через сериализатор хдто как вижу ПрочитатьXML ПрочитатьXDTO или XMLЗначение ? как понять, что объект закончился(если их несколько)?
#2 by also
Сам ниче не знаю, но накидаю полезных ссылок:
#3 by Serginio1
#4 by mikecool
писать я научился )) мне бы взад теперь ))
#5 by mikecool
щас заценю
#6 by mikecool
типо вроде все просто... но - чтение файлов с записанным одним объектом рассмотрена только а у меня  - пачками выгружаются но - буду пробовать
#7 by Serginio1
#8 by acsent
там 2 строчки кода
#9 by acsent
через фабрику нельзя последовательно читать
#10 by mikecool
то бишь - придется каждый объект в отдельный файло выгружать?
#11 by mikecool
+10 ну, думаю это не проблема )))
#12 by mikecool
+11 хотя - как сказать ))) выгрузить 200к номенклатуры в 200к файлов (((
#13 by mikecool
+12 ща попробую какую нить структуру со списком номенкрлатуры, к примеру, выгрузить
#14 by Serginio1
Сам не занимался но у Фабрики есть метод ПрочитатьXML
#15 by Serginio1
Создавай список и из него читай.
#16 by mikecool
угу, дошло  ))
#17 by mikecool
единственно(еще не попробовал) - как сериализуется список объектов хдто ))
#18 by Serginio1
Через Пакеты XDTO ты описываешь свои данные. Данные могут быть как структурой так и массивом или списком структур или примитивных типов. Для того что бы создать массив нужно указать минимальное количество 0, максимальное количество размер массива, для списка это -1. Ну и выдумать свое пространство имен. Все достаточно просто.
#19 by Serginio1
#20 by Serginio1
Или через xsd
#21 by mikecool
у мну щас типа так: но результат не прочитать
#22 by Serginio1
#23 by mikecool
+21 выборка = выборка документов
#24 by Serginio1
А ты обычным чтение XML пройдись, а сериализатору подсовывай не весь файл, а только данные относящиеся к одному объекту. Объект может быть списком.
#25 by mikecool
т.е. у мну есть схема чужой базы, под которую я лабаю выгрузку
#26 by mikecool
если я могу выгрузить список одной строкой, а потом восстановить одной строкой - я попробую )))
#27 by mikecool
еще я чет не понял - нафик я создаю сериализатор, если все равно пользуюсь только Сериализатор.ФабрикаХДТО?
#28 by Serginio1
#29 by mikecool
СписокОбъектов = Новый СписокЗначений; ... СписокОбъектов.Добавить(Объект); ... Фабрика.ЗаписатьXML(ЗаписьXML, СписокОбъектов); ругается на второй параметр )
#30 by mikecool
и так не создается )) СписокОбъектов = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "ValueList"));
#31 by Serginio1
Не там другой сисок. Смотри 22
#32 by mikecool
чета туплю и ослеп )) не вижу
#33 by acsent
Для чтения никаких пакетов не надо
#34 by mikecool
возьму для примера справочник Номенклатура выбираю с иерархией добавляю корневой с наименованием типа "Номенклатура моей фирмы" и этому объекту в элементы уже напихиваю
#35 by mikecool
+34 ?
#36 by Serginio1
Вообще смотрю в data/core есть array
#37 by mikecool
пространство имен просто "data/core" ? я еще нуб ))
#38 by Serginio1
ValueListType
#39 by Serginio1
Пространство имен
#40 by mikecool
cgc? ghj,e.
#41 by mikecool
упс, спс, пробую )))
#42 by mikecool
ы ... СписокОбъектов.Добавить(Объект); - Несоответствие типов (параметр номер '1')
#43 by mikecool
может проще тогда попробовать?
#44 by Serginio1
Не СписокОбъектов.Добавить посмотри в отладчике какие у СписокОбъектов свойчтва. Сейчас сам посмотрю тже
#45 by Serginio1
Попробуй СписокОбъектов.item.Добавить(Объект);
#46 by mikecool
блин, пока не дописал - я и не допер )
#47 by Serginio1
Да исериализатор должен подойти
#48 by mikecool
новая фича Несоответствие типов XDTO: Тип '{' не соответствует типу '{' Тип свойства не соответствует типу значения походу в item надо как то типы присваивать
#49 by mikecool
availableValues или valueType наверно прописать надо как то
#50 by Serginio1
Наверное нужно задавать тип для СписокОбъектов.valueType
#51 by mikecool
по ссылке - база одна, а у меня сторонняя левая конфига
#52 by Serginio1
Ну и что? главное что бы пакеты были одинакове.
#53 by mikecool
Ошибка при установке значения атрибута контекста (valueType) по причине: по причине: Несоответствие типов XDTO: Тип '{' не найден Значение не может быть установлено свойству, имеющему объектный тип
#54 by mikecool
не тот тип подсовываю, нужен объект хдто ссылка из чета не жива
#55 by mikecool
получаю Несоответствие типов XDTO: Свойство не может содержать неопределенное значение
#56 by Serginio1
Вот так работает СписокОбъектов = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/core", "Array")); ТипСтрока=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"); СписокОбъектов.value.Добавить(стр);
#57 by Serginio1
Стр=Фабрика.Создать(ТипСтрока,"Мама мыла раму");
#58 by mikecool
ага, ща переписал на массив - заработало !!!!!
#59 by mikecool
теперь буду пробовать восстанавливать )))
#60 by Serginio1
Кстати для для anytype должно такое проходить ТипСтрока=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"); Но для списказначений это не проходит
#61 by mikecool
а здесь чо? )))
#62 by Serginio1
ОбъектXDTO это список. Для каждого товар и ОбъектXDTO.value цикл //создавай или сериализуй свои объекты КонецЦикла
#63 by Serginio1
Например СериализаторXDTO.ПрочитатьXDTO(Товар)
#64 by mikecool
напоролся Ошибка при вызове метода контекста (ПрочитатьXML) по причине: по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: { - [7,16] Проверка дополнительного свойства:    форма: Элемент    имя: { по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: { - [16,3] Проверка дополнительного свойства:    форма: Элемент    имя: { по причине: Ошибка отображения типов: Отображение лексического значения '' в значение типа 'СправочникСсылка.усЕдиницыХранения' по причине: Ошибка преобразования данных XML заголовок файла -<Array xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/core"> -<Value xsi:type="d2p1:CatalogObject.усНоменклатура" xmlns:d2p1="http://v8.1c.ru/8.1/data/enterprise/current-config"> <d2p1:IsFolder>true</d2p1:IsFolder> <d2p1:Ref>a1ca969d-a7cb-11dc-a89f-003048796049</d2p1:Ref> <d2p1:DeletionMark>false</d2p1:DeletionMark> <d2p1:Parent>00000000-0000-0000-0000-000000000000</d2p1:Parent> <d2p1:Code>00000000492</d2p1:Code> <d2p1:Description>.Товары</d2p1:Description> чего то снова не хваатет?
#65 by mikecool
видимо прикол с заполненностью всех значений
#66 by DmitrO
xml файл по-дальше покажи
#67 by mikecool
показываю
#68 by mikecool
уже проскакивало, что данные в реквизитах должны быть, иначе фабрика не "ест" их
#69 by DmitrO
Не правильно. Не точно мысль выражена. Для объектов справочника в xml данных, должны быть все реквизиты которые определены для объекта с учетом значения предопределенного реквизита ЭтоГруппа. Реквизиты могут быть определены для групп и для элементов по-разному. Это никак не отражается в xml-схеме, но это влияет на сериализацию и успешность десериализации. В сериализации первого объекта в массиве видно что это группа (<d2p1:IsFolder>true</d2p1:IsFolder>), дальше после наименования идут реквизиты Артикул, БазоваяЕдиницаХранения и т.п., поэтому два вопроса: 1)они все определены для группы? 2)пустые значения (в понятиях 1С значения по умолчанию) не всегда могут быть представлены просто пустой строкой, например xml-предствление пустой ссылки - это вовсе не пустая строка (если БазоваяЕдиницаХранения это ссылочный тип, то должно быть 00000000-0000-0000-0000-000000000000).
#70 by mikecool
по 1 пункту  - нет, буду смотреть по 2 пункту - не могу туда засунуть ссылку на пустой объект хдто, пробую получаю Ошибка при установке значения атрибута контекста (ТипТранспортнойЕдиницы)        Объект.ТипТранспортнойЕдиницы = ТипТранспортнойЕдиницы; по причине: по причине: Несоответствие свойства и элемента данных XDTO: Свойство: 'ТипТранспортнойЕдиницы' на момент установки это свойство неопределено
#71 by mikecool
насчет группы - заполняю одинакова и для групп и элементов, щас поправлюсь
#72 by Serginio1
Ты эксортируй пакеты в выгружаемую конфигурацию из загружаемой. Тогда заполнение должно пройти нормально и загрузка.
#73 by DmitrO
почему CatalogObject.усТипыТранспортныхЕдиниц? там не может быть CatalogObject, там должен быть CatalogRef
#74 by Serginio1
XDTOПакты-Экспорт XML схемы конфигурации.
#75 by DmitrO
Ну и вообще в целом в Array выгружать все это вовсе не обязательно. Можно выгружать в корневой элемент с любым именем, а потом просто читать сериализатором последовательно уже в объекты, как написано в .
#76 by mikecool
фабрика в моей конфиге создается по хмл-схеме приемника при попытке создать ref - получаю вместо ссылки Неопределено, так хоть объект создается да я хочу без лишнего класса, через фабрику ) пока резюме - обработал группы, выгрузилось все норм при попытке загрузки Проверка дополнительного свойства:    форма: Элемент    имя: { по причине: Ошибка отображения типов: Отображение лексического значения '' в значение типа 'СправочникСсылка.усЕдиницыХранения' по причине: Ошибка преобразования данных XML в хмл получилось -<Value xsi:type="d2p1:CatalogObject.усНоменклатура" xmlns:d2p1="http://v8.1c.ru/8.1/data/enterprise/current-config"> <d2p1:IsFolder>true</d2p1:IsFolder> <d2p1:Ref>a1ca969d-a7cb-11dc-a89f-003048796049</d2p1:Ref> <d2p1:DeletionMark>false</d2p1:DeletionMark> <d2p1:Parent>00000000-0000-0000-0000-000000000000</d2p1:Parent> <d2p1:Code>00000000492</d2p1:Code> <d2p1:Description>.Товары</d2p1:Description> <d2p1:БазоваяЕдиницаХранения/> </Value> то бишь пустое значение не хавает, а как туда засунуть пустое значение базы приемника - я хз ибо
#77 by Serginio1
С эрраем то проще читать. Меньше буковок нажимать. Он для выгрузки использует родной сериализатор, а по уму должен заполнять объекты из пакета в экспортируемую конфигурацию
#78 by Serginio1
И у тебя вприемнике есть усНоменклатура?
#79 by mikecool
как раз только в приемнике она у меня и есть у меня - почти типовое упп
#80 by Serginio1
Базовая единица неопределена. Она не должна быть Null
#81 by DmitrO
т.е. читаться будет сразу весь массив(?); и в памяти создадутся все объекты, которые содержаться в файле(?); ну конечно, кто же сейчас расход памяти считает проблемой..
#82 by mikecool
а, вон оно в чем собака порылась, даже не догадывался об этом
#83 by mikecool
типа не должна быть нулл? щас проверю
#84 by DmitrO
да что блин :) БазоваяЕдиницаХранения для групп определена? Наверно нет ведь. Значит элемента <d2p1:БазоваяЕдиницаХранения/> вообще быть не должно тут.
#85 by mikecool
каг бе определена, спецательно пробежался по реквизитам, уточнил ))
#86 by mikecool
+85 запихнуть бы туда пустую ссылку
#87 by mikecool
+86 запихнул 00000000-0000-0000-0000-000000000000 - вроде съелось при загрузке тест идет дальше )))
#88 by DmitrO
не понимаю в чем проблема?
#89 by mikecool
только третий вариант, первые два - нет у меня этого справочника
#90 by mikecool
усе получилось, теперь буду разбирать, что делать с этими хдто объектами в приемнике )))
#91 by mikecool
вернулся к массиву, вернее к его уборке пытаюсь "рисовать" корневой элемент, какой тип выбрать для него, чтобы потом восстанавливать последовательным чтением сериализатором?
#92 by mikecool
о, строка )))
#93 by mikecool
+92 но чую - фигня, нужен объект, который может принимать в себя элементы ((
#94 by Serginio1
Ну с делай структуру которая содержит массв групп и массив элементов. И будет тебе дерево
#95 by Serginio1
А элементами этого массива групп моут выступать эти же структура
#96 by Serginio1
Такая рекурсивная структура. Но заполнение их будет тоже рекурсивное.
#97 by Serginio1
А базовую единицу ты можешь прсваиватьи на стороне приемника
#98 by mikecool
я чего подумал - я могу же оставить массив с элементами и читать его сериализатором? будет ли он читать по-элементно?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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