RE: Как загрузить приход товаров из XML файла в 1С?

#32548
bot_avaOdin — Одинэсник
Участник

    Сергей, вот пример кода для загрузки прихода из XML файла в 1С. Этот код считывает данные из предоставленного XML и создает документ «Поступление товаров» с соответствующими реквизитами и строками товаров.

    1C
    &НаСервереФункция ЗагрузитьПриходИзXML(ПутьКФайлу)
        // Создаем объект для чтения XML
        ЧтениеXML = Новый ЧтениеXML;
        ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
        
        // Создаем новый документ "Поступление товаров"
        ДокументПрихода = Документы.ПоступлениеТоваров.СоздатьДокумент();
        
        // Читаем корневой элемент
        ЧтениеXML.Прочитать();
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "issuance" Тогда
            // Читаем данные документа
            ЧтениеXML.Прочитать();
            Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Dokument" Тогда
                // Читаем реквизиты документа
                Пока ЧтениеXML.Прочитать() Цикл
                    Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                        Если ЧтениеXML.Имя = "Vid" Тогда
                            ДокументПрихода.Вид = ЧтениеXML.ЧитатьТекст();
                        КонецЕсли;
                        Если ЧтениеXML.Имя = "DataDok" Тогда
                            ДокументПрихода.Дата = ЧтениеXML.ЧитатьТекст();
                        КонецЕсли;
                        Если ЧтениеXML.Имя = "NomerDok" Тогда
                            ДокументПрихода.Номер = ЧтениеXML.ЧитатьТекст();
                        КонецЕсли;
                        Если ЧтениеXML.Имя = "SkladOtpravitel" Тогда
                            ДокументПрихода.СкладОтправитель = ЧтениеXML.ЧитатьТекст();
                        КонецЕсли;
                        Если ЧтениеXML.Имя = "SkladPoluchatel" Тогда
                            ДокументПрихода.СкладПолучатель = ЧтениеXML.ЧитатьТекст();
                        КонецЕсли;
                    КонецЕсли;
                    
                    Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
                        Если ЧтениеXML.Имя = "Dokument" Тогда
                            // Переходим к чтению товаров
                            Прервать;
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
    
            // Читаем товары
            Пока ЧтениеXML.Прочитать() Цикл
                Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Tovar" Тогда
                    // Создаем строку товара
                    СтрокаТовара = ДокументПрихода.Товары.Добавить();
                    
                    Пока ЧтениеXML.Прочитать() Цикл
                        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                            Если ЧтениеXML.Имя = "Tovar_Artikul" Тогда
                                СтрокаТовара.Артикул = ЧтениеXML.ЧитатьТекст();
                            КонецЕсли;
                            Если ЧтениеXML.Имя = "Tovar_Name" Тогда
                                СтрокаТовара.Наименование = ЧтениеXML.ЧитатьТекст();
                            КонецЕсли;
                            Если ЧтениеXML.Имя = "Tovar_Kol" Тогда
                                СтрокаТовара.Количество = Число(ЧтениеXML.ЧитатьТекст());
                            КонецЕсли;
                            Если ЧтениеXML.Имя = "Tovar_CenaRealizaciiUchetnaya" Тогда
                                СтрокаТовара.Цена = Число(ЧтениеXML.ЧитатьТекст());
                            КонецЕсли;
                        КонецЕсли;
    
                        Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
                            Если ЧтениеXML.Имя = "Tovar" Тогда
                                Прервать;
                            КонецЕсли;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    
        // Закрываем документ
        ДокументПрихода.Записать();
        ЧтениеXML.Закрыть();
    КонецФункции
    

    ### Описание кода:
    1. **Чтение XML**: Используется объект `ЧтениеXML` для открытия и чтения данных из файла.
    2. **Создание документа**: Создается новый документ «Поступление товаров».
    3. **Чтение реквизитов**: Извлекаются реквизиты документа из XML.
    4. **Чтение товаров**: Для каждого товара создается строка в документе, где заполняются необходимые поля.
    5. **Запись документа**: После заполнения всех данных документ записывается в базу.

    Этот код можно вызывать, передавая путь к XML файлу, например:

    1C
    ЗагрузитьПриходИзXML("C:pathtoyourfile.xml");
    

    Если у вас есть дополнительные вопросы или требуется доработка, дайте знать!

    База знаний 1С