Преобразование XML файла в переменную структура, Загрузка в дерево значений

14.09.19

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Обработка, демонстрирующая работу процедур и функций по преобразованию XML файла в дерево значений, а также в переменную типа структура.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Преобразование XML файла в переменную структура, Загрузка в дерево значений.:
.epf 10,38Kb
46
46 Скачать (1 SM) Купить за 1 850 руб.

Возникала необходимость чтения  обработки XML файлов неизвестной структуры, вот написал процедуры, которые преобразуют XML файл любой в дерево значений, а также считывают и преобразуют данные в переменную типа структура причем типы переменных преобразуются в соответствии с требованиями, Дата, Булево, Число, Строка

 

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

 

Возможно, что кому нибудь эти данные будут интересны

Тестировалась на платформе 1С:Предприятие 8.3 (8.3.15).

Конфигурация 1С не имеет значения.

Конвертация преобразование XML в дерево значений переменную структура структурированный массив

См. также

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.21.x).

35000 руб.

23.07.2020    57170    267    75    

222

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    146608    861    300    

443

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    74889    201    156    

140

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.244.x) и БП 3.0 (3.0.172.x). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    26788    191    56    

146

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    38833    108    71    

103

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16260 руб.

18.02.2016    189744    618    534    

537

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 22.04.2025, версия 9.10 - 10.0)

18000 руб.

20.11.2015    160886    397    386    

524
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nporrep 50 14.09.19 13:34 Сейчас в теме
В типовых, xml2деревоЗначений:
СтрокаXML= ОбменСКонтрагентамиСлужебный.ПрочитатьТекстИзФайла(ИмяФайла, , Истина);
ДеревоXML = ОбменСКонтрагентамиСлужебный.ЗагрузитьСтрокуXMLВДеревоЗначений(СтрокаXML);
brr; Andreeei; awk; +3 Ответить
2. vik070777 275 14.09.19 14:15 Сейчас в теме
Дерево значений это хорошо, но у меня основная цель стояла создать переменную структуры а не дерево значений, а так спасибо!
3. rabid_otter 134 16.09.19 11:42 Сейчас в теме
(2) создание структуры тоже есть. плохо искали
10. John_d 6002 17.09.19 10:11 Сейчас в теме
(2) Если интересно преобразую из произвольного шаблона в виде дерева значения в xml.
https://infostart.ru/public/964582/
4. rabid_otter 134 16.09.19 11:46 Сейчас в теме
модуль ИнтеграцияВЕТИС, 1С:ERP Управление предприятием 2 (2.4.9.82)

// Преобразует объект XDTO в структуру
//
// Параметры:
// ОбъектXDTO - ОбъектXDTO - Объект XDTO.
//
// Возвращаемое значение:
// Структура - Структура объекта.
//
Функция ОбъектXDTOВСтруктуру(ОбъектXDTO, ПараметрыПреобразования = Неопределено) Экспорт

Структура = Новый Структура;
ТипОбъектаXDTO = ОбъектXDTO.Тип();

Для Каждого Свойство Из ОбъектXDTO.Свойства() Цикл

ИмяСвойства = Свойство.Имя;
ЗначениеСвойства = ОбъектXDTO[ИмяСвойства];

Если ТипЗнч(ЗначениеСвойства) = Тип("ОбъектXDTO") Тогда

Структура.Вставить(ИмяСвойства, ОбъектXDTOВСтруктуру(ЗначениеСвойства, ПараметрыПреобразования));

ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("СписокXDTO") Тогда

Структура.Вставить(ИмяСвойства, Новый Массив);
Для Индекс = 0 По ЗначениеСвойства.Количество() - 1 Цикл

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

КонецЦикла;

Иначе

Структура.Вставить(ИмяСвойства, ЗначениеСвойства);

Если ПараметрыПреобразования <> Неопределено
И ПараметрыПреобразования.НайтиИдентификаторы
И Свойство.Тип = ПараметрыПреобразования.ТипUUID Тогда

РезультатПоиска = ПараметрыПреобразования.ТипыИдентификаторов[ТипОбъектаXDTO];
Если РезультатПоиска <> Неопределено
И РезультатПоиска.ИмяПоля = ИмяСвойства Тогда
ПараметрыПреобразования.Идентификаторы[РезультатПоиска.ИмяТаблицы].Вставить(ЗначениеСвойства, РезультатПоиска.ПустоеЗначение);
КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецЦикла;

Возврат Структура;

КонецФункции
5. vik070777 275 16.09.19 12:28 Сейчас в теме
6. starik-2005 3172 16.09.19 18:28 Сейчас в теме
Где-то я это уже видел (даже имена переменных аналогичные) ))))

https://infostart.ru/public/562346/
8. Yashazz 4844 16.09.19 23:18 Сейчас в теме
(6) да всё это баяны чудовищные, самоочевидность же и элементарно всё
7. vik070777 275 16.09.19 18:31 Сейчас в теме
Увы не брал оттуда, тем более у меня перевод в структуру , и вывод в макет не дерева а структуру в группировке
9. Yashazz 4844 16.09.19 23:20 Сейчас в теме
Я такое ещё в 2007 году делал)

А вот интересно, озаботился ли кто-нибудь xslt-преобразованием между хмл и джейсоном, туда и обратно? Тогда можно будет сериализацию и преобразование гонять более просто)
11. starik-2005 3172 17.09.19 20:09 Сейчас в теме
(9)
Я такое ещё в 2007 году делал)
Ну вряд ли через XDTO, а в дерево на паскале я такое еще в 1997 делал )))
12. Yashazz 4844 18.09.19 22:25 Сейчас в теме
(11)
Ну вряд ли через XDTO, а в дерево на паскале я такое еще в 1997 делал )))

Если склероз не изменяет, то на XDTO делал тоже. А насчёт паскаля - ну да, 1995 год, Турбо-Паскаль 5.0, золотая юность)
13. starik-2005 3172 18.09.19 22:29 Сейчас в теме
(12)
1995 год, Турбо-Паскаль 5.0
Это ж уровень 7.7 в 2019-м (ну может быть 8.0) - никакого ООП. Борланд Паскаль 7.0 вышел, если мне не изменяет память, в 92-м. На нем уже по RTM PM 286 можно было писать, была доступна вся память, но адресов переменных можно было выделить только 2^16.
vik070777; +1 Ответить
15. vik070777 275 18.09.19 22:46 Сейчас в теме
(13)
Вы еще Basic вспомните я на нем в начале 90х прогу писал для склада ИСКРА 1030м была 086
16. Yashazz 4844 19.09.19 22:06 Сейчас в теме
(13) Первая ООП появилась в 5.5, а нормальная да, в 7.0, но уж не будем оффтопить)
14. vik070777 275 18.09.19 22:45 Сейчас в теме
Вы еще Basic вспомните я на нем в начале 90х прогу писал для склада ИСКРА 1030м была 086
17. Aleksey81 1191 22.09.19 12:50 Сейчас в теме
Вероятно вы должны были написать еще текст функции _ПолучитьВТипеДанногоЭлемента

Функция _ПолучитьВТипеДанногоЭлемента(Значение)
	
	Если ВРЕГ(СокрЛП(Значение)) = "ДА" 
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ОК"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "YES"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ИСТИНА"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "TRUE" ТОгда
		 Возврат Истина;
	ИначеЕсли ВРЕГ(СокрЛП(Значение)) = "НЕТ" 
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ОТМЕНА"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "NO"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ЛОЖЬ"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "FALSE" ТОгда
		 Возврат ЛОЖЬ;
	КонецЕсли;	 
	Попытка
		 _Значение = стрЗаменить(Значение,",",".");
		 _Значение = стрЗаменить(_Значение,"-",".");
		 Число = Число(Значение);
		 Возврат Число;
	Исключение
	КонецПопытки;
	Попытка
		_Дата = xmlЗначение(тип("дата"), Значение);	
		Возврат _Дата;
	Исключение
	КонецПопытки;
	Возврат Значение;
КонецФункции  //_ПолучитьВТипеДанногоЭлемента
Показать
18. vik070777 275 22.09.19 14:23 Сейчас в теме
(17) Эта из обработки и есть, как бы вопрос преобразования типов понятен был, я старался именно структуру показать. А то что Вы вырезали процедуру и вставили сюда, ну спасибо ))))
19. deutsch2008 07.10.20 12:49 Сейчас в теме
Работает! Спасибо )
1С:Предприятие 8.3 (8.3.15.1565)
BAS ERP
20. пользователь 18.11.20 13:51
Сообщение было скрыто модератором.
...
21. пользователь 18.11.20 14:42
Сообщение было скрыто модератором.
...
Оставьте свое сообщение