Подскажите как построить дерево 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, Модераторы
- 
				homak
 - Постоянный обитатель
 - Сообщения: 144
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: Красноярский Край
 - Контактная информация:
 
Если количество уровней постоянное - то как вариант заполнить таблицы в памяти нужной информацией ... и "бежать" по таблице в памяти с данными верхнего уровня - и по этим данным "накладывать фильтр" на данные другой таблицы и выводить их ... 
ниже пример
			
			
									
						
										
						ниже пример
Код: Выделить всё
  SpSoprRashod._loop SpSopr
  {
    NextVisual;
    if ABCAnaliz.getfirst ABC_Tab1 where((SpSoprRashod.SpSopr.CMcUsl==ABC_Tab1.NrecMC))<>tsOK
    {
.............
.............
.............
    }
- 
				Goblin
 - Местный житель
 - Сообщения: 474
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: Сибирь-матушка
 - Контактная информация:
 
Если количество уровней постоянное и данные в таблицах для дерева линейны - то просто в стандартном наборе событий для обработки дерева необходимо переключать текущий узел логической таблицы, служащей для постройки дерева , через функцию TreeSetNodeTable. В случае иерархичности данных в одной из таблиц на каком-то уровне дерева- еще больше расширять обработчики событий cmtreetop,cmtreedown,cmtreeup,cmtreeneedowner и cmtreenodetype (надеюсь, не ошибся в именах событий, давно деревья не описывал)
			
			
									
						
							Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
			
						Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
- 
				evchic
 - Местный житель
 - Сообщения: 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.