Пример парсера XML файла через построитель DOM
Теги: 1С,ВнешняяОбработка

# Код реализации

```1c
Путь = "Путь до файла";
МассивФайлов = НайтиФайлы(путь, "*docum*.xml", Ложь);
КоличествоФайлов = МассивФайлов.Количество();
Если КоличествоФайлов > 0 Тогда
		Для каждого Файл из МассивФайлов Цикл


			Тест = Новый ДвоичныеДанные(Файл.ПолноеИмя);


			Парсер = Новый ЧтениеXML;
			Парсер.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Тест, КодировкаТекста.UTF8));  //устанавливаем парсер на строку с файлом
			ДокументДОМ = Новый ПостроительDOM;
			Рез = ДокументДОМ.Прочитать(Парсер);
			Попытка
				ФлагПроведения = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[0].ТекстовоеСодержимое;
				ДатаДок = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[1].ТекстовоеСодержимое;
				СчетПокупателю = Документы.СчетНаОплатуПокупателю.НайтиПоНомеру(Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[2].ТекстовоеСодержимое,ОбщегоНазначенияКлиентСервер.СтрокаВДату(ДатаДок));
				НомерДок = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[2].ТекстовоеСодержимое;
				Если ЗначениеЗаполнено(СчетПокупателю.Ссылка) Тогда
					Док = СчетПокупателю.ПолучитьОбъект();
					Док.Товары.Очистить();     //очищаем табличные части, иначе они задваиваются
				Иначе
					Док = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
					Док.Дата = ДатаДок;
					Док.Номер = НомерДок;
				КонецЕсли;
				Док.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[8].ТекстовоеСодержимое);


				Если Док.Контрагент.Пустая() Тогда
					НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
					НовыйКонтрагент.Наименование = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[14].ТекстовоеСодержимое;
					НовыйКонтрагент.ИНН = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[8].ТекстовоеСодержимое;
					НовыйКонтрагент.КПП = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[15].ТекстовоеСодержимое;
					НовыйКонтрагент.КодПоОКПО = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[16].ТекстовоеСодержимое;
					НовыйКонтрагент.Записать();
					Док.Контрагент = НовыйКонтрагент.Ссылка;
				КонецЕсли;

				Док.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[4].ТекстовоеСодержимое, , , Док.Контрагент);
				Если Док.ДоговорКонтрагента.Пустая() Тогда
					НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
					НовыйДоговор.Наименование = "Основной договор";
					НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
					НовыйДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
					НовыйДоговор.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
					НовыйДоговор.Владелец = Док.Контрагент;
					НовыйДоговор.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "9703016258");
					НовыйДоговор.Записать();
					Док.ДоговорКонтрагента = НовыйДоговор.Ссылка;
				КонецЕсли;
				Док.Ответственный = Справочники.Пользователи.НайтиПоНаименованию(Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[3].ТекстовоеСодержимое);
				Док.КратностьВзаиморасчетов = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[6].ТекстовоеСодержимое;
				Док.Комментарий = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[9].ТекстовоеСодержимое;
				Док.АдресДоставки = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[10].ТекстовоеСодержимое;
				Док.ВалютаДокумента = Константы.ВалютаРегламентированногоУчета.Получить();
				Док.СуммаВключаетНДС = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[12].ТекстовоеСодержимое;
				Док.СуммаДокумента = Рез.ДочерниеУзлы[0].ДочерниеУзлы[0].ДочерниеУзлы[13].ТекстовоеСодержимое;
				Док.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "9703016258");
				Док.Товары.Очистить();
				Для каждого стр из Рез.ДочерниеУзлы Цикл
					Для каждого стр2 из стр.ДочерниеУзлы Цикл
						Для каждого стр3 из стр2.ДочерниеУзлы Цикл
							Если стр3.ИмяУзла  = "Товары" Тогда
								НоваяСтрока = Док.Товары.Добавить();
								Для каждого стр4 из стр3.ДочерниеУзлы Цикл
									для Каждого стр4 из стр3.ДочерниеУзлы Цикл
										Если стр4.ИмяУзла = "Цена" тогда
											НоваяСтрока.Цена = Число(стр4.ТекстовоеСодержимое);
										КонецЕсли;
										Если стр4.ИмяУзла = "Сумма" Тогда
											НоваяСтрока.Сумма = Число(стр4.ТекстовоеСодержимое);
										КонецЕсли;
										Если стр4.ИмяУзла = "СуммаНДС" Тогда
											НоваяСтрока.СуммаНДС = Число(стр4.ТекстовоеСодержимое);
										КонецЕсли;
										Если стр4.ИмяУзла = "Количество" Тогда
											НоваяСтрока.Количество = Число(стр4.ТекстовоеСодержимое);
										КонецЕсли;
										Если стр4.ИмяУзла = "Номенклатура" Тогда
											наименованиетовара = стр4.ТекстовоеСодержимое;
											Номен = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(наименованиетовара));

											Если Номен = Справочники.Номенклатура.ПустаяСсылка() Тогда
												Номен = Справочники.Номенклатура.СоздатьЭлемент();
												Номен.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
												Номен.Наименование = СокрЛП(наименованиетовара);
												Номен.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
												Номен.Комментарий = "Перенесено из УСЦ";
												Номен.Записать();
											КонецЕсли;
											НоваяСтрока.Номенклатура = Номен.Ссылка;
										КонецЕсли;
									КонецЦикла;

								КонецЦикла;
							КонецЕсли;
						КонецЦикла;
					КонецЦикла;
				КонецЦикла;

				Если Док.Товары.Количество() > 0 Тогда
					Для каждого стр из Док.Товары Цикл
						стр.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
					КонецЦикла;
				КонецЕсли;

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

				//Если Док.Проведен  Тогда
				//	Попытка
						УдалитьФайлы(файл.Путь, файл.Имя);  //удаляем файлы после удачной загрузки
					//Исключение
					//	Сообщить(ОписаниеОшибки());
					//КонецПопытки;
				//КонецЕсли;

			Исключение
				Сообщить(ОписаниеОшибки());
			КонецПопытки;

		КонецЦикла;

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