Как построить tree?

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

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

Ответить
Gugnilew
Сообщения: 1
Зарегистрирован: 09 окт 2006, 08:32

Как построить tree?

Сообщение Gugnilew »

Проблема такова, программист по Галактике ушел, а остался я, так вот с Object Pascal у меня очень туго. А надо сделать форму в которой нужно, что бы было дерево организации, соответствено с этими организациями заключены различные договора, также имеются акты выполненых работ. Дерево по организациям с горем построил, а вот чтобы дерево открывалось и там были договора не получается. Как это сделать? Подскажите, желательно на примере с подробными комминтариями, а то чего то непонимаю я как это все делается или ссылку на литературу хорошую, или где можно почитать про это.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

1. Vip это другой язык.
2. речь идет усе таки не об отчете, а о фейсе?
3. проще всего конечно реализовать во временную таблу.
тогда пойдут все рекомендации по работе с деревом на этом форуме
4. как вариант могет быть организовать внизу закладки с договорами и прочей бодягой аналогично фейсу "исполнение договоров"?
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

Посмотри вот это может идеи появятся...

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

interface ETree 'Tree';
Show at (0,0,300,300);
Table STRUCT TreeRols ""
(
  nRec     : comp ,
  Name     : String[40] ,
  Node     : Word
)
With Index
(
  main01  = nRec
)
;

Var
  CurOwner:Comp;
  CurNode :Word;
  qwe:Word;

Create view TreeView as
Select * from TreeRols,RolsCEX,RolsLine,SpRols,KatPodr,KatMC, KatPodr KatPodr1
Where
  ((

rolscex.nrec==rolsline.crec and
rolsline.nrec==sprols.cline and
rolscex.CEX==katpodr.nrec and
rolsline.Line==katpodr1.nrec and
sprols.cmc==katmc.nrec
))
;
ToolBar TreeCtrl;
Tree myTree 'Дерево';
Show at (,,100,);
 Fields
  if(TreeGetNodeTable(myTree) = #TreeRols,TreeRols.Name,
  if(TreeGetNodeTable(myTree) = #Rolscex,KatPodr.Name,
  if(TreeGetNodeTable(myTree) = #Rolsline,KatPodr1.Name,
  if(TreeGetNodeTable(myTree) = #spRols,KatMC.Name,KatMC.Name)))):[50];
End;

browse spRols;
show (101,,,);
Table spRols;
  Fields
       spRols.NPP  '№ П/П':Protect;
       spRols.Date 'Дата';
       //KatMC.Name  'Маценность';
       spRols.PRIZN 'Признок износа';
       spRols.FAKT  'Фактически';
       spRols.Procizn 'Процент износа';
end;
HandleEvent
cmDefault: message(RolsCEX.CEX+'  '+RolsLine.Line)
end;

Window EditCEX 'Дерево' EscClose, DoAccept;
Show at (10,10,70,16);
Screen ScrRepGrLst1;
Table RolsCEX;
Fields
 KatPodr.Name   ('Цех',,) ,PickButton,Protect;
<<
Cчет  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End;  //'screen
HandleEvent
//cmDefault:{ message(TreeGetNodeTable(myTree)+'   '+CurTable+'   '+CurField);}
cmPick:
{
runinterface('GETAPODR',RolsCEX.CEX,qwe);
set RolsCEX.Nrec:=KatPodr.NREC;
set RolsCEX.CEX:=KatPodr.NREC;
if INSERT CURRENT RolsCEX=tsDuplicateKey then
{message('Данный Цех существует! Выберите другой')};
}
end;
End;  //'window

Window EditLINE 'Дерево' EscClose, DoAccept;
Show at (10,10,70,16);
Screen ScrRepGrLst2;
Table RolsLine;
Fields
 KatPodr1.Name   ('Цех',,) ,PickButton,Protect;
<<
Cчет  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End;  //'screen
HandleEvent
//cmDefault:{ message(TreeGetNodeTable(myTree)+'   '+CurTable+'   '+CurField);}
cmPick:
{
runinterface('GETAPODR',RolsLine.Line,qwe);
set RolsLine.Nrec:=RolsCEX.NREC+KatPodr1.NREC;
set Rolsline.crec:=RolsCEX.NREC;
set Rolsline.Line:=KatPodr1.NREC;
if INSERT CURRENT RolsLine=tsDuplicateKey then
{message('Данная Линия существует! Выберите другую!')};
}
end;
End;  //'window

Window EditRols 'Дерево' EscClose, DoAccept;
Show at (10,10,70,16);
Screen ScrRepGrLst3;
Table spRols;
Fields
 KatMC.Name   ('Цех',,) ,PickButton,Protect;
<<
Cчет  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End;  //'screen
HandleEvent
//cmDefault:{ message(TreeGetNodeTable(myTree)+'   '+CurTable+'   '+CurField);}
cmPick:
{
runinterface('GETMC',spRols.cmc);
//set spRols.Nrec:=KatMC.NREC;
set spRols.cLine:=RolsLine.NREC;
set spRols.cmc:=KatMC.NREC;
if INSERT CURRENT spRols=tsDuplicateKey then
{message('Данная Линия существует! Выберите другую!')};
}
end;
End;  //'window
HandleEvent
cmInit:
{
     ClearBuffer(#TreeRols);
     set TreeRols.Nrec:=1;
     set TreeRols.Name:='Система';
     set TreeRols.Node:=1;
     INSERT CURRENT TreeRols;
}
cmDefault:{ message(RolsCEX.NREC+'  '+TreeGetNodeTable(myTree)+'   '+CurTable+'   '+CurField);}
cmTreeDown:
{
case TreeGetNodeTable(myTree) of
#TreeRols:{TreeSetNodeTable(myTree,#Rolscex);
RescanPanel(#TreeRols);}
#Rolscex:{TreeSetNodeTable(myTree,#Rolsline);
RescanPanel(#Rolscex);}
#Rolsline:{TreeSetNodeTable(myTree,#spRols);
RescanPanel(#Rolsline);}
end;
};
cmTreeNodeType :
{ if (TreeGetNodeTable(myTree) = #spRols)
then {TreeSetNodeType(myTree,2,'RemBADPOINT')}
}
cmInsert:{
if (TreeGetNodeTable(myTree)=0) then {RunWindow(EditCEX)};
if (TreeGetNodeTable(myTree)=1) then {RunWindow(EditLine)};
if (TreeGetNodeTable(myTree)=2) then {RunWindow(EditRols)};
}
cmDeleteRecord:{DELETE  spRols;DELETE   RolsLine;DELETE
CURRENT RolsCEX;RescanPanel(#RolsCEX);}
end;
end.
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

Я когда давно баловался :)

страница с советами
http://www.randun.ws/howto.php

в частности
http://www.randun.ws/h_body.php?id=25
dP
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

С корабля на бал , так сказать ...
Сразу на деревья по нескольким таблицам - сочуствую
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Ничего страшного, если только вы не пытаетесь одновременно разворачивать естественную иерархию объектов. То есть, дерево на нескольких узлах можно построить только в том случае, если все записи некоторого узла располагаются на одинаковой глубине. Лично мне больше нравится такой способ: всё, что можно, запихнуть в таблицу в памяти. В разумных пределах, конечно.
Виталий
Ответить