Tree

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Tree

Сообщение evchic »

Подскажите как построить дерево 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
Ну и так далее
homak
Постоянный обитатель
Сообщения: 144
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярский Край
Контактная информация:

Сообщение homak »

Если количество уровней постоянное - то как вариант заполнить таблицы в памяти нужной информацией ... и "бежать" по таблице в памяти с данными верхнего уровня - и по этим данным "накладывать фильтр" на данные другой таблицы и выводить их ...
ниже пример

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

  SpSoprRashod._loop SpSopr
  {
    NextVisual;
    if ABCAnaliz.getfirst ABC_Tab1 where((SpSoprRashod.SpSopr.CMcUsl==ABC_Tab1.NrecMC))<>tsOK
    {
.............
.............
.............
    }
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

Если количество уровней постоянное и данные в таблицах для дерева линейны - то просто в стандартном наборе событий для обработки дерева необходимо переключать текущий узел логической таблицы, служащей для постройки дерева , через функцию TreeSetNodeTable. В случае иерархичности данных в одной из таблиц на каком-то уровне дерева- еще больше расширять обработчики событий cmtreetop,cmtreedown,cmtreeup,cmtreeneedowner и cmtreenodetype (надеюсь, не ошибся в именах событий, давно деревья не описывал)
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

Всем спасибо вот что получилось!!!

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

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.
Есть еще проблема как мне сгрупировать rols.CEX rols.Line и spRols.cmc
Ответить