|
Существует ли ограничение по длине строки для УстановитьСтроку() | ☑ | ||
---|---|---|---|---|
0
EvgKolivagin
04.03.22
✎
09:10
|
Добрый день!
При вызове метода УстановитьСтроку() получаю такую ошибку: Ошибка при вызове метода контекста (УстановитьСтроку) ЧтениеXML.УстановитьСтроку(СтрокаXML,,); по причине: Некорректные данные для конвертации Код в обработке токой: &НаКлиенте Процедура Загрузить(Команда) ЧтениеТекста = Новый ЧтениеТекста(Объект.Файл_AS_ADM_HIERARCHY,КодировкаТекста.UTF8); СтрокаXML = ЧтениеТекста.Прочитать(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(СтрокаXML); КонецПроцедуры Загружается файл размером 1,5 ГБ, при загрузке файла 800 мб такой ошибки нет. Получается есть ограничение на размер загружаемой строки? И как быть если нужно загрузить большй файл... |
|||
1
pechkin
04.03.22
✎
09:13
|
Чтение хмл само умеет из файла читать. Зачем через строку?
|
|||
2
EvgKolivagin
04.03.22
✎
09:16
|
(1) Честно говоря действовал по примеру, сейчас попробую напрямую, спасибо!
|
|||
3
Garykom
гуру
04.03.22
✎
09:17
|
(0) Еще учти что передача между сервером и клиентом больших файлов (за гиг) портит их
|
|||
4
EvgKolivagin
04.03.22
✎
09:23
|
(3) Я хочу прочитать данные в Массив на клиенте, передать его на сервер и там обрабатывать.
|
|||
5
Garykom
гуру
04.03.22
✎
09:34
|
Сжимай перед передачей (клиент-сервер и обратно) и после тестируй архив перед распаковкой в случае больших объемов
Ну или просто разбивай на кусочки до гига |
|||
6
EvgKolivagin
04.03.22
✎
09:35
|
(1) Чтение напрямую помогло, но теперь вся оперативная память была поглащена процессом и 1с зависла. (5) Разбивать на куски с помощью WinRar?
|
|||
7
Garykom
гуру
04.03.22
✎
09:36
|
(6) Зачем винрар? Если в 1С встроен зип
|
|||
8
Garykom
гуру
04.03.22
✎
09:39
|
ну и
https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/ РазделитьФайл() и ОбъединитьФайлы() РазделитьДвоичныеДанные() и СоединитьДвоичныеДанные() |
|||
9
EvgKolivagin
04.03.22
✎
09:39
|
(7) А есть ли способ читать xml не загружая его целиком в оперативную память?
|
|||
10
Garykom
гуру
04.03.22
✎
09:39
|
(9) Почитай про отличие SAX от DOM
|
|||
11
acht
04.03.22
✎
09:40
|
(9) Есть. На инфостарте таких статей много
|
|||
12
EvgKolivagin
04.03.22
✎
09:40
|
(8) Спасибо, но боюсь с таким поглащением оперативной памяти у меня и сервер не справится. Думаю я концептуально неверно подхожу к реализации
|
|||
13
EvgKolivagin
04.03.22
✎
09:41
|
(10) Спасибо, сейчас займусь.
|
|||
14
Garykom
гуру
04.03.22
✎
09:45
|
(12) Учти что если файлы XML реально большие и обрабатывать их надо быстро и часто
То придется выносить это за пределы 1С в нечто иное (ВК или API или еще как) А в 1С уже готовое выдавать В случае же если обработка XML нужна под управлением данных из 1С то придется извращаться с каким то языком/способом/правилами Которые из 1С выгружаются во внешнее до начала обработки, там быстро обрабатываются и в 1С результат |
|||
15
lodger
04.03.22
✎
09:55
|
вот это помещает весь xml в память? точно?
Чтение= Новый ЧтениеXML; Чтение.ОткрытьФайл("c:/docs/data.xml"); Пока Чтение.Прочитать() Цикл // Обработка узла XML КонецЦикла; |
|||
16
EvgKolivagin
04.03.22
✎
09:58
|
(14) Буду иметь ввиду, спасибо!
|
|||
17
EvgKolivagin
04.03.22
✎
10:08
|
(15) Это только первая часть, далее я создаю Фабрику XDTO
&НаКлиенте Процедура Загрузить(Команда) ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(Объект.Файл_AS_ADM_HIERARCHY); МассивИерархииАдресныхОбъектов = Новый Массив; ЧтениеXMLСхемы = Новый ЧтениеXML; ЧтениеXMLСхемы.ОткрытьФайл(Объект.Файл_AS_ADM_HIERARCHY_XSD); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXMLСхемы); ПостроительСхемXML = Новый ПостроительСхемXML; СхемаXML = ПостроительСхемXML.СоздатьСхемуXML(ДокументDOM); НаборСхемXML = Новый НаборСхемXML; НаборСхемXML.Добавить(СхемаXML); НоваяФабрикаXDTO = Новый ФабрикаXDTO(НаборСхемXML); ТипXDTO = НоваяФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","Объекты иерархии"); ИерархияАдресныхОбъектовXDTO = НоваяФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипXDTO); КонецПроцедуры |
|||
18
EvgKolivagin
04.03.22
✎
10:09
|
(17) И вот на этой строке ИерархияАдресныхОбъектовXDTO = НоваяФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипXDTO);
заполняется вся память |
|||
19
lodger
04.03.22
✎
12:25
|
(18) ну так это ты сам выбрал инструмент, который читает xml целиком.
в таком варианте у тебя пути - поставить х64, нарастить оперативку, отдать эту работу серверу. |
|||
20
lodger
04.03.22
✎
12:27
|
попробуй (15). читай поэлементно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |