|
Синхронизация веток дерева значений СвинТуз, Zamestas, SleepyHead, maxab72, АгентБезопаснойНацио, fyn, Климов Сергей, Волшебник, Мультук, Хряк, Stepashkin, dedmoroz777, 2S, sapravka, petr_ivanov, Prog_man, orakool, kpe4et178, ixijixi, Fedor-1971, Ненавижу 1С, программистище, Mellon, Admin_Net_1C, MWWRuza, d4rkmesa, DemonShinji2, Indian, Crusher, formista2000
| ☑ | ||
---|---|---|---|---|
0
ixijixi
06.12.24
✎
10:16
|
Коллеги, привет.
Есть дерево значений с заранее известной структурой (Категория/ВидПриемаПищи/Блюдо), но неизвестным количеством подчиненных веток. Требуется сделать так, чтобы на каждом уровне вложенности (кроме верхнего) количество подчиненных веток было одинаковым. Например, в категориях А и Б нужно, чтобы к-во приемов пищи было одинаковым. К примеру в категории А по факту был только завтрак+обед, в Б -завтрак+обед+ужин. Надо сделать так, чтобы в категории А было 3 подчиненных ветки. То же касается и следующего уровня вложенности. В результате параллельные ветки категорий должны стать одинаковыми по количеству веток.
|
|||
1
maxab72
06.12.24
✎
10:32
|
и в чем конкретно проблема?
|
|||
2
ixijixi
06.12.24
✎
10:33
|
Проблема в том, что обходя рекурсивно дерево, я натыкаюсь на то, что повторно обхожу ветки и начинаю сравнивать то, что уже сравнивал, уходя в бесконечный цикл
|
|||
3
maxab72
06.12.24
✎
10:36
|
Обходи дважды. За первый обход определи максимальное число подчиненных элементов на каждом уровне вложенности, а за второй сверяй с полученной таблицей максимального числа элементов на уровне.
|
|||
4
ixijixi
06.12.24
✎
10:45
|
Обходя 1-й раз не будет доступа к результатам 2-го обхода, и наоборот
|
|||
5
maxab72
06.12.24
✎
11:23
|
(4) Почему?!!
|
|||
6
Мультук
06.12.24
✎
11:24
|
(0)
Представим, что это отчёт на СКД. Отчёт один, данные одни (общие для всех категорй, например А, Б, В), но при выводе отчета по Категории А мы скрываем текст для всех прочих категорий. Например по некому признаку (ресурсу) Концепт понятен ? Создаём одно общее дерево, затем рекурсивным алгоритмом меняем текст/цвет шрифта/флаги в "чужих категориях" |
|||
7
ixijixi
06.12.24
✎
12:00
|
Всё хорошо, но это не СКД)
|
|||
8
ixijixi
06.12.24
✎
12:18
|
Сделал в два прохода дерева.
1. В первый проход получил соответствие количеств Ключ Значение Обед 5 Завтрак 4 "ПриемовПищиВКатегории" 2 2. Во второй проход добил ветки до нужного количества Количество = Новый Соответствие; Для Каждого Категория Из СтрокаОрганизации.Строки Цикл Ключ = "ПриемовПищиВКатегории"; ТекущееКоличество = Количество.Получить(Ключ); Если ТекущееКоличество = Неопределено Тогда ТекущееКоличество = 0; КонецЕсли; Количество.Вставить(Ключ, Макс(ТекущееКоличество, Категория.Строки.Количество())); Для Каждого ПриемПищи Из Категория.Строки Цикл Ключ = ПриемПищи.ПриемПищи; ТекущееКоличество = Количество.Получить(Ключ); Если ТекущееКоличество = Неопределено Тогда ТекущееКоличество = 0; КонецЕсли; Количество.Вставить(Ключ, Макс(ТекущееКоличество, ПриемПищи.Строки.Количество())); КонецЦикла; КонецЦикла; Для Каждого Категория Из СтрокаОрганизации.Строки Цикл Ключ = "ПриемовПищиВКатегории"; ТекущееКоличество = Количество.Получить(Ключ); ДополнитьСтроки(Категория, ТекущееКоличество); Для Каждого ПриемПищи Из Категория.Строки Цикл Ключ = ПриемПищи.ПриемПищи; ТекущееКоличество = Количество.Получить(Ключ); ДополнитьСтроки(ПриемПищи, ТекущееКоличество); КонецЦикла; КонецЦикла; |
|||
9
Мультук
06.12.24
✎
13:10
|
(8)
Что будет, если "Макаронник с мясом" в "А" есть, но в Б "нет". То что строчки "Съедут вверх" это нормально ? |
|||
10
СвинТуз
06.12.24
✎
17:06
|
Таблица
1. Уровень 2. Количество вложений 1. Проходим по уровням ищем максимум. Заполняем таблицу. 2. Проходим по уровням считаем вложения и добавляем если не досчитались. |
|||
11
СвинТуз
06.12.24
✎
17:09
|
Можно не заполнять дерево.
Нашли максимумы, при выводе допечатываем. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |