Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 18:03

Запись данных из xml в справочник 1с

Автор Ваня, 14 мар 2018, 08:48

0 Пользователей и 1 гость просматривают эту тему.

Ваня

Уважаемые, помогите пожалуйста. Есть xml следующего вида:


<?xml version="1.0" encoding="windows-1251"?>
<!--Pay--><Root>
<RegContr>
<Contr ID="123" SNAME="Название организации1" NAME="Полное Название организации1" INN="123123" KPP="" JADRESS="" FAX="" PHONE="" ACCOUNT="" PADRESS="" OKPO="" OKONH="" BANK="" BIK="" CORACCOUNT="" EMAIL=""/>
<Contr ID="124" SNAME="Название организации2" NAME="Полное Название организации1" INN="4564556" KPP="" JADRESS="" FAX="" PHONE="" ACCOUNT="" PADRESS="" OKPO="" OKONH="" BANK="" BIK="" CORACCOUNT="" EMAIL=""/>

</RegContr>
</Root>


Как это записать в 1с справочник "поставщики"

Нашел такой пример кода:


&НаСервере
Процедура ПрочитатьXMLФайлНаСервере(Файлик)

ПутьКФайлу = Файлик[0];

//XML

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);


СЗ = Новый СписокЗначений;

Пока ЧтениеXML.Прочитать() Цикл


Если ЧтениеXML.Имя = "Contr" Тогда
Если ЧтениеXML.КоличествоАтрибутов()>0 Тогда

//Поставщики
НомерСтроки = Поставщики.Количество();
СтрокаТЗ = Поставщики.Добавить();

Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Атрибут = ЧтениеXML.Значение;

Если ЧтениеXML.Имя = "ID" Тогда
СтрокаТЗ.ID = Атрибут;
ИначеЕсли ЧтениеXML.Имя = "NAME" Тогда
СтрокаТЗ.NAME = Атрибут;
ИначеЕсли ЧтениеXML.Имя = "SNAME" Тогда
СтрокаТЗ.SNAME = Атрибут;
ИначеЕсли ЧтениеXML.Имя = "INN" Тогда
Отбор = Новый Структура;
Отбор.Вставить("ИНН", Атрибут);
МассивСтрокКонтр = СверткаРезультатКонтр.НайтиСтроки(Отбор);
Если МассивСтрокКонтр.Количество()>0 Тогда
Поставщики.Удалить(НомерСтроки);
Прервать;
КонецЕсли;

СтрокаТЗ.ИНН = Атрибут;

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




КонецЕсли;
КонецЦикла;
      КонецЦикла;
КонецПроцедуры

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


&НаКлиенте
Процедура ПрочитатьИзФайлаXML(Команда)
Режим = режимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияфайла = Новый ДиалогВыборафайла(Режим);
Фильтр = "xml|*.xml";
ДиалогОткрытияфайла.фильтр = фильтр;
Если ДиалогОткрытияфайла.Выбрать() Тогда
файлик = ДиалогОткрытияфайла.Выбранныефайлы;
ПрочитатьXMLФайлНаСервере (Файлик);
КонецЕсли;

ОбновитьИнтерфейс();
КонецПроцедуры




Но он не подходит, нужно чтобы читал построчно.

нашел что-то типа такого:

Если ЧтениеXML.Имя = "Contr" Тогда
Если ЧтениеXML.КоличествоАтрибутов()>0 Тогда

//ТаблицаКонтрагентов
НомерСтроки = ТаблицаКонтрагентов.Количество();
СтрокаТЗ = ТаблицаКонтрагентов.Добавить();

Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Атрибут = ЧтениеXML.Значение;
Если Покупатель Тогда
СтрокаТЗ.ТипКонтрагента = "Покупатель";
Иначе
СтрокаТЗ.ТипКонтрагента = "Поставщик";
КонецЕсли;
Если ЧтениеXML.Имя = "ID" Тогда
СтрокаТЗ.ID = Атрибут;
ИначеЕсли ЧтениеXML.Имя = "NAME" Тогда
СтрокаТЗ.NAME = Атрибут;
ИначеЕсли ЧтениеXML.Имя = "SNAME" Тогда
СтрокаТЗ.SNAME = Атрибут;
ИначеЕсли ЧтениеXML.Имя = "INN" Тогда
Отбор = Новый Структура;
Отбор.Вставить("ИНН", Атрибут);
МассивСтрокКонтр = СверткаРезультатКонтр.НайтиСтроки(Отбор);
Если МассивСтрокКонтр.Количество()>0 Тогда
ТаблицаКонтрагентов.Удалить(НомерСтроки);
Прервать;
КонецЕсли;

СтрокаТЗ.ИНН = Атрибут;

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


Я к сожалению не программист, прошу очень помощи.

Теги: XML запись xml 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск