Здравствуйте!
Подскажите пожалуйста, как правильно прочитать файл XML

Пытаюсь с файла заполнить табл. часть документа
Но пока не совсем выходит(

Такой код написал:

```1c
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПолеИмениФайла);
    фабрика = Новый ФабрикаXDTO;
    ДокументXDTO = фабрика.ПрочитатьXML(ЧтениеXML);

    Таблица = СсылкаДокумент.Тест.Выгрузить();
    Таблица.Очистить();

    Для Каждого СтрокаТЧ Из ДокументXDTO.Строка Цикл
    Новаястрока = Таблица.Добавить();
    КонецЦикла;
```

Собрал файл XML

<?xml version="1.0" encoding="UTF-8" ?>
- <Данные>
  <Строка КПП="91111111" КодПо="000000" КодБюдж="1111111111" Сумма="11 552" />
  </Данные>

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

    КонецФункции // ()

    ////////////////////////////////////////////////////////////­///////////////////////////////////////////////////////////
    РезультатЗапроса = Запрос.Выполнить();

    Данные = РезультатЗапросаВСтруктуре(РезультатЗапроса);

    СписокДанных = новый Массив;

    Для Каждого Строка Из Данные Цикл
    КаждуюСтрокуВСтруктуру = новый Структура;
    КаждуюСтрокуВСтруктуру.Вставить("КПП", Строка(Строка.Значение.КПП));
    КаждуюСтрокуВСтруктуру.Вставить("КодПо", Строка(Строка.Значение.КодПо));
    КаждуюСтрокуВСтруктуру.Вставить("КодБюд", Строка(Строка.Значение.КодБюд));
    КаждуюСтрокуВСтруктуру.Вставить("Сумма", Строка.Значение.СуммаПлатежаПоНалогу); // Можно как число записать

    СписокДанных.Добавить(КаждуюСтрокуВСтруктуру);
    КонецЦикла;

    Запись = Новый ЗаписьXML;
    Запись.ОткрытьФайл(ПутьКФайлуДляЗаписи);

    //Преобразуем массив в объект XDTO
    МассивВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(СписокДанных);

    //Записываем объект XDTO в XML строку
    ФабрикаXDTO.ЗаписатьXML(Запись, МассивВОбъектеXDTO);

    Запись.Закрыть(); // документ готов!
```
---
Проверяй тип значения у ДокументXDTO.Строка. Если список - то в цикле заполняй, если объект, то без цикла.
---
Можете подсказать (краткий пример) как проверить, пытался глобальным поиском в конфигураторе найти
что то не увидел( или пропустил(
---
Если ТипЗнч(ДокументXDTO.Строка) = Тип("СписокXDTO") Тогда
//цикл
Иначе
//без цикла
КонецЕсли;
---
Пример записи:

```1c
    Процедура ПримерЗаписи()

    Выборка = запрос.Выполнить().Выбрать();

    СписокНоменклатуры = новый Массив;

    Пока Выборка.Следующий() Цикл

    //Каждую номенклатуру помещаем в струткуру
    ДанныеНоменклатуры = новый Структура("Код, Наименование, Ссылка, ЭтоГруппа, Родитель",
    Выборка.Код, Выборка.Наименование,XMLСтрока(Выборка.Ссылка),Выборка.ЭтоГруппа,);

    //Если есть родитель, то создаем рекурсивно родителя
    Если НЕ Выборка.Родитель.Пустая() Тогда
    ДанныеНоменклатуры.Родитель = ДобавитьРодителей(Выборка.Ссылка.Родитель);
    КонецЕсли;

    СписокНоменклатуры.Добавить(ДанныеНоменклатуры);

    КонецЦикла;

    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();

    //Преобразуем массив в объект XDTO
    МассивВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(СписокНоменклатуры);

    //Записываем объект XDTO в XML строку
    ФабрикаXDTO.ЗаписатьXML(Запись, МассивВОбъектеXDTO);

    ДанныеXML = Запись.Закрыть(); // документ готов!

    КонецПроцедуры

    Функция ДобавитьРодителей(Родитель)

    ДанныеРодителя = новый Структура("Код, Наименование, Ссылка, ЭтоГруппа, Родитель",
    Родитель.Код, Родитель.Наименование,XMLСтрока(Родитель.Ссылка),Родитель.ЭтоГруппа,);

    Если НЕ Родитель.Родитель.Пустая() Тогда
    ДанныеРодителя.Родитель = ДобавитьРодителей(Родитель.Родитель);
    КонецЕсли;

    Возврат ДанныеРодителя;
    КонецФункции
```

Пример Чтения:

```1c
    Процедура ПримерЧтения()

    ТекстXML = ТвойТекстВХМL;

    ЧтениеXML = новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(ТекстXML);

    МассивНоменклатуры = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

    Для каждого Стр из МассивНоменклатуры Цикл

    Номенклатура = СоздатьНоменклатуру(Стр);

    КонецЦикла;

    КонецПроцедуры

    Функция СоздатьНоменклатуру(ДанныеНоменклатуры)

    ///Проверка на существование ссылки. Если ссылка найдена, пропускаем.
    СсылкаНоменклатуры = XMLЗначение(Тип("СправочникСсылка.Номенклатура"),ДанныеНоменклатуры.Ссылка);

    /// проверяем по реквизиту "ВерсияДанных"
    Если НЕ ЗначениеЗаполнено(СсылкаНоменклатуры.ВерсияДанных) Тогда

    Если ДанныеНоменклатуры.ЭтоГруппа Тогда
    СПР = Справочники.Номенклатура.СоздатьГруппу();
    Иначе
    СПР = Справочники.Номенклатура.СоздатьЭлемент();
    КонецЕсли;
    СПР.УстановитьСсылкуНового(СсылкаНоменклатуры);
    Иначе

    СПР = СсылкаНоменклатуры.ПолучитьОбъект();
    КонецЕсли;

    СПР.Код = ДанныеНоменклатуры.Код;
    СПР.Наименование = ДанныеНоменклатуры.Наименование;

    ///Если есть родитель, сначала нужно создать родителя, и так до самого корня начала
    Если ДанныеНоменклатуры.Родитель <> Неопределено Тогда
    СПР.Родитель = СоздатьНоменклатуру(ДанныеНоменклатуры.Родитель);
    КонецЕсли;

    СПР.Записать();

    Возврат СПР.Ссылка;

    КонецФункции
```
---
Вместо "ТекстXML = ТвойТекстВХМL;" я могу использовать "ЧтениеXML.ОткрытьФайл(ПолеИмениФайла);"?
Не совсем пойму как получить текст
---
```1c
    ЧтениеXML = новый ЧтениеXML;
    //ЧтениеXML.УстановитьСтроку(ТекстXML);
    ЧтениеXML.ОткрытьФайл(ПолеИмениФайла);
```
---
Ошибка выходит(

ПрочитатьXML)
{ВнешняяОбработка.ПолучитьДанныеИзСап_XML.Форма.Форма.Форма(9)}:
МассивСтрокДокумента = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Данные Форма: Элемент
Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Строка Форма: Элемент
Тип: {http://www.w3.org/2001/XMLSchema}anyType

Пытался так сделать

```1c
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПолеИмениФайла);

    МассивСтрокДокумента = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

    Таблица = СсылкаДокумент.Тест.Выгрузить();
    Таблица.Очистить();
    Для Каждого Стр Из МассивСтрокДокумента Цикл
    Новаястрока = Таблица.Добавить();

    КонецЦикла;
```
---
В примере выше используются примитивные типы (Структура, строка, массив, число и тд)
А у вас в записях скорее всего содержится объект метаданных 1С одной базы, который отсутствует в другой
---
Я переводил в тип строку "КПП="91111111""
---
Покажите код записи
---
Код который создаёт XML файл

```1c
    Функция РезультатЗапросаВСтруктуре(Знач РезультатЗапроса) Экспорт
    Результат = Новый Структура;
    Для каждого Колонка Из РезультатЗапроса.Колонки Цикл
    Результат.Вставить(Колонка.Имя);
    КонецЦикла;
    Если РезультатЗапроса.Пустой() Тогда
    Возврат Результат;
    КонецЕсли;
    Выборка = РезультатЗапроса.Выбрать();
    Данные = Новый СписокЗначений;
    Пока Выборка.Следующий() Цикл
    ЗаполнитьЗначенияСвойств(Результат, Выборка);
    Данные.Добавить(Результат);
    КонецЦикла;
    Возврат Данные;

    КонецФункции // ()

    ////////////////////////////////////////////////////////////­///////////////////////////////////////////////////////////
    РезультатЗапроса = Запрос.Выполнить();
    Данные = РезультатЗапросаВСтруктуре(РезультатЗапроса);
    ЗаписьXML = Новый ЗаписьXML;

    ЗаписьXML.ОткрытьФайл(ПутьКФайлуДляЗаписи);

    ЗаписьXML.ЗаписатьОбъявлениеXML();

    ЗаписьXML.ЗаписатьНачалоЭлемента("Данные");

    Для Каждого Строка Из Данные Цикл
    ЗаписьXML.ЗаписатьНачалоЭлемента("Строка");
    ЗаписьXML.ЗаписатьАтрибут("КПП", Строка(Строка.Значение.КПП));
    ЗаписьXML.ЗаписатьАтрибут("КодПо", Строка(Строка.Значение.КодПо));
    ЗаписьXML.ЗаписатьАтрибут("КодБюд", Строка(Строка.Значение.КодБюд));
    ЗаписьXML.ЗаписатьАтрибут("Сумма", Строка(Строка.Значение.СуммаПлатежаПоНалогу));

    ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЦикла;

    ЗаписьXML.ЗаписатьКонецЭлемента(); // Страны

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

    КонецФункции // ()

    ////////////////////////////////////////////////////////////­///////////////////////////////////////////////////////////
    РезультатЗапроса = Запрос.Выполнить();

    Данные = РезультатЗапросаВСтруктуре(РезультатЗапроса);

    СписокДанных = новый Массив;

    Для Каждого Строка Из Данные Цикл
    КаждуюСтрокуВСтруктуру = новый Структура;
    КаждуюСтрокуВСтруктуру.Вставить("КПП", Строка(Строка.Значение.КПП));
    КаждуюСтрокуВСтруктуру.Вставить("КодПо", Строка(Строка.Значение.КодПо));
    КаждуюСтрокуВСтруктуру.Вставить("КодБюд", Строка(Строка.Значение.КодБюд));
    КаждуюСтрокуВСтруктуру.Вставить("Сумма", Строка.Значение.СуммаПлатежаПоНалогу); // Можно как число записать

    СписокДанных.Добавить(КаждуюСтрокуВСтруктуру);
    КонецЦикла;

    Запись = Новый ЗаписьXML;
    Запись.ОткрытьФайл(ПутьКФайлуДляЗаписи);

    //Преобразуем массив в объект XDTO
    МассивВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(СписокДанных);

    //Записываем объект XDTO в XML строку
    ФабрикаXDTO.ЗаписатьXML(Запись, МассивВОбъектеXDTO);

    Запись.Закрыть(); // документ готов!
```
---
Спасибо большое) сейчас попробую
---
Этот код который я пытался заполнить документ

```1c
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПолеИмениФайла);
    фабрика = Новый ФабрикаXDTO;
    ДокументXDTO = фабрика.ПрочитатьXML(ЧтениеXML);

    Таблица = СсылкаДокумент.Тест.Выгрузить();
    Таблица.Очистить();

    Для Каждого СтрокаТЧ Из ДокументXDTO.Строка Цикл
    Новаястрока = Таблица.Добавить();
    КонецЦикла;
```