Подскажите что не так делаю. ?
Задача : выбрать иерархический справочник с неопределенной глубиной и засунуть в 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.ЗаписатьКонецОбъекта();
КонецЦикла;
КонецПроцедуры
Функция ЗаписьМассиваПодчиненных(СтрокиДерева,ЗаписьJSON)
Если СтрокиДерева.Количество() Тогда
ЗаписьJSON.ЗаписатьНачалоМассива();
Для каждого СтрокаД Из СтрокиДерева Цикл
ОбходДереваТерриторий(СтрокаД.Строки,ЗаписьJSON); // реккурсия
КонецЦикла;
ЗаписьJSON.ЗаписатьКонецМассива();
КонецЕсли;
КонецФункции
Процедура получения "дерева значений" из справочника
Функция ДеревоТерриторий() Экспорт
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Территория");
Дерево.Колонки.Добавить("ПредставлениеПоиска");
//Дерево.Колонки.Добавить("Наименование");
Дерево.Колонки.Добавить("Идентификатор");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТСК_Территории.Ссылка КАК Территория,
| ТСК_Территории.ПредставлениеПоиска КАК ПредставлениеПоиска,
| ТСК_Территории.Наименование КАК Наименование
|ИЗ
| Справочник.ТСК_Территории КАК ТСК_Территории
|ГДЕ
| НЕ ТСК_Территории.ЭтоГруппа
|ИТОГИ ПО
| Территория ТОЛЬКО ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ОбходДереваЗапроса(Выборка,Дерево);
Возврат Дерево;
КонецФункции //ДеревоТерриторий
Процедура ОбходДереваЗапроса(ИерархическаяВыборка,Дерево)
Пока ИерархическаяВыборка.Следующий() Цикл
НоваяСтрока = Дерево.Строки.Добавить();
НоваяСтрока.Территория = ИерархическаяВыборка.Наименование;
НоваяСтрока.ПредставлениеПоиска = ИерархическаяВыборка.ПредставлениеПоиска;
НоваяСтрока.Идентификатор = XMLСтрока(ИерархическаяВыборка.Территория);
СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;
Если ИерархическаяВыборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
ДочерняяВыборка = ИерархическаяВыборка.Выбрать(СпособВыборки, ИерархическаяВыборка.Группировка());
Иначе
ДочерняяВыборка = ИерархическаяВыборка.Выбрать(СпособВыборки);
КонецЕсли;
ОбходДереваЗапроса(ДочерняяВыборка,НоваяСтрока);
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Пример связи 1С и мессенджера Telegram. Получение данных из 1С запросом из Telegram
- Парсер JSON (Штатные средства 1С 8.3.6)
- Выгрузка данных из дерева значений 1С в формат JSON иерархический список (Сериализация ДереваЗначений в JSON)
- Преобразование дерева значений в структуру
- JSON -> Дерево значений
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот