Загрузка в 1с 8.1 из XML

12. йййццц 07.09.10 18:02 Сейчас в теме
А подскажите как обрабатывать XML файл со "вложеной" структурой т.е.


<?xml version="1.0" encoding="UTF-8"?>
<Корневой ИмяСправочника="ФизическиеЛица">
<!--Началась выгрузка-->
<ЭлементСправочника>
<Код>000000004</Код>
<Наименование>Барашко Ирина Георгиевна</Наименование>
<Таблица>
<НомерСтрока>1</НомерСтрока>
<ЗначениеСтроки>Бла-бла-бла</ЗначениеСтроки>
</Таблица>
</ЭлементСправочника>

и так далее...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
13. йййццц 08.09.10 13:00 Сейчас в теме
14. Pogedaeva 16.11.10 13:57 Сейчас в теме
15. supermen-2 30.11.10 10:14 Сейчас в теме
superoger,

Суперогер, Вы написали мое имя в своем коде! НЕПРОФЕСИОНАЛЬНО!
16. supermen-2 30.11.10 10:15 Сейчас в теме
17. superoger 15.04.09 11:25 Сейчас в теме
Здравствуйте!

Хотелось бы узнать как загрузить из XML файла произвольной структуры:

<?xml version="1.0" encoding="UTF-8"?>
<Корневой ИмяСправочника="ФизическиеЛица">
	<!--Началась выгрузка-->
	<ЭлементСправочника>
		<Код>000000004</Код>
		<Наименование>Барашко Ирина Георгиевна</Наименование>
	</ЭлементСправочника>
	<ЭлементСправочника>
		<Код>000000008</Код>
		<Наименование>Захаров Виктор Николаевич</Наименование>
	</ЭлементСправочника>
	<ЭлементСправочника>
		<Код>000000003</Код>
		<Наименование>Карасев Юрий Николаевич</Наименование>
	</ЭлементСправочника>
	<ЭлементСправочника>
		<Код>000000005</Код>
		<Наименование>Маркина Алла Константиновна</Наименование>
	</ЭлементСправочника>
	<ЭлементСправочника>
		<Код>000000006</Код>
		<Наименование>Самкова Анна Николаевна</Наименование>
	</ЭлементСправочника>
	<ЭлементСправочника>
		<Код>000000007</Код>
		<Наименование>Широков Андрей Юрьевич</Наименование>
	</ЭлементСправочника>
</Корневой>
Показать


Может быть кто-то занимался такой загрузкой?
И вообще как мне загрузить из другой системы, например написанной на Java, любой xml файл?
Структура справочников естественно разная, пространство имен прописать в файл не получится.
18. superoger 16.04.09 08:51 Сейчас в теме
Неужели никто не сталкивался? Как загрузить данные из xml в 1с? Как мне сначала прочитать значение из xml, а потом создать новый элемент в справочнике, если Наименование не присутствует в справочнике?! А если присутствует, необходимо же их сравнить каким-то образом? У кого-нибудь есть ответы?
19. coder1cv8 3470 16.04.09 09:00 Сейчас в теме
(2) Не понимаю в чем проблема?...
Если штатными средствами, то:
ЧтениеXML = Новый ЧтениеXML;
и вперед!
Или алгоритм парсинга нужно за тебя придумывать?... )
20. superoger 16.04.09 11:39 Сейчас в теме
Нет это все понятно, что я прочитываю элементы построчно, а как мне потом их создать соответсвенно в справочнике, как мне сравнить если такой-то элемент в этом справочнике или нет?!
21. Душелов 4017 16.04.09 12:07 Сейчас в теме
ЖКК!

НайтиПоКоду, НайтиПоНаименованию
22. superoger 16.04.09 12:16 Сейчас в теме
Спасибо за подсказку.

Ок приведу пример своего кода, для создания нового элемента.
Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.
 
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл("doc3.xml");
    
    Пока ЧтениеXML.Прочитать() Цикл                  
        ПолучитьXMLТип(ЧтениеXML);
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Сообщить("Начало " + ЧтениеXML.Имя);
            Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
                Атрибут = ЧтениеXML.Значение;
                Сообщить("атрибут:" + ЧтениеXML.Имя + "=" + ЧтениеXML.Значение);
            КонецЦикла;
        КонецЕсли;
        
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
            Код = ЧтениеXML.Значение;
            Сообщить(ЧтениеXML.Значение);
        КонецЕсли;
    
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            НовыйЭлемент = Справочники.ФизическиеЛица.СоздатьЭлемент();
            НовыйЭлемент.Код = Код;
            Сообщить("Конец " + ЧтениеXML.Имя);
        КонецЕсли;
    КонецЦикла;
Показать


Непоятно как мне присвоить все реквизиты из xml нужно же поочереди проходить все строки в xml, а значения меняются, тип то у меня один - "текст".
Т.е. в данном случае Код успешно добавляю, а как потом добавить Наименование?
23. coder1cv8 3470 16.04.09 13:57 Сейчас в теме
Вот нашел какую-то древнюю свою обработку:
ХМЛ=Новый ЧтениеXML;
ХМЛ.ОткрытьФайл(ФайлЗагрузки);
Пока ХМЛ.Прочитать() Цикл
	Если ХМЛ.ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда
		Если ХМЛ.Имя="CatalogObject.Организации" Тогда
			СоответствиеРеквизитов.Очистить();	
		КонецЕсли;
		Имя=ХМЛ.Имя;
	ИначеЕсли ХМЛ.ТипУзла=ТипУзлаXML.Текст Тогда
		СоответствиеРеквизитов.Вставить(Имя,ХМЛ.Значение);
	ИначеЕсли ХМЛ.ТипУзла=ТипУзлаXML.КонецЭлемента Тогда
		Если ХМЛ.Имя="CatalogObject.Организации" Тогда
			ДобавитьЭлемент(СоответствиеРеквизитов);	
		КонецЕсли;
	КонецЕсли;
КонецЦикла;
ХМЛ.Закрыть();

Процедура ДобавитьЭлемент(СоответствиеРеквизитов)
	Орг=Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(СоответствиеРеквизитов.Получить("Ref")));
	ОргОбъект=Орг.ПолучитьОбъект();
	Если ОргОбъект=Неопределено Тогда
		ОргОбъект=Справочники.Организации.СоздатьЭлемент();	
		ОргОбъект.УстановитьСсылкуНового(Орг);
	КонецЕсли;
	ОргОбъект.ОбменДанными.Загрузка=Истина;
	ОргОбъект.Код=СоответствиеРеквизитов.Получить("Code");
	ОргОбъект.Наименование=СоответствиеРеквизитов.Получить("Description");
	ОргОбъект.ПометкаУдаления=СоответствиеРеквизитов.Получить("DeletionMark");
	ОргОбъект.Префикс=СоответствиеРеквизитов.Получить("Префикс");
	ОргОбъект.ИНН=СоответствиеРеквизитов.Получить("ИНН");
	ОргОбъект.КПП=СоответствиеРеквизитов.Получить("КПП");
// ...
ОргОбъект.Записать();
КонецПроцедуры
Показать

Организации загружает из XML файла...
aezdakov; Afa_fil; +2 Ответить
24. superoger 20.04.09 17:35 Сейчас в теме
Спасибо за ответ!

В данном случае что является СоответствиеРеквизитов ?? Я делаю через Структуру. В других случаях надо или индекс возвращать или параметров фактических очень много.
25. coder1cv8 3470 20.04.09 18:13 Сейчас в теме
(8) СоответствиеРеквизитов - структура.
26. superoger 21.04.09 10:41 Сейчас в теме
Вот Если кому Интересно Тогда выкладываю свой код;
Процедура КнопкаВыполнитьНажатие(Кнопка)
	// Вставить содержимое обработчика.
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл("C:\1c_bases\Загрузка\doc3.xml");
	Имя = ЧтениеXML.Имя;
	Массив = Новый Структура(Имя);                                                     
	Пока ЧтениеXML.Прочитать() Цикл                  
		ПолучитьXMLТип(ЧтениеXML);
		Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента  Тогда
		
			//НовыйЭлемент = Справочники.ФизическиеЛица.СоздатьЭлемент();
			Имя = ЧтениеXML.Имя;
			
			Сообщить("Начало " + ЧтениеXML.Имя);
			Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
				Атрибут = ЧтениеXML.Значение;
				Сообщить("атрибут:" + ЧтениеXML.Имя + "=" + ЧтениеXML.Значение);
			КонецЦикла;
		КонецЕсли;
		
		Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
			Массив.Вставить(Имя,ЧтениеXML.Значение);
			//НовыйЭлемент.Код = ЧтениеXML.Значение;
			Сообщить(ЧтениеXML.Значение);
		КонецЕсли;
	
		Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
			Если ЧтениеXML.Имя = "ЭлементСправочника" Тогда
			ДобавитьЭлемент(Массив);
			КонецЕсли;
			Сообщить("Конец " + ЧтениеXML.Имя);
		КонецЕсли;
	КонецЦикла;
	КонецПроцедуры

Процедура ДобавитьЭлемент(Массив)
	НовыйЭлемент = Справочники.ФизическиеЛица.СоздатьЭлемент();
	НовыйЭлемент.Код = Массив.Код;
	НовыйЭлемент.Наименование = Массив.Наименование;
	НовыйЭлемент.Записать();
КонецПроцедуры
Показать
27. ValentinV 30.04.09 10:45 Сейчас в теме
Ну и для чего морочили голову вопросами?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот