Добрый день!

Необходимо прочитать файл очень большого размера (более 2 Гб).
Целиком загрузить его в память не получается - 1С вылетает.
Написан следующий код для потокового чтения этого XML и вывода на форму (Обычное приложение):

```1c
    ФайлЧтенияXML = Новый ЧтениеXML;
    ФайлЧтенияXML.ОткрытьФайл(ИмяФайла);
    ТаблицаЗначений = Новый ТаблицаЗначений;
    СтруктураСоздана = Ложь;

    Пока ФайлЧтенияXML.Прочитать() Цикл
    Если ФайлЧтенияXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
    Поле = ФайлЧтенияXML.Имя;
    Если НРег(Поле) = "detail" Тогда
    Объект = ФабрикаXDTO.ПрочитатьXML(ФайлЧтенияXML);
    Если Не СтруктураСоздана Тогда
    Для Каждого Свойство Из Объект.Свойства() Цикл
    ТаблицаЗначений.Колонки.Добавить(Свойство.Имя);
    КонецЦикла;
    СтруктураСоздана = Истина;
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТаблицаЗначений.Добавить(), Объект);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    ФайлЧтенияXML.Закрыть();
```

Все работает, но! Не все строки из исходного файла попадают в таблицу! Почему - помогите разобраться! Вырезала из файла проблеммную часть - вторая строка не читается! т.е. При очередном ФайлЧтенияXML.Прочитать() вторая строка данных игнорируется!
Подскажите пожалуйста, в чем загвоздка и как ее устранить?
---
ФабрикаXDTO.ПрочитатьXML(ФайлЧтенияXML) автоматически двигает чтение на следующий элемент.
Вот так должно работать:

```1c
    ФайлЧтенияXML = Новый ЧтениеXML;
    ФайлЧтенияXML.ОткрытьФайл(ИмяФайла);
    ТаблицаЗначений = Новый ТаблицаЗначений;
    СтруктураСоздана = Ложь;

    Пока ФайлЧтенияXML.Прочитать() Цикл
    Пока (ФайлЧтенияXML.ТипУзла = ТипУзлаXML.НачалоЭлемента) И (НРег(ФайлЧтенияXML.Имя) = "detail") Цикл
    Объект = ФабрикаXDTO.ПрочитатьXML(ФайлЧтенияXML);
    Если Не СтруктураСоздана Тогда
    Для Каждого Свойство Из Объект.Свойства() Цикл
    ТаблицаЗначений.Колонки.Добавить(Свойство.Имя);
    КонецЦикла;
    СтруктураСоздана = Истина;
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТаблицаЗначений.Добавить(), Объект);
    КонецЦикла;
    КонецЦикла;
    ФайлЧтенияXML.Закрыть();
```
---
ФабрикаXDTO.ПрочитатьXML(ФайлЧтенияXML) автоматически двигает чтение на следующий элемент.
Вот так должно работать:

```1c
    ФайлЧтенияXML = Новый ЧтениеXML;
    ФайлЧтенияXML.ОткрытьФайл(ИмяФайла);
    ТаблицаЗначений = Новый ТаблицаЗначений;
    СтруктураСоздана = Ложь;

    Пока ФайлЧтенияXML.Прочитать() Цикл
    Пока (ФайлЧтенияXML.ТипУзла = ТипУзлаXML.НачалоЭлемента) И (НРег(ФайлЧтенияXML.Имя) = "detail") Цикл
    Объект = ФабрикаXDTO.ПрочитатьXML(ФайлЧтенияXML);
    Если Не СтруктураСоздана Тогда
    Для Каждого Свойство Из Объект.Свойства() Цикл
    ТаблицаЗначений.Колонки.Добавить(Свойство.Имя);
    КонецЦикла;
    СтруктураСоздана = Истина;
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТаблицаЗначений.Добавить(), Объект);
    КонецЦикла;
    КонецЦикла;
    ФайлЧтенияXML.Закрыть();
```
---
```1c
    ЧтениеТекста = Новый ЧтениеТекста("C:\1.xml", КодировкаТекста.ANSI);
    СтрокаXML = ЧтениеТекста.Прочитать();

    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    ЧтениеXML.ПерейтиКСодержимому();
    ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
    ЧтениеXML.Закрыть();
```

код работает - результаты на скрине ниже. выбраны все 3 записи.
Или именно почему ваш код не отрабатывает?
---
еще раз повторюсь - Целиком загрузить файл в память не получается - 1С вылетает.
а в строке: СтрокаXML = ЧтениеТекста.Прочитать();
как раз и происходит полное чтение файла в память.

Весь файл можно скачать по ссылке:
Ссылка На Файл
---
```1c
    ФайлЧтенияXML = Новый ЧтениеXML;
    ФайлЧтенияXML.ОткрытьФайл(ИмяФайла);
    ТаблицаЗначений = Новый ТаблицаЗначений;
    СтруктураСоздана = Ложь;

    Пока ФайлЧтенияXML.Прочитать() Цикл
    Если ФайлЧтенияXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И НРег(ФайлЧтенияXML.Имя) = "detail_collection" Тогда
    Прервать;
    КонецЕсли;
    КонецЦикла;

    Пока ФайлЧтенияXML.Прочитать() Цикл

    Если ФайлЧтенияXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда

    Если НРег(ФайлЧтенияXML.Имя) = "detail" Тогда

    Если НЕ СтруктураСоздана Тогда
    Для сч = 0 по ФайлЧтенияXML.КоличествоАтрибутов() - 1 Цикл
    ТаблицаЗначений.Колонки.Добавить(ФайлЧтенияXML.ИмяАтрибута(сч));
    КонецЦикла;
    СтруктураСоздана = Истина;
    КонецЕсли;

    НоваяСтрока = ТаблицаЗначений.Добавить();
    Пока ФайлЧтенияXML.СледующийАтрибут() Цикл
    НоваяСтрока[ФайлЧтенияXML.Имя] = ФайлЧтенияXML.Значение;
    КонецЦикла;

    КонецЕсли;
    КонецЕсли;

    КонецЦикла;
    ФайлЧтенияXML.Закрыть();
```
---
Спасибо за помощь! Все получилось! Век живи, век учись!