Печать деревьев в FastReport

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

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

Ответить
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Печать деревьев в FastReport

Сообщение Nikos »

Добрый день. Есть древовидная структура - таблица BUDMNCS. По ней дерево строится как надо. Есть необходимость вывести ее на экран. Как мне показалось, самый простой способ - FastReport. Вот что получилось:

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

interface PrintBudjet;
var 
  var_bud : comp;
  var_co  : comp;
create view mainView
as select *
from BUDMNCS, BUDMNCS BUDMNCSCHILD1, BUDMNCS BUDMNCSCHILD2, BUDMNCS BUDMNCSCHILD3, BUDMNCS BUDMNCSCHILD4, BUDMNCS BUDMNCSCHILD5 
where((
    var_bud            == BUDMNCS.CVARBUD
and var_co             == BUDMNCS.CFPCO
and 1                  == BUDMNCS.LEVEL (noindex)
and BUDMNCS.NREC       == BUDMNCSCHILD1.CBUDMNCS
and BUDMNCSCHILD1.NREC == BUDMNCSCHILD2.CBUDMNCS
and BUDMNCSCHILD2.NREC == BUDMNCSCHILD3.CBUDMNCS
and BUDMNCSCHILD3.NREC == BUDMNCSCHILD4.CBUDMNCS
and BUDMNCSCHILD4.NREC == BUDMNCSCHILD5.CBUDMNCS
));

parameters
  var_bud, 
  var_co;

 DataStream BudjetDataStream
	(
	  [BUDNAME] VARBUDJET.NAME;   
	
		table BUDMNCS
		(
		  BUDMNCS.NREC;
		  BUDMNCS.CBUDMNCS;
		  BUDMNCS.IS_LEAF;
		  BUDMNCS.FULLCODE;
		  BUDMNCS.NAME;
		  BUDMNCS.LEVEL;
		  BUDMNCS.PLANMONTH[1];
		  BUDMNCS.PLANMONTH[2];
		  BUDMNCS.PLANMONTH[3];
		);
		
		table BUDMNCSCHILD1
		(
		  BUDMNCSCHILD1.NREC;
		  BUDMNCSCHILD1.CBUDMNCS;
		  BUDMNCSCHILD1.IS_LEAF;
		  BUDMNCSCHILD1.FULLCODE;
		  BUDMNCSCHILD1.NAME;
		  BUDMNCSCHILD1.LEVEL;
		  BUDMNCSCHILD1.PLANMONTH[1];
		  BUDMNCSCHILD1.PLANMONTH[2];
		  BUDMNCSCHILD1.PLANMONTH[3];
		);
		
		table BUDMNCSCHILD2
		(
		  BUDMNCSCHILD2.NREC;
		  BUDMNCSCHILD2.CBUDMNCS;
		  BUDMNCSCHILD2.IS_LEAF;
		  BUDMNCSCHILD2.FULLCODE;
		  BUDMNCSCHILD2.NAME;
		  BUDMNCSCHILD2.LEVEL;
		  BUDMNCSCHILD2.PLANMONTH[1];
		  BUDMNCSCHILD2.PLANMONTH[2];
		  BUDMNCSCHILD2.PLANMONTH[3];
		);
		
		table BUDMNCSCHILD3
		(
		  BUDMNCSCHILD3.NREC;
		  BUDMNCSCHILD3.CBUDMNCS;
		  BUDMNCSCHILD3.IS_LEAF;
		  BUDMNCSCHILD3.FULLCODE;
		  BUDMNCSCHILD3.NAME;
		  BUDMNCSCHILD3.LEVEL;
		  BUDMNCSCHILD3.PLANMONTH[1];
		  BUDMNCSCHILD3.PLANMONTH[2];
		  BUDMNCSCHILD3.PLANMONTH[3];
		);
		
		table BUDMNCSCHILD4
		(
		  BUDMNCSCHILD4.NREC;
		  BUDMNCSCHILD4.CBUDMNCS;
		  BUDMNCSCHILD4.IS_LEAF;
		  BUDMNCSCHILD4.FULLCODE;
		  BUDMNCSCHILD4.NAME;
		  BUDMNCSCHILD4.LEVEL;
		  BUDMNCSCHILD4.PLANMONTH[1];
		  BUDMNCSCHILD4.PLANMONTH[2];
		  BUDMNCSCHILD4.PLANMONTH[3];
		);
		
		table BUDMNCSCHILD5
		(
		  BUDMNCSCHILD5.NREC;
		  BUDMNCSCHILD5.CBUDMNCS;
		  BUDMNCSCHILD5.IS_LEAF;
		  BUDMNCSCHILD5.FULLCODE;
		  BUDMNCSCHILD5.NAME;
		  BUDMNCSCHILD5.LEVEL;
		  BUDMNCSCHILD5.PLANMONTH[1];
		  BUDMNCSCHILD5.PLANMONTH[2];
		  BUDMNCSCHILD5.PLANMONTH[3];
		);
	)
	end;

HandleEvent
  cmInit:
  {
    RunFReport(BudjetDataStream, '', false);
  }
end; //handleEvent

End.
Почти работает. Но выводится не все дерево, а только его часть. Первые два уровня выводятся как надо, дальше уже есть потери, причем закономерности этих потерь я так и не понял. Например, в одной ветке третьего уровня 4 узла, но выводит на печать только 3.
Правильно ли я вообще пытаюсь распечатать дерево в FastReport? Возможно, это делается по-другому?
LaaLaa

Сообщение LaaLaa »

Тут http://www.tyumbit.ru/gal_forum/viewtopic.php?t=9862 опубликована инструкция для программистов Галактики. В примере есть печать иерархического каталога документов.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

По инструкции сделал - все работает. Спасибо.
Просто хотелось для удобства форматирования разбить уже в Fastreport по данным разного уровня. Почти получилось (как я написал), но не до конца. Буду форматировать кодом.
Ответить