Рекурсивный список в виде дерева (TREE)

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Игорь Столяров »

Привет всем !

Есть рекурсивный список с неизвестной глубинной вложенности в виде:

Код: Выделить всё

Record  RECORD
Key1       Key(Parent,Name)
Cod        Long
Parent     Long  ! Parent <<-> Cod
Name       CString(121)
        end
Хочу его показать в виде дерева.
Если предположить, что список содержит фиксированное кол-во уровней, то можно развернуть
его в дерево через несколько ALIAS (КОЛ-ВО УРОВНЕЙ - 1). Или можно как-то ещё ?

А если кол-во уровней неизвестно - то задача штатными средствами в Clarion не решается ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Рекурсивный список в виде дерева (TREE)

Сообщение finsoftrz »

Добро пожаловать в ШВС. Там этот вопрос 20+ лет назад решен. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Сентябрь 2023, 15:51 Добро пожаловать в ШВС.
Неть ! Мы пойдём другим путём ... Пока не знаю каким, но точно другим. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Рекурсивный список в виде дерева (TREE)

Сообщение kreator »

Есть шаблон "Дерево по одному файлу". Он не ABC, но сойдёт. Там проблема с SQL таблицами, но я её обошёл. Ещё ошибок там куча, я периодически их вылавливаю. Могу выложить мою исправленную версию. Автора, честно говоря уже не помню.
А как вы до сих пор дерево рисовали? Список товаров логично в дерево вписывается.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Игорь Столяров »

kreator писал(а): 28 Сентябрь 2023, 21:26 Список товаров логично в дерево вписывается
Как вариант - да. Хотя даже с 3-мя уровнями иерархии поиск товара уже превращается в квест.
Есть штатный шаблон дерева - в принципе он рабочий, но функционал не большой.
kreator писал(а): 28 Сентябрь 2023, 21:26 Там проблема с SQL таблицами, Ещё ошибок там куча
Спасибо - но нет. Я попробую сам как-то разрулить это дерево, идеи есть. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Рекурсивный список в виде дерева (TREE)

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Сентябрь 2023, 21:42
kreator писал(а): 28 Сентябрь 2023, 21:26 Список товаров логично в дерево вписывается
Как вариант - да. Хотя даже с 3-мя уровнями иерархии поиск товара уже превращается в квест.
С чего бы это. Искать надо без учета групп.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Сентябрь 2023, 21:56 Искать надо без учета групп
Это Вы говорите про контекстный поиск - и здесь всё правильно. Но ассортимент бывает огромный.

Если у нас есть 3 уровня классификации (например ВИД, КАТЕГОРИЯ, ПРОИЗВОДИТЕЛЬ), то для выбора
товара мы должны пройти три ветки: МЫШКИ -> ИГРОВЫЕ -> LOGITECH и только потом выбрать товар из списка.

В любых вариантах классификации есть проблемы, с деревом ключевые:

1. Далеко не каждый сотрудник способен грамотно классифицировать и найти ассортимент.
Потому пофиг на дерево классификации, всё через контекстный поиск и далее перебором и листанием ...

2. Выборка по произвольному набору классификации. Например я хочу получить список всех мышек LOGITECH,
или все товары LOGITECH или просто все игровые товары и т.д. ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Рекурсивный список в виде дерева (TREE)

Сообщение finsoftrz »

Вы издеваетесь над пользователями. :-) У нас сразу ищут товар, никакие ветки не проходят. Если ищут по названию, вводят фрагменты через пробел. Например, чтобы найти мышки logitech, можно ввести мыш log и будут отобраны все товары, в названиях которых присутствуют эти фрагменты. Номенклатура 30-40 тыс позиций отрабатывается быстро. Если надо найти группу, то есть специальный режим, в котором дерево преобразуется в линейный список, где можно просто фильтровать или искать обычным способом. Можно искать и прямо в дереве, для этого есть специальный контрол шаблон для поиска по фрагменту в названии группы. Еще бывает работа по коду, там поиск по нему, тоже без учета групп (причем порядок сортировки товаров в списке может быть другой).
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Сентябрь 2023, 22:49 У нас сразу ищут товар, никакие ветки не проходят.
Так а зачем тогда вообще классификация ? Только для группировки данных в отчётах ?
finsoftrz писал(а): 28 Сентябрь 2023, 22:49 чтобы найти мышки logitech, можно ввести мыш log и будут отобраны все товары
Не для всех товаров классификаторы дублируются в наименование (для контекстного поиска).
Да и не всегда контекстный поиск в принципе может дать результат: отобрать все товары классифицированные как игровые.
И в этом месте да, начинаются спец. режимы ... потому что классификатор ассортимента не может решить эти задачи. :?

Контекстный поиск больше работает на запросы с фрагментами марки, модели или какого-то уникального свойства
товара (размера, цвета и т.д.), нельзя и не получится всё сводить к контекстному поиску.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Рекурсивный список в виде дерева (TREE)

Сообщение finsoftrz »

Классификаторы для отбора, группировки, подсчета итогов в отчетах, а также для назначения товарам дополнительных аналитических признаков.
Название товара всегда отражает, что это такое. Если это игровая мышка logitech, то название должно содержать эту информацию. Иначе надо всегда выводить не просто название, а и приклеивать названия из классификаторов. С этим неудобно и трудоемко работать.
Надо еще учесть, что могут быть альтернативные группы или дополнительные группы, в последних один и тот же товар может повторяться.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Сентябрь 2023, 23:31 Классификаторы для отбора, группировки, подсчета итогов в отчетах
Например - отчёт прайс-лист. Перед печатью нам его нужно подготовить и проверить.
Для этого мы работаем в списке с определённой группой товаров, которые должны отфильтровать по классификатору.
finsoftrz писал(а): 28 Сентябрь 2023, 23:31 то название должно содержать эту информацию
Тогда названий должно быть несколько. Поскольку название со всей родословной товара не влезет на компактный
ценник или будет жрать кассовую ленту печатаясь в несколько строк ...
finsoftrz писал(а): 28 Сентябрь 2023, 23:31 Если это игровая мышка logitech, то название должно содержать эту информацию.
Тогда это уже будет не название, а описание. И всё равно бывают классификаторы которые не добавить в название.
Некомплект, без упаковки, уценка и т.д. И по таким признакам ней тоже нужно получать выборки ассортимента ...
finsoftrz писал(а): 28 Сентябрь 2023, 23:31 могут быть альтернативные группы или дополнительные группы
Это да. Я вот смотрю на маркетплейсах - и видимо не получается у архитекторов больших данных работать с глубиной
дерева классификации по потребностям. И появляются "Товары для безопасности -> Дозиметры -> Дозиметры". :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Губин Игорь »

Два варианта (оба :nr: использую и вовсю ):
не требующий ручного кодирования - через Alias с запасом и штатным шаблоном
требующий ручного кодирования - через отображение дерева в виде Queue и обработки уровня веток при операциях (с последующей перестройкой дерева, если добавились/удалились ветки)

У варианта через Alias и стандартным шаблоном есть один ньюанс: там ошибка в шаблоне, которая генерит код работающий очень медленно :facepalm: . Лечится через пару строчек в Embed

Для дающих советы :facepalm: : структура данных и их наиболее удобный способ отображения идеальны для представления в виде дерева неизвестной заранее размерности

P.S. На форуме пробегал шаблон для работы с таким деревом, автоматизирующий вариант с queue (не использую :nono: )
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Игорь Столяров »

Губин Игорь писал(а): 29 Сентябрь 2023, 7:56 Лечится через пару строчек в Embed
Откройте тайну золотого ключика ! :)
Для меня деревья как телевизор: я не понимаю как они работают, но иногда юзаю. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Губин Игорь »

Игорь Столяров писал(а): 29 Сентябрь 2023, 8:08 Откройте тайну золотого ключика !
И забесплатно?! :facepalm:
Снимок.JPG
На рисунке точка вставки.

Вставить надо условие отбора именно корневых веток данного дерева в файле.

Т.е. там в шаблоне (упрощённо)стоит

! Отбор корневых веток дерева
Set(файл)
Loop
Next(файл)
точка вставки
куча операций
убирание лишнего

Т.е. шаблон, фактически, пробегает по всему :dizzy: файлу строя дерево. А добавление фильтра минимизирует этот процесс. На большом файле выигрыш на порядки (с десятков минут на секунды)

Код: Выделить всё

IF того, что это нужное дерево среди всех деревьев Then Break. ! отсечение ненужных деревьев
IF уровень ветки в дереве <> 0 Then Break. ! отсечение некорневых веток
ну как в стандартном прогоне по файлу
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Рекурсивный список в виде дерева (TREE)

Сообщение Губин Игорь »

Подправил предыдущий пост :cat:
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить