![]() |
|
Заполнить Дерево значений из ТЗ | ☑ | ||
---|---|---|---|---|
0
Vladislava-smile
27.04.16
✎
07:55
|
Всем доброго дня, подскажите никто не сталкивался как заполнить дерево значений из ТЗ, не зная заранее количество уровней.
Пример ТЗ такой: Номенклатура Уровень Ном1 1 Ном2 1 Ном3 2 Ном4 3 Ном5 4 Последовательность соблюдена, Ном2 состоит из Ном3, Ном3 состоит из Ном4, Ном4 состоит из Ном5 |
|||
1
1Сергей
27.04.16
✎
07:59
|
нужно сделать кэш родителей
|
|||
2
1Сергей
27.04.16
✎
08:00
|
по методу LIFO
|
|||
3
Рэйв
27.04.16
✎
08:01
|
1.Получаешь максимум КолУровней по колонке "Уровень"
2.Добавляешь ветку Строки в дерево в первый уровень присваиваешь ТекУр 3. Для каждого Ур Из КолУровней цикл //Ищешь строки с уровнем=Ур добавляешь в ветку ТекУр //Добавляешь ветку ТекУр.Строки в дерево присваиваешь ТекУр Конеццикла; //--- как то так |
|||
4
Vladislava-smile
27.04.16
✎
08:08
|
(3) А если бедт такой пример
Номенклатура Уровень Ном1 1 Ном2 2 Ном3 2 Ном4 3 Ном5 2 По твоей логике будет такое дерево: Ном1 Ном2 Ном3 Ном5 Ном4 что не верно |
|||
5
Vladislava-smile
27.04.16
✎
08:13
|
(1, 2) А можно поподробнее немного
Просто в моем представлении это надо можно сделать так Пример Ст1 = Дерево.Строки.Добавить(); Ст2 = Ст1.Строки.Добавить(); И хранить вида Уровень Переменная 1 Ст1 2 Ст2 Но куда сохранять понять не могу ... |
|||
6
ДемонМаксвелла
27.04.16
✎
08:20
|
(0) в ТЗ не хватает ссылки на родителя.
а так в простом цикле обойти ТЗ и добавить строки в дерево |
|||
7
Рэйв
27.04.16
✎
08:22
|
(5)С чего это?
.НайтиСтроки() с Ур= 2 Найдет все =2 и добавить |
|||
8
Рэйв
27.04.16
✎
08:22
|
(7) к 4
|
|||
9
Рэйв
27.04.16
✎
08:22
|
(8)Чем не верно то? Все уровни на месте
|
|||
10
Vladislava-smile
27.04.16
✎
08:26
|
(9) А хотя правы, сейчас попробую.
|
|||
11
Vladislava-smile
27.04.16
✎
08:42
|
(9) Может я поняла вас не верно. Опять же рамматриваем пример
Номенклатура Уровень Ном1 1 Ном2 2 Ном3 2 Ном4 3 Ном5 2 Кол - во уровней = 3 Для каждого из увроней ищем все строки из ТЗ и записываем: Заполняем первый Ном1 Заполняем воторой Ном1 Ном2 Ном3 Ном5 Заполняем третий Ном1 Ном2 Ном3 Ном5 Ном4 Должно быть: Ном1 Ном2 Ном3 Ном4 Ном5 |
|||
12
Fish
гуру
27.04.16
✎
08:57
|
(11) Простой цикл тебе поможет.
|
|||
13
Vladislava-smile
27.04.16
✎
09:09
|
(12) Окей, простой цикл???
Номенклатура Уровень Ном1 1 Ном2 2 Ном3 2 Ном4 3 Ном5 2 Мы заполним до 3 уровня, а как потом вставить в требуемый 2-ой уровень последнюю строку??????? Повторюсь, нам надо запоминать ветки, которые создаются ранее. |
|||
14
ДенисЧ
27.04.16
✎
09:11
|
(13) Хочешь, продам описание метода Сортировать() ?
|
|||
15
1Сергей
27.04.16
✎
09:11
|
(13) см (1) и (2)
|
|||
16
Оранжевое настроение
27.04.16
✎
09:15
|
// Функция возращает дерево значний из таблицы значений, с нужной группировкой
// //ТЗ - таблица значений, из которой будет формироваться дерево //МассивКолонокГруппировки - массив строк (названий колонок ТЗ), по которым будет вестись группировка // //Порядок группировки зависит от порядка колонок в ТЗ (имеет смысл, если колонок для группировки несколько) и не зависит от порядка в массиве МассивКолонокГруппировки //Например: если в ТЗ три колонки "_1", "_2", "_3", а в массиве названий указаны две строки "_2" и "_1", то группировка в дереве будет сначала по колонке "_1", а потом по колонке "_2" Функция ТаблицаЗначенийВДеревоЗначений(ТЗ, МассивКолонокГруппировки) Экспорт ПЗ = Новый ПостроительЗапроса; ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ); ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять; Для Каждого ГруппировкаКолонка ИЗ МассивКолонокГруппировки Цикл ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка].Измерение = Истина; КонецЦикла; ПЗ.ЗаполнитьНастройки(); ПЗ.Выполнить(); Дерево = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Возврат Дерево; КонецФункции // ТаблицаЗначенийВДеревоЗначений() |
|||
17
Vladislava-smile
27.04.16
✎
09:53
|
(16) У меня уровни написаны в строке, это не колонки, точное количество их не знаю, так что это тоже не вариант ... ((
|
|||
18
Vladislava-smile
27.04.16
✎
10:10
|
(15) - как я понимаю это единственный вариант, а можно немноооооожечко поподробнее или где почитать
|
|||
19
1Сергей
27.04.16
✎
10:19
|
(18) балин. чего там читать?
Дерево = Новый ДеревоЗначений; СтрокаДерева; Для Каждого СтрокаТЗ ИЗ ТЗ Цикл Уровень = /// определяем уровень Номенклатура = // находим номенклатуру Если Уровень = 1 Тогда // корень СтрокаДерева = Дерево.Строки.Добавить(); Иначе // ищем ветку нужного уровня Пока Уровень > (СтрокаДерева.Уровень() + 1) Цикл СтрокаДерева = СтрокаДерева.Родитель; КонецЦикла; СтрокаДерева = СтрокаДерева.Строки.Добавить(); КонецЕсли; // заполняем строку дерева СтрокаДерева.Номенклатура = Номенклатура; КонецЦикла; |
|||
20
1Сергей
27.04.16
✎
10:22
|
//Пока Уровень > (СтрокаДерева.Уровень() + 1) Цикл
Пока Уровень < (СтрокаДерева.Уровень() + 1) Цикл чуть, тупанул. Ну, разберёшься |
|||
21
Vladislava-smile
28.04.16
✎
07:12
|
(20), ага получилось, только вот так:
Для Каждого СтрокаТЗ ИЗ ТЗ Цикл Если СтрокаТЗ.Уровень = 1 Тогда // корень СтрокаДерева = ДеревоСоставаПродукции.Строки.Добавить(); Иначе // ищем ветку нужного уровня Пока СтрокаТЗ.Уровень - 1 < (СтрокаДерева.Уровень() + 1) Цикл СтрокаДерева = СтрокаДерева.Родитель; КонецЦикла; СтрокаДерева = СтрокаДерева.Строки.Добавить(); КонецЕсли; // заполняем строку дерева СтрокаДерева.ПродукцияСоставляющие = СтрокаТЗ.Номенклатура; СтрокаДерева.ВидНоменклатуры = СтрокаТЗ.Номенклатура.ВидНоменклатуры; СтрокаДерева.ЕдиницаИзмерения = СтрокаТЗ.Номенклатура.БазоваяЕдиницаИзмерения; СтрокаДерева.Количество = СтрокаТЗ.Количество; СтрокаДерева.Итого = СтрокаТЗ.Итого; КонецЦикла; Спасибо большое )) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |