Имя: Пароль:
1C
1C 7.7
v7: Ошибка записи XML в Scripting.FileSystemObject"
0 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.
Кто-нибудь сталкивался с данной ошибкой?
1 trad
 
18.10.19
14:43
77 по ком не может передавать, в качестве параметров, и принимать, в качестве результатов, длинные строки
Килобайт 700 или такого порядка, точно не помню
Разбей XML_текст на куски
2 timurhv
 
18.10.19
14:54
(1) Спасибо, да там около 2мб текста
3 timurhv
 
19.10.19
03:16
(1) Проверил, работает, огромное спасибо!
Ограничение было на 500кб, но если через помощник перехода на новую редакцию зарплаты запускать - снова падало, выставил 100кб. Для истории и быстрого поиска:
Вместо
ХМЛФайл.WriteLine(XMLТекст);

Пишем
ДлинаСтроки = СтрДлина(XMLТекст);
ОграничениеСтроки = 102400; // 100кб
Если ДлинаСтроки > ОграничениеСтроки Тогда
  Для Инд = 1 По (Цел(ДлинаСтроки / ОграничениеСтроки) + 1) Цикл
    Если ((Инд-1)*ОграничениеСтроки+1) >= ДлинаСтроки Тогда
      Продолжить;
    КонецЕсли;
    ХМЛФайл.Write(Сред(XMLТекст, ((Инд-1)*ОграничениеСтроки+1),ОграничениеСтроки));
  КонецЦикла;
Иначе
  ХМЛФайл.WriteLine(XMLТекст);
КонецЕсли;
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн