Доброго времени суток, уважаемые читатели и "УМЫ" форума! :)

У меня возникла трудность с загрузкой XML файла в 1С 7.7. Раньше я использовал только типовые загрузки XML, поэтому каюсь, в этом вопросе опыта мало... Начну с того, что есть "Выгрузка.xml" с документами перемещение за определенный период. Структура XML-файла приложена. Есть также внешняя обработка импорта данных документов, которая создает документы "ПеремещениеМПЗ" в 1С 7.7.. Обработку писал не сам, а честно признаюсь, что позаимствовал её здесь на форуме, только слегка переделал под свои нужды :). Так вот всё вроде бы работает, но почему-то номенклатуры в табличной части не появляются. Я подозреваю, что в обработке "логические" ошибки при чтении "Тегов" скорее всего, так как при выполнении запроса не дохожу до тега "Строка Номер...". Прошу помощи у вас! Заранее благодарю.

```1c
    //*******************************************
    Процедура Сформировать()

    ПутьКФайлуЗагрузки = "c:\Выгрузка.xml";

    Если ( ПустоеЗначение(ПутьКФайлуЗагрузки) = 1 ) Тогда
    Предупреждение("Не указан файл загрузки");
    Возврат;
    КонецЕсли;

    флЕстьОшибкиВФайлеЗагрузки = 0;

    ТЗнач = СоздатьОбъект("ТаблицаЗначений");
    ТЗнач.НоваяКолонка("НомерДок");
    ТЗнач.НоваяКолонка("ДатаДок");
    ТЗнач.НоваяКолонка("МестоХранения");
    ТЗнач.НоваяКолонка("МестоХраненияВ");
    ТЗнач.НоваяКолонка("Номенклатура");
    ТЗнач.НоваяКолонка("Количество", "Число", 15, 2);

    ТЗначТовары = СоздатьОбъект("ТаблицаЗначений");
    ТЗнач.Выгрузить(ТЗначТовары);

    Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
    Предупреждение("Внешняя компонента не найдена");
    Возврат;
    КонецЕсли;

    гXMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
    ФайлXML = гXMLАнализатор.СоздатьПоследовательноСчитываемыйДокумент();
    ФайлXML.СвязатьСФайлом(ПутьКФайлуЗагрузки);

    ТипТега = ФайлXML.Спуститься();

    Пока ТипТега <> 4 Цикл // пока не достигнут конец файла

    Если ТипТега <> 1 Тогда
    ТипТега = ФайлXML.Следующий();
    Продолжить
    КонецЕсли; // пропускаем концы уровней
    ИмяТега = ФайлXML.СвойстваТекущегоУзла.Имя;

    Если ИмяТега = "Документ" Тогда
    Объект = ФайлXML.ТекущийЭлементВВидеОбъекта();
    НомерДок = ";
    ДатаДок = ";
    СкладОтправитель = ";
    СкладОтправитель = ";
    КолвоПодчиненныхУзлов_Накладные = Объект.КоличествоПодчиненных();

    Сообщить(КолвоПодчиненныхУзлов_Накладные);
    Для сч_Накладные = 1 По КолвоПодчиненныхУзлов_Накладные Цикл
    УзелНакладные= Объект.ПолучитьПодчиненныйПоНомеру(сч_Накладные);
    Если ( УзелНакладные.Наименование = "Номер" ) Тогда
    НомерДок = УзелНакладные.Значение;
    ИначеЕсли ( УзелНакладные.Наименование = "Дата" ) Тогда
    ДатаДок = УзелНакладные.Значение;
    ИначеЕсли ( УзелНакладные.Наименование = "СкладОтправитель" ) Тогда
    СкладОтправитель = УзелНакладные.Значение;
    ИначеЕсли ( УзелНакладные.Наименование = "СкладПолучатель" ) Тогда
    СкладПолучатель = УзелНакладные.Значение;
    ИначеЕсли ( УзелНакладные.Наименование = "Товары" ) Тогда
    ТипТега = ФайлXML.Спуститься();

    Если ИмяТега = "Строка" Тогда
    Объект = ФайлXML.ТекущийЭлементВВидеОбъекта();
    КоличествоЛинийНакладной = Объект.КоличествоПодчиненных();
    Номенклатура = ";
    Количество = ";
    Для сч_Линий = 1 По КоличествоЛинийНакладной Цикл
    УзелЛинии = Объект.Объект.ПолучитьПодчиненныйПоНомеру(сч_Линий);
    Если ( УзелЛинии.Наименование = "Номенклатура" ) Тогда
    Номенклатура = УзелЛинии.Значение;
    Сообщить(Номенклатура);
    ИначеЕсли ( УзелЛинии.Наименование = "Количество" ) Тогда
    Количество = УзелЛинии.Значение;
    Сообщить(Количество);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;

    // записываем даные в таблицу значений
    ТЗнач.НоваяСтрока();
    ТЗнач.НомерДок = НомерДок;
    ТЗнач.ДатаДок = ДатаДок;
    ТЗнач.МестоХранения = СкладОтправитель;
    ТЗнач.МестоХраненияВ = СкладПолучатель;
    ТЗнач.Номенклатура = Номенклатура;
    ТЗнач.Количество = Количество;
    КонецЕсли;
    КонецЦикла;
    Иначе
    ТипТега = ФайлXML.Спуститься();
    Продолжить;
    КонецЕсли;
    ТипТега = ФайлXML.Следующий();
    КонецЦикла;
    ТЗнач.Сортировать("+НомерДок");
    ТЗнач.ВыбратьСтроки();
    Пока ТЗнач.ПолучитьСтроку() = 1 Цикл
    ТЗначТовары.НоваяСтрока();
    ТЗначТовары.НомерДок = ТЗнач.НомерДок;
    ТЗначТовары.ДатаДок = ТЗнач.ДатаДок;
    ТЗначТовары.МестоХранения = ТЗнач.МестоХранения;
    ТЗначТовары.МестоХраненияВ = ТЗнач.МестоХраненияВ;
    ТЗначТовары.Номенклатура = ТЗнач.Номенклатура;
    ТЗначТовары.Количество = ТЗнач.Количество;
    КонецЦикла;

    СпрСклады = СоздатьОбъект("Справочник.МестаХранения");
    СпрТовары = СоздатьОбъект("Справочник.Материалы");

    // Товары
    ДокумТовары = СоздатьОбъект("Документ.ДвижениеМПЗ");
    ТЗначДокументы = СоздатьОбъект("ТаблицаЗначений");
    ТЗначТовары.Выгрузить(ТЗначДокументы);
    ТЗначДокументы.Свернуть("НомерДок", ");

    ТЗначДокументы.ВыбратьСтроки();
    Пока ТЗначДокументы.ПолучитьСтроку() = 1 Цикл
    ДокумТовары.Новый();
    ДокумТовары.ДатаДок = ТЗначТовары.ДатаДок;
    ДокумТовары.НомерДок = ТЗначТовары.НомерДок;
    ТекКодСклада = ТЗначТовары.МестоХранения;
    Если ( СпрСклады.НайтиПоНаименованию(ТекКодСклада, 0) = 1 ) Тогда
    ТекСклад = СпрСклады.ТекущийЭлемент();
    Иначе
    ТекСклад = ";
    Сообщить("В справочнике мест хранения не найден склад с кодом " + ТекКодСклада);
    КонецЕсли;

    ДокумТовары.МестоХранения = ТекСклад;

    ТекКодСкладаВ = ТЗначТовары.МестоХраненияВ;
    Если ( СпрСклады.НайтиПоНаименованию(ТекКодСкладаВ, 0) = 1 ) Тогда
    ТекСкладВ = СпрСклады.ТекущийЭлемент();
    Иначе
    ТекСкладВ = ";
    Сообщить("В справочнике мест хранения не найден склад с кодом " + ТекКодСкладаВ);
    КонецЕсли;

    ДокумТовары.МестоХраненияВ = ТекСкладВ;

    ТЗначТовары.ВыбратьСтроки();
    Пока ТЗначТовары.ПолучитьСтроку() = 1 Цикл

    ДокумТовары.ВидМПЗвТЧ = Перечисление.ВидыМПЗ.Материалы;

    ТекНаименованиеТовара = Строка(ТЗначТовары.Номенклатура);
    Если ( СпрТовары.НайтиПоНаименованию(ТекНаименованиеТовара, 0 ) = 1 ) Тогда
    ТекНаименованиеТовара = СпрТовары.ТекущийЭлемент();
    Иначе
    ТекНаименованиеТовара = ";
    Сообщить("Товар " + ТекНаименованиеТовара + ", не найден в справочнике");
    КонецЕсли;

    ДокумТовары.НоваяСтрока();
    ДокумТовары.МПЗ = ТекНаименованиеТовара;
    КонецЦикла;

    ДокумТовары.Записать();
    Сообщить("Создан документ " + ДокумТовары.ТекущийДокумент());
    КонецЦикла;
    КонецПроцедуры
```

P.S. Загрузку делаю в конфигурацию Производство+Услуги+Бухгалтерия.
---
Можно так сделать))) Обработка во вложении + Print Screen

```1c
    ИначеЕсли ( УзелНакладные.Наименование = "Товары" ) Тогда
    УзелКорень = Объект.ВыбратьУзел("Товары");
    //загружаем товары
    Товары = УзелКорень.ВыбратьУзлы("Строка");
    Для ш=1 По Товары.КоличествоУзлов() Цикл
    ТекТовар = Товары.ПолучитьУзел(ш-1);
    // записываем даные в таблицу значений
    ТЗнач.НоваяСтрока();
    ТЗнач.НомерДок = НомерДок;
    ТЗнач.ДатаДок = ДатаДок;
    ТЗнач.МестоХранения = СкладОтправитель;
    ТЗнач.МестоХраненияВ = СкладПолучатель;
    ТЗнач.Номенклатура = ТекТовар.ВыбратьУзел("Номенклатура").Значение;
    ТЗнач.Количество = ТекТовар.ВыбратьУзел("Количество").Значение;
    КонецЦикла;
    КонецЕсли;
```
---
Если несколько документов тогда можно сделать так:
Если ТЗначТовары.НомерДок <> ТЗначДокументы.НомерДок Тогда
---
```1c
    ИначеЕсли ( УзелНакладные.Наименование = "Товары" ) Тогда
    ОбъектТовары = ФайлXML.ТекущийЭлементВВидеОбъекта();
    КолвоПодчиненныхУзлов_Товары = ОбъектТовары.КоличествоПодчиненных();

    Для сч_Товары = 1 По КолвоПодчиненныхУзлов_Товары Цикл
    УзелТовары= ОбъектТовары.ПолучитьПодчиненныйПоНомеру(сч_Товары);
    Если ( УзелТовары.Наименование = "Строка" ) Тогда
    ОбъектСтрока = ФайлXML.ТекущийЭлементВВидеОбъекта();
    КоличествоЛинийСтроки = ОбъектСтрока.КоличествоПодчиненных();
    Номенклатура = ";
    Количество = ";
    Для сч_Линий = 1 По КоличествоЛинийСтроки Цикл
    УзелЛинии = ОбъектСтрока.ПолучитьПодчиненныйПоНомеру(сч_Линий);
    Если ( УзелЛинии.Наименование = "Номенклатура" ) Тогда
    Номенклатура = УзелЛинии.Значение;
    Сообщить(Номенклатура);
    ИначеЕсли ( УзелЛинии.Наименование = "Количество" ) Тогда
    Количество = УзелЛинии.Значение;
    Сообщить(Количество);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
```

Попробуй так, но не уверен что получится нет 7ки под рукой
---
Спасибо за ответ, но не помогло(((
---
Можно так сделать))) Обработка во вложении + Print Screen

```1c
    ИначеЕсли ( УзелНакладные.Наименование = "Товары" ) Тогда
    УзелКорень = Объект.ВыбратьУзел("Товары");
    //загружаем товары
    Товары = УзелКорень.ВыбратьУзлы("Строка");
    Для ш=1 По Товары.КоличествоУзлов() Цикл
    ТекТовар = Товары.ПолучитьУзел(ш-1);
    // записываем даные в таблицу значений
    ТЗнач.НоваяСтрока();
    ТЗнач.НомерДок = НомерДок;
    ТЗнач.ДатаДок = ДатаДок;
    ТЗнач.МестоХранения = СкладОтправитель;
    ТЗнач.МестоХраненияВ = СкладПолучатель;
    ТЗнач.Номенклатура = ТекТовар.ВыбратьУзел("Номенклатура").Значение;
    ТЗнач.Количество = ТекТовар.ВыбратьУзел("Количество").Значение;
    КонецЦикла;
    КонецЕсли;
```
---
Спасибо огромное за Ваше решение!
---
Есть проблема! Если в XML-файле несколько документов, то загружается только последний (один) документ, но со всеми номенклатурами в табличной части(((
---
Нашел ошибку сам, теперь создается несколько документов, но табличная часть у всех одна и та же.
---
Если несколько документов тогда можно сделать так:
Если ТЗначТовары.НомерДок <> ТЗначДокументы.НомерДок Тогда
---
Гениально!

Человеческое Вам спасибо, Григорий!