|
Как прочитать xml через фабрику? | ☑ | ||
---|---|---|---|---|
0
mikecool
15.11.11
✎
15:28
|
Как то научился через фабрику выгружать в хмл
А теперь бы хотелось прочитать. Подскажите последовательность - что за чем пожалуйста типа прочитать созданный мною хмл и создать выгруженные объекты |
|||
1
mikecool
15.11.11
✎
15:32
|
выгружал через сериализатор хдто
как вижу ПрочитатьXML ПрочитатьXDTO или XMLЗначение ? как понять, что объект закончился(если их несколько)? |
|||
2
also
15.11.11
✎
15:35
|
Сам ниче не знаю, но накидаю полезных ссылок:
http://infostart.ru/public/98019/ http://v8.1c.ru/metod/books/book.jsp?id=288 |
|||
3
Serginio1
15.11.11
✎
15:36
|
||||
4
mikecool
15.11.11
✎
15:37
|
(3) писать я научился )) мне бы взад теперь ))
|
|||
5
mikecool
15.11.11
✎
15:37
|
(2) щас заценю
|
|||
6
mikecool
15.11.11
✎
15:43
|
(2) типо вроде все просто...
но - чтение файлов с записанным одним объектом рассмотрена только а у меня - пачками выгружаются но - буду пробовать |
|||
7
Serginio1
15.11.11
✎
15:44
|
||||
8
acsent
15.11.11
✎
15:45
|
там 2 строчки кода
|
|||
9
acsent
15.11.11
✎
15:46
|
(6) через фабрику нельзя последовательно читать
|
|||
10
mikecool
15.11.11
✎
15:47
|
(9) то бишь - придется каждый объект в отдельный файло выгружать?
|
|||
11
mikecool
15.11.11
✎
15:49
|
+10 ну, думаю это не проблема )))
|
|||
12
mikecool
15.11.11
✎
15:50
|
+11 хотя - как сказать ))) выгрузить 200к номенклатуры в 200к файлов (((
|
|||
13
mikecool
15.11.11
✎
15:50
|
+12 ща попробую какую нить структуру со списком номенкрлатуры, к примеру, выгрузить
|
|||
14
Serginio1
15.11.11
✎
15:51
|
Сам не занимался но у Фабрики есть метод ПрочитатьXML
|
|||
15
Serginio1
15.11.11
✎
15:52
|
Создавай список и из него читай.
|
|||
16
mikecool
15.11.11
✎
15:52
|
(15) угу, дошло ))
|
|||
17
mikecool
15.11.11
✎
15:54
|
единственно(еще не попробовал) - как сериализуется список объектов хдто ))
|
|||
18
Serginio1
15.11.11
✎
16:01
|
Через Пакеты XDTO ты описываешь свои данные. Данные могут быть как структурой так и массивом или списком структур или примитивных типов.
Для того что бы создать массив нужно указать минимальное количество 0, максимальное количество размер массива, для списка это -1. Ну и выдумать свое пространство имен. Все достаточно просто. |
|||
19
Serginio1
15.11.11
✎
16:06
|
ТипСписка = ФабрикаXDTO.Тип(ТвоеространствоИмен, "ТвойСписок");
Список = ФабрикаXDTO.Создать(ТипСписка); ТипЭлементаСписка = ФабрикаXDTO.Тип(ТвоеространствоИмен, "ТвойТипЭлементСписка"); ЭлементаСписка=ФабрикаXDTO.Создать(ТипЭлементаСписка ); Список.ТвоеНазваниеЭлеменовСписка.Добавить(ЭлементаСписка); |
|||
20
Serginio1
15.11.11
✎
16:07
|
Или через xsd
|
|||
21
mikecool
15.11.11
✎
16:08
|
у мну щас типа так:
ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(СтруктураПараметров.СтруктураИменФайлов.ИмяФайлаПоступления); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента(XMLСтрока("DocumentRef.усОжидаемаяПриемка")); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); Сериализатор = СтруктураПараметров.Сериализатор; Пока Выборка.Следующий() Цикл Объект = Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "DocumentObject.усОжидаемаяПриемка")); ЗаполнитьЗначенияСвойств(Объект, Выборка, , "Ref, Организация, Склад, Контрагент, Автор, Менеджер"); Объект.Ref = XMLСтрока(Выборка.Ref); Объект.Организация = XMLСтрока(Выборка.Организация); Объект.Склад = XMLСтрока(Выборка.Склад); Объект.Контрагент = XMLСтрока(Выборка.Контрагент); Объект.Автор = XMLСтрока(Выборка.Автор); Объект.Менеджер = XMLСтрока(Выборка.Менеджер); ВыборкаТовары = Выборка.Товары.Выбрать(); Пока ВыборкаТовары.Следующий() Цикл Если СтруктураПараметров.СписокНоменклатуры.НайтиПоЗначению(ВыборкаТовары.Номенклатура) = Неопределено Тогда СтруктураПараметров.СписокНоменклатуры.Добавить(ВыборкаТовары.Номенклатура); КонецЕсли; Товар = Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "DocumentTabularSectionRow.усОжидаемаяПриемка.Товары")); ЗаполнитьЗначенияСвойств(Товар, ВыборкаТовары, , "Номенклатура, ЕдиницаХранения"); Товар.Номенклатура = XMLСтрока(ВыборкаТовары.Номенклатура); Товар.ЕдиницаХранения = XMLСтрока(ВыборкаТовары.ЕдиницаХранения); Объект.ПолучитьСписок("Товары").Добавить(Товар); КонецЦикла; Сериализатор.Фабрика.ЗаписатьXML(ЗаписьXML, Объект); КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.Закрыть(); но результат не прочитать |
|||
22
Serginio1
15.11.11
✎
16:08
|
||||
23
mikecool
15.11.11
✎
16:09
|
+21 выборка = выборка документов
|
|||
24
Serginio1
15.11.11
✎
16:11
|
А ты обычным чтение XML пройдись, а сериализатору подсовывай не весь файл, а только данные относящиеся к одному объекту. Объект может быть списком.
|
|||
25
mikecool
15.11.11
✎
16:11
|
т.е. у мну есть схема чужой базы, под которую я лабаю выгрузку
|
|||
26
mikecool
15.11.11
✎
16:12
|
(24) если я могу выгрузить список одной строкой, а потом восстановить одной строкой - я попробую )))
|
|||
27
mikecool
15.11.11
✎
16:14
|
еще я чет не понял - нафик я создаю сериализатор, если все равно пользуюсь только Сериализатор.ФабрикаХДТО?
|
|||
28
Serginio1
15.11.11
✎
16:20
|
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ДиалогОткрытияФайла.ПолноеИмяФайла); //прочитаем начало xml файла Чтение.ПерейтиКСодержимому(); //прочитаем начало корневого элемента Чтение.Прочитать(); //читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника, //а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл //читаем очередной элемент справочника Объект = СериализаторXDTO.ПрочитатьXML(Чтение); Объект.ОбменДанными.Загрузка = Истина; Объект.Записать(); //покажем что прочитали, осталось только записать объект Сообщить(""+ТипЗнч(Объект)+" - "+Объект); КонецЦикла; Чтение.Закрыть(); |
|||
29
mikecool
15.11.11
✎
16:21
|
пробовал
СписокОбъектов = Новый СписокЗначений; ... СписокОбъектов.Добавить(Объект); ... Фабрика.ЗаписатьXML(ЗаписьXML, СписокОбъектов); ругается на второй параметр ) |
|||
30
mikecool
15.11.11
✎
16:22
|
и так не создается ))
СписокОбъектов = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "ValueList")); |
|||
31
Serginio1
15.11.11
✎
16:26
|
Не там другой сисок. Смотри 22
|
|||
32
mikecool
15.11.11
✎
16:29
|
(31) чета туплю и ослеп )) не вижу
|
|||
33
acsent
15.11.11
✎
16:31
|
Для чтения никаких пакетов не надо
|
|||
34
mikecool
15.11.11
✎
16:35
|
(31) возьму для примера справочник Номенклатура
выбираю с иерархией добавляю корневой с наименованием типа "Номенклатура моей фирмы" и этому объекту в элементы уже напихиваю |
|||
35
mikecool
15.11.11
✎
16:35
|
+34 ?
|
|||
36
Serginio1
15.11.11
✎
16:39
|
Вообще смотрю в data/core есть array
|
|||
37
mikecool
15.11.11
✎
16:42
|
(36) пространство имен просто "data/core" ? я еще нуб ))
|
|||
38
Serginio1
15.11.11
✎
16:43
|
ValueListType
|
|||
39
Serginio1
15.11.11
✎
16:43
|
Пространство имен http://v8.1c.ru/8.1/data/core
|
|||
40
mikecool
15.11.11
✎
16:45
|
cgc? ghj,e.
|
|||
41
mikecool
15.11.11
✎
16:45
|
упс, спс, пробую )))
|
|||
42
mikecool
15.11.11
✎
16:49
|
ы
СписокОбъектов = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/core", "ValueListType")); создается а вот Объект = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.усНоменклатура")); ... СписокОбъектов.Добавить(Объект); - Несоответствие типов (параметр номер '1') |
|||
43
mikecool
15.11.11
✎
16:49
|
может проще тогда (34) попробовать?
|
|||
44
Serginio1
15.11.11
✎
16:51
|
Не СписокОбъектов.Добавить посмотри в отладчике какие у СписокОбъектов свойчтва. Сейчас сам посмотрю тже
|
|||
45
Serginio1
15.11.11
✎
16:55
|
Попробуй СписокОбъектов.item.Добавить(Объект);
|
|||
46
mikecool
15.11.11
✎
16:56
|
(45) блин, пока (44) не дописал - я и не допер )
|
|||
47
Serginio1
15.11.11
✎
16:57
|
Да исериализатор должен подойти v8: Сериализация СпискаЗначений В XDTO. Где я не прав?
|
|||
48
mikecool
15.11.11
✎
16:59
|
новая фича
Несоответствие типов XDTO: Тип '{http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.усНоменклатура' не соответствует типу '{http://v8.1c.ru/8.1/data/core}ValueListItemType' Тип свойства не соответствует типу значения походу в item надо как то типы присваивать |
|||
49
mikecool
15.11.11
✎
17:01
|
availableValues или valueType наверно прописать надо как то
|
|||
50
Serginio1
15.11.11
✎
17:01
|
Наверное нужно задавать тип для СписокОбъектов.valueType
|
|||
51
mikecool
15.11.11
✎
17:02
|
(47) по ссылке - база одна, а у меня сторонняя левая конфига
|
|||
52
Serginio1
15.11.11
✎
17:05
|
Ну и что? главное что бы пакеты были одинакове.
|
|||
53
mikecool
15.11.11
✎
17:06
|
Ошибка при установке значения атрибута контекста (valueType)
СписокОбъектов.valueType = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.усНоменклатура"); по причине: по причине: Несоответствие типов XDTO: Тип '{http://v8.1c.ru/8.1/data/core}TypeDescription' не найден Значение не может быть установлено свойству, имеющему объектный тип |
|||
54
mikecool
15.11.11
✎
17:07
|
не тот тип подсовываю, нужен объект хдто
ссылка из (39) чета не жива |
|||
55
mikecool
15.11.11
✎
17:12
|
пробую
СписокОбъектов.valueType = Фабрика.Тип("http://v8.1c.ru/8.1/data/core", "XDTODataValue"); получаю Несоответствие типов XDTO: Свойство не может содержать неопределенное значение |
|||
56
Serginio1
15.11.11
✎
17:25
|
Вот так работает
СписокОбъектов = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/core", "Array")); ТипСтрока=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"); СписокОбъектов.value.Добавить(стр); |
|||
57
Serginio1
15.11.11
✎
17:26
|
Стр=Фабрика.Создать(ТипСтрока,"Мама мыла раму");
|
|||
58
mikecool
15.11.11
✎
17:26
|
(56) ага, ща переписал на массив - заработало !!!!!
спасибо )))) |
|||
59
mikecool
15.11.11
✎
17:26
|
теперь буду пробовать восстанавливать )))
|
|||
60
Serginio1
15.11.11
✎
17:55
|
Кстати для для anytype должно такое проходить
ТипСтрока=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"); Стр=Фабрика.Создать(ТипСтрока,"Мама мыла раму"); НомераДеталей=Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/core", "ValueListType")); НомераДеталей.Добавить(ФормаXML.Элемент, "http://v8.1c.ru/8.1/data/core", "item", Стр); Но для списказначений это не проходит |
|||
61
mikecool
15.11.11
✎
17:58
|
дальше туплю
ЧтениеXML = Новый ЧтениеXML; ТипОбъектаXDTO=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","Array"); ЧтениеXML.ОткрытьФайл(Файл); ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъектаXDTO); а здесь чо? ))) |
|||
62
Serginio1
15.11.11
✎
18:30
|
ОбъектXDTO это список.
Для каждого товар и ОбъектXDTO.value цикл //создавай или сериализуй свои объекты КонецЦикла |
|||
63
Serginio1
15.11.11
✎
18:31
|
Например
СериализаторXDTO.ПрочитатьXDTO(Товар) |
|||
64
mikecool
16.11.11
✎
11:30
|
напоролся
Ошибка при вызове метода контекста (ПрочитатьXML) ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъектаXDTO); по причине: по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {http://v8.1c.ru/8.1/data/core}Array - [7,16] Проверка дополнительного свойства: форма: Элемент имя: {http://v8.1c.ru/8.1/data/core}Value по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.усНоменклатура - [16,3] Проверка дополнительного свойства: форма: Элемент имя: {http://v8.1c.ru/8.1/data/enterprise/current-config}БазоваяЕдиницаХранения по причине: Ошибка отображения типов: Отображение лексического значения '' в значение типа 'СправочникСсылка.усЕдиницыХранения' по причине: Ошибка преобразования данных XML заголовок файла <?xml version="1.0" encoding="UTF-8"?> -<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
mikecool
16.11.11
✎
11:34
|
видимо прикол с заполненностью всех значений
|
|||
66
DmitrO
16.11.11
✎
11:54
|
(65)xml файл по-дальше покажи
|
|||
67
mikecool
16.11.11
✎
12:35
|
показываю
<?xml version="1.0" encoding="UTF-8"?> -<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> <d2p1:Артикул/> <d2p1:БазоваяЕдиницаХранения/> <d2p1:Поклажедатель>00000000-0000-0000-0000-000000000000</d2p1:Поклажедатель> <d2p1:ТипТранспортнойЕдиницы/> <d2p1:ТипНоменклатуры>Товар</d2p1:ТипНоменклатуры> <d2p1:ШтрихКод/> <d2p1:ПечататьЭтикетку>false</d2p1:ПечататьЭтикетку> <d2p1:Комментарий/> <d2p1:ПолноеНаименование/> <d2p1:Сертификат/> <d2p1:Цена>0</d2p1:Цена> <d2p1:ЦенаПродажи>0</d2p1:ЦенаПродажи> <d2p1:ГТД/> <d2p1:ПриоритетДаты>false</d2p1:ПриоритетДаты> <d2p1:РазрешитьРаспаковкуПриОтборе>false</d2p1:РазрешитьРаспаковкуПриОтборе> <d2p1:СрокХранения>0</d2p1:СрокХранения> <d2p1:ТипПериодаСрокаХранения>Месяцы</d2p1:ТипПериодаСрокаХранения> <d2p1:ТипВводимогоСрокаГодности/> <d2p1:СтранаПроисхождения/> <d2p1:ДанныеПроизводителя>00000000-0000-0000-0000-000000000000</d2p1:ДанныеПроизводителя> <d2p1:ДанныеПродавца>00000000-0000-0000-0000-000000000000</d2p1:ДанныеПродавца> <d2p1:ДанныеПоставщика>00000000-0000-0000-0000-000000000000</d2p1:ДанныеПоставщика> <d2p1:СтавкаНДС/> <d2p1:СтранаПроисхожденияУдалить/> <d2p1:ДанныеПроизводителяУдалить/> <d2p1:ДанныеПродавцаУдалить/> <d2p1:ДанныеПоставщикаУдалить/> <d2p1:СтавкаНДСУдалить>0</d2p1:СтавкаНДСУдалить> <d2p1:НовыйЭлемент>false</d2p1:НовыйЭлемент> <d2p1:ЕдиницаХраненияОстатковКИС/> <d2p1:АлгоритмПодпитки/> </Value> -<Value xsi:type="d2p1:CatalogObject.усНоменклатура" xmlns:d2p1="http://v8.1c.ru/8.1/data/enterprise/current-config"> <d2p1:IsFolder>true</d2p1:IsFolder> <d2p1:Ref>b9e4b4d4-a7cf-11dc-a89f-003048796049</d2p1:Ref> <d2p1:DeletionMark>false</d2p1:DeletionMark> <d2p1:Parent>8944ab18-a7cf-11dc-a89f-003048796049</d2p1:Parent> <d2p1:Code>00000003605</d2p1:Code> <d2p1:Description>Plastosilk</d2p1:Description> <d2p1:Артикул/> <d2p1:БазоваяЕдиницаХранения/> <d2p1:Поклажедатель>00000000-0000-0000-0000-000000000000</d2p1:Поклажедатель> <d2p1:ТипТранспортнойЕдиницы/> <d2p1:ТипНоменклатуры>Товар</d2p1:ТипНоменклатуры> <d2p1:ШтрихКод/> <d2p1:ПечататьЭтикетку>false</d2p1:ПечататьЭтикетку> <d2p1:Комментарий/> <d2p1:ПолноеНаименование/> <d2p1:Сертификат/> <d2p1:Цена>0</d2p1:Цена> <d2p1:ЦенаПродажи>0</d2p1:ЦенаПродажи> <d2p1:ГТД/> <d2p1:ПриоритетДаты>false</d2p1:ПриоритетДаты> <d2p1:РазрешитьРаспаковкуПриОтборе>false</d2p1:РазрешитьРаспаковкуПриОтборе> <d2p1:СрокХранения>0</d2p1:СрокХранения> <d2p1:ТипПериодаСрокаХранения>Месяцы</d2p1:ТипПериодаСрокаХранения> <d2p1:ТипВводимогоСрокаГодности/> <d2p1:СтранаПроисхождения/> <d2p1:ДанныеПроизводителя>00000000-0000-0000-0000-000000000000</d2p1:ДанныеПроизводителя> <d2p1:ДанныеПродавца>00000000-0000-0000-0000-000000000000</d2p1:ДанныеПродавца> <d2p1:ДанныеПоставщика>00000000-0000-0000-0000-000000000000</d2p1:ДанныеПоставщика> <d2p1:СтавкаНДС/> <d2p1:СтранаПроисхожденияУдалить/> <d2p1:ДанныеПроизводителяУдалить/> <d2p1:ДанныеПродавцаУдалить/> <d2p1:ДанныеПоставщикаУдалить/> <d2p1:СтавкаНДСУдалить>0</d2p1:СтавкаНДСУдалить> <d2p1:НовыйЭлемент>false</d2p1:НовыйЭлемент> <d2p1:ЕдиницаХраненияОстатковКИС/> <d2p1:АлгоритмПодпитки/> </Value> |
|||
68
mikecool
16.11.11
✎
12:36
|
уже проскакивало, что данные в реквизитах должны быть, иначе фабрика не "ест" их
|
|||
69
DmitrO
16.11.11
✎
13:07
|
(68)Не правильно. Не точно мысль выражена.
Для объектов справочника в xml данных, должны быть все реквизиты которые определены для объекта с учетом значения предопределенного реквизита ЭтоГруппа. Реквизиты могут быть определены для групп и для элементов по-разному. Это никак не отражается в xml-схеме, но это влияет на сериализацию и успешность десериализации. В сериализации первого объекта в массиве видно что это группа (<d2p1:IsFolder>true</d2p1:IsFolder>), дальше после наименования идут реквизиты Артикул, БазоваяЕдиницаХранения и т.п., поэтому два вопроса: 1)они все определены для группы? 2)пустые значения (в понятиях 1С значения по умолчанию) не всегда могут быть представлены просто пустой строкой, например xml-предствление пустой ссылки - это вовсе не пустая строка (если БазоваяЕдиницаХранения это ссылочный тип, то должно быть 00000000-0000-0000-0000-000000000000). |
|||
70
mikecool
16.11.11
✎
13:11
|
(69) по 1 пункту - нет, буду смотреть
по 2 пункту - не могу туда засунуть ссылку на пустой объект хдто, пробую ТипТранспортнойЕдиницы = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.усТипыТранспортныхЕдиниц")); ... Объект.ТипТранспортнойЕдиницы = ТипТранспортнойЕдиницы; получаю Ошибка при установке значения атрибута контекста (ТипТранспортнойЕдиницы) Объект.ТипТранспортнойЕдиницы = ТипТранспортнойЕдиницы; по причине: по причине: Несоответствие свойства и элемента данных XDTO: Свойство: 'ТипТранспортнойЕдиницы' на момент установки это свойство неопределено |
|||
71
mikecool
16.11.11
✎
13:13
|
насчет группы - заполняю одинакова и для групп и элементов, щас поправлюсь
|
|||
72
Serginio1
16.11.11
✎
13:23
|
Ты эксортируй пакеты в выгружаемую конфигурацию из загружаемой. Тогда заполнение должно пройти нормально и загрузка.
|
|||
73
DmitrO
16.11.11
✎
13:23
|
(70)почему CatalogObject.усТипыТранспортныхЕдиниц?
там не может быть CatalogObject, там должен быть CatalogRef |
|||
74
Serginio1
16.11.11
✎
13:24
|
XDTOПакты-Экспорт XML схемы конфигурации.
|
|||
75
DmitrO
16.11.11
✎
13:27
|
Ну и вообще в целом в Array выгружать все это вовсе не обязательно. Можно выгружать в корневой элемент с любым именем, а потом просто читать сериализатором последовательно уже в объекты, как написано в (28).
|
|||
76
mikecool
16.11.11
✎
13:30
|
(74) фабрика в моей конфиге создается по хмл-схеме приемника
(73) при попытке создать ref - получаю вместо ссылки Неопределено, так хоть объект создается (75) да я хочу без лишнего класса, через фабрику ) пока резюме - обработал группы, выгрузилось все норм при попытке загрузки Проверка дополнительного свойства: форма: Элемент имя: {http://v8.1c.ru/8.1/data/enterprise/current-config}БазоваяЕдиницаХранения по причине: Ошибка отображения типов: Отображение лексического значения '' в значение типа 'СправочникСсылка.усЕдиницыХранения' по причине: Ошибка преобразования данных 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> то бишь пустое значение не хавает, а как туда засунуть пустое значение базы приемника - я хз ибо (70) |
|||
77
Serginio1
16.11.11
✎
13:31
|
(75) С эрраем то проще читать. Меньше буковок нажимать. Он для выгрузки использует родной сериализатор, а по уму должен заполнять объекты из пакета в экспортируемую конфигурацию
|
|||
78
Serginio1
16.11.11
✎
13:32
|
И у тебя вприемнике есть усНоменклатура?
|
|||
79
mikecool
16.11.11
✎
13:33
|
(78) как раз только в приемнике она у меня и есть
у меня - почти типовое упп |
|||
80
Serginio1
16.11.11
✎
13:36
|
Базовая единица неопределена. Она не должна быть Null
|
|||
81
DmitrO
16.11.11
✎
13:38
|
(77)т.е. читаться будет сразу весь массив(?); и в памяти создадутся все объекты, которые содержаться в файле(?); ну конечно, кто же сейчас расход памяти считает проблемой..
|
|||
82
mikecool
16.11.11
✎
13:42
|
(81) а, вон оно в чем собака порылась, даже не догадывался об этом
|
|||
83
mikecool
16.11.11
✎
13:43
|
(80) типа не должна быть нулл? щас проверю
|
|||
84
DmitrO
16.11.11
✎
13:50
|
(76)да что блин :)
БазоваяЕдиницаХранения для групп определена? Наверно нет ведь. Значит элемента <d2p1:БазоваяЕдиницаХранения/> вообще быть не должно тут. |
|||
85
mikecool
16.11.11
✎
13:57
|
(84) каг бе определена, спецательно пробежался по реквизитам, уточнил ))
|
|||
86
mikecool
16.11.11
✎
13:59
|
+85 запихнуть бы туда пустую ссылку
|
|||
87
mikecool
16.11.11
✎
14:04
|
+86 запихнул 00000000-0000-0000-0000-000000000000 - вроде съелось при загрузке
тест идет дальше ))) |
|||
88
DmitrO
16.11.11
✎
14:04
|
(86)не понимаю в чем проблема?
ОбъектXDTO.БазоваяЕдиницаХранения = Справочники.усЕдиницыХранения.ПустаяСсылка(); ОбъектXDTO.БазоваяЕдиницаХранения = XMLСтрока(Справочники.усЕдиницыХранения.ПустаяСсылка()); ОбъектXDTO.БазоваяЕдиницаХранения = "00000000-0000-0000-0000-000000000000"; |
|||
89
mikecool
16.11.11
✎
14:10
|
(88) только третий вариант, первые два - нет у меня этого справочника
|
|||
90
mikecool
16.11.11
✎
14:11
|
усе получилось, теперь буду разбирать, что делать с этими хдто объектами в приемнике )))
|
|||
91
mikecool
16.11.11
✎
14:29
|
вернулся к массиву, вернее к его уборке
пытаюсь "рисовать" корневой элемент, какой тип выбрать для него, чтобы потом восстанавливать последовательным чтением сериализатором? |
|||
92
mikecool
16.11.11
✎
14:30
|
о, строка )))
|
|||
93
mikecool
16.11.11
✎
14:31
|
+92 но чую - фигня, нужен объект, который может принимать в себя элементы ((
|
|||
94
Serginio1
16.11.11
✎
14:37
|
Ну с делай структуру которая содержит массв групп и массив элементов. И будет тебе дерево
|
|||
95
Serginio1
16.11.11
✎
14:40
|
А элементами этого массива групп моут выступать эти же структура
|
|||
96
Serginio1
16.11.11
✎
14:40
|
Такая рекурсивная структура. Но заполнение их будет тоже рекурсивное.
|
|||
97
Serginio1
16.11.11
✎
14:42
|
А базовую единицу ты можешь прсваиватьи на стороне приемника
|
|||
98
mikecool
16.11.11
✎
14:46
|
я чего подумал - я могу же оставить массив с элементами и читать его сериализатором?
будет ли он читать по-элементно? |
|||
99
Serginio1
16.11.11
✎
14:49
|
По идее должен. Попытка не пытка, здесь же десериализует v8: Сериализация СпискаЗначений В XDTO. Где я не прав?
|
|||
100
DmitrO
16.11.11
✎
14:51
|
блин да не надо ничо этого.. не понял ты
просто по шагам: 1)созаем объект ЗаписьXML 2)открываем файл, пишем объявление xml 3)пишем начало элемента с именем "Данные" 4)вот тут пишем все объекты XDTO сериализатором (или фабрикой), циклами или еще как пофигу. 5)пишем конец элемента (корневого, который с именем "Данные") читаем так: 1)созаем объект ЧтениеXML 2)открываем файл, переходим к содержимому 3)читаем начало корневого элемента 4)пока тип текущего узла не конец элемента (это будет конец корневого) в цикле, читаем сериализатором (или фабрикой) объект XDTO, он возвращает сразу объект 1С мы его пишем в базу. |
|||
101
mikecool
16.11.11
✎
14:54
|
(100) :) ну, надеюсь не тупой )) щас попробую
|
|||
102
Serginio1
16.11.11
✎
15:04
|
(98) Можешь читать поэлементно
Для каждого товар и ОбъектXDTO.value цикл //создавай или сериализуй свои объекты КонецЦикла А можешь и десериализовать массив со всем содержимым Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO); Массив=Сериализатор.ПрочитатьXDTO(ОбъектXDTO); |
|||
103
mikecool
16.11.11
✎
15:08
|
(102) но так же весь объект в памяти окажется, включая и все вложенные?
сделал хмл <?xml version="1.0" encoding="UTF-8"?> -<CatalogRef.усНоменклатура> -<CatalogObject.усНоменклатура 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/enterprise/current-config"> <IsFolder>false</IsFolder> <Ref>f6b7bc95-a7cc-11dc-a89f-003048796049</Ref> <DeletionMark>false</DeletionMark> <Parent>e08a3ec3-a7cc-11dc-a89f-003048796049</Parent> <Code>00000001228</Code> <Description>яNova soft.10+3</Description> <Артикул>BE-012-RW13-001</Артикул> <БазоваяЕдиницаХранения>00000000-0000-0000-0000-000000000000</БазоваяЕдиницаХранения> <Поклажедатель>00000000-0000-0000-0000-000000000000</Поклажедатель> <ТипТранспортнойЕдиницы>00000000-0000-0000-0000-000000000000</ТипТранспортнойЕдиницы> <ТипНоменклатуры>Товар</ТипНоменклатуры> <ШтрихКод>---</ШтрихКод> <ПечататьЭтикетку>false</ПечататьЭтикетку> <Комментарий>---</Комментарий> <ПолноеНаименование>Гигиенические прокладки bella Nova soft.с крыл.10+3 шт.</ПолноеНаименование> <Сертификат/> <Цена>0</Цена> <ЦенаПродажи>0</ЦенаПродажи> <ГТД>---</ГТД> <ПриоритетДаты>false</ПриоритетДаты> <РазрешитьРаспаковкуПриОтборе>false</РазрешитьРаспаковкуПриОтборе> <СрокХранения>0</СрокХранения> <ТипПериодаСрокаХранения>Месяцы</ТипПериодаСрокаХранения> <ТипВводимогоСрокаГодности>ДатаОкончанияСрокаГодности</ТипВводимогоСрокаГодности> <СтранаПроисхождения>fc6f2dfa-8e9c-11dc-0c95-003048796049</СтранаПроисхождения> <ДанныеПроизводителя>00000000-0000-0000-0000-000000000000</ДанныеПроизводителя> <ДанныеПродавца>00000000-0000-0000-0000-000000000000</ДанныеПродавца> <ДанныеПоставщика>00000000-0000-0000-0000-000000000000</ДанныеПоставщика> <СтавкаНДС>НДС10</СтавкаНДС> <СтранаПроисхожденияУдалить>---</СтранаПроисхожденияУдалить> <ДанныеПроизводителяУдалить>---</ДанныеПроизводителяУдалить> <ДанныеПродавцаУдалить>---</ДанныеПродавцаУдалить> <ДанныеПоставщикаУдалить>---</ДанныеПоставщикаУдалить> <СтавкаНДСУдалить>0</СтавкаНДСУдалить> <НовыйЭлемент>false</НовыйЭлемент> <ЕдиницаХраненияОстатковКИС>e26197ba-87ab-11dc-c892-003048796049</ЕдиницаХраненияОстатковКИС> <АлгоритмПодпитки>Базовый</АлгоритмПодпитки> </CatalogObject.усНоменклатура> <CatalogRef.усНоменклатура> - это рамки при загрузке Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(Файл); Чтение.ПерейтиКСодержимому(); Чтение.Прочитать(); Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл Объект = СериализаторXDTO.ПрочитатьXML(Чтение); получаю на первом же объекте Ошибка при вызове метода контекста (ПрочитатьXML) Объект = СериализаторXDTO.ПрочитатьXML(Чтение); по причине: по причине: Ошибка преобразования данных XDTO: НачалоСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.усНоменклатура Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.усНоменклатура по причине: Ошибка преобразования данных XDTO: КонецСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.усНоменклатура Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.усНоменклатура |
|||
104
mikecool
16.11.11
✎
15:11
|
блеать, вроде же должно быть все просто, а выходит - наеборот :)
|
|||
105
Serginio1
16.11.11
✎
15:13
|
Ты на первичной конфигурации выгрузи и загрузи и сравни тексты
|
|||
106
mikecool
16.11.11
✎
15:16
|
(105) о, вариант ))
|
|||
107
mikecool
16.11.11
✎
15:17
|
(106) не, не вариант ) у меня конфига без ключа, принимающая сторона выделила ее для тестов ((
|
|||
108
mikecool
16.11.11
✎
15:17
|
+107 щас попробую создать в ней что-либо, если получится
|
|||
109
DmitrO
16.11.11
✎
15:21
|
Чтение.ОткрытьФайл(Файл);
Чтение.ПерейтиКСодержимому(); Чтение.Прочитать();//читаем начало элемента Данные Чтение.Прочитать();//читаем начало 1го вложенного элемента именно тут и надо начинать читать сериализатором, мог бы и сам догадаться :) |
|||
110
Serginio1
16.11.11
✎
15:33
|
(103) А какие там вложенные? И если используешь XML то нечего пенять на занимаемые ресурся. Однофайловая Локальная БД решает все проблемы с ресурсами
|
|||
111
mikecool
16.11.11
✎
15:55
|
все, разобрался
поменяли конфигу и я пропустил два реквизита |
|||
112
Serginio1
16.11.11
✎
16:07
|
Кстати а что говорило Проверить() для объекта XDTO?
|
|||
113
mikecool
17.11.11
✎
11:36
|
чета фигня творится
Пока Выборка.Следующий() Цикл Объект = Фабрика.Создать(ТипXDTO_Товар); Объект.Ref = XMLСтрока(Выборка.Ref); Если Выборка.IsFolder Тогда ЗаполнитьЗначенияСвойств(Объект, Выборка, "IsFolder, DeletionMark, Code, Description, БазоваяЕдиницаХранения"); Объект.Parent = XMLСтрока(Выборка.Parent); Иначе ЗаполнитьЗначенияСвойств(Объект, Выборка, , "Ref, ЕдиницаХраненияОстатковКИС, Parent, Поклажедатель, СтранаПроисхождения, |ДанныеПроизводителя, ДанныеПродавца, ДанныеПоставщика, СтавкаНДС, СрокХранения"); Объект.ЕдиницаХраненияОстатковКИС = XMLСтрока(Выборка.ЕдиницаХраненияОстатковКИС); Объект.Parent = XMLСтрока(Выборка.Parent); Объект.Поклажедатель = XMLСтрока(Выборка.Поклажедатель); Объект.СтранаПроисхождения = XMLСтрока(Выборка.СтранаПроисхождения); Объект.ДанныеПроизводителя = XMLСтрока(Выборка.ДанныеПроизводителя); Объект.ДанныеПродавца = XMLСтрока(Выборка.ДанныеПродавца); Объект.ДанныеПоставщика = XMLСтрока(Выборка.ДанныеПоставщика); Объект.СтавкаНДС = Выборка.СтавкаНДС; Объект.СрокХранения = Число(Выборка.СрокХранения); Фабрика.ЗаписатьXML(ЗаписьXML, Объект); КонецЕсли; КонецЦикла; в выборке есть группы, выбраны в иерархии в отладке вижу, что объекты хдто-группы создаются и записываются однако в результирующем хмл их нет ((( вчера еще были, ошибок при выгрузке нет не понимаю - куда теряются? |
|||
114
mikecool
17.11.11
✎
11:41
|
кто может объяснить сей феномен?
|
|||
115
mikecool
17.11.11
✎
11:46
|
все, я понял где натупил )))
|
|||
116
Serginio1
17.11.11
✎
11:50
|
Фабрика.ЗаписатьXML(ЗаписьXML, Объект); для групп?
|
|||
117
mikecool
17.11.11
✎
11:55
|
(116) угу )) копипаст меня покарал )))
|
|||
118
mikecool
18.11.11
✎
15:57
|
теперь попарился с единицами
не загружается объект -<CatalogObject.усЕдиницыХранения 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/enterprise/current-config"> <Ref>a1ca96a6-a7cb-11dc-a89f-003048796049</Ref> <DeletionMark>false</DeletionMark> <Owner>a1ca969e-a7cb-11dc-a89f-003048796049</Owner> <Parent>00000000-0000-0000-0000-000000000000</Parent> <Code/> <Description>м3</Description> <АктивнаяОбластьОтбора>A37328DF-858E-11DE-B3A9-00304833F29B</АктивнаяОбластьОтбора> <АнализСоставаПриРазмещении>00000000-0000-0000-0000-000000000000</АнализСоставаПриРазмещении> <Вес>0</Вес> <Высота>0</Высота> <Глубина>0</Глубина> <КлассЕдиницыХранения>fc6f2dee-8e9c-11dc-0c95-003048796049</КлассЕдиницыХранения> <Коэффициент>1</Коэффициент> <МетодОтбораПоДатам/> <МодельСкладскогоУчета>00000000-0000-0000-0000-000000000000</МодельСкладскогоУчета> <РучноеРазмещение>false</РучноеРазмещение> <ОбластьРазмещения>00000000-0000-0000-0000-000000000000</ОбластьРазмещения> <Объем>0</Объем> <ОтборПоДатам>НеВыполнять</ОтборПоДатам> <ПриведенныйОбъем>0</ПриведенныйОбъем> <РазрешитьОтборИзЗоныПриемки>false</РазрешитьОтборИзЗоныПриемки> <РазрешитьОтборИзРезервнойЗоны>false</РазрешитьОтборИзРезервнойЗоны> <ТребуетсяМаркировка>false</ТребуетсяМаркировка> <ТребуетсяУпаковка>false</ТребуетсяУпаковка> <УпаковкаПриОтборе>false</УпаковкаПриОтборе> <Ширина>0</Ширина> <ПланироватьПодпиткуПриРазмещении>false</ПланироватьПодпиткуПриРазмещении> <НовыйЭлемент>false</НовыйЭлемент> <КоэффициентКИС>1</КоэффициентКИС> <ПравилоРасчетаКлассаАВС>НеИспользовать</ПравилоРасчетаКлассаАВС> </CatalogObject.усЕдиницыХранения> выгрузил единицу, внесенную в базу, получил -<CatalogObject.усЕдиницыХранения 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/enterprise/current-config"> <Ref>8e7a8d77-11d0-11e1-863f-00179a382fe2</Ref> <DeletionMark>false</DeletionMark> <Owner xsi:type="CatalogRef.усНоменклатура">e1899cc7-5478-11e0-919b-003048bab470</Owner> <Parent>00000000-0000-0000-0000-000000000000</Parent> <Code>0000000001</Code> <Description>шт</Description> <АктивнаяОбластьОтбора>00000000-0000-0000-0000-000000000000</АктивнаяОбластьОтбора> <АнализСоставаПриРазмещении>00000000-0000-0000-0000-000000000000</АнализСоставаПриРазмещении> <Вес>0</Вес> <Высота>0</Высота> <Глубина>0</Глубина> <КлассЕдиницыХранения>c199b8bb-0f56-11e1-863f-00179a382fe2</КлассЕдиницыХранения> <Коэффициент>1</Коэффициент> <МетодОтбораПоДатам/> <МодельСкладскогоУчета>bf46884b-3089-4ce3-9f76-a556921e139b</МодельСкладскогоУчета> <РучноеРазмещение>false</РучноеРазмещение> <ОбластьРазмещения>00000000-0000-0000-0000-000000000000</ОбластьРазмещения> <Объем>0</Объем> <ОтборПоДатам>НеВыполнять</ОтборПоДатам> <ПриведенныйОбъем>0</ПриведенныйОбъем> <РазрешитьОтборИзЗоныПриемки>false</РазрешитьОтборИзЗоныПриемки> <РазрешитьОтборИзРезервнойЗоны>false</РазрешитьОтборИзРезервнойЗоны> <ТребуетсяМаркировка>false</ТребуетсяМаркировка> <ТребуетсяУпаковка>false</ТребуетсяУпаковка> <УпаковкаПриОтборе>false</УпаковкаПриОтборе> <Ширина>0</Ширина> <ПланироватьПодпиткуПриРазмещении>false</ПланироватьПодпиткуПриРазмещении> <НовыйЭлемент>false</НовыйЭлемент> <КоэффициентКИС>1</КоэффициентКИС> <ПравилоРасчетаКлассаАВС>НеИспользовать</ПравилоРасчетаКлассаАВС> </CatalogObject.усЕдиницыХранения> отличие только в куске <Owner xsi:type="CatalogRef.усНоменклатура">e1899cc7-5478-11e0-919b-003048bab470</Owner> то бишь тип добавлен. его как то при выгрузке можно присвоить полю объекта ХДТО? |
|||
119
mikecool
18.11.11
✎
16:26
|
думается вот так
ОбъектXDTO.Установить(<Свойство>, <Значение>) а вот как получить нужное мне Значение? |
|||
120
DmitrO
18.11.11
✎
16:30
|
(118)В свойство Owner надо устанавливать не просто значение типа строка (представление ссылки), а объект типа ЗначениеXDTO, созданный с помощью фабрики на основании типа ссылки конкретного владельца (CatalogRef.усНоменклатура).
Для реквизитов составных типов (а владелец у справочника именно составного типа) надо поступать так всегда, потому что нужен еще тип ссылки. |
|||
121
mikecool
18.11.11
✎
16:35
|
(120)
пробую так Объект.Установить(Объект.Свойства().Получить("Owner"), XMLСтрока(Выборка.Owner)); все равно не типизируется ((( как свойству тип назначить? |
|||
122
mikecool
18.11.11
✎
16:36
|
+121 ибо при создании объекта оно неопределено
|
|||
123
DmitrO
18.11.11
✎
16:42
|
т.е. ты не понял что я тебе написал?
|
|||
124
mikecool
18.11.11
✎
16:45
|
(123) неа, я никак не допру как создать значение хдто ((
|
|||
125
DmitrO
18.11.11
✎
16:46
|
Объект.Owner = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogRef.усНоменклатура"), XMLСтрока(Выборка.Owner));
|
|||
126
mikecool
18.11.11
✎
16:46
|
(125) щас попробую
начал уже ковырять Фабрика.Привести(Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogRef.усНоменклатура"), а чо дальше - хз ))) |
|||
127
mikecool
18.11.11
✎
16:48
|
(125) вроде заработало, спасибо огромное
|
|||
128
vmv
18.11.11
✎
22:18
|
абалдеть
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |