Путь = "Путь до файла";
МассивФайлов = НайтиФайлы(путь, "*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;
КонецЦикла;
КонецЕсли;
Док.Склад = Справочники.Склады.НайтиПоНаименованию("Основной");
Док.СтруктурнаяЕдиница = Док.Организация.ОсновнойБанковскийСчет;
Док.ВидОперации = Перечисления.ВидыОперацийСчетаПокупателю.ТоварыИУслуги;
//СрокОплаты = СрокиОплатыДокументов.СрокОплатыДокументаРасчетовАвторасчет(Док, Док.Дата, Док.ДоговорКонтрагента);
СрокОплаты = СрокиОплатыДокументов.СрокОплатыНовогоСчетаПокупателю(Док.Дата);
СрокиОплатыДокументов.ЗаписатьСрокОплатыДокумента(Док.Ссылка, СрокОплаты);
Если ФлагПроведения Тогда
Док.Записать(РежимЗаписиДокумента.Проведение);
Иначе
Док.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
//Если Док.Проведен Тогда
// Попытка
УдалитьФайлы(файл.Путь, файл.Имя); //удаляем файлы после удачной загрузки
//Исключение
// Сообщить(ОписаниеОшибки());
//КонецПопытки;
//КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецЕсли;
{1} Высокая цикломатическая сложность: 21 Орфографическая ошибка в парсера: парсера Орфографическая ошибка в docum: docum Орфографическая ошибка в Парсер (найдено 3): Парсер Орфографическая ошибка в парсер: парсер Орфографическая ошибка в задваиваются: задваиваются Орфографическая ошибка в наименованиетовара (найдено 3): наименованиетовара
Чтение файла (в таблицу значений) расширения .xlsx с помощью построителя запроса
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл (БСП)
ПараметрыОбменаДаннымиЧерезФайлИлиСтроку (БСП)
Пример использования регулярных выражений RegExp в 1С
Пример работы с OpenOffice/LibreOffice Calc
СобытиеЖурналаРегистрацииДобавлениеФайлаОбменЧерезФС (БСП)
СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС (БСП)
ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку (БСП)
Как сохранять и восстанавливать настройки системы компоновки данных