![]() |
![]() |
![]() |
|
работа с тз | ☑ | ||
---|---|---|---|---|
0
lamme
09.06.16
✎
11:52
|
Есть ТЗ с колонками
http://clip2net.com/s/3z0Oc9G нахожусь я на произвольной строке Хомут пластиковый. Уровень 5. Этот хомут входит в Коробка с крепежом. Уровень 4 в Коробка с крепежом входит в Коробка с фурнитурой. Уровень 3. 3 ур входит во 2 ... максимальное кол-во уровней 5. Как программно правильно определить первый уровень ниже текущего ? Сижу и туплю .. Для каждого Эл из ТЗ цикл // это перебор каждой строки Без этого перебора обойтись нельзя Если Эл.Уровень<>1 тогда ОпределитьВышестоящийУровень(Эл) Конецесли; конеццикла; Функция ОпределитьВышестоящийУровень(ТекСтрокаТЗ) ? конецфункции |
|||
1
lamme
09.06.16
✎
11:53
|
не .. я понимаю, что надо начать перебор строки в обратном порядке , начиная с текущей ...
но туплю как |
|||
2
Ёпрст
гуру
09.06.16
✎
11:54
|
Использовать деревоЗначений вестимо
|
|||
3
lamme
09.06.16
✎
11:55
|
(2)
это в итоге надо получить дерево. из плоской таблицы значений |
|||
4
Ёпрст
гуру
09.06.16
✎
11:56
|
Ну и..в качестве примитива
Для к = 1 По КоличествоУровней Цикл ВсСтрокиНужногоУровня = ТЗ.НайтиСтроки(Новый Структура("Уровень",к)); КонецЦикла |
|||
5
lamme
09.06.16
✎
11:58
|
(4)
ну нашел я все строки нужного уровня как определить - что из этого массива строк - нужна та или иная ? |
|||
6
Ёпрст
гуру
09.06.16
✎
12:04
|
(5) кроме колонки Уровень, не видно еще какой-либо связи между элементами у тебя. Как оне хоть связаны и что надо найти в итоге ?
|
|||
7
lamme
09.06.16
✎
12:07
|
только расположением друг после друга.
все. |
|||
8
Ёпрст
гуру
09.06.16
✎
12:09
|
(7) Это как ?
На твоей картинке, Вентилятор, к примеру, какую структуру должен иметь ? |
|||
9
bootini
09.06.16
✎
12:09
|
ИндексСтроки = ТЗ.Индекс(ТекСтрокаТЗ);
СтрокаПервогоУровня = Неопределено; Пока Не ИндексСтроки = 0 Цикл ИндексСтроки = ИндексСтроки - 1; ТекСтрока = ТЗ[ИндексСтроки]; Если ТекСтрока.Уровень = 1 Тогда СтрокаПервогоУровня = Неопределено; прервать; КонецЕсли; КонецЦикла; Возврат СтрокаПервогоУровня; |
|||
10
bootini
09.06.16
✎
12:10
|
Т.е. так
ИндексСтроки = ТЗ.Индекс(ТекСтрокаТЗ); СтрокаПервогоУровня = Неопределено; Пока Не ИндексСтроки = 0 Цикл ИндексСтроки = ИндексСтроки - 1; ТекСтрока = ТЗ[ИндексСтроки]; Если ТекСтрока.Уровень = 1 Тогда СтрокаПервогоУровня = ТекСтрока; прервать; КонецЕсли; КонецЦикла; Возврат СтрокаПервогоУровня; |
|||
11
lamme
09.06.16
✎
12:10
|
Вентилятор - Панель верзхняя пластиковая - EF1010T...
|
|||
12
Ёпрст
гуру
09.06.16
✎
12:16
|
(11)
Функция ОпределитьВышестоящийУровень(ТекСтрокаТЗ) Для к = -ТекСтрокаТЗ.НомерСтроки+1 по 0 Цикл Если ТЗ[-к].Уровень = ТекСтрокаТЗ.Уровень-1 Тогда Возврат -к; //или Возврат ТЗ[-к] КонецЕсли; Возврат Неопределенно;//нема уровня КонецФункции |
|||
13
Ёпрст
гуру
09.06.16
✎
12:16
|
ну и усё, собственна
|
|||
14
Ёпрст
гуру
09.06.16
✎
12:17
|
ну и это, КонецЦикла там перед последним Возврат Воткни
|
|||
15
lamme
09.06.16
✎
12:18
|
(10)
Для НС=-ТЗ.Индекс(Элементыформы.ТЗ.текущаяСтрока) По 0 Цикл Сообщить(ТЗ[-НС].Артикул); КонецЦикла; |
|||
16
lamme
09.06.16
✎
12:19
|
(10)
(12) спасибо .. мыслю сегодня медленно ... но хоть в правильном направлении ... сейчас сделаю боевой код |
|||
17
RomanYS
09.06.16
✎
12:23
|
СсылкиНаТекущиеУзлы = Новый Массив(6);
Для каждого Эл из ТЗ цикл СсылкиНаТекущиеУзлы[Эл.Уровень] = Эл;//кешируем в массив все текущие "узловые строки" ..... СтрокаПервогоУровня = СсылкиНаТекущиеУзлы[1]; СтрокаПредыдущегоУровня = СсылкиНаТекущиеУзлы[Эл.Уровень -1]; Плюсы такого подхода - всего один цикл |
|||
18
Ёпрст
гуру
09.06.16
✎
12:28
|
(17) ну не катит же.
|
|||
19
Ёпрст
гуру
09.06.16
✎
12:29
|
у тебя для каждого уровня - 1 элемент, а их мноооооогооо должно быть.
Тут тока перебор "вверх", т.е от текущей строки до первой строки ТЗ всегда. |
|||
20
RomanYS
09.06.16
✎
12:30
|
(19) в массиве значения для ТЕКУЩЕЙ строки, у неё по одному узлу для каждого вышестоящего уровня
|
|||
21
RomanYS
09.06.16
✎
12:32
|
+(19) это не отдельный цикл для построения кэша, это единственный цикл в котором идёт обработка
|
|||
22
Ёпрст
гуру
09.06.16
✎
12:37
|
(20) аа.. красиво.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |