Стояла задача преобразования дерева значений в структуру. Это нужно для преобразования данных в json и удобного визуального восприятия.
Первый вариант, без промежуточного преобразования в структуру, сразу в json (он не подошел):
ДеревоЗначений = Новый ДеревоЗначений; // Наше дерево
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ДеревоЗначений);
Результат = ЗаписьJSON.Закрыть();
Результат:
{
"#value": {
"column": [
{
"Name": {
"#type": "jxs:string",
"#value": "ИмяФайла"
},
"ValueType": {
"Type": [
"{http://www.w3.org/2001/XMLSchema}string"
],
"StringQualifiers": {
"Length": 0,
"AllowedLength": "Variable"
}
}
},
{
"Name": {
"#type": "jxs:string",
"#value": "ИндексКартинки"
},
"ValueType": {
"Type": [
"{http://www.w3.org/2001/XMLSchema}decimal"
],
"NumberQualifiers": {
"Digits": 10,
"FractionDigits": 0,
"AllowedSign": "Nonnegative"
}
}
},
{
"Name": {
"#type": "jxs:string",
"#value": "ПолноеИмя"
},
"ValueType": {
"Type": [
"{http://www.w3.org/2001/XMLSchema}string"
],
"StringQualifiers": {
"Length": 0,
"AllowedLength": "Variable"
}
}
}
],
"row": [
{
"row": [
{
"Value": [
"Строка 2",
0,
"Имя 1"
]
},
{
"Value": [
"Строка 3",
0,
"Имя 2"
]
}
],
"Value": [
"Строка 1",
0,
""
]
},
{
"Value": [
"Строка 5",
0,
""
]
}
]
}
}
Отказался от данного варианта, т.к. сложно воспринимать текст файл и работать с ним в других системах.
Второй вариант написан самостоятельно:
// Произвольная функция
Функция ОсновнаяФункция(ДеревоЗначений)
// ДеревоЗначений - ваше значение тип "ДеревоЗначений" для преобразования
СтруктураДерева = Новый Структура();
ДеревоВСтруктуру(ДеревоЗначений.Строки, СтруктураДерева);
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
Результат = ЗаписьJSON.Закрыть();
КонецФункции
// Функция преобразования
Функция ДеревоВСтруктуру(СтрокиДерева, СтруктураДерева)
МассивСтрок = Новый Массив();
Для Каждого Строка Из СтрокиДерева Цикл
ДанныеСтроки = СтрокаТаблицыЗначенийВСтруктуру(Строка);
ДанныеСтроки.Вставить("Строки", Новый Структура);
ДеревоВСтруктуру(Строка.Строки, ДанныеСтроки);
МассивСтрок.Добавить(ДанныеСтроки);
КонецЦикла;
СтруктураДерева.Вставить("Строки", МассивСтрок);
КонецФункции
// Взято из БСП (вынес отдельно)
Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт
Структура = Новый Структура;
Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл
Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]);
КонецЦикла;
Возврат Структура;
КонецФункции
Результат:
{
"Строки": [
{
"ИмяФайла": "Строка 1",
"ИндексКартинки": 0,
"ПолноеИмя": "",
"Строки": [
{
"ИмяФайла": "Строка 2",
"ИндексКартинки": 0,
"ПолноеИмя": "Имя 1",
"Строки": []
},
{
"ИмяФайла": "Строка 3",
"ИндексКартинки": 0,
"ПолноеИмя": "Имя 2",
"Строки": []
}
]
},
{
"ИмяФайла": "Строка 5",
"ИндексКартинки": 0,
"ПолноеИмя": "",
"Строки": []
}
]
}
Ограничения: работает с простыми типами.
Платформа 8.3.14.
Позже нашел разработку, но на нее нет ссылок при запросе "Дерево в структуру":