Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Ошибка записи XML в Scripting.FileSystemObject"

v7: Ошибка записи XML в Scripting.FileSystemObject"
Я
   timurhv
 
18.10.19 - 14:27
Выгружаю большие объемы при переносе из 7.7 в 8 (типовые правила КД2), столкнулся с ограничением памяти.
Exe пропатчил до 3.5Гб, но все-равно даже с маленькими порциями упираюсь в ограничение размера XML при записи штатными средствами.
Решил использовать потоковую запись через Scripting.FileSystemObject без хранения файла в оперативной, но при записи текста XML библиотека падает с ошибкой. Я так понимаю, какие-то символы не могут быть преобразованы в нужную кодировку.

FSO = СоздатьОбъект("Scripting.FileSystemObject");
ХМЛФайл = FSO.CreateTextFile(ИмяФайлаДанных, 1, 1);
ХМЛФайл.WriteLine("123"); // ок
ХМЛФайл.WriteLine(XML_текст); // ошибка dll
ХМЛФайл.Close();

Сам файл в этот момент создается в кодировке UTF-16, тестировал на виртуальной ХР и 7 - тоже самое.
Хотел проверить как работает ADODB.Stream с методом WriteText, указал кодировку при создании UTF-8, но также падает на записи текста XML.
Кто-нибудь сталкивался с данной ошибкой?
 
 
   trad
 
1 - 18.10.19 - 14:43
77 по ком не может передавать, в качестве параметров, и принимать, в качестве результатов, длинные строки
Килобайт 700 или такого порядка, точно не помню
Разбей XML_текст на куски
   timurhv
 
2 - 18.10.19 - 14:54
(1) Спасибо, да там около 2мб текста
   timurhv
 
3 - 19.10.19 - 03:16
(1) Проверил, работает, огромное спасибо!
Ограничение было на 500кб, но если через помощник перехода на новую редакцию зарплаты запускать - снова падало, выставил 100кб. Для истории и быстрого поиска:
Вместо
ХМЛФайл.WriteLine(XMLТекст);

Пишем
ДлинаСтроки = СтрДлина(XMLТекст);
ОграничениеСтроки = 102400;// 100кб

Если ДлинаСтроки > ОграничениеСтроки Тогда
  Для Инд = 1 По (Цел(ДлинаСтроки / ОграничениеСтроки) + 1) Цикл
    Если ((Инд-1)*ОграничениеСтроки+1) >= ДлинаСтроки Тогда
      Продолжить;
    КонецЕсли;
    ХМЛФайл.Write(Сред(XMLТекст, ((Инд-1)*ОграничениеСтроки+1),ОграничениеСтроки));
  КонецЦикла;
Иначе
  ХМЛФайл.WriteLine(XMLТекст);
КонецЕсли;

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.