Umíme to s Delphi, 23. díl – tvorba výstupních sestav prakticky

V předchozím díle seriálu jsme si vysvětlili problematiku výstupních sestav z databází po teoretičtější stránce. Popsali jsme si klíčové komponenty, jejich vlastnosti, události a metody. Nevíme ale ještě mnoho o konkrétních postupech, které povedou k vytvoření sestavy.
Tento zjevný nedostatek se pokusí napravit dnešní díl, který vám předvede, jak sestavu vytvořit pomocí průvodce, šablony a „zcela ručně“.

Vytvoření sestavy – tři možnosti

Pokud se rozhodnete vytvořit na základě některé databázové aplikace výstupní sestavu, máte na výběr tři možnosti:
  • použít průvodce;
  • použít šablonu;
  • nepoužít nic a naprogramovat vše ručně.
V následujících podkapitolách se postupně na tyto jednotlivé varianty podíváme a vysvětlíme si jejich výhody a nevýhody. Ve všech třech případech vytvoříme jednoduchou sestavu krok za krokem. Vždy budeme vycházet z databáze DBDEMOS a z tabulky customer.db, kterou byste měli mít automaticky nainstalovanou z dob, kdy jste instalovali Delphi a BDE.

Vytvoření sestavy pomocí průvodce

Vytvořte nejprve novou aplikaci (File – New Application). Chcete-li použít průvodce k vytvoření sestavy, zvolte dále v hlavní nabídce File – New…, karta Business. Otevře se dialog, jehož vzhled je na následujícím obrázku:

Klepněte pro větší obrázek

Vyberte (tak, jak je naznačeno na obrázku) Quick Report Wizard. V následujícím dialogu zvolte List Report (bude vytvořena jednoduchá sestava vypadající jako seznam). Klepněte na tlačítko Start Wizard a otevře se další dialog. V něm je nutné zvolit příslušnou databázi, tabulku a datová pole, která chceme mít v sestavě zahrnuta. Jako databázi tedy zvolte DBDEMOS, tabulku customer.db a všechna datová pole (viz následující obrázek):

Klepněte pro větší obrázek

Klepněte na tlačítko Finish. Po chvilce se vytvoří nový formulář, který již obsahuje vytvořenou sestavu. Pokud si ji chcete prohlédnout, klepněte na tento formulář pravým tlačítkem a zvolte Preview.

Sestava je hotová, menším problémkem se může zdát to, že neexistuje žádná aplikace, která by ji využívala. Uvědomte si ale, že do nově vytvořené aplikace byl pouze přidán další formulář. Není proto problém na původní formulář umístit několik komponent sloužící k „normální“ práci s databází (jak jsme si je ukazovali v 17. a 18. dílu tohoto seriálu) a pouze přidat tlačítko sloužící k vytvoření a zobrazení sestavy, např. btnSestava, jehož událost OnClick bude obsloužena takto (původní formulář se jmenuje frmHlavni, ostatním komponentám pro názornost ponechávám názvy, které jim přidělil průvodce):

procedure TfrmHlavni.btnSestavaClick(Sender: TObject);
begin
  Form2.QuickRep1.Preview;
end;

Po zobrazení Preview je možné klepnutím na ikonku s tiskárnou sestavu ihned vytisknout na papír. Jak jednoduché, že?

Vytvoření sestavy pomocí šablony

Opět začněte vytvořením nové aplikace (File – New Application). Pak zvolte File – New…, karta Forms, položka Quick Report List (viz následující obrázek):

Klepněte pro větší obrázek

Do aplikace se přidá nový formulář, který již obsahuje komponentu QuickRep a některé oddíly. Nyní ale je nutné ručně vytvořit kompletní vizuální (i datový) návrh sestavy. Proto ze sestavy postupně vymažeme několik komponent, které nepotřebujeme, a umístíme na ni několik komponent, které nám naopak chybí.

V sestavě si ponecháme následující oddíly:

  • titulek (komponenta QRBand, vlastnost BandType = rbTitle, vlastnost Name = TitleBand1);
  • záhlaví sloupce (komponenta QRBand, vlastnost BandType = rbColumnHeader, vlastnost Name = ColumnHeadreBand1);
  • detaily (komponenta QRBand, vlastnost BandType = rbDetail, vlastnost Name = DetailBand1);
  • zápatí stránky (komponenta QRBand, vlastnost BandType = rbPageFooter, vlastnost Name = PageFooterBand1).

    Na oddíl titulek přidáme komponentu QRLabel, do jejíž vlastnosti Caption zapíšeme požadovaný titulek, např. `Naši milí zákazníci`. Nastavíme také větší velikost písma u titulku (např Font.Size = 14).

Na oddíl záhlaví sloupce umístíme tolik komponent QRLabel (nápisů), kolik sloupců chceme v sestavě mít (kolik informací o každém zákazníkovi hodláme zobrazovat). Pro jednoduchost vložíme prozatím pouze dva nápisy a jejich vlastnosti Caption nastavíme na `Společnost` a `Její adresa`.

Na oddíl detaily vložíme také dvě komponenty, tentokrát ovšem QRDBText, neboť jejich úkolem bude zobrazovat informace z databáze. Oběma nastavíme vlastnost DataSet = MasterTable (MasterTable je tabulka, která byla automaticky vložena na formulář – udělala to za nás šablona). Jedné z nich pak nastavíme DataField = Company a druhé DataField = Addr1.

V oddílu zápatí stránky necháme již přítomnou komponentu QRSysData (všimněte si, že číslování stránek lze udělat takto automaticky, jen vybráním vhodné hodnoty vlastnosti Data komponenty QRSysData. Jediným problémem ovšem je anglické slůvko Page a to můžeme změnit nastavením vlastnosti Text téže komponenty).

Sestava je hotova, zmenšené okno s návrhem vidíte na následujícím obrázku:

Klepněte pro větší obrázek

Na původní formulář můžete (zcela stejným způsobem jako u předchozího příkladu vytvoření pomocí průvodce) vložit tlačítko, jehož stisk vyvolá náhled sestavy. Nezapomeňte se ujistit, že komponenta Table (nazvaná MasterTable) má hodnotu vlastnosti Active = True, jinak data nebudou v sestavě vidět.

Vytvořená sestava sice není příliš krásná (viz ukázka na následujícím obrázku), nicméně jistě stačí k demonstraci práce se šablonami sestav.

Klepněte pro větší obrázek

Vytvoření sestavy zcela ručně

Pokud se rozhodnete, že se nesnížíte k použití různých podpůrných nástrojů typu průvodců či šablon, máte samozřejmě možnost vytvořit celou sestavu zcela sami.

Pokud jste již přečetli předchozí podkapitolu (vytvoření sestavy pomocí šablony), nebude pro vás následující text příliš překvapivý. Jediná změna oproti použití šablony spočívá v tom, že si na formulář musíte sami umístit všechny potřebné komponenty a oddíly:

  • tabulka (Table), ve které nastavíte DatabaseName = DBDEMOS, TableName = customer.db, Active = True;
  • sestava (Quick Report). V ní buď vhodně nastavíte vlastnost Bands (oddíly), nebo na ni umístíte ručně potřebné komponenty QRBand (oddíly), a to tyto:
    titulek BandType = rbTitle, záhlaví sloupce BandType = rbColumnHeader, detaily BandType = rbDetail, zápatí stránky BandType = rbPageFooter.

Pak již způsobem zcela stejným jako v předchozí podkapitole věnované šablonám umístíte na jednotlivé oddíly komponenty QRLabel, QRDBText a QRSysData a nastavíte jejich vlastnosti.

Sestava by měla fungovat zcela stejným způsobem jako v předchozím případě.

Modifikace tisknutých dat

Často se může stát, že nechceme data na sestavu tisknout přesně v tom tvaru, v jakém jsou uložena v databázové tabulce. V takovém případě máme k dispozici třeba událost BeforePrint jednotlivých oddílů, jak bylo již výše zmíněno.

Ukažme si konkrétní příklad: chceme tisknout pouze takové zákazníky, kteří mají sídlo ve Spojených státech. Příslušná tabulka (datová množina) se nazývá Table, sídlo zákazníka je uvedeno v tabulce ve sloupci `Country`. Ošetříme událost BeforePrint oddílu Detail naší sestavy:

PrintBand := Table[`Country`] = `US`;

Připomeňme, že parametr PrintBand je typu Boolean, a pokud má hodnotu False (což nastane vždy, nebude-li splněna rovnost na pravé straně přiřazovacího příkazu), nedojde k tisku aktuálního údaje příslušného oddílu.

Šablony pro různé typy sestav

Pokud jste si pozorněji prohlédli dialog, ve kterém jste vybírali šablonu Quick Report List, zřejmě jste si všimli, že v dialogu bylo k vidění více typů šablon pro sestavy. Konkrétně šlo o dva další typy: Quick Report Labels a Quick Reprt Master/Detail. Quick Report Labels je velmi příhodná šablona, která slouží k vytvoření seznamu adresních štítků. Vytvořená sestava obsahuje pouze jeden oddíl typu Detail, jeho šířka a výška je rovna rozměrům jednoho štítku na standardním formuláři obsahujícím tři sloupce štítků.

Quick Report Master/Detail je šablona pro vytvoření sestavy typu Master/Detail. Touto šablonou se zde bohužel nemůžeme zabývat pro nedostatek místa, nicméně při „vážné“ práci s rozsáhlejší databází je tento typ sestavy používanější než jakýkoliv jiný.

V případě sestavy typu Master/Detail se na sestavě zobrazují údaje z více datových množin. Příkladem budiž tabulka dodavatelů obsahující jedinečné identifikátory dodavatelů a tabulka součástek, ve které nalezneme seznam čísel součástek a ke každé z nich identifikátor jejího dodavatele (tato situace nastává například v rámci databáze DBDEMOS a tabulek Vendor.db a Parts.db). Budeme-li mít takovou strukturu, budeme chtít třeba vypisovat jednotlivé dodavatele a ke každému z nich seznam součástek, které nám dodává. K tomu je ideální sestava typu Master/Detail.

Obecný postup vytvoření rychlé výstupní sestavy

Z uvedeného textu a z popsaných příkladů vyplývá zjednodušené obecné schéma vytváření výstupní sestavy z databáze:
  • Vytvoření nové aplikace a vložení formuláře, který bude sestavu reprezentovat (tento formulář nebude uživateli nikdy zobrazen; uživatel vždy uvidí pouze hotovou sestavu, případně její náhled).
  • Vložení dalších nezbytných komponent (tlačítka, apod.) a datových množin (tabulka, SQL dotaz, apod.)
  • Analýza dat, které chceme v sestavě zobrazit, a následný výběr oddílů sestavy. Zopakujme, že oddíly samy o sobě nezobrazují žádná data, pouze determinují způsob, jakým budou datové komponenty, které do jednotlivých oddílů vložíme, zobrazeny (např. na začátku každé stránky, jen na začátku sestavy, v závěru každé stránky apod.).
  • Vložení komponent, které budou zobrazovat vlastní data, do jednotlivých oddílů sestavy. Tyto komponenty musí odrážet typ zobrazovaných dat, např. pro jednořádkové údaje se použije jiná komponenta než pro obrázky či text ve formátu RTF, apod.
  • Vytvoření vizuálního rozhraní sestavy, tedy vložení rámů (vlastnosti Frames), změna typu a velikosti písma jednotlivých komponent, apod.
  • Propojení všech komponent a oddílů s vlastními daty reprezentovanými datovou množinou (např. tabulkou, SQL dotazem apod.).
  • Nastavení reakcí na jednotlivé události, zde je také možné modifikovat vypisovaná data, případně výpis některých dat přímo potlačit (např. po stisku – OnClick – tlačítka se vytvoří náhled sestavy – Preview, ale budou se tisknout pouze zákazníci z České republiky, apod.).
  • A na závěr nezapomeňte nastavit vlastnost Active použitých „datových“ komponent (tabulek, dotazů) na True :-)
Na závěr kapitoly o rychlých výstupních sestavách zopakujme, že generátor sestav Quick Report je skutečně nesmírně mocný nástroj. Jakékoliv jiné „dobývání“ informací z databázových tabulek (tedy ve smyslu „dobývání bez nástroje Quick Report“) by jistě bylo méně komfortní a složitější. Práci programátorům usnadňují šablony a průvodci, nicméně i bez nich lze relativně rychle vytvořit slušně vypadající výstupní sestavu.
Diskuze (2) Další článek: Do banky přes Internet

Témata článku: Software, Programování, Sestavy, Jednoduchý typ, Obecný postup, Dialog, Detail, Původní data, DEL, RBD, Jednotlivé komponenty, Nová modifikace, Finish, Quick, Následující aplikace, Stejný dotaz, Apod, Rychlý krok, Master, Jednotlivý díl, RBC, Výstup, Sloupec, Díl, Report


Určitě si přečtěte

Z rozmazané šmouhy krásná fotka. Takhle kouzlí nová umělá inteligence MyHeritage

Z rozmazané šmouhy krásná fotka. Takhle kouzlí nová umělá inteligence MyHeritage

** MyHeritage slibuje nejlepší neuronovou síť pro vylepšování fotek ** Funguje tím líp, čím horší fotku upravuje ** Otestovali jsme desítky různých snímků

Marek Lutonský, Lukáš Václavík | 39

Co přijde po Netflixu a Amazonu? Tohle jsou streamovací služby, na které v Česku čekáme

Co přijde po Netflixu a Amazonu? Tohle jsou streamovací služby, na které v Česku čekáme

** Rozhodujete se mezi Netflixem a HBO Go? Věřte, bude hůř ** Na trhu je mnohem víc ambicióznějších streamovacích služeb ** Některé by mohly do ČR zamířit ještě letos

Lukáš Václavík | 45

Podívejte se na Windows z roku 1990. Před 30 lety přišly Windows 3.0 a líbily se nám

Podívejte se na Windows z roku 1990. Před 30 lety přišly Windows 3.0 a líbily se nám

** 22. května 1990 uvedl Microsoft Windows 3.0 ** Systém z Microsoftu definitivně udělal lídra na desktopu ** Tehdejší Windows byly vlastně grafickou nadstavbou nad MS-DOS

Jakub Čížek | 75

AR není ani po letech žádný trhák. Teď to zkusí Hybri, který svleče vaše kamarádky

AR není ani po letech žádný trhák. Teď to zkusí Hybri, který svleče vaše kamarádky

** Rozšířené realitě i po letech chybí praktické využití ** Selhaly mobilní aplikace i AR brýle ** Floridské studio to proto zkusí přes bizarní erotiku Hybri

Jakub Čížek | 20


Aktuální číslo časopisu Computer

Megatest: nejlepší notebooky do 20 000 Kč

Test 8 levných IP kamer

Jak vybrat bezdrátová sluchátka

Testujeme Android 11