Имя: Пароль:
1C
1C 7.7
v7: Быстродействие загрузки и разбора XML-файла с заказами
0 julien
 
18.01.12
16:36
Здравствуйте!
Подскажите, пожалуйста, если кто-то с подобным сталкивался.
Есть интернет-магазин (битрикс), заказы (xml-формат CommerceML 1.0) в 1С забираю библиотекой v7plus.dll по http-протоколу.
Столкнулась с тем,что на разных компьютерах время выполнения обработки может составить от 1-5 минут в зависимости от мощности компьютера.
Есть еще другие способы загрузки и парсинга XML-файла?
1 andrewks
 
18.01.12
16:49
да. если рассматривать не-ДОМ модели, то
1. OpenXML
2. свой парсинг текстового файла через adodb или FSO
2 julien
 
18.01.12
16:54
andrewks, я правильно понимаю, что ДОМ-модели предназначены для небольшого объема документов, и в этом причина медленного выполнения обработки? Но как оценить, что предложенные Вами способы увеличат быстродействие?
3 andrewks
 
18.01.12
17:01
смотря, что для вас небольшой объём.

какие размеры xml-файлов?
4 julien
 
18.01.12
17:32
andrewks, все зависит от заказа. Бывает до 300 мегабайт.
5 Mikeware
 
18.01.12
17:36
(4) обрабатывать трехсотметровые иксэмэльки в-семь-плюсом - это отдельное мазохическое удовольствие....
6 julien
 
18.01.12
17:37
Mikeware, а что делать,если основное требование - автоматизировать работу в 1С, и на 8-ку упорно переходить не намереваются?
7 andrewks
 
18.01.12
17:43
8 andrewks
 
18.01.12
17:45
но я бы лично написал с использованием adodb
9 andrewks
 
18.01.12
17:46
10 julien
 
18.01.12
17:47
Да, уже нашла эту страницу. andrewks, спасибо,что откликнулись! И за советы!
11 andrewks
 
18.01.12
17:51
(10) учти, с OpenXML и FSO могут возникнуть проблемы с некоторыми образцами xml-файлов. идеальный вариант - взять алгоритмы из (9), но  чтение/запись текста заменить на использование adodb. вот небольшой пример, как работать с этим объектом:


   Попытка
       SF=СоздатьОбъект("ADODB.Stream");
       SF.CharSet="windows-1251";
       DF=СоздатьОбъект("ADODB.Stream");
       DF.CharSet="utf-8";
   Исключение
       Сообщить("Не удалось создать объект ADODB.Stream","!");
       Возврат;
   КонецПопытки;
   
   Папка1="";
   Папка2="";
   Если ФС.ВыбратьКаталог(Папка1,"Выберите исходную папку")<>1 Тогда
       Возврат;
   КонецЕсли;
   
   Если ФС.ВыбратьКаталог(Папка2,"Выберите папку назначения")<>1 Тогда
       Возврат;
   КонецЕсли;
   
   ИмяФайла1=ФС.НайтиПервыйФайл(Папка1+"\*.fodt");
   Пока (ПустаяСтрока(ИмяФайла1)=0) Цикл
       Сообщить("Обработка файла: "+ИмяФайла1);
   
       SF.Open();
       DF.Open();
       SF.LoadFromFile(Папка1+"\"+ИмяФайла1);
       SF.CopyTo(DF);
       DF.SaveToFile(Папка2+"\"+ИмяФайла1,2);
       SF.Close();
       DF.Close();
       
       ИмяФайла1=ФС.НайтиСледующийФайл();
   КонецЦикла;


узнай больше о нём на http://www.w3schools.com/ado/ado_ref_stream.asp
12 andrewks
 
18.01.12
17:51
узнай больше об adodb на http://www.w3schools.com/ado/ado_ref_stream.asp
13 julien
 
18.01.12
17:55
andrewks,почему все-таки советуешь средствами adodb?
14 andrewks
 
18.01.12
17:55
(13) ну, например, у FSO могут возникнуть проблемы с файлами в кодировке utf-8. у OpenXML тоже есть свои тараканы
15 julien
 
18.01.12
17:57
Возникнут однозначно, все в utf-8. А средствами adodb я могу забрать xml-файл с удаленного фтп-сервера?
16 andrewks
 
18.01.12
17:58
(15) а сейчас ты как его забираешь?
17 julien
 
18.01.12
18:01
v7plus.dll    
HTTPСервис = СоздатьОбъект("AddIn.V7HHTPReader");
HTTPСервис.ПолучитьКакФайл(Адрес, ФайлЗаказов)
18 andrewks
 
18.01.12
18:03
(17) ну, тогда так же и оставь, чтобы меньше переделывать, здесь ты навряд ли достигнешь весомого ускорения за счёт смены инструмента. просто полностью замени блок парсинга xml-файла

кстати, на всякий случай замерь, сколько у тебя каждый раз грузится файл (можно в лог-файл писать), может, периодически интернет тормозит
19 julien
 
18.01.12
18:06
Хорошо,спасибо,andrewks!!Буду пробовать через adodb
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.