Имя: Пароль:
1C
1С v8
Как прочитать 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
абалдеть
2 + 2 = 3.9999999999999999999999999999999...