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

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

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

Сообщение finsoftrz »

kreator писал(а): 05 Октябрь 2023, 15:39
finsoftrz писал(а): 04 Октябрь 2023, 18:32 Нет, конечно. Перемещение по дереву групп слева и отображение товаров справа не связаны. Чтобы отобразить товары группы, нада 2 раза щелкнуть в дереве. Выбранная группа показывается сверху над деревом, и это вторые блюда, а не коньяк.
Это конечно специфично, мягко говоря. Как пользователю объяснить, что справа список, не связанный со списком слева?
У нас вот так:
tree.png
Чтобы отобразить весь правый список, надо в дереве слева встать на самый верх.
Я не сам такое придумал, подсмотрел в свое время в 1С и творчески адаптировал. Для большинства людей такая схема привычная, так как 1С самое распространённое ПО. И это очень удобно на самом деле. Например, для быстрой переброски элементов между группами - выделяем элемент справа, целевую группу слева и жмем кнопку перенести. Или другие различные операции внутри дерева, например, привязка группы к другому родителю и т.п.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

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

Сообщение kreator »

Да нет такого в 1С. Вам приснилось наверно. Двойной клик на дереве - либо вызов формы редактирования, либо выбор записи в соответствующем режиме. Перетаскивание веток в шаблоне реализовано очень хорошо. Можно и drag-n-drop задействовать, только юзабилити хромает при больших деревьях.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

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

Сообщение finsoftrz »

kreator писал(а): 06 Октябрь 2023, 14:01 Да нет такого в 1С. Вам приснилось наверно. Двойной клик на дереве - либо вызов формы редактирования, либо выбор записи в соответствующем режиме. Перетаскивание веток в шаблоне реализовано очень хорошо. Можно и drag-n-drop задействовать, только юзабилити хромает при больших деревьях.
Ну, у меня деменция вроде пока не наступила. Но засомневался, сходил посмотреть. :-) В 1С77 и в 1С8 (классический интерфейс) делается именно так, как я написал. У них только в списке элементов справа еще и группы отображаются, параллельно с деревом. В 1С8 (тонкий клиент), в той конфигурации, которая под рукой, номенклатурный справочник без дерева групп слева. Скорее всего, это опциональная штука, задается в конфигураторе.
Речь именно про отдельное дерево групп слева, а не дерево справа, в котором и элементы, и группы.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

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

Сообщение kreator »

А как делается выбор? А как выход на редактирование?
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

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

Сообщение finsoftrz »

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

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

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

Информация для тех кому интересна теория сабжа.
2 дня назад OZON начал переход в API на новую структуру справочника категорий товаров,
отказавшись от рекурсивного дерева с произвольным уровнем вложенности.

Теперь два верхних уровня - это фиксированное дерево + [тип товара] (Электроника -> Компьютеры -> [Ноутбуки])
Но дальше характеристики (Процессор и т.д.) и их значения (Intel Celeron и т.д.) - уже содержат в себе полную
идентификацию крайней категории и типа товара, что по сути архитектуры данных уже является срезом классификатора.

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

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

Сообщение finsoftrz »

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

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

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

finsoftrz писал(а): 08 Октябрь 2023, 9:55 скорее всего вынесли характеристики отдельно, так как могут дублироваться в разных ветках дерева
Нет, они и так были отдельно. Тут вопрос даже не про "работает-не работает", а про идею построение самого дерева.
Возьмём понятный пример ветки: Электроника -> Компьютеры -> Ноутбуки -> Процессор -> Celeron

В теории построения рекурсивного дерева - каждая ветка имеет уникальный ID и связана только с родителем.
Т.е. "Celeron" привязан только к "Процессору", а "Процессор" к "Ноутбуку".
Если где-то (например в серверах) есть ещё ветка с названием "Процессор" - то у неё уже совсем другой ID.
Это и есть красивая структура рекурсивного дерева- мы можем легко оторвать / переставить / объединить ветку на любом уровне.
Но мы не можем выбрать все товары с процессорами Celeron - кроме как контекстным перебором всего дерева.

Так вот теперь они сделали так, что:
- "Процессор" привязан к группе "Компьютеры + Ноутбуки"
- а "Celeron" привязан к группе "Компьютеры + Ноутбуки + Процессор"

Поэтому для ветки "Celeron" можно сразу получить отношение к компьютерам (не проходя ветки "Ноутбуки" и "Процессоры").
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

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

Сообщение kreator »

finsoftrz писал(а): 07 Октябрь 2023, 20:40
kreator писал(а): 07 Октябрь 2023, 17:57 А как делается выбор? А как выход на редактирование?
Не очень понял вопрос, выбор чего? Двойной щелчек в дереве групп устанавливает отбор товаров этой группы в соседнем списке. Редактирование групп обычно из контекстного меню, их состав часто не меняется. Иногда кнопки размещаются. Хорошо было бы управлять работой с деревом групп из тулбаре фрейма, но как-то это не совсем просто, так как подобные элементы заточены под линейные списки, это другой контрол шаблон. Выбор группы в каком-то другом окне оформляется отдельным диалогом, без элементов. Деревья не часто используются, работать с ними не очень удобно по сравнению с обычным списками.
С Вами неинтересно. Я про выбор записи из дерева в режиме SelectRecord. А также про режим редактирования. Двойной клик должен вызывать форму редактирования.
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

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

Сообщение kreator »

Игорь Столяров писал(а): 08 Октябрь 2023, 9:44 Информация для тех кому интересна теория сабжа.
2 дня назад OZON начал переход в API на новую структуру справочника категорий товаров,
отказавшись от рекурсивного дерева с произвольным уровнем вложенности.

Теперь два верхних уровня - это фиксированное дерево + [тип товара] (Электроника -> Компьютеры -> [Ноутбуки])
Но дальше характеристики (Процессор и т.д.) и их значения (Intel Celeron и т.д.) - уже содержат в себе полную
идентификацию крайней категории и типа товара, что по сути архитектуры данных уже является срезом классификатора.

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

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

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

kreator писал(а): 08 Октябрь 2023, 22:06 Это просто характеристики.
Конечно. Но для их выбора - мы всё равно проходим все ветки дерева ...
У нас никогда не будет реальных справочников с сотнями тысяч классификаторов и миллионами товаров.
Посмотреть какими новыми инструментами и методами решаются подобные задачи - очень интересно.
Может, что-то найдём полезное и для себя. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

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

Сообщение finsoftrz »

kreator писал(а): 08 Октябрь 2023, 21:54 С Вами неинтересно. Я про выбор записи из дерева в режиме SelectRecord. А также про режим редактирования. Двойной клик должен вызывать форму редактирования.
Вы путаете варианты, когда дерево используется только для групп, и когда в дереве выводятся и группы, и элементы.
Я написал уже, что для выбора группы используется отдельное окно, в котором нет элементов. Там двойным щелчком или enter.
Двойной клик никому ничего не должен. Как решим, так он и будет. :-)
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

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

Сообщение kreator »

finsoftrz писал(а): 09 Октябрь 2023, 8:15
kreator писал(а): 08 Октябрь 2023, 21:54 С Вами неинтересно. Я про выбор записи из дерева в режиме SelectRecord. А также про режим редактирования. Двойной клик должен вызывать форму редактирования.
Вы путаете варианты, когда дерево используется только для групп, и когда в дереве выводятся и группы, и элементы.
Я написал уже, что для выбора группы используется отдельное окно, в котором нет элементов. Там двойным щелчком или enter.
Двойной клик никому ничего не должен. Как решим, так он и будет. :-)
Я за однообразие. Если выбор из обычного листа через двойной клик или Enter, то и в дереве должно быть так. У Вас группы и элементы две разных таблицы/файла?
В любом случае как-то странно. Группа одна, а содержимое другой группы.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

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

Сообщение finsoftrz »

kreator писал(а): 09 Октябрь 2023, 19:00
finsoftrz писал(а): 09 Октябрь 2023, 8:15
kreator писал(а): 08 Октябрь 2023, 21:54 С Вами неинтересно. Я про выбор записи из дерева в режиме SelectRecord. А также про режим редактирования. Двойной клик должен вызывать форму редактирования.
Вы путаете варианты, когда дерево используется только для групп, и когда в дереве выводятся и группы, и элементы.
Я написал уже, что для выбора группы используется отдельное окно, в котором нет элементов. Там двойным щелчком или enter.
Двойной клик никому ничего не должен. Как решим, так он и будет. :-)
Я за однообразие. Если выбор из обычного листа через двойной клик или Enter, то и в дереве должно быть так. У Вас группы и элементы две разных таблицы/файла?
В любом случае как-то странно. Группа одна, а содержимое другой группы.
Да, группы и элементы в 2 разных таблицах. В 1С в одной. Мне это всегда не нравилось, разные сущности и структуры.
Название выбранной группы выводится над деревом синим цветом. Видно, какие элементы показываются в списке элементов.
В 1С в конфигураторе был признак выводить дерево слева от справочника элементов. Когда установлен, то поведение похоже, как у меня, только у них элементы остаются вперемежку с группами в основном списке элементов.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

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

Сообщение kreator »

gopstop2007 писал(а): 04 Октябрь 2023, 21:35
kreator писал(а): 28 Сентябрь 2023, 21:26 Есть шаблон "Дерево по одному файлу". Он не ABC, но сойдёт. Там проблема с SQL таблицами, но я её обошёл. Ещё ошибок там куча, я периодически их вылавливаю. Могу выложить мою исправленную версию. Автора, честно говоря уже не помню.
А как вы до сих пор дерево рисовали? Список товаров логично в дерево вписывается.
Ваш модернизированный шаблон позволяет, несколько шаблонов в одном модуле? Или если не сложно выложте пожалуйста исправленную версию, спасибо.
Попробуйте. Ничего красивого не придумал (Всё сделано на рутинах, как и положено в Clarion. Но для рекурсии автору пришлось писать процедуры с прототипами, а для них понадобились очереди с признаком TYPE. И сразу проблема c областью видимости переменных). Тупо на шаблоне сделал закладку "Классы". Там можно изменить префикс. Поменяется везде кроме Вашего ручного кода. Мои правки в тексте шаблона помечены. Можете их перенести в свой. Ранние правки не помечены. Был я молод и горяч, этим не заморачивался. :) Как мне помнится, сделаны дополнительные вставки (Embeds), чтобы напрямую написать SQL код и обойти стандартные вызовы set, get, reget.
Будут проблемы - телеграфируйте.
Вложения
ABSTREE.ZIP
(11.52 КБ) 40 скачиваний
We are hard at work… for you. :)
Ответить