Имя: Пароль:
1C
 
Преобразование XML в таблицу значений
0 DanJer74
 
17.03.16
08:56
Приветствую! Можно ли как-то сделать следующее: загрузить xml через фабрику xdto в таблицу значений без построчного перебора. Суть в том, что при чтении очень большое количество записей (более 200000). Хотелось бы закинуть одним махом.
1 cw014
 
17.03.16
09:01
Делаешь таблицу "ЗначениеВСтрокуВнутр". Изучаешь получившееся. Берешь свой XML в качестве строки и меняешь его под структуру "ЗначениеВСтрокуВнутр". Делаешь "ЗначениеИзСтрокиВнутр"
2 LordCMEPTb
 
17.03.16
09:13
Можно попробовать: http://its.1c.ru/db/v836doc/bookmark/dev/TI000000763
Но при чтении xml могут быть "забавные" ошибки, на которые ответа можно не найти: Ошибка с XDTO ..1998/namespace}space
3 Живой Ископаемый
 
17.03.16
10:13
ТЗ тоже сериализуется. Посмотреть формат ХМЛ который получается при ее сериализации, дополнить тот хмл, который нужно загрузить таким образом, чтобы он по сути предстяавлял собой сериализацию ТЗ(это делать на уровне текста). прочитатьОбъектХДТО из полученного хмл в ТЗ одним оператором.
4 DanJer74
 
17.03.16
11:59
(3) Как посмотреть формат?
5 DanJer74
 
17.03.16
12:00
6 DanJer74
 
17.03.16
12:00
Я вот это вот нарыл, а что дальше делать - не понятно
7 Serginio1
 
17.03.16
12:07
СериализаторXDTO
8 Serginio1
 
17.03.16
12:10
Список1=Новый СписокЗначений;
Список2=Новый СписокЗначений;
    
Список1.Добавить(Список2);
Список2.Добавить(1);
Список2.Добавить("1");
Список2.Добавить(Список1);


//стр=XMLСтрока(Список1);

ЗаписатьXML=Новый ЗаписьXML;
ЗаписатьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписатьXML,список1);
стр=ЗаписатьXML.Закрыть();
Сообщить(стр);

ЧтениеXML=новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(стр);
список=СериализаторXDTO.прочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
сообщить(список);
9 Serginio1
 
17.03.16
12:12
Навсякий случай ЧтениеXML.ПерейтиКСодержимому()
10 mistеr
 
17.03.16
12:12
(8) Почему не на .NET?!! :)
11 DanJer74
 
17.03.16
12:22
СериализаторXDTO.ЗаписатьXML(ЗаписатьXML,список1); платформа падает
12 Живой Ископаемый
 
17.03.16
12:38
13 mehfk
 
17.03.16
12:39
(10) Тоже удивлен :)
14 Живой Ископаемый
 
17.03.16
12:40
15 DanJer74
 
17.03.16
12:57
Мне нужно СписокXDTO загнать в таблицу
16 Живой Ископаемый
 
17.03.16
13:00
сделай так, чтобы это был не список xdto а строки таблицы значения. на уровне текстового содержимого хмл-файла
17 DanJer74
 
17.03.16
13:02
Каким образом?
18 DanJer74
 
17.03.16
13:04
Вообще было бы удобней все это в регистр сведений загонять
19 Serginio1
 
17.03.16
13:06
(10) Мечтательно Вот Когда 1С будет на .Net
20 mehfk
 
17.03.16
13:07
(18) Ну тогда XML должен представлять из себя сериализованный набор записей. Если это не так (а это не так), то пиши парсер. Соответствующие средства в языке 1с есть.
21 Живой Ископаемый
 
17.03.16
13:09
2(17) Ты смотришь на тот ХМЛ который у тебя есть, и ты смотришь на хмл полученный в 12, и думаешь что тебе нужно сделать, чтобы получить из первого второй, делаешь это, и потом читаешь как в 14.
ПРОФИТ
22 Tateossian
 
17.03.16
13:12
(19) Низачто. Убунта будет в пролете.
23 Serginio1
 
17.03.16
14:29
(22) .Net Core работает и на Убунте
24 DanJer74
 
17.03.16
14:46
В общем я вот до этого дошел:

НоваяСтр = ТЗ.Добавить();
    НоваяСтр.Артикул = "123";
    НоваяСтр.Производитель = "1123";
    НоваяСтр.ПолноеНаименование = "Наимен1123";
    НоваяСтр.Цена = "1123.2";
    
    НоваяСтр = ТЗ.Добавить();
    НоваяСтр.Артикул = "456";
    НоваяСтр.Производитель = "1456";
    НоваяСтр.ПолноеНаименование = "Наимен456";
    НоваяСтр.Цена = "1123.1";

    
    П = ВернутьТЗ();
    
    НовыйОбъект = СериализаторXDTO.ЗаписатьXDTO(П);
    
    ЗаписьXML = Новый ЗаписьXML;

    ЗаписьXML.ОткрытьФайл("S:\new.xml");

    ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, НовыйОбъект);

    ЗаписьXML.Закрыть();
    
    
    ЧтениеXML = Новый ЧтениеXML;

    ТипОбъектаXDTO=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueTable";);

    ЧтениеXML.ОткрытьФайл("S:\new.xml");

    ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

    ОбъектXDTO.Проверить();

    Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO);

    МояТаблица=Сериализатор.ПрочитатьXDTO(ОбъектXDTO);

        

КонецПроцедуры

&НаСервере
Функция ВернутьТЗ()
    Возврат ДанныеФормыВЗначение(ТЗ,Тип("ТаблицаЗначений"));
КонецФункции


Но на     МояТаблица=Сериализатор.ПрочитатьXDTO(ОбъектXDTO);
валится с ошибкой


{Форма.Форма.Форма(145)}: Ошибка при вызове метода контекста (ПрочитатьXDTO)
    МойСписокЗначений2=Сериализатор.ПрочитатьXDTO(ОбъектXDTO);
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/core}column    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType





А запихать мне надо файл вот с такой структурой
<?xml version="1.0" standalone="yes"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata">
<Лист1><Производитель>1-56&#160;(MARUICHI)</Производитель><Артикул>3068</Артикул><Наименование>Пыльник&#160;рулевой&#160;рейки</Наименование><Цена>272</Цена><Наличие>1</Наличие></Лист1>
<Лист1><Производитель>1-56&#160;(MARUICHI)</Производитель><Артикул>68414</Артикул><Наименование>Пыльник&#160;ШРУСа</Наименование><Цена>225</Цена><Наличие>1</Наличие></Лист1>
<Лист1><Производитель>555</Производитель><Артикул>SA6171R</Артикул><Наименование>Рычаг&#160;передподвески&#160;верх&#160;прав</Наименование><Цена>1825</Цена><Наличие>2</Наличие></Лист1>
</dataroot>
25 DanJer74
 
17.03.16
14:47
Голова пухнет уже от всего этого
26 Serginio1
 
17.03.16
14:50
(24) Потому, что нужно внимательно читать (8)

ЧтениеXML=новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(стр);
ЧтениеXML.ПерейтиКСодержимому();
список=СериализаторXDTO.прочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
27 Serginio1
 
17.03.16
14:53