Публикации

БСП
Разработки

Найдено результатов: 172


Запись Чтение XML 2

Артур 46 2 3
   //Имя справочника для примера
    ИмяСправочника = "Номенклатура";
    
    ////////////////////////////////////////////////////////////­/////////////
    //Выгрузка
    
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    
    //записываем объявление xml файла: <?xml version="1.0"?>
    Запись.ЗаписатьОбъявлениеXML();
    
    //записываем корневой элемент, по спецификации xml он может быть только один, назовем его "Данные"
    Запись.ЗаписатьНачалоЭлемента("Данные");
    
    //для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент
    //они будут работать на все вложеные элементы
    //пространство имен по-умолчанию
    Запись.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
    
    //пространства имен остальные префиксы
    Запись.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
    Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    
    //ограничение количества выгружаемых элементов для примера
    Кол = 4;
    Выборка = Справочники[ИмяСправочника].Выбрать();
    Пока Выборка.Следующий() Цикл
        
        //вместо этого кода в боевой реализации выгрузки будет создание ОбъектаXDTO и его сериализация
        //через ФабрикуXDTO и загруженные в нее схемы конфигурации приемника
        СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());
        //
        
        Кол = Кол - 1;
        Если Кол=0 Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    //записываем конец корневого элемента
    Запись.ЗаписатьКонецЭлемента();
    
    //покажем что получилось
    Текст = Запись.Закрыть();
    Сообщить("Содержимое файла:");
    Сообщить(Текст);
    
    //а теперь загрузим это обратно
    
    ////////////////////////////////////////////////////////////­/////////////
    //Загрузка
    Сообщить("Данные полученные при загрузке:");
    
    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(Текст);
    
    //прочитаем начало xml файла
    Чтение.ПерейтиКСодержимому();
    
    //прочитаем начало корневого элемента
    Чтение.Прочитать();
    
    //читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника,
    //а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого
    Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл
        
        //читаем очередной элемент справочника
        Объект = СериализаторXDTO.ПрочитатьXML(Чтение);
        
        //покажем что прочитали, осталось только записать объект
        Сообщить(""+ТипЗнч(Объект)+" - "+Объект);
    КонецЦикла;
    
    Чтение.Закрыть();

ФабрикаXDTO

Коллеги помогите, пожалуйста, разобраться. Реализую выгрузка данных в сервис ЕГИССО в формате XML. Имеем архив со схемами xsd: http://www.pfrf.ru/files/id/docman/2020/XSD-shema_10.06.S_versii_1.0.6.zip В 1С создал свою ФабрикуXDTO из массива схем и потихон...
SDV 34 7

Загрузка XML в 1С из FTP

КаталогВрФл = КаталогВременныхФайлов();
	
	ФТПСоединение = Новый FTPСоединение("адрес",, "логин", "пароль",, Истина);
	
	НайдемФайлаНаФТП = ФТПСоединение.НайтиФайлы("/", "*.xml");
	
	Если НайдемФайлаНаФТП.Количество() = 0 Тогда
		ФТПСоединение = Неопределено;
		Возврат;
	КонецЕсли;
	
	ДанныеИзФайлаТовары = Новый ТаблицаЗначений();
	ДанныеИзФайлаТовары.Колонки.Добавить("Артикул");
	ДанныеИзФайлаТовары.Колонки.Добавить("ИД");
	ДанныеИзФайлаТовары.Колонки.Добавить("Производитель");
	ДанныеИзФайлаТовары.Колонки.Добавить("Номенклатура");
	ДанныеИзФайлаТовары.Колонки.Добавить("Количество");
	ДанныеИзФайлаТовары.Колонки.Добавить("Цена");
	ДанныеИзФайлаТовары.Колонки.Добавить("Размер");
	ДанныеИзФайлаТовары.Колонки.Добавить("Цвет");
	ДанныеИзФайлаТовары.Колонки.Добавить("Серия");
	ДанныеИзФайлаТовары.Колонки.Добавить("ЦенаСоСкидкой");
	
	ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
	ЕдиницаИзмШТ = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду("796");
	ПриоритетСредний = Справочники.Приоритеты.НайтиПоНаименованию("Средний");
	СкладОсновной = Справочники.Склады.НайтиПоНаименованию("Основной склад");
	ТиповоеСоглашение = Справочники.СоглашенияСКлиентами.НайтиПоНаименованию("Основное");
	ВалютаДок = Константы.ВалютаРегламентированногоУчета.Получить(); 
		
	Для каждого ФайлФТП из НайдемФайлаНаФТП Цикл
		
		ДанныеИзФайлаТовары.Очистить();
		НомерКП = ФайлФТП.ИмяБезРасширения;
		ДатаКП = "";
		
		ПутьКФайлуОбъект = КаталогВрФл + ФайлФТП.Имя;
		
		Попытка
		
		ФТПСоединение.Получить(ФайлФТП.ПолноеИмя, ПутьКФайлуОбъект);		
		ФТПСоединение.Переместить(ФайлФТП.ПолноеИмя, "OldFiles" + "\" + ФайлФТП.Имя);
				
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.ОткрытьФайл(ПутьКФайлуОбъект);
		
		Пока ЧтениеXML.Прочитать() Цикл
			Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда Продолжить; КонецЕсли;
			ИмяУзла = ЧтениеXML.ЛокальноеИмя;	
			Если ИмяУзла = "PRODUCT" Тогда
				НоваяСтрока = ДанныеИзФайлаТовары.Добавить();
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "ID" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.ИД = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "ARTICLE" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Артикул = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "SIZE" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Размер = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "COLOR" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Цвет = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "NAME" И ЧтениеXML.КонтекстПространствИмен.Глубина = 5 Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Серия = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "PROPERTY_PROVIDER_NAME" И ЧтениеXML.КонтекстПространствИмен.Глубина = 5 Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Производитель = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "NAME" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Номенклатура = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "QUANTITY" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Количество = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "PRICE" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.Цена = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "PRICE_DISCOUNT" Тогда
				ЧтениеXML.Прочитать();
				НоваяСтрока.ЦенаСоСкидкой = СокрЛП(ЧтениеXML.Значение);
				Продолжить;
			КонецЕсли;
			Если ИмяУзла = "DATE" Тогда
				ЧтениеXML.Прочитать();
				ДатаСтр = СокрЛП(ЧтениеXML.Значение);
				ДатаКП = Дата(ДатаСтр);
				Продолжить;
			КонецЕсли;
		КонецЦикла;
		
		ЧтениеXML.Закрыть();
		УдалитьФайлы(ПутьКФайлуОбъект);

Запись документа XML иерархия

Запись документа XML, по иерархии
Артур 46 2 3
Процедура ВыгрузитьСкладыНажатие(Элемент)		//выгрузка склады
	ЗаписьXML = Новый ЗаписьXML;
	ПутьКФайлу = 	КаталогВременныхФайлов()+ "Склады.xml";
	ЗаписьXML.ОткрытьФайл(ПутьКФайлу,  "UTF-8"); //Открываем файл для записи, указываем кодировку
	ЗаписьXML.ЗаписатьОбъявлениеXML();  // Записываем объявление XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("Склады"); // Начало элемента 
	Выборка   = Справочники.Склады.ВыбратьИерархически();
	Пока Выборка.Следующий() Цикл  // Начинаем выгружать 
		если  Выборка.ЭтоГруппа = Истина тогда
			Если Выборка.УровеньВВыборке() = 0 Тогда 
			ЗаписьXML.ЗаписатьНачалоЭлемента("Склад"); // Начало элемента Склад
		ЗаписьXML.ЗаписатьАтрибут("Код",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель", Строка(Выборка.Родитель));
			ЗаписьXML.ЗаписатьКонецЭлемента();
		    Иначеесли Выборка.УровеньВВыборке() = 1 Тогда 
			ЗаписьXML.ЗаписатьНачалоЭлемента("Склад1"); 
		ЗаписьXML.ЗаписатьАтрибут("Код1",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование1", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель1", Строка(Выборка.Родитель));
		    ЗаписьXML.ЗаписатьКонецЭлемента();	
			КонецЕсли;
		иначеесли Выборка.ЭтоГруппа = Ложь тогда
		ЗаписьXML.ЗаписатьНачалоЭлемента("Склад2");
		ЗаписьXML.ЗаписатьАтрибут("Код2",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование2", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель2", Строка(Выборка.Родитель));
		ЗаписьXML.ЗаписатьАтрибут("Подразделение2", Строка(Выборка.Подразделение));
		ЗаписьXML.ЗаписатьАтрибут("ВидСклада2", Строка(Выборка.ВидСклада));
		ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента Организация
		КонецЕсли;
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента 
	ЗаписьXML.Закрыть();

КонецПроцедуры

ПрочитатьXMLВТаблицу

Преобразует текст формата XML в таблицу значений, при этом колонки таблицы формируются на основе описания в XML.
bolsun 34 4
// Преобразует текст формата XML в таблицу значений,
// при этом колонки таблицы формируются на основе описания в XML.
//
// Параметры:
//  ТекстXML     - текст в формате XML.
//
// Схема XML:
//<?xml version="1.0" encoding="utf-8"?>
//<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
//  <xs:element name="Items">
//	<xs:complexType>
//	  <xs:sequence>
//		<xs:element maxOccurs="unbounded" name="Item">
//		  <xs:complexType>
//			<xs:attribute name="Code" type="xs:integer" use="required" />
//			<xs:attribute name="Name" type="xs:string" use="required" />
//			<xs:attribute name="Socr" type="xs:string" use="required" />
//			<xs:attribute name="Index" type="xs:string" use="required" />
//		  </xs:complexType>
//		</xs:element>
//	  </xs:sequence>
//	  <xs:attribute name="Description" type="xs:string" use="required" />
//	  <xs:attribute name="Columns" type="xs:string" use="required" />
//	</xs:complexType>
//  </xs:element>
//</xs:schema>
//
// Примеры XML-файлов см. в демонстрационной конфигурации.
// 
// Пример использования:
//   КлассификаторТаблица = ПрочитатьXMLВТаблицу(РегистрыСведений.АдресныйКлассификатор.
//       ПолучитьМакет("КлассификаторАдресныхОбъектовРоссии").ПолучитьТекст());
//
// Возвращаемое значение:
//  ТаблицаЗначений.
//
Функция ПрочитатьXMLВТаблицу(ТекстXML) Экспорт
	
	Чтение = Новый ЧтениеXML;
	Чтение.УстановитьСтроку(ТекстXML);
	
	// Прочитаем первый узел и проверим его
	Если Не Чтение.Прочитать() Тогда
		ВызватьИсключение("Пустой XML");
	ИначеЕсли Чтение.Имя <> "Items" Тогда
		ВызватьИсключение("Ошибка в структуре XML");
	КонецЕсли;
	
	// Получим описание таблицы и создадим ее
	ИмяТаблицы = Чтение.ПолучитьАтрибут("Description");
	ИменаКолонок = СтрЗаменить(Чтение.ПолучитьАтрибут("Columns"), ",", Символы.ПС);
	Колонок = СтрЧислоСтрок(ИменаКолонок);
	
	ТаблицаЗначений = Новый ТаблицаЗначений;
	Для Сч = 1 По Колонок Цикл
		ТаблицаЗначений.Колонки.Добавить(СтрПолучитьСтроку(ИменаКолонок, Сч), Новый ОписаниеТипов("Строка"));
	КонецЦикла;
	
	// Заполним значения в таблице
	Пока Чтение.Прочитать() Цикл
		
		Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда
			Продолжить;
		ИначеЕсли Чтение.Имя <> "Item" Тогда
			ВызватьИсключение("Ошибка в структуре XML");
		КонецЕсли;
		
		новСтр = ТаблицаЗначений.Добавить();
		Для Сч = 1 По Колонок Цикл
			ИмяКолонки = СтрПолучитьСтроку(ИменаКолонок, Сч);
			новСтр[Сч-1] = Чтение.ПолучитьАтрибут(ИмяКолонки);
		КонецЦикла;
		
	КонецЦикла;
	
	// Заполним результат
	Результат = Новый Структура;
	Результат.Вставить("ИмяТаблицы", ИмяТаблицы);
	Результат.Вставить("Данные", ТаблицаЗначений);
	
	Возврат Результат;
	
КонецФункции // ПрочитатьXMLВТаблицу()

Сохранение таблицы значений в XML

ArturR 31 2
ДанныеНакладной = Новый ТаблицаЗначений();
	ДанныеНакладной.Колонки.Добавить("НоменклатураАртикул");
	ДанныеНакладной.Колонки.Добавить("Количество");
	ДанныеНакладной.Колонки.Добавить("Цена");
	
	Для Каждого Стр Из Товары Цикл
		Если Стр.Номенклатура.Артикул = "" Тогда
			Сообщить ("Внимание! В номенклатуре " + Стр.Номенклатура + " не определен артикул.");
		Иначе		
			СтрокаТЗ = ДанныеНакладной.Добавить();
			СтрокаТЗ.НоменклатураАртикул = Стр.Номенклатура.Артикул;
			СтрокаТЗ.Количество = Стр.Количество;
			СтрокаТЗ.Цена = Стр.Цена;		
		КонецЕсли;
	КонецЦикла;
	Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
	XML = Новый ЗаписьXML;
	ИмяФайла = "" + КРВ_ВспомогательныеФункции.УбратьНули(Номер)
	+ " - " + КРВ_ВспомогательныеФункции.УбратьНедопустимыеСимволы(Контрагент);
	
	XML.ОткрытьФайл("d:\1C_DATA\ОБМЕН\" + ИмяФайла + ".xml");
	Сериализатор.ЗаписатьXML(XML, ДанныеНакладной);

Чтение XML в таблицу значений

ArturR 31 2
Режим = РежимДиалогаВыбораФайла.Открытие;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);        
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	Фильтр = "Текст(*.XML)|*.XML";
	ДиалогОткрытияФайла.Фильтр = Фильтр;
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;             
	ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
	
	Если ДиалогОткрытияФайла.Выбрать() Тогда 
		ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
		Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
		ТЗ = Сериализатор.ПрочитатьXML(ЧтениеXML,Тип("ТаблицаЗначений"));
		ЧтениеXML.Закрыть();
	КонецЕсли;
	
		ЭтотОбъект.Контрагент 		  	= Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТЗ[0].КонтрагентИНН);
		ЭтотОбъект.КРВ_IDМенеджер	  	= ТЗ[0].IDМенеджер;
		ЭтотОбъект.КРВ_НомерЗаказаУНФ 	= ТЗ[0].Номер;
		ЭтотОбъект.Склад 				= Справочники.Склады.НайтиПоНаименованию(ТЗ[0].Склад);
	
Для каждого СтрокаТЗ Из ТЗ Цикл
КонецЦикла; 

Чтение XML через DOM

Чтение XML через DOM
Андрей 23 4
функция читаемХМЛ2014(путь,атр) экспорт
	х 		= новый массив;
	y 		= новый массив;
	мДОМ 	= новый ПостроительDOM;
	
	заявка = новый таблицаЗначений;
	заявка.Колонки.Добавить("номерДок");
	заявка.Колонки.Добавить("клиент");
	заявка.Колонки.Добавить("адрес");
	заявка.Колонки.Добавить("товар");
	заявка.Колонки.Добавить("кодТовара");
	заявка.Колонки.Добавить("количество");
	заявка.Колонки.Добавить("цена");
	заявка.Колонки.Добавить("сумма");
	
	чтение 	= Новый ЧтениеXML ;
	чтение.ОткрытьФайл(сокрЛП(путь));
	мДокументДОМ = мДОМ.Прочитать(чтение);
	чтение.Закрыть();
	номерДок = "";
	клиент   = "";
	адрес    = "";
	_documents =  мДокументДОМ.ПолучитьЭлементыПоИмени("documents");
	для каждого а1 из _documents цикл
		_preorder = а1.ПолучитьЭлементыПоИмени("preorder");
		для каждого а2 из _preorder цикл
			_ттн = а2.дочерниеУзлы;
			для каждого а21 из _ттн цикл
				если (а21.имяУзла = "innercode") тогда
					номерДок =а21.ТекстовоеСодержимое;
				конецЕсли; 
				если (а21.имяУзла = "buypointjuridicalname") тогда
					клиент   = а21.ТекстовоеСодержимое;
				конецЕсли;
				если (а21.имяУзла = "buypointaddress") тогда
					адрес    = а21.ТекстовоеСодержимое;
				конецЕсли;
			конецЦикла;
			_item = а2.ПолучитьЭлементыПоИмени("item");
			для каждого а3 из _item цикл
				_товар  = а3.ДочерниеУзлы;
				хх = заявка.Добавить();
				хх.номерДок = номерДок;
				хх.клиент   = клиент;
				хх.адрес    = адрес;
				для каждого а4 из _товар цикл
					если  (а4.имяУзла = "SKUname") тогда
						хх.товар = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "SKUcode")тогда 
						хх.кодТовара = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "quantity")тогда 
						хх.количество = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "priceDiscount")  тогда
						хх.цена = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "amount")  тогда
						хх.сумма = а4.ТекстовоеСодержимое;
					конецЕсли;
				конецЦикла;
			конецЦикла;
		конецЦикла;
	конецЦикла;
	
	
	//мРазыменовательПИ = мДокументДОМ.СоздатьРазыменовательПИ(мДокументДОМ);
	//мЗапрос		= "/documents/preorders/preorder/body/item/*";
	//мХПуть		= мДокументДОМ.СоздатьВыражениеXPath(мЗапрос,мРазыменовательПИ);
	//мРезультат	= мХПуть.Вычислить(мДокументДОМ);
	//мРодитель	= мРезультат.ПолучитьСледующий();
	//пока мРодитель <> неопределено цикл
	//	//если  мРодитель.ИмяЭлемента = "body" тогда
	//	//	  
	//	//	
	//	//	сообщить("");
	//	//	мРодитель=мРезультат.ПолучитьСледующий();
	//	//	продолжить;
	//	//конецЕсли;	 
	//	х.Добавить( мРодитель.ИмяЭлемента+" "+мРодитель.ТекстовоеСодержимое);
	//	сообщить(мРодитель.ИмяЭлемента+" "+мРодитель.ТекстовоеСодержимое);
	//	мРодитель=мРезультат.ПолучитьСледующий();
	//конецЦикла;
	
	возврат заявка;
конецФункции  //функция читаемХМЛ2014(путь)

Выгрузка Запроса в XML документ, в виде дерева(В Виде иерархии)

Выгрузка Запроса в XML документ, в виде дерева
Артур 46 2 3
Процедура ЛюбаяСЗапросом()
ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ПутьП,  "UTF-8"); //Открываем файл для записи, указываем кодировку
	ЗаписьXML.ЗаписатьОбъявлениеXML();  // Записываем объявление XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("ОстаткиТоваров"); // Начало элемента 
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТоварыНаСкладах.Период КАК Период,
		|	ТоварыНаСкладах.Регистратор КАК Регистратор,
		|	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
		|	ТоварыНаСкладах.Количество КАК Количество
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
		|ГДЕ
		|	ТоварыНаСкладах.Период МЕЖДУ &НачПериод И &КонПериод
		|	И ТоварыНаСкладах.Номенклатура В ИЕРАРХИИ(&Номенклатура)		
		|ИТОГИ ПО
		|		Регистратор";

Результат = Запрос.Выполнить();
	Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	ОбойтиУровеньДерева(Дерево.Строки, ЗаписьXML);   //вызов процедуры
	ЗаписьXML.ЗаписатьКонецЭлемента();     
	ЗаписьXML.Закрыть();

КонецПроцедуры

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

Чтение XML файла

Чтение XML файла по объектно. (Экономим память, не читаем файл полностью, а отдельными блоками)
eXtend88 58 1 1 1
ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(ИмяФайлаНаСервере);
	Пока ЧтениеXML.Прочитать() Цикл
		Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
			Если ЧтениеXML.Имя = "Товар" Тогда // Считываем номенклатуру в XDTO
				ДанныеТовараXML = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
				НоменклатураОбъект = Справочники.Номенклатура.СоздатьОбъект();
				//  Заполняем реквизиты номенклатруы данными объекта XDTO 
				НоменклатураОбъект.Записать();
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = "Создана:" + НоменклатураОбъект.Наименование;
				Сообщение.Сообщить();
			Иначе
				ЧтениеXML.Прочитать();
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	ЧтениеXML.Закрыть();

Выгрузка запроса в XML. Выгрузка объекта

chugindanil 16 1
&НаСервере
Процедура КомандаВыполнитьНаСервере()
	
	ИмяФайла = "d:\test.xml";
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	| Номенклатура.Код КАК Код,
	| Номенклатура.Наименование КАК Наименование,
	| Номенклатура.Артикул КАК Артикул,
	| Номенклатура.Ссылка КАК Номенклатура
	|ИЗ
	| Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	| Номенклатура.ЭтоГруппа = ЛОЖЬ");
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ИмяФайла,"UTF-8");
	
	ВыборкаРезультата = Запрос.Выполнить().Выгрузить(); 
	ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
	Для каждого Выборка Из ВыборкаРезультата Цикл
		ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());           
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();
	
КонецПроцедуры

ЗначениеИзСтрокиXML

Выполняет преобразование (десериализацию) XML-строки в значение.
ОбщийМодуль.ОбщегоНазначения
Автор: 1С
// Выполняет преобразование (десериализацию) XML-строки в значение.
// См. также ЗначениеВСтрокуXML.
//
// Параметры:
//  СтрокаXML - Строка - XML-строка, с сериализованным объектом..
//
// Возвращаемое значение:
//  Произвольный - значение, полученное из переданной XML-строки.
//
Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаXML);
	
	Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ПредставлениеТипаXDTO

Возвращает XML представление типа XDTO.
ОбщийМодуль.РаботаВМоделиСервиса
Автор: 1С
// Возвращает XML представление типа XDTO.
//
// Параметры:
//  ТипXDTO - ТипОбъектаXDTO, ТипЗначенияXDTO - тип XDTO для которого требуется получить.
//   XML представление.
//
// Возвращаемое значение:
//  Строка - XML представление типа XDTO.
//
Функция ПредставлениеТипаXDTO(ТипXDTO) Экспорт
	
	Возврат СериализаторXDTO.XMLСтрока(Новый РасширенноеИмяXML(ТипXDTO.URIПространстваИмен, ТипXDTO.Имя))
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ЗначениеВСтрокуXML

Преобразует (сериализует) любое значение в XML-строку.
ОбщийМодуль.ОбщегоНазначения
Автор: 1С
// Преобразует (сериализует) любое значение в XML-строку.
// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются.
// См. также ЗначениеИзСтрокиXML.
//
// Параметры:
//  Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку.
//
// Возвращаемое значение:
//  Строка - XML-строка.
//
Функция ЗначениеВСтрокуXML(Значение) Экспорт
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное);
	
	Возврат ЗаписьXML.Закрыть();
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ОбъектXDTOВСтрокуXML

Возвращает XML-представление XDTO-объекта.
ОбщийМодуль.ОбщегоНазначения
Автор: 1С
// Возвращает XML-представление XDTO-объекта.
//
// Параметры:
//  ОбъектXDTO - ОбъектXDTO  - объект, для которого требуется сформировать XML-представление.
//  Фабрика    - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XML-представление.
//                             Если параметр не указан - будет использоваться глобальная фабрика XDTO.
//
// Возвращаемое значение: 
//   Строка - XML-представление XDTO-объекта.
//
Функция ОбъектXDTOВСтрокуXML(Знач ОбъектXDTO, Знач Фабрика = Неопределено) Экспорт
	
	ОбъектXDTO.Проверить();
	
	Если Фабрика = Неопределено Тогда
		Фабрика = ФабрикаXDTO;
	КонецЕсли;
	
	Запись = Новый ЗаписьXML();
	Запись.УстановитьСтроку();
	Фабрика.ЗаписатьXML(Запись, ОбъектXDTO, , , , НазначениеТипаXML.Явное);
	
	Возврат Запись.Закрыть();
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

УдалитьНедопустимыеСимволыXML

Удаляет недопустимые символы в XML-строке.
ОбщийМодуль.ОбщегоНазначенияКлиентСервер
Автор: 1С
// Удаляет недопустимые символы в XML-строке.
//
// Параметры:
//  Текст - Строка - строка, в которой требуется удалить недопустимые символы.
// 
// Возвращаемое значение:
//  Строка - Строка, полученная при удалении недопустимых символов в XML-строке.
//
Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт
	
	Возврат ЗаменитьНедопустимыеСимволыXML(Текст, "");
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

КонтактнаяИнформацияВXML

Преобразует все входящие форматы контактной информации в XML.
ОбщийМодуль.УправлениеКонтактнойИнформацией
Автор: 1С
// Преобразует все входящие форматы контактной информации в XML.
//
// Параметры:
//    ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - описание полей контактной информации.
//                    XML должен соответствовать XDTO-пакету КонтактнаяИнформация или Адрес.
//                    Структура, Соответствие, СписокЗначений должен содержать поля в соответствии со структурой
//                    XDTO пакетов КонтактнаяИнформация или Адрес(для конфигурации с поддержкой специфики РФ).
//    Представление - Строка - Представление контактной информации. Используется, если невозможно определить
//                    представление из параметра ЗначенияПолей (например, отсутствует поле Представление).
//    ОжидаемыйВид  - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации -
//                    Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей.
//
// Возвращаемое значение:
//     Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес.
//
Функция КонтактнаяИнформацияВXML(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйВид = Неопределено) Экспорт
	
	Результат = УправлениеКонтактнойИнформациейСлужебный.ПривестиКонтактнуюИнформациюXML(Новый Структура(
		"ЗначенияПолей, Представление, ВидКонтактнойИнформации",
	ЗначенияПолей, Представление, ОжидаемыйВид));
	Возврат Результат.ДанныеXML;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ОбъектXDTOИзСтрокиXML

Формирует XDTO-объект по XML-представлению.
ОбщийМодуль.ОбщегоНазначения
Автор: 1С
// Формирует XDTO-объект по XML-представлению.
//
// Параметры:
//  СтрокаXML - Строка    - XML-представление XDTO-объекта,
//  Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XDTO-объект.
//                          Если параметр не указан - будет использоваться глобальная фабрика XDTO.
//
// Возвращаемое значение: 
//  ОбъектXDTO - XDTO-объект.
//
Функция ОбъектXDTOИзСтрокиXML(Знач СтрокаXML, Знач Фабрика = Неопределено) Экспорт
	
	Если Фабрика = Неопределено Тогда
		Фабрика = ФабрикаXDTO;
	КонецЕсли;
	
	Чтение = Новый ЧтениеXML();
	Чтение.УстановитьСтроку(СтрокаXML);
	
	Возврат Фабрика.ПрочитатьXML(Чтение);
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

КонтактнаяИнформацияXDTOВXML

Преобразует контактную информацию XDTO в XML.
ОбщийМодуль.УправлениеКонтактнойИнформациейСлужебный
Автор: 1С
// Преобразует контактную информацию XDTO в XML.
//
//  Параметры:
//      ОбъектXDTOИнформации - ОбъектXDTO - контактная информация.
//
// Возвращаемое значение:
//      Строка - результат преобразования в формате XML.
//
Функция КонтактнаяИнформацияXDTOВXML(ОбъектXDTOИнформации) Экспорт
	
	Запись = Новый ЗаписьXML;
	Запись.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Ложь, Ложь, ""));
	
	Если ОбъектXDTOИнформации <> Неопределено Тогда
		ФабрикаXDTO.ЗаписатьXML(Запись, ОбъектXDTOИнформации);
	КонецЕсли;
	
	Результат = СтрЗаменить(Запись.Закрыть(), Символы.ПС, "&#10;");
	Результат = СтрЗаменить(Результат, "<ВнутригРайон/>", "");// Совместимость с КЛАДР
	
	Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда
		МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
		Результат = МодульРаботаСАдресами.ПередЗаписьюXDTOКонтактнаяИнформация(Результат);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

НайтиВXML

Находит в XML содержимое находящееся в теге.
ОбщийМодуль.ЭлектроннаяПодписьСлужебныйКлиентСервер
Автор: 1С
// Находит в XML содержимое находящееся в теге.
//
// Параметры:
//  Текст                             - Строка - текст XML, в котором выполняется поиск.
//  ИмяТега                           - Строка - тег, содержимое которого необходимо найти.
//  ВключатьОткрывающийЗакрывающийТег - Булево - признак необходимости найденного тегом,
//                                               по которому выполнялся поиск, по умолчанию Ложь.
//  НомерПоПорядку                    - Число  - позиция, с которой начинается поиск, по умолчанию 1.
// 
// Возвращаемое значение:
//   Строка - строка, из которой удалены символы перевода строки и возврата каретки.
//
Функция НайтиВXML(Текст, ИмяТега, ВключатьОткрывающийЗакрывающийТег = Ложь, НомерПоПорядку = 1) Экспорт
	
	Результат = Неопределено;
	
	Начало    = "<"  + ИмяТега;
	Окончание = "</" + ИмяТега + ">";
	
	Содержимое = Сред(
		Текст,
		СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку),
		СтрНайти(Текст, Окончание, НаправлениеПоиска.СНачала, 1, НомерПоПорядку) + СтрДлина(Окончание) - СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку));
		
	Если ВключатьОткрывающийЗакрывающийТег Тогда
		
		Результат = СокрЛП(Содержимое);
		
	Иначе
		
		ОткрывающийТег = Лев(Содержимое, СтрНайти(Содержимое, ">"));
		Содержимое = СтрЗаменить(Содержимое, ОткрывающийТег, "");
		
		ЗакрывающийТег = Прав(Содержимое, СтрДлина(Содержимое) - СтрНайти(Содержимое, "<", НаправлениеПоиска.СКонца) + 1);
		Содержимое = СтрЗаменить(Содержимое, ЗакрывающийТег, "");
		
		Результат = СокрЛП(Содержимое);
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////