Преобразование XML - Структура и обратно

1. ZMGMSC 73 11.10.18 09:56 Сейчас в теме
Подскажите как лучше сделать процедуру (функцию)
чтобы написать и забыть :)
Смысл, передавать структуру как параметр а на выходе получить XML
Может есть у кого готовое решение ?
native-api; +1 Ответить
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Boneman 301 11.10.18 10:18 Сейчас в теме
(1) если конфа типовая, то там готовые функции уже есть

ОбщегоНазначения.ЗначениеВСтрокуXML(Значение)

и
ОбщегоНазначения.ЗначениеИзСтрокиXML(СтрокаXML)
2. shilanser 11.10.18 10:01 Сейчас в теме
Доброго времени суток!
Функция Сериализовать(ОбъектСериализации) 
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации); 
	МойXML = Новый ЗаписьXML; 
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO); 
	Возврат МойXML.Закрыть(); 
КонецФункции


Функция Десериализовать(XMLСтруктура) 
	ЧтениеXMLДанных = Новый ЧтениеXML; 
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктура); 
	Параметр = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных); 
	ЧтениеXMLДанных.Закрыть(); 
	Возврат Параметр; 
КонецФункции
Показать

Это требовалось?)
ulen; user830833; kuznetsov1c; DrAku1a; NekoZver; johnnyshut23; Alexwarsis; +7 Ответить
4. softcom_1c 20 11.10.18 10:25 Сейчас в теме
Можно еще так:

МойXML = Новый ЗаписьXML;
//Далее устанавливаем файл или поток, если нужно получить XML в виде строчки...

ЗаписатьXML(МойXML , МояСтруктура);


//Потом получить структуру обратно можно будет при помощи "ПрочитатьXML()";

//Кстати такой же метод есть и для JSON.
johnnyshut23; +1 Ответить
21. user645799_spam_gds 10.10.19 12:43 Сейчас в теме
(4)Бьюсь уже 4 часа.
		ЗаписьXML = новый ЗаписьXML;
		ЗаписьXML.УстановитьСтроку("UTF-8");
		Значение = новый Структура("a", "a1");
		ЗаписатьXML(ЗаписьXML, Значение);
		СтрокаТелаОтвета = ЗаписьXML.Закрыть();

Результат: "Ошибка при вызове метода контекста (ЗаписатьXML)".

Что не так???
(4)
22. spacecraft 10.10.19 13:12 Сейчас в теме
(21) из СП:
Значения не всех типов могут быть записаны в формате XML данным методом.
В XML могут быть записаны значения следующих типов: Неопределено, Null, Булево, Число, Строка, Дата, Тип, УникальныйИдентификатор, ДвоичныеДанные, ХранилищеЗначения, ОписаниеТипов, а также ссылки объектов данных и сами объекты данных, наборы записей регистров, менеджер значения константы. В дальнейшем список может пополняться.
При попытке записи значения неподходящего типа будет вызвано исключение.

Структуры в допустимых типах нет.
user645799_spam_gds; +1 Ответить
5. ZMGMSC 73 11.10.18 10:55 Сейчас в теме
JSON и XML практически одинаковые

смущает в XML как правильно задавать пространство имен и указывать его в тегах.

просто объект сериализавать в XML просто.
6. ZMGMSC 73 11.10.18 11:06 Сейчас в теме
я не точно сформулировал вопрос наверное.
XML нужно собирать для обмена с внешними сервисами с указанием пространства имен
и типа данных.
Поэтому типовые не совсем подходят. Если их только потом не корректировать.
7. Dream_kz 129 11.10.18 11:11 Сейчас в теме
8. ZMGMSC 73 11.10.18 11:15 Сейчас в теме
10. Dream_kz 129 11.10.18 11:38 Сейчас в теме
(8) Делаем пакет XDTO с нужной структурой, там можно и пространство имен задать. Затем создаем объект из этого пакета, заполняем его, потом фабрика сформирует XML нужного формата

ТипДок = ФабрикаXDTO.Тип("DataTransfer","DocumentObject.ОстаткиНоменклатуры");
	
	Док = ФабрикаXDTO.Создать(ТипДок);
	//здесь заполняем объект
	ФайлXML = Новый ЗаписьXML;
	ФайлXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(ФайлXML, Док);
	ТекстВозврата = ФайлXML.Закрыть();
Показать
11. dusha0020 1112 11.10.18 11:55 Сейчас в теме
(10) Фабрика привязана к набору и типам данных. А стартер, очевидно, хочет преобразовывать произвольные структуры.
12. ZMGMSC 73 11.10.18 11:57 Сейчас в теме
http://schemas.xmlsoap.org/soap/envelope/">
с такой шляпой и типы о клиента могут быть свои
13. dusha0020 1112 11.10.18 12:04 Сейчас в теме
Вопрос, имхо, сформулирован очень широко.
Если исходная структура может состоять только из примитивных типов, то решение простое. Строк на 10-12 кода.
Если могут быть сложные и составные типы - то без схемы данных не обойтись.
А вообще зачем генерить и читать XML произвольной структуры? Может быть у Вашей задачи имеется более простое решение?
14. ZMGMSC 73 11.10.18 13:01 Сейчас в теме
Если бы все было просто :)
хочется упростить компановку выходного файла
и ускорить разработку.

Все ошибки xml меня сильно достают.

тем более ответ от сервисов приходит скудный.
15. Ditron 186 11.10.18 14:22 Сейчас в теме
(14) если вы используете чьи-то сервисы, без схем или пакетов не обойтись, любой XML подразумевает точную схему, более того, у большинства сервисов даже чувствительность к регистру имен тегов присутствует. По возможности JSON, там вообще все просто, встроенные в платформу механизмы преобразования в структуру и обратно
16. Ditron 186 11.10.18 14:23 Сейчас в теме
(15)но в JSON нет пространства имен, так что все ручками...
17. Green2 29 12.10.18 10:10 Сейчас в теме
(14)Может вам стоит нарисовать что вы имеете на входе и что вы должны получить на выходе.
Если у вас нет схемы, то советую взяться за ручку.
18. ZMGMSC 73 12.10.18 13:00 Сейчас в теме +5 $m
Придется взять учебник по XML
чтобы было понимание.
Я понял одно - готовое решение тут не возможно.
19. Infector 201 12.10.18 22:26 Сейчас в теме
Делал что-то похожее, но с соответствиями. Структура не подошла из-за того, что клиенты задвинули экзотический тэг, который для ключа структуры не годится.
20. Infector 201 13.10.18 15:22 Сейчас в теме
(19)Добрался таки до места размещения сей функции
Функция ЗаписатьСоответствие_в_XML(Соответствие, ЗаписьXML, Атрибуты = Ложь)
	
	ПорядокСтр = Соответствие.Получить("ПорядокТэгов");
		
	Если ПорядокСтр = Неопределено Тогда
		МассивПорядок = Новый Массив;
		
		Для Каждого Тэг Из Соответствие Цикл
			МассивПорядок.Добавить(Тэг.Ключ);	
		КонецЦикла;	
		
	Иначе	
		ПорядокСтр = СтрЗаменить(ПорядокСтр, Символы.ПС, "");
		ПорядокСтр = СтрЗаменить(ПорядокСтр, " ", "");

		МассивПорядок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПорядокСтр, ",");
	КонецЕсли;	
	
	Для Каждого Ключ Из МассивПорядок Цикл
		
		Значение 	= Соответствие.Получить(Ключ);
		
		Если ТипЗнч(Ключ) <> Тип("Строка") Тогда
			Сообщить("Ошибка. Передан элемент с нетекстовым ключом!");
			Продолжить;
		КонецЕсли;	
		
		Если Ключ = "Атрибуты" ИЛИ  Ключ = "Значение" Тогда
			Продолжить;
		КонецЕсли;	
									
		Если ТипЗнч(Значение) = Тип("Массив") Тогда
			
			ЗаписьXML.ЗаписатьНачалоЭлемента(Ключ); //Группа записей
			Для Сч = 0 По Значение.Количество()-1 Цикл			
				Элем = Значение[Сч];
				//ДокXML.ЗаписатьНачалоЭлемента(Ключ); //Запись
				ЗаписатьСоответствие_в_XML(Элем, ЗаписьXML);
				//ДокXML.ЗаписатьКонецЭлемента(); //Запись 
			КонецЦикла;	
			ЗаписьXML.ЗаписатьКонецЭлемента(); //Группа записей 				
		ИначеЕсли ТипЗнч(Значение) = Тип("Соответствие") Тогда
					
			ВложенныеАтрибуты = Значение.Получить("Атрибуты");
			ВложенноеЗначение = Значение.Получить("Значение");
					
			Если ВложенноеЗначение <> Неопределено Тогда
				Если ТипЗнч(ВложенноеЗначение) = Тип("Соответствие") Тогда
					ЗаписьXML.ЗаписатьНачалоЭлемента(Ключ);
					
					Если ВложенныеАтрибуты <> Неопределено Тогда
						ЗаписатьСоответствие_в_XML(ВложенныеАтрибуты, ЗаписьXML, Истина);	
					КонецЕсли;
					
					ЗаписатьСоответствие_в_XML(ВложенноеЗначение, ЗаписьXML);
					ЗаписьXML.ЗаписатьКонецЭлемента();
					Продолжить;
				Иначе
					ЗаписьXML.ЗаписатьНачалоЭлемента(Ключ);

					Если ВложенныеАтрибуты <> Неопределено Тогда
						ЗаписатьСоответствие_в_XML(ВложенныеАтрибуты, ЗаписьXML, Истина);	
					КонецЕсли;

					ЗаписьXML.ЗаписатьБезОбработки(Строка(ВложенноеЗначение));		
					ЗаписьXML.ЗаписатьКонецЭлемента();
			
				КонецЕсли;
			Иначе	
				ЗаписьXML.ЗаписатьНачалоЭлемента(Ключ);

				Если ВложенныеАтрибуты <> Неопределено Тогда
					ЗаписатьСоответствие_в_XML(ВложенныеАтрибуты, ЗаписьXML, Истина);	
				КонецЕсли;	
				
				ЗаписатьСоответствие_в_XML(Значение, ЗаписьXML);
				ЗаписьXML.ЗаписатьКонецЭлемента();
			КонецЕсли;	
		
		ИначеЕсли Атрибуты Тогда
			//Если ЗначениеЗаполнено(Значение) И ТипЗнч(Значение) = Тип("Строка") Тогда
			Если ЗначениеЗаполнено(Значение) Тогда
				Если ТипЗнч(Значение) = Тип("Дата") Тогда
					Значение = Формат(Значение, "ДФ=yyyy-MM-dd");
				ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
					Значение = Строка(Число(Значение));
				КонецЕсли; 
				ЗаписьXML.ЗаписатьАтрибут(Ключ,"", Значение);	
			Конецесли;
		Иначе	
			Если ЗначениеЗаполнено(Значение) Тогда
				Если ТипЗнч(Значение) = Тип("Дата") Тогда
					Значение = Формат(Значение, "ДФ=yyyy-MM-dd");
				ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
					Значение = Строка(Число(Значение));
				КонецЕсли; 
				ЗаписатьXML(ЗаписьXML, Значение, Ключ);	
			КонецЕсли;
		КонецЕсли;	
		
	КонецЦикла;	//Для Каждого Тэг Из Соответствие Цикл
	
КонецФункции
Показать
user712340_lost-s0u1; native-api; Drizer2000; KroVladS; HAMAZ; nayaru1; +6 Ответить
23. пользователь 21.11.23 12:58
Сообщение было скрыто модератором.
...
24. Sergey_Borisovi4 95 19.04.24 15:29 Сейчас в теме
Для формирования XML с такой структурой (без атрибутов):

<RequestDS>
	<Request>
		<Command>getinfo</Command>
		<Version>1</Version>
		<Certificate>4803FECF75257F2E9</Certificate>
		<POSCode>45</POSCode>
	</Request>
	<Card>
		<CardNumber>4000000220013446</CardNumber>
		<Flags>0</Flags>
	</Card>
	<Card>
		<CardNumber>4000000220013445</CardNumber>
		<Flags>3</Flags>
	</Card>
</RequestDS>
Показать


И обратного преобразования в структуру можно использовать следующие функции:

Функция СтруктураВXML(Структура, Подструктура = Ложь, Запись = Неопределено)
	
	Если Не Подструктура Тогда
		Запись = Новый ЗаписьXML();
		Запись.УстановитьСтроку();
	КонецЕсли;
	
	Для Каждого КлючЗначение Из Структура Цикл
		
		Запись.ЗаписатьНачалоЭлемента(КлючЗначение.Ключ);
		
		Если ЗначениеЗаполнено(КлючЗначение.Значение) И ТипЗнч(КлючЗначение.Значение) <> Тип("Структура") Тогда
			Запись.ЗаписатьТекст(Строка(КлючЗначение.Значение));
		ИначеЕсли ТипЗнч(КлючЗначение.Значение) = Тип("Структура") Тогда
			СтруктураВXML(КлючЗначение.Значение, Истина, Запись)
		КонецЕсли;
		
		Запись.ЗаписатьКонецЭлемента();
		
	КонецЦикла;
	
	Если Не Подструктура Тогда
		Возврат Запись.Закрыть();
	КонецЕсли;
	
КонецФункции

Функция XMLВСтруктуру(ТекстXML = Неопределено, ДокументDOM = Неопределено, СтруктураРезультат = Неопределено)
	
	Если ТекстXML <> Неопределено Тогда
		
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.УстановитьСтроку(ТекстXML);
		
		ПостроительDOM = Новый ПостроительDOM;
		ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
		
		СтруктураРезультат = Новый Структура;
		
	КонецЕсли;
	
	Для Каждого Элемент Из ДокументDOM.ДочерниеУзлы Цикл
		
		Если ТипЗнч(Элемент.ПервыйДочерний) = Тип("ТекстDOM") Тогда
			СтруктураРезультат.Вставить(Элемент.ИмяУзла, Элемент.ПервыйДочерний.Данные);
		ИначеЕсли ТипЗнч(Элемент.ПервыйДочерний) = Тип("ЭлементDOM") Тогда
			НовоеЗначениеСтруктура = Новый Структура;
			СтруктураРезультат.Вставить(Элемент.ИмяУзла, НовоеЗначениеСтруктура);
			XMLВСтруктуру(, Элемент, НовоеЗначениеСтруктура);
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат СтруктураРезультат;
	
КонецФункции
Показать


Передавать надо только первый параметр (структуру или текст XML соответственно).
malenushka1; sergey82vladik; native-api; nowarro; +4 Ответить
26. native-api 03.05.24 17:31 Сейчас в теме
(24) Как вы в вашем примере сделаете 2 тега <Card>? В структуре не может быть одинаковых ключей.
27. native-api 20.06.24 15:41 Сейчас в теме
Решил похожую задачу (в моем случае нужна была только выгрузка в XML с заданной схемой).

Ключевые экспериментальные факты:

* в 1С не предполагается создание (и, соответственно, автоматизированная сериализация) собственных временных структур данных. Данные предполагается хранить в базе и выбирать запросами.
* для XML-сериализации недостаточно просто самих данных и их структуры. Нужны дополнительные сведения:
* что вставлять в теги ("элементы" в терминологии XML), а что в атрибуты
* названия тегов и атрибутов
* названия типов для значений примитивных типов, отличающихся от строки, если далее предполагается десериализовать сохраненное значение в этот же тип согласно стандарту XML (в XML все значения представляются как строки, но стандарт XML предусматривает стандартные строковые представления для ряда примитивных типов)
* неймспейсы (пространства имен) (служат для однозначного различия XML разного назначения, использующих одинаковые имена тегов; представляются в виде URI -- строки, по формату аналогичной URL, но не обязанной указывать на что-либо существующее на веб-сайте. 1С в обязательном порядке требует указать такой URI для своего пакета XDTO в конфигурации (см. ниже))
* Поэтому все просьбы на формуах "дайте мне функцию, которая переводит любую структуру в XML и обратно", обречены на провал: функции нужно много дополнительной информации, помимо самих данных, чтобы это сделать
* в C# эту дополнительную информацию можно указывать в аннотациях к классам и их полям (там, где она не совпадает с умолчаниями). В 1С ничего подобного нет, и ими были придуманы т.н. "объекты XDTO" -- дополнительные, независимые от прикладных объектов объекты и их классы, повторяющие структуру данных, как ее нужно представить в XML, и вручную наполняемые нужными данными, и содержащие также эти дополнительные сведения.
* Структуру объектов XDTO и заполнение их данными предполагается создавать вручную, обходя в цикле результаты запроса, и затем уже можно сериализовть результат в XML, т.к. теперь сведений для этого достаточно.
* Для прикладных объектов платформы предусмотрены сериализаторы (конверторы) объекта в объект XDTO, с жестко заданной XML-схемой (включая неймспейсы c "1c.ru"), но для выгрузки в XML со своей схемой они не годятся (и они выгружают только весь прикладной объект целиком). Так что нужно их игнорировать и получать и перекладывать в объекты XDTO нужную информацию вручную.
* Создавать объекты XDTO предполагается по шаблонам, хранящимся в т.н. "пакетах XDTO" в конфигурации.
(Можно эти "шаблоны" создавать и программно, рассыпая по коду доп. информацию для сериализации -- но зачем, если можно сконцентрировать ее в одном, специально предназначенном для этого месте?)
* Редактор пакета XDTO -- то еще минное поле. Там можно вставлять разные сущности друг в друга и задавать свойства как угодно, но только определенные их комбинации юзабельны, поди пойми, какие. БОльшуя часть свойств также задавать не обязательно -- опять же, поди пойми. Я в результате создал пакет импортом XML-схемы с последующей правкой, схему сгенерировал по образцу XML-файла сторонними средствами. Получившаяся структура -- см. скриншот.
* поля без плюсов -- простых типов (строки, числа, даты), с плюсами -- составных
* под составным полем идет определение его типа (без имени типа, т.е. безымянный тип)
* массивы и необязательные поля реализуются манипуляцией свойствами "минимальное к-во" и "максимальное к-во". Для массива "максимальное к-во" = -1
* свойство уровня пакета соответствует корневому тегу XML
* Имя пакета нигде не используется. "ФабрикаXDTO.Пакеты.Получить" ищет по URI.
* При создании объекта его поля простых типов инициализируются сами -- уже можно заполнять значениями, -- поля же сложных типов -- нет, их нужно добавлять вручную -- за исключением массивов. Однако, элементы массива также нужно создавать и добавлять в массив вручную.
* Объект XDTO не хранит свое имя тега (только дочерние), и объекта "корень дерева" не предусмотрено. Так что при сериализации имя корневого тега нужно передавать снова, вручную, хотя мы вроде как его уже передавали. Впрочем, в ряде других распространенных XML-библиотек та же фигня.
* Интерфейс работы со всем этим явно делался не для людей. Как следствие -- в очередной раз нужно писать свою библиотеку с более удобным интерфейсом.

Я для задачи только выгрузки написал следующие функции, частично на основе функций из ссылок в (9).
Поддержку сторонних фабрик убрал, т.к., согласно выше, для неспециальных задач это -- от лукавого.

// ОбщийМодуль.XDTO

// Создать объект/значение XDTO для свойства пакета/объекта XDTO
// https://forum.infostart.ru/forum9/topic133583/
//
// Параметры:
//  Владелец		 - ПакетXDTO, ОбъектXDTO, ТипОбъектаXDTO
//  Имя				 - Строка
//  ЗначениеСвойства - Произвольный
// 
// Возвращаемое значение:
//   ЗначениеXDTO, ОбъектXDTO
//
Функция СоздатьЭлементXDTO(Знач Владелец, Знач Имя, Знач ЗначениеСвойства = "") Экспорт
    Если ТипЗнч(Владелец) = Тип("ПакетXDTO") Тогда
        СвойствоXDTO = Владелец.КорневыеСвойства.Получить(Имя);
    Иначе
        СвойствоXDTO = Владелец.Свойства().Получить(Имя);
    КонецЕсли;
    ТипXDTO = СвойствоXDTO.Тип;
    Если ТипЗнч(ТипXDTO) = Тип("ТипЗначенияXDTO") Тогда
        ОбъектXDTO = ФабрикаXDTO.Создать(ТипXDTO, ЗначениеСвойства);
    Иначе
        ОбъектXDTO = ФабрикаXDTO.Создать(ТипXDTO);
    КонецЕсли;
    Возврат ОбъектXDTO;
КонецФункции

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

// Создать и добавить новый элемент в свойство-список XDTO владельца
//
// Параметры:
//  Владелец		 - ПакетXDTO, ОбъектXDTO
//  Имя				 - Строка, имя свойства типа СписокXDTO
//  ЗначениеСвойства - Произвольный
//
// Возвращаемое значение:
//   ЗначениеXDTO, ОбъектXDTO - созданный объект
//
Функция СоздатьДобавитьЭлементСпискаXDTO(Знач Владелец, Знач Имя, Знач ЗначениеСвойства = "") Экспорт
	Элемент = СоздатьЭлементXDTO(Владелец, Имя, ЗначениеСвойства);
	Владелец[Имя].Добавить(Элемент);
	Возврат Элемент;
КонецФункции


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


Использование:

AccAreaData = XDTO.СоздатьЭлементXDTO(ФабрикаXDTO.Пакеты.Получить("http://<...>.ru/<...>"),"AccAreaData");

// заполнение простых полей
// не обязательно заполняем все
AccAreaData.OrgShortName = ДанныеОбОрганизации.НаименованиеСокращенное;
AccAreaData.OrgLongName = ДанныеОбОрганизации.НаименованиеПолное;
AccAreaData.OrgINN = ДанныеОбОрганизации.ИНН;
<...>	
Запрос = Новый Запрос;
<...>
Результат = Запрос.Выполнить();

// заполнение сложного поля
Data = XDTO.СоздатьУстановитьСвойствоXDTO(AccAreaData,"Data");
	
ВыборкаМест = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаМест.Следующий() Цикл
	AccAreaAddress = XDTO.СоздатьДобавитьЭлементСпискаXDTO(Data,"AccAreaAddress");
	AccAreaAddress.Address = ВыборкаМест.МестоОсуществленияДеятельности;
		
	ВыборкаИзмерений = ВыборкаМест.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока ВыборкаИзмерений.Следующий() Цикл
		MeasureType = XDTO.СоздатьДобавитьЭлементСпискаXDTO(AccAreaAddress,"MeasureType");
		MeasureType.Name = <...>;
			
		Выборка = ВыборкаИзмерений.Выбрать();
		Пока Выборка.Следующий() Цикл	    
			AccAreaLine = XDTO.СоздатьДобавитьЭлементСпискаXDTO(MeasureType,"AccAreaLine");
				
			AccAreaLine.<...> = <...>
			<...>
		КонецЦикла;
	КонецЦикла;
КонецЦикла;

ТекстXML = XDTO.СериализоватьВСтроку(AccAreaData, "AccAreaData");
Показать
Прикрепленные файлы:
Serg2000mr; +1 Ответить
Оставьте свое сообщение

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