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

14.09.19

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Преобразование XML файла в переменную структура, Загрузка в дерево значений.:
.epf 10,38Kb
42
42 Скачать (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С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

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

45650 руб.

15.04.2019    71294    178    148    

120

SALE! 10%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 руб.

12.06.2017    139764    774    295    

407

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

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

28000 руб.

15.12.2021    22835    152    46    

111

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

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

45650 руб.

24.04.2015    193892    147    242    

278

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10299    11    8    

13

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

Перенос данных из УНФ в УТ 11 | из УНФ в КА 2 | из УНФ в ERP | В продаже с 2019г. | Воспользовались более 39 предприятий! | Предлагаем готовые правила конвертации данных (формат КД 2) для переноса начальных остатков на выбранную дату, а также документов за период и справочной информации | Есть фильтр выгрузки по организациям | Подойдут как для первичного переноса данных из УНФ, так и для регулярного обмена данными | Оперативно обновляем на новые релизы 1С | Постоянно развиваем продукт |

37950 руб.

05.12.2019    43272    43    49    

41

Перенос данных 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, почту.

15300 руб.

18.02.2016    185805    580    509    

519

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

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

43450 руб.

03.12.2020    35887    89    62    

85
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nporrep 50 14.09.19 13:34 Сейчас в теме
В типовых, xml2деревоЗначений:
СтрокаXML= ОбменСКонтрагентамиСлужебный.ПрочитатьТекстИзФайла(ИмяФайла, , Истина);
ДеревоXML = ОбменСКонтрагентамиСлужебный.ЗагрузитьСтрокуXMLВДеревоЗначений(СтрокаXML);
brr; Andreeei; awk; +3 Ответить
2. vik070777 286 14.09.19 14:15 Сейчас в теме
Дерево значений это хорошо, но у меня основная цель стояла создать переменную структуры а не дерево значений, а так спасибо!
3. rabid_otter 134 16.09.19 11:42 Сейчас в теме
(2) создание структуры тоже есть. плохо искали
10. John_d 5868 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 286 16.09.19 12:28 Сейчас в теме
6. starik-2005 3076 16.09.19 18:28 Сейчас в теме
Где-то я это уже видел (даже имена переменных аналогичные) ))))

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

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

Если склероз не изменяет, то на XDTO делал тоже. А насчёт паскаля - ну да, 1995 год, Турбо-Паскаль 5.0, золотая юность)
13. starik-2005 3076 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 286 18.09.19 22:46 Сейчас в теме
(13)
Вы еще Basic вспомните я на нем в начале 90х прогу писал для склада ИСКРА 1030м была 086
16. Yashazz 4774 19.09.19 22:06 Сейчас в теме
(13) Первая ООП появилась в 5.5, а нормальная да, в 7.0, но уж не будем оффтопить)
14. vik070777 286 18.09.19 22:45 Сейчас в теме
Вы еще Basic вспомните я на нем в начале 90х прогу писал для склада ИСКРА 1030м была 086
17. Aleksey81 1183 22.09.19 12:50 Сейчас в теме
Вероятно вы должны были написать еще текст функции _ПолучитьВТипеДанногоЭлемента

Функция _ПолучитьВТипеДанногоЭлемента(Значение)
	
	Если ВРЕГ(СокрЛП(Значение)) = "ДА" 
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ОК"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "YES"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ИСТИНА"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "TRUE" ТОгда
		 Возврат Истина;
	ИначеЕсли ВРЕГ(СокрЛП(Значение)) = "НЕТ" 
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ОТМЕНА"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "NO"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "ЛОЖЬ"
		 ИЛИ ВРЕГ(СокрЛП(Значение)) = "FALSE" ТОгда
		 Возврат ЛОЖЬ;
	КонецЕсли;	 
	Попытка
		 _Значение = стрЗаменить(Значение,",",".");
		 _Значение = стрЗаменить(_Значение,"-",".");
		 Число = Число(Значение);
		 Возврат Число;
	Исключение
	КонецПопытки;
	Попытка
		_Дата = xmlЗначение(тип("дата"), Значение);	
		Возврат _Дата;
	Исключение
	КонецПопытки;
	Возврат Значение;
КонецФункции  //_ПолучитьВТипеДанногоЭлемента
Показать
18. vik070777 286 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение