Дерево в JSON

1. mirco 74 30.01.20 16:51 Сейчас в теме
Подскажите что не так делаю. ?
Задача : выбрать иерархический справочник с неопределенной глубиной и засунуть в JSON.

Дерево = ДеревоТерриторий(); // получаю ДеревоЗначений

ДеревоТерриторийJSON = ДеревоТерриторийВJSON(Дерево); - Пытаюсь в json


Функция ДеревоТерриторийВJSON(Дерево) Экспорт
	
	ЗаписьJSON = Новый ЗаписьJSON;
	
	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,Символы.Таб);
	
	ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);	
	
	ЗаписьJSON.ЗаписатьНачалоМассива();
	
	ОбходДереваТерриторий(Дерево.Строки,ЗаписьJSON);
	
	ЗаписьJSON.ЗаписатьКонецМассива();
	
	Возврат  ЗаписьJSON.Закрыть();
	
КонецФункции


Процедура ОбходДереваТерриторий(СтрокиДерева,ЗаписьJSON)	
	
	
	Для каждого СтрокаД  Из СтрокиДерева Цикл
		
		ЗаписьJSON.ЗаписатьНачалоОбъекта();
		ЗаписьJSON.ЗаписатьИмяСвойства("Территория");
		ЗаписьJSON.ЗаписатьЗначение(СтрокаД.Территория);
		ЗаписьJSON.ЗаписатьИмяСвойства("ПредставлениеПоиска");
		ЗаписьJSON.ЗаписатьЗначение(СтрокаД.ПредставлениеПоиска);
		ЗаписьJSON.ЗаписатьИмяСвойства("Идентификатор");
		ЗаписьJSON.ЗаписатьЗначение(СтрокаД.Идентификатор); 
				
		//Строки
		ЗаписьJSON.ЗаписатьИмяСвойства("Строки"); 		
		ЗаписьМассиваПодчиненных(СтрокаД.Строки,ЗаписьJSON); // ТУТ ОШИБКА : Неверный порядок записи json
						
		
		ЗаписьJSON.ЗаписатьКонецОбъекта();
		
	КонецЦикла; 
	
	
	
КонецПроцедуры

Функция ЗаписьМассиваПодчиненных(СтрокиДерева,ЗаписьJSON)
	
	Если СтрокиДерева.Количество() Тогда
		
		
		ЗаписьJSON.ЗаписатьНачалоМассива();
		
		Для каждого СтрокаД  Из СтрокиДерева Цикл 		
			
			ОбходДереваТерриторий(СтрокаД.Строки,ЗаписьJSON); // реккурсия
			
		КонецЦикла;
		
		ЗаписьJSON.ЗаписатьКонецМассива();
		
	КонецЕсли;
	
КонецФункции



Процедура получения "дерева значений" из справочника


Функция ДеревоТерриторий() Экспорт
	
	Дерево = Новый ДеревоЗначений;
	Дерево.Колонки.Добавить("Территория");
	Дерево.Колонки.Добавить("ПредставлениеПоиска");
	//Дерево.Колонки.Добавить("Наименование");
	Дерево.Колонки.Добавить("Идентификатор");
	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТСК_Территории.Ссылка КАК Территория,
	|	ТСК_Территории.ПредставлениеПоиска КАК ПредставлениеПоиска,
	|	ТСК_Территории.Наименование КАК Наименование
	|ИЗ
	|	Справочник.ТСК_Территории КАК ТСК_Территории
	|ГДЕ
	|	НЕ ТСК_Территории.ЭтоГруппа
	|ИТОГИ ПО
	|	Территория ТОЛЬКО ИЕРАРХИЯ
	|АВТОУПОРЯДОЧИВАНИЕ";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка =  РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	
	ОбходДереваЗапроса(Выборка,Дерево);
	
	Возврат  Дерево;
	
КонецФункции //ДеревоТерриторий



Процедура ОбходДереваЗапроса(ИерархическаяВыборка,Дерево)
	
	Пока ИерархическаяВыборка.Следующий() Цикл
		
		НоваяСтрока = Дерево.Строки.Добавить();
		НоваяСтрока.Территория = ИерархическаяВыборка.Наименование;
		НоваяСтрока.ПредставлениеПоиска = ИерархическаяВыборка.ПредставлениеПоиска;
		НоваяСтрока.Идентификатор = XMLСтрока(ИерархическаяВыборка.Территория);
		
		СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;
		
		Если ИерархическаяВыборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда		
			
			ДочерняяВыборка = ИерархическаяВыборка.Выбрать(СпособВыборки, ИерархическаяВыборка.Группировка());  			
			
		Иначе
			
			ДочерняяВыборка = ИерархическаяВыборка.Выбрать(СпособВыборки);
			
			
		КонецЕсли;
		
		ОбходДереваЗапроса(ДочерняяВыборка,НоваяСтрока);		
		
	КонецЦикла;
	
	
КонецПроцедуры

Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 30.01.20 17:41 Сейчас в теме
ну, видимо свойство "Строки" не может быть массивом
3. SyachinS 04.02.20 13:26 Сейчас в теме
Запишите все в массивы, массив в массиве и т.д., потом воспользуйтесь стандартным методом ЗаписатьJSON.
Оставьте свое сообщение

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