Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠœΠΈΡ€ InterBase. АрхитСктура, администрированиС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² InterBase/FireBird/YaffilΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 41

Автор А Ковязин

Напомним, Ρ‡Ρ‚ΠΎ сам FastReport Π²Ρ‹ всСгда смоТСтС Π½Π°ΠΉΡ‚ΠΈ Π½Π° сайтС http://www.fastrepoit.ru

ПослС установки Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ Π½Π° страницС FastReport Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚: TfrFIBComponents. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ созданию ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π½Π° Π½Π°ΡˆΡƒ Ρ„ΠΎΡ€ΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: frReport: TfrReport; frFIBComponents: TfrFIB Components ΠΈ frDBDataSetl: TfrDBDataSet (рис. 2.30).





Рис 2.30. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ FastReport

ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ², Π΄Π²Π°ΠΆΠ΄Ρ‹ Π½Π°ΠΆΠ°Π² Π½Π° frReport (рис. 2.31).





Рис 2.31. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ²

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· рисунка, ΠΎΠ±Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° TpFIBDataSet ΡƒΠΆΠ΅ доступны Π½Π°ΠΌ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅. Для Π½Π°Ρ‡Π°Π»Π° рассмотрим самый простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ распСчатаСт Π½Π°ΠΌ список ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² прайс-листС (рис. 2.32).





Рис 2.32. Π¨Π°Π±Π»ΠΎΠ½ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΎ катСгориях Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²

Для этого ΠΌΡ‹ помСстим Π½Π° страницу Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ полосы (band): Report Title, Page Header, Master Data ΠΈ Page Footer. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π½Π° Report Title, Π±ΡƒΠ΄ΡƒΡ‚ распСчатаны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π½Π° Page Header, Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ страницы. Π’ нашСм случаС ΠΌΡ‹ просто Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ‚ΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ PAGE#, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ страницы. Master Data Π½ΡƒΠΆΠ΅Π½ Π½Π°ΠΌ для Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° CategonesDataSet. Π­Ρ‚Π° полоса (band) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько записСй Π² нашСм Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Page Footer Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.

Π£ΠΊΠ°ΠΆΠ΅ΠΌ FastReport, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Для этого Π·Π°Π΄Π°Π΄ΠΈΠΌ свойство DataSource Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° frDBDataSetl (рис. 2 33).





Рис 2.33. Бвойства TfrDBDataSet

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ источник Π΄Π°Π½Π½Ρ‹Ρ… для Master Data Band Π² самом ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ НаТмитС Π΄Π²Π°ΠΆΠ΄Ρ‹ Π½Π° Master Data Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ источник Π΄Π°Π½Π½Ρ‹Ρ… Π² появившСмся Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ (рис. 2.34).





Рис 2.34. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π΄Π°Π½Π½Ρ‹Ρ… для Master Data

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ TfrMemoView, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ выводится названия ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ (рис 2.35.)





Рис 2.35. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ шаблона ΠΎΡ‚Ρ‡Π΅Ρ‚Π° TfrMemoView, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ поля Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π­Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³ рСдактирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Insert data field, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½ΡƒΡŽ Π½Π° рис 2 36.

На этом этапС фактичСски ΠΎΡ‚Ρ‡Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Preview ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ список ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ названиям ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²

НСобходимо Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ наТатия Π½Π° эту ΠΊΠ½ΠΎΠΏΠΊΡƒ (ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сохранили шаблон для ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π² Ρ„Π°ΠΉΠ»Π΅ 'price_categories.frf):

procedure TMainForm.PrintBClick(Sender: TObject);

begin

frReport LoadFromFile('price_categories.frf');

frReport PrepareReport;

frReport.ShowPreparedReport,

end;





Рис 2.36. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ Π΄ΠΈΠ°Π»ΠΎΠ³Π° рСдактирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TfrMemoView

ПослС запуска прилоТСния ΠΈ наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚ (рис. 2.37).





Рис 2.37. Π’ΠΈΠ΄ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΎ катСгориях Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² прайс-листС

ΠžΡ‚Ρ‡Π΅Ρ‚Ρ‹ Π²ΠΈΠ΄Π° master-detail

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π±ΠΎΠ»Π΅Π΅ слоТной структуры, хотя фактичСски это рСализуСтся Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π²ΠΈΠ΄ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°. Π‘Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π° Π½Π°ΡˆΡƒ Ρ„ΠΎΡ€ΠΌΡƒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ frDBDataSet2: TfrDBDataSet - ΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ Π΅Π³ΠΎ свойство DataSource Ρ€Π°Π²Π½Ρ‹ΠΌ GoodsSource. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π΅ полосы (bands): Detail Header (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…) ΠΈ Detail Data (сами Π΄Π°Π½Π½Ρ‹Π΅). На Detail Data ΠΌΡ‹ размСстим Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° TfrMemoView. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ названия Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ - Ρ†Π΅Π½Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π° (рис. 2.38):





Рис 2.38. Π¨Π°Π±Π»ΠΎΠ½ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° для связи мастСр-Π΄Π΅Ρ‚Π°Π»ΡŒ

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ источником Π΄Π°Π½Π½Ρ‹Ρ… для Detail Data ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ frDBDataSet2. ΠžΡ‚Ρ‡Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ². Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠΌ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ» 'price_list.frf ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ клавиши "ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ":

procedure

TMainForm.PrintBClick(Sender: TObiect);

begin

GoodsDataSet.DetailConditions :=

GoodsDataSet.DetailConditions [dcWaitEndMasterScroll];

frReport.LoadFromFile('price.f rf');

frReport.PrepareReport ;

frReport.ShowPreparedReport;

GoodsDataSet.DetailConditions :=

GoodsDataSet DetailConditions + [dcWaitEndMasterScroll];

end,

Π’Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ касаСтся измСнСния DetailConditions. Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, ΠΊΠ»ΡŽΡ‡ dcWaitEndMasteiScioll позволяСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π»ΠΈΡˆΠ½ΠΈΡ… запросов ΠΏΡ€ΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ master-запросу. Однако Π² Π΅Π») Ρ‡Π°Π΅ с распСчаткой ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ наимСнования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ GoodsDataSet Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ запрос, ΠΏΠΎΠΊΠ° FastReport Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· CategonesDataSet Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ошибки, ΠΌΡ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ master-detail Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π΅Π΅ вновь послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ запускС прилоТСния ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ вСсь наш прайс-лист (рис 2.39.)





Рис 2.39. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π²ΠΈΠ΄Π° мастСр-Π΄Π΅Ρ‚Π°Π»ΡŒ

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ курсивом "горячиС" (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, самыС Π΄Π΅ΡˆΠ΅Π²Ρ‹Π΅) ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ прайса. Для этого Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π΅ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ TfrMemoView, Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Objectlnspector ΠΈ установим свойство Highlight. Для этого Π² ΠΏΠΎΠ»Π΅ "Condition" появившСгося ΠΎΠΊΠ½Π° Π²Π²Π΅Π΄Π΅ΠΌ условиС Value<0 ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ способ выдСлСния. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ всС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ прайса с Ρ†Π΅Π½ΠΎΠΉ ΠΌΠ΅Π½Π΅Π΅ 1000 Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ярко-Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ (рис. 2.40).





Рис 2.40. Π”ΠΈΠ°Π»ΠΎΠ³ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² условного форматирования

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² Π² run-time

Одной ΠΈΠ· самых Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… особСнностСй FastReport являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ прямо Π² run-time, Ρ‚. Π΅. Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Π­Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ прСдусмотрСны Π·Π°Ρ€Π°Π½Π΅Π΅, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² этих ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ… ΠΊΠ°ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ запросы, Ρ‚Π°ΠΊ ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹Π΅. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, фактичСски Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΈΡ… ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ… Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ мСняя ΠΊΠΎΠ΄ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹!

ВсС это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ FastReport ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, написанным Π’ΠΈΡ‚Π°Π»ΠΈΠ΅ΠΌ Π‘Π°Ρ€ΠΌΠΈΠ½Ρ‹ΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Π²Ρ‹ΡˆΠ΅.

Для этого Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ TfrDesigner, TfrDialogControls (ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· названия, этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для построСния ΠΈ использования ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ Π² составС ΠΎΡ‚Ρ‡Π΅Ρ‚Π°), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ для Π²Ρ‹Π·ΠΎΠ²Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π° рСдактирования шаблона ΠΎΡ‚Ρ‡Π΅Ρ‚Π° (рис. 2.41).

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ для этой ΠΊΠ½ΠΎΠΏΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простым:

procedure TMainForm.DesignPClick(Sender: TObject);

begin

frReport.DesignReport;

end;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ запускС прилоТСния ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ "Π”ΠΈΠ·Π°ΠΉΠ½ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ²" ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ прямо Π² run-time, ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ВсС эти шаги, Π² сущности, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ ΠΆΠ΅ самым, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностях FastReport, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° создании нСзависимых ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ².





Рис 2.41. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для встраивания Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

Если Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‚ΠΎ шаблон для ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ страницу, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΈ располагаСм полосы для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρƒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ страницу - Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ располоТим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ (рис. 2.42).





Рис 2.42. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ страницы ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

ПослС добавлСния Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° страницу 2 нашСго шаблона Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, доступными для ΠΎΡ‚Ρ‡Π΅Ρ‚Π°, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ряд Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π½Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ (рис. 2.43).





Рис 2.43. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для доступа ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· шаблона ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

ПолоТим Π½Π° Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Query: TfrFIBQuery, ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π΅ΠΌΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² свойствС Database ΠΈ напишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос Π² свойствС SQL:

SELECT "Categories"."Name", "Categories"."GoodsCount"

FROM "Categories"

WHERE "Categories"."GoodsCount" > 0

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ вывСсти Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², количСство Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ большС нуля. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сам шаблон ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, привязав ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ полосы (bands) ΠΊ Query ΠΊΠ°ΠΊ ΠΊ источнику Π΄Π°Π½Π½Ρ‹Ρ… (рис. 2.44).





Рис 2.44. Π¨Π°Π±Π»ΠΎΠ½ встроСнного ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

Π£ΠΊΠ°ΠΆΠ΅ΠΌ источник Π΄Π°Π½Π½Ρ‹Ρ… для Master Data (рис. 2.45).





Рис 2.45. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ полосы (band) ΠΊ встроСнному Π² шаблон запросу

И сохраним наш Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ "pricel.frf". Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ нСсколько ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ нашСго прилоТСния Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. ПолоТим Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ OpenDialog: TopenDialog - ΠΈ напишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ "ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ":

procedure TMainForm.PrintBClick(Sender: TObject);

begin

if not OpenDialog.Execute then exit;

GoodsDataSet.DetailConditions :=

GoodsDataSet.DetailConditions [dcWaitEndMasterScroll];

frReport.LoadFromFile(OpenDialog.FileName);