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

14.09.19

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

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

Файлы

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

Наименование Скачано Купить файл
Преобразование XML файла в переменную структура, Загрузка в дерево значений.:
.epf 10,38Kb
48 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

 

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

 

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    160738    967    318    

482

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

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 руб.

15.12.2021    34182    259    64    

194

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    188221    359    289    

418

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

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

50600 руб.

21.05.2019    58062    81    131    

73

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

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

58000 руб.

15.04.2019    84025    225    175    

161

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

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62793    82    132    

81

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

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

85400 руб.

05.10.2022    13445    15    8    

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

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

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

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

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