Подскажите как построить дерево 3-х уровневое
Есть 2 таблицы
1 Rols
Nrec CEX Line
2 spRols
Nrec cRols Name
Нужно
Rols.CEX // Их много
I-------Rols.Line
I-------Rols.Line // Их может быть много
I I------spRols.Name // Их может быть много
I I------spRols.Name
I
Rols.CEX
I-------Rols.Line
I-------Rols.Line // Их может быть много
I I------spRols.Name // Их может быть много
I I------spRols.Name
I
Ну и так далее
Tree
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 144
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Красноярский Край
- Контактная информация:
Если количество уровней постоянное - то как вариант заполнить таблицы в памяти нужной информацией ... и "бежать" по таблице в памяти с данными верхнего уровня - и по этим данным "накладывать фильтр" на данные другой таблицы и выводить их ...
ниже пример
ниже пример
Код: Выделить всё
SpSoprRashod._loop SpSopr
{
NextVisual;
if ABCAnaliz.getfirst ABC_Tab1 where((SpSoprRashod.SpSopr.CMcUsl==ABC_Tab1.NrecMC))<>tsOK
{
.............
.............
.............
}
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Если количество уровней постоянное и данные в таблицах для дерева линейны - то просто в стандартном наборе событий для обработки дерева необходимо переключать текущий узел логической таблицы, служащей для постройки дерева , через функцию TreeSetNodeTable. В случае иерархичности данных в одной из таблиц на каком-то уровне дерева- еще больше расширять обработчики событий cmtreetop,cmtreedown,cmtreeup,cmtreeneedowner и cmtreenodetype (надеюсь, не ошибся в именах событий, давно деревья не описывал)
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
-
- Местный житель
- Сообщения: 216
- Зарегистрирован: 25 апр 2006, 12:05
- Откуда: г.Ростов-на-Дону
- Контактная информация:
Всем спасибо вот что получилось!!!
Есть еще проблема как мне сгрупировать rols.CEX rols.Line и spRols.cmc
Код: Выделить всё
interface ETree 'Tree';
Show at (8,4,88,24);
Var
CurOwner:Comp;
CurNode :Word;
create view
var qwe:word;
as select * from Rols,SpRols,KatPodr,KatMC, KatPodr KatPodr1
where
((
rols.nrec==sprols.cRols and
rols.CEX==katpodr.nrec and
rols.Line==katpodr1.nrec and
sprols.cmc==katmc.nrec
))
;
Tree myTree 'Дерево';
Fields
if(TreeGetNodeTable(myTree) = #Rols,KatPodr.Name,
if(TreeGetNodeTable(myTree) = #spRols,KatPodr1.Name,KatMC.Name)):[50];
End;
HandleEvent
cmDefault: message(TreeGetNodeTable(myTree))
cmTreeDown:
{
case TreeGetNodeTable(myTree) of
#Rols:{TreeSetNodeTable(myTree,#spRols);}
#SpRols:{TreeSetNodeTable(myTree,2);}
end;
}
cmTreeNodeType :
{ if (TreeGetNodeTable(myTree) = 2)
then {TreeSetNodeType(myTree,2)}
}
End;
End.