| 
    
            
         
         | 
    
  | 
Существует ли ограничение по длине строки для УстановитьСтроку() | ☑ | ||
|---|---|---|---|---|
| 
    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). читай поэлементно.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |