報表設計基礎
# 報表設計基礎
FastReport設計器將報表(報告)表示為原理圖頁面的集合。 對像放置在報表(報告)頁面上的任何位置,用於定義報表(報告)的外觀並顯示各種資訊,例如文字和圖形。 標準軟體包中包含的FastReport對像有:
圖示 | 名稱 | 說明 |
---|---|---|
插入數據段 | 設計頁面上根據其型別表現的區域(例如標題數據段,數據數據段) | |
文字對像 | 在矩形區域內顯示一行或多行文字 | |
圖片對像 | 以BMP ,JPEG ,ICO ,WMF 或EMF 格式顯示圖形檔案 | |
系統文字 | 顯示系統資訊(日期,時間,頁碼等)或合計值等 | |
子報表對像 | 允許在宿主頁面中插入另一個報表設計頁面 | |
繪製 | 顯示各種幾何形狀(對角線,矩形,圓角矩形,橢圓形,三角形和菱形) | |
圖表對像 | 以各種圖表格式(餅圖,直方圖等)顯示數據 | |
富文字對像 | 以RTF(富文字)格式顯示文字 | |
覈取方塊對像 | 顯示帶有打勾或叉號的覈取方塊 | |
條形碼對像 | 根據數值顯示條形碼或者二維碼的元件 | |
交叉表對像 | 顯示交叉數據表的對象,數據通過手工或者指令碼引入 | |
DB交叉表對像 | 顯示交叉數據表的對象,數據來源於資料庫的欄位 | |
圖表對像 | 顯示圖表數據的資訊 | |
漸變色對像 | 作為背景使用,顯示漸變的顏色 | |
條形碼對像 | 用作顯示條形碼或者二維碼的對象 |
Flying中包含的擴充套件對像如下:
圖示 | 名稱 | 說明 |
---|---|---|
郵政編碼對像 | 用於展示郵政編碼型別的對象 | |
網格文字對像 | 金融應用中使用較多,使用方式與文字對像類似 | |
地圖對像 | 用於展示地圖等相關資訊的對象 | |
儀表對像 | 用於展示儀表等相關的功能 | |
間距標尺儀表對像 | 用於展示包含間距測量功能的儀表 | |
最常用的基本對象是數據段和文字對象。 您將在本節詳細瞭解它們的功能。
# 1. HelloWorld報表示例
示例報表(報告)僅包含一條資訊:「 Hello,World!」。 打開報表設計器,然後單擊對像工具欄中的「文字對像」按鈕。 將滑鼠游標移到頁面上,然後再次單擊。 該對像將插入到滑鼠位置。
文字編輯器視窗將立即打開; 如果它沒有自動出現,則雙擊該對象。 可以在設計器設定中配置文字編輯器的打開。 輸入「 Hello,World!」,然後單擊[確定]
按鈕。
報表(報告)設計完成。 要預覽報表(報告),請選擇[檔案]
-[預覽]
功能表項,或單擊工具欄中的相應按鈕。 將出現預覽視窗,其中包含帶有「 Hello,World!」文字的報表(報告)頁面。 該報表(報告)可以列印出來,可儲存到檔案(* .fr3)或導出為支援的導出格式。
# 2. 文字對像
# 2.1. 基本使用方式
文字對像具有許多功能。 它可以在框架中顯示文字並用一種顏色填充。 可以使用任何大小和樣式的任何字型顯示文字。 可以在工具欄上直觀地設定所有屬性。以下是一些文字設計示例:
現在,讓我們看一下該基本對象的其他功能。 例如,讓我們建立一個新的文字對像以顯示兩行文字:
This is a very, very, very long text line.
And this is another line, the shorter one.
從工具欄啟用對像邊框,然後使用滑鼠將對像調整為最大9x3cm的大小。 我們看到對像不僅可以顯示一行,而且可以顯示多行文字。 現在將對像寬度減小到5釐米。 顯然,長文字不適合邊框內容,因此被換行了。 這是由WordWrap
對像屬性控制。 如果禁用該功能(在對像檢視器中或通過對像上下文功能表),任何長行都將被裁切。
現在,讓我們看看對像內部的文字對齊方式是如何工作的。 對齊按鈕位於文字格式工具欄中,用於控制水平或垂直文字對齊。 注意兩端對齊按鈕,該按鈕可讓您將段落對齊到對象的兩個邊緣。為此,必須啟用WordWrap
。
對像中的所有文字都可以旋轉到0..360°範圍內的任何角度。 文字格式工具欄中的[文字方向]
按鈕可讓您快速將文字旋轉到0、45、90、180或270°的預設值。 對於任何其他值,請在對像檢視器的Rotation
屬性中設定所需的角度。 如下圖所示,將文字旋轉到90、180或270°以外的角度時,文字可能會被對象的邊框切斷。 要解決此問題,請稍微增加對像高度,以使所有文字都適合對象。
讓我們簡要地看一下影響其外觀的其他文字對像屬性。 這些屬性大多數僅在對像檢視器中可用:
- BrushStyle: 對像填充的型別
- CharSpacing: 在字元之間進行儲存(以畫素為單位)
- GapX,GapY: 左右邊緣的文字縮排,以畫素為單位
- LineSpacing: 行間距,以畫素為單位
- ParagraphGap: 段落的第一行縮排,以畫素為單位
# 2.2. 在文字對像中使用HTML標籤
文字對象可識別一些簡單的HTML標籤。 標籤可以位於對象的文字內。 預設情況下,標籤是禁用的,要啟用它們,請在對象的右鍵功能表中選擇[允許HTML標記]
,或者在對像檢查器中啟用AllowHTMLTags
屬性。 以下是受支援標籤的列表:
<b>:粗體
<i>:斜體文字
<u>:帶下劃線的文字
<sub>:下標
<sup>:上標
<font color>:字型顏色
<nowrap>:啟用WordWrap時未拆分的文字,整個文字移至下一行
2
3
4
5
6
7
請注意,文字對像僅支援少量標籤,但這對於大多數應用程式來說已經足夠。 無法通過HTML標記修改字型大小或名稱。
以下示例將展示如何使用這些標籤。
text <b>bold text</b> <i>text in italic</i> <b><i>bold and in italic</b></i>
E = mc<sup>2</sup>
A<sub>1</sub> = B<sup>2</sup>
this is a usual text, <font color=red>and this is a red one</font>
this is a usual text, <font color="#FF8030">and this is an orange one</font>
2
3
4
5
# 2.3. 在文字對像中顯示錶達式
文字對象的最重要特徵之一是它不僅可以顯示靜態文字,還可以顯示錶達式。 表達式可以位於與普通文字混合在一起的對象中。 讓我們看一個簡單的例子。 在對像中鍵入以下內容:
Hello, World! Today is [DATE].
運行報表時,我們可以得到類似如下資訊:
Hello, World! Today is 01.01.2018.
當報表引擎建立報表(報告)並遇到方括號中的表達式時,報表引擎將計算該表達式的值,並將該值插入文字中以代替該表達式。 文字對象可以包含任意數量的與普通文字混合的表達式。 複雜表達式可以包含方括號(例如[1 + 2 *(3 + 4)])。 常量,變數,函式和數據表字段都可以在表達式中使用。 我們將在後面詳細瞭解這些內容。
報表引擎可以自動識別文字中方括號內的表達式。 但是,如果我們的普通文字包含不希望被視為表達式的方括號,會發生什麼? 例如,如果我們需要顯示以下內容:
a[1] := 10
報表引擎會將[1]
視為表達式並將文字顯示為:
a1 := 10
當然,這不是我們想要的。 避免這種情況發生的其中一種方法是禁用表達式識別。 禁用AllowExpressions
屬性(或右鍵功能表中的[允許表達式]
),文字中的所有表達式將被忽略。 在我們的示例中,報表引擎將準確顯示我們需要的內容:
a[1] := 10
但是有時文字需要同時包含表達式和帶方括號的普通文字,例如:
a[1] := [myVar]
禁用AllowExpressions
可以使我們在所需的位置顯示方括號,但同時也禁用對錶達式的處理。 在這種情況下,報表引擎允許您使用另一組符號來指定表達式。 預設情況下, ExpressionDelimiters
屬性值為[,]
。 在我們的示例中,我們可以使用尖括號代替表達式:
a[1] := <myVar>
必須在 ExpressionDelimiters
屬性中設定<,>
,在此屬性中需要使用逗號分隔開頭和結尾符號。 另一個要求是,開始和結束符號不能相同,因此%,%
將不起作用。 可以使用複數符號,例如<%,%>
。 因此我們的示例可能如下所示:
a[1] := <%myVar%>
# 3. 數據段(顯示區域)
數據段用於將它們包含的對象放置在輸出頁面上的特定位置。 將對像放在PageHeader(頁首)
區域中時,我們告訴報表引擎,給定的對象必須顯示在完成的報表中每個頁面的頂部。 同樣, PageFooter(頁尾)
區域中的對象顯示在每個頁面的底部。 讓我們用一個例子來證明這一點。 我們將在頁面頂部建立一個包含「 Hello!」的報表(報告),其右側為目前日期,在頁面底部的右側為頁碼。
打開報表設計器后 您將看到一個報表(報告)模板,首先使用報表設計器插入三個區域:「 ReportTitle」(報表抬頭),「 MasterData」(主數據)和「 PageFooter」(頁尾)。 讓我們先暫時刪除「 MasterData」區域(單擊該區域內部或其標題上的任何可用空間,然後使用右鍵功能表中的[刪除]
或按下Delete按鍵將其刪除)。 現在,我們新增一個新的數據段(「 PageHeader(頁首)」)。 單擊對像工具欄上的[插入數據段]
按鈕,然後從下拉選單中選擇[頁首]
」。 我們看到一個新的數據段被新增到頁面。 同時將現有數據段下移。 報表設計器自動在頁面上放置區域(標題區域在頂部,數據區域在中間,頁尾在底部)。
現在,我們新增一些對象。 在「 PageHeader」區域中新增一個系統文字對象,然後在其編輯器中,從[變數]-[系統變數]
的列表中選擇、DATE
(目前日期也可以通過文字對像顯示) 在其編輯器中會鍵入[DATE]
。 接下來,將一個包含「 Hello!」的文字對像新增到「 ReportTitle」區域。 將顯示頁碼的文字第[<Page>]頁 共[<TotalPages>]頁
對像新增到「 PageFooter」區域。注意在報表-選項
中要勾選兩遍過程
,否則文字的總頁數不顯示。
運行報表(報告)時,您將看到完成的報表(報告)中的對象被列印在頁面上的適當位置。
數據段負責在頁面上定位對象。 根據數據段的型別,我們可以在頁面頂部或底部以及第一頁或最後一頁上列印對象。 大多數報表(報告)中需要的基本範圍如下:
- PageHeader(頁首): 顯示在每頁的頂部
- PageFooter(頁尾): 顯示在每頁的最底部
- ReportTitle(報表抬頭): 顯示在第一頁的頂部-可以在「 PageHeader」區域之前或之後,具體取決於頁面的
TitleBeforeHeader
屬性(在單擊頁面上的任何可用空間后在對像檢查器中找到 ) - ReportSummary(報表合計): 顯示在報表(報告)末尾的空白處
# 3.1. 數據數據段
現在,我們將學習如何從資料庫表中列印數據。資料庫表由組織成行(記錄或行)的數據組成,其中包含一個或多個列(欄位)。 爲了列印這些數據,FastReport使用一種特殊的數據段,將各種數據段命名為... Data
。 要列印整個表格或其中的某些行和欄位,必須將一個或多個這些數據段新增到報表中,將它們連線到表格並將欄位對像放在其中。 當FastReport產生報表(報告)時,數據段區將被列印在輸出頁面上,表中的每個記錄都會輸出一次。 如果數據段的輸出頁面上沒有剩餘空間,則報表引擎將建立一個新的輸出頁面以繼續接上頁進行輸出。
# 3.2. 匯入數據集
爲了使數據集(及其連線的數據)可用於報表,必須啟用報表中使用的所有數據集。 通過FastReport設計器中的[報表]
-[數據...]
功能表項執行此操作,在打開的對話方塊中選擇所需的數據集。
# 3.3. 在文字對像中顯示資料庫欄位
如您所見,文字對像除可以顯示資料庫中的數據以及靜態文字和表達式外,還可以通過兩種方式完成此操作:通過將指向資料庫欄位的鏈接放在對像文字中,或者通過對象的 DataSet
和 DataField
屬性將對像連線到所需欄位。 第一種方法適用於在同一對像中同時顯示欄位內容和限定文字。 例如:
物料程式碼:[dts1."FItemCode"]
指向資料庫欄位的鏈接需要特殊的語法:[datasetname.「fieldname」]
。 欄位名稱(以及數據集名稱)可以包含空格,但點和引號符號之間不能有任何空格。
此外,我們還可以將計算操作應用於表達式中的欄位,如下所示:
物料程式碼: [<dts1."FInterID"> * 1]
請注意必須使用方括號和尖括號。 請記住,預設情況下使用方括號來分隔對像文字中的表達式。 如有需要,方括號可以替換為其他任何打開/關閉字元對(請參考在文字對像中顯示錶達式)。 表達式內部使用尖括號來描述FastReport變數或資料庫欄位。 邏輯上我們應該寫:
物料程式碼:[<dts1."FItemCode">]
而不是
物料程式碼:[dts1."FItemCode"]
但是,這兩種表示法都是正確的,因為FastReport不需要尖括號,其中表達式僅包含變數或僅包含資料庫欄位。 在所有其他情況下,都需要使用尖括號。
# 4. 變數
在上述示例中,數據集名稱和欄位名稱均為數據表中指定的內容,對於製作報表來說可能會難以理解,在SQL中可以使用別名的方式使數據集中的欄位名稱便於理解,這種方式也可以用在FastReport的數據集構建過程中,除此之外,FastReport還有另一種方法可以幫助報表設計者為資料庫欄位和其他資訊元素設定更易理解的名稱。資料庫欄位名稱或任何表達式都可以與變數關聯。要在FastReport中建立和使用變數,請選擇[報表(報告)]
-[變數...]
功能表項。
FastReport中的變數列表具有兩級結構。第一級僅包含類別,第二級包含變數本身。當變數列表很長時,此變數分類很方便。變數列表必須至少包含一個類別,這意味著變數不能位於頂層。此外,類別名稱不能包含在報表中,因此列表中的每個名稱都必須是唯一的。
讓我們通過以下示例來說明變數的用法。假設我們有兩個數據源:第一個是帶有FItemCode
和FItemName
欄位的dts1
,來源於FastERP
資料庫中的Basic_Item
表,第二個是帶有FCompanyCode
和FCompanyName
欄位的Basic_Company
表。我們可以將以下變數列表與欄位相關聯:
公司
公司編號
公司名稱
物料
物料編號
物料名稱
2
3
4
5
6
其中「公司」和「物料」是兩個類別。打開變數編輯器,並使用[類別]
,[變數]
和[編輯]
按鈕建立此結構。
工具欄中分別為類別、變數、編輯、刪除、列表、匯入、導出、取消、確定按鈕。
也可點選工具欄中的第五個按鈕[列表]
,在出現的字串清單界面快速設計類別與變數目錄。
要將變數鏈接到資料庫欄位,請選擇一個變數,然後在右側窗格中雙擊所需的欄位。資料庫欄位的鏈接將顯示在底部窗格中。此時變數已與此表達式關聯,因此變數的值成為表達式的值。如有必要,可以手動編輯或修改表達式,並且可以在其中使用任何FastReport函式或其他變數。請記住,類別不得與任何表達式關聯。
建立變數列表后,關閉變數編輯器。現在我們可以將變數插入報表中。與資料庫欄位相比,插入方法較少。我們可以通過鍵入[物料名稱]
將變數手動插入對像文字中,也可以將變數從數據樹窗格拖到報表頁面上,在這種情況下,請切換到變數選項卡窗格。
讓我們回顧一下到目前為止所學到的知識點:
- 報表(報告)設計由設計頁面組成
- 頁面可能包含報表對象,可以放置在頁面上或在數據段內
- 數據段是設計頁上的佔位符,並根據數據段型別控制它們包含的對象在輸出頁上的顯