|
Рекурсия в функции 1С, ошибка | ☑ | ||
---|---|---|---|---|
0
JamesStep
01.03.23
✎
10:17
|
Добрый день, подскажите, почему рекурсия зацикливается и не возвращает значение в переменную? Задача следующая, необходимо выгрузить справочник с иерархией групп и элементов, соблюдая иерархию в JSON. Входным параметром будет папка, нужно выгрузить все входящее в нее. Помогите, который день голову ломаю.
&НаКлиенте Процедура Выгрузить(Команда) Группа = Новый Структура(); Счетчик = 0; Данные = ПолучитьГруппы(Реквизит1, Группа, Счетчик); КонецПроцедуры Функция ПолучитьГруппы(Номенклатура, Группа, Счетчик) Счетчик = Счетчик + 1; Услуги = Новый Массив(); ТекущиеГруппы = Новый Массив(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураСсылка.Ссылка КАК Ссылка, | НоменклатураСсылка.ЭтоГруппа КАК ЭтоГруппа |ИЗ | Справочник.Номенклатура КАК НоменклатураСсылка |ГДЕ | НоменклатураСсылка.Родитель = &Номенклатура | И НоменклатураСсылка.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ЭтоГруппа = Истина Тогда ТекущиеГруппы.Добавить(ВыборкаДетальныеЗаписи.Ссылка); Иначе Услуги.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЕсли; КонецЦикла; Группа.Вставить("Group", Номенклатура); Группа.Вставить("Nomencl", Услуги); Если ТекущиеГруппы.Количество() > 0 Тогда Для Каждого Эл Из ТекущиеГруппы Цикл Группа.Вставить("Inc", ПолучитьГруппы(Эл, Группа, Счетчик)); КонецЦикла Иначе Возврат Группа; КонецЕсли; ЗаписьJSON = Новый ЗаписьJSON; ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина); ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписатьJSON(ЗаписьJSON, Группа); СтрокаЗаписьJSON = ЗаписьJSON.Закрыть(); Возврат Группа; КонецФункции |
|||
1
sikuda
01.03.23
✎
10:21
|
(0) Вместо запросов в цикле предлагаете запросы в рекурсии?
|
|||
2
JamesStep
01.03.23
✎
10:36
|
(1) Не так все просто, используя рекурсию в Поле "Inc" я при закрытии стэка вставляю все входящие элементы в эту группу
|
|||
3
unenu
01.03.23
✎
10:55
|
(0) делайте выгрузку за два шага: сначала выгружаем группы, а на втором шаге элементы.
сушить мозг с выгрузкой иерархической структуры в один проход такое себе удовольствие |
|||
4
JamesStep
01.03.23
✎
10:59
|
Какой тип данных лучше использовать для хранения групп? (3)
|
|||
5
unenu
01.03.23
✎
11:03
|
(4) ну два массива можно сделать
в первом массиве структуры групп во втором элементов при загруке пишите сначала группы потом элементы и плевать что-там с иерерхией - сама ляжет по уидам. |
|||
6
НафНаф
01.03.23
✎
11:11
|
(0) зацикливания рекурсии я тут не вижу, но данные сами себя знатно перетирают, это да
|
|||
7
brainguard
01.03.23
✎
11:14
|
(0) Один запрос к справочнику с использованием конструкции ИТОГИ
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |