2. Skript reportu |
Top Previous Next |
const sSQL='SELECT top 20 jmeno, count(jmeno) as pocet FROM "DBA"."gfkontakt" '+ 'where jmeno is not null group by jmeno order by pocet desc'; fromCol=2; fromRow=4;
//procedura FillChartData naplní graf daty, graf vytvoříme v proceduře LoadData spolu s naplněním dat do tabulky na řádcích 4,5 a 7,8
procedure FillChartData(col,row : integer ); var r,x,y : integer; ChartSer : TChartSeries; ser : TfrxSeriesItem; Chart : TfrxChartView; begin // najdeme ukazatel na graf v bunce B12 Chart:=TfrxChartView(SheetList[0].GetCellProperty([2,12]).frxReport.FindComponent('ChartB12')); // pokud graf nahodou neexistuje if chart=nil then begin showmessage('Chart nil!'); exit; end;
// smaz series a seriesdata // odstranime pripadna existujici series a seriesdata Chart.Chart.SeriesList.Clear; Chart.SeriesData.Clear;
// chart 3D options // trocha kosmetiky - nastaveni 3D grafu Chart.Chart.View3D:=True; Chart.Chart.View3DWalls:=True; Chart.Chart.View3DOptions.Orthogonal:=True; Chart.Chart.BottomAxis.LabelsAngle:=90;
// chart title - Záhlaví grafu Chart.Chart.Title.Text.Clear; Chart.Chart.Title.Text.Add('Jména');
// vytvoříme jednu series typu Bar ChartSer:=Chart.Chart.AddSeries( TBarSeries.Create(nil) ); TCustomBarSeries(ChartSer).Title:='jmena';
// nastavíme volby a barvy vzhledu series TCustomBarSeries(ChartSer).Marks.Visible := False; TCustomBarSeries(ChartSer).MultiBar:=mbSide; TCustomBarSeries(ChartSer).BarPen.Visible:=False; ChartSer.SeriesColor:=$0046DAFF; ChartSer.Name:='jmena';
// přidáme series data a zvolíme fixeddata ser := Chart.SeriesData.Add; ser.DataType:=dtFixedData; ser.YSource := ''; ser.XSource := '';
// fill chart data // vysledkem následující sekce bude naplnění // XSource(Label) položkami jmen, v našem případě: jan;Josef;Petr;Ole Gunar;Alois;Michal;Pavel;Julie;Jarmila;Juraj;IV.;Maria;Marián;Marie-Christine;Miroslav;Boris;Jana;Nickie;Hazel;Jang; // YSource položkami počtu výskytů jména v tabulce gfkontakty v našem případě 15;4;3;3;3;3;3;3;2;2;2;2;2;2;1;1;1;1;1;1;
ser := Chart.SeriesData.Items[0]; x:=col; with ser do begin for y:=1 to 2 do for x:=fromCol to fromCol+9 do begin if y=1 then r:=fromRow else r:=fromRow+3; XSource := XSource + Sheet.Cells(x,r)+';'; YSource := YSource + Sheet.Cells(x,r+1)+';'; end; end;
// zobrazíme aktuálně naplněný report Sheet.GetCellProperty([2,12]).frxReport.ShowReport; end;
// procedura LoadData vyvolá SQL dotaz, naplní hodnoty do tabulky a vytvoří prázdný Graf v buňce B12
procedure LoadData; var Query : TQuery; i,r,list : integer; s : string; // Chart Page: TfrxReportPage; Chart : TfrxChartView; begin // protože vytváříme report pomocí skriptu je třeba nejprve vytvořit nový list Sheet:=ReportProperty.NewSheet;
// nastavíme počet řádků a sloupců reportu Sheet.ColCount:=13; Sheet.RowCount:=14; // nadpis reportu Sheet.Cells[2,2]:='Top 20 names from gfkontakt'; // tucne, podtrzene Sheet.CellProperty[2,2].Font.Style:=fsBold+fsUnderline;
r:=0;i:=0; // load data // otevřeme query, projdeme data a naplníme je do tabulky Query:=TQuery.Create(nil); try Query.DatabaseName := DefaultDatabaseName; Query.SQL.Text:=sSQL; Query.Open;
while Not(Query.Eof) do begin // jméno Sheet.Cells[fromCol+i,fromRow+r ]:=Query.FieldbyName('jmeno').AsString; With Sheet.CellProperty[fromCol+i,fromRow+r] do begin Font.Style:=fsBold; // tučně Background:=$00FDBD97; // obarvíme Format:=1; // zarovnáme end; // počet výskytů Sheet.Cells[fromCol+i,fromRow+r+1]:=Query.FieldbyName('pocet').AsString; With Sheet.CellProperty[fromCol+i,fromRow+r+1] do begin Font.Style:=fsBold; Background:=$0046DAFF; Format:=1; end;
inc(i); // inkrementujeme sloupec if i>9 then // odřádkovat ? begin inc(r,3); // posun řádku i:=0; // sloupečky znovu od začátku end;
Query.Next; // další data end; finally Query.Free;
// vytvorime Chart Sheet.MergeCells(2,12,11,12); // sloučíme buňky Sheet.Rows[12].Height:=400; // nastavíme výšku řádku 12 pro zobrazení grafu Sheet.Rows.Group(12,12); // jenom kosmetika provedeme group jednoho řádku, což nám umožní potom tento řádek skrýt nebo zobrazit ReportProperty.PlaceReport(Sheet,2,12); // vložíme fastreport objekt do buňky B12 // vytvoříme novou stránku fastreportu a nasatvíme velikost a okraje Page := TfrxReportPage.Create(Sheet.GetCellProperty([2,12]).frxReport); With Page do begin Name:='PageChartB12'; PaperWidth:=205; PaperHeight:=95; LeftMargin:=0; RightMargin:=0; TopMargin:=0; BottomMargin:=0; end;
// a na nově založené stránce vytvoříme objekt Grafu Chart := TfrxChartView.Create(Page); Chart.Align:=6; // baClient; // zarovnáme Chart.Name:='ChartB12'; // pojmenujeme FillChartData( 3, 11 ); // naplnímne daty // end Chart ReportProperty.SetModified(False); // vypneme příznak že by report modifikován end; end;
procedure OnBeforeReport(Sender : TReportProperty); begin LoadData; // zavoláme načtení dat end;
begin end. |