RDL/RDLC批量单据打印 [转]
RDL/RDLC批量單據打印
使用RDL或RDLC進行單據打印時,單張單據打印比較直觀簡單,無需說明。下面我們來談一下批量單據打印的實現方法。以下以RDL的ReportBuilder設計環境為例進行講解,RDLC、VS設計環境同理。實現效果如下。
一、 基本思路
數據集:將單據表頭、表體合并為一個數據集。例如將以下兩個表合并為一個DataSet查詢:單據號碼、客戶代碼、部門、貨品代碼、貨品名稱、倉庫、數量、單價、金額等。
- 表頭字段:單據號碼、客戶代碼、部門等;
- 表體字段:項次、貨品代碼、貨品名稱、倉庫、數量、單價、金額等字段;
控件:列表、矩形、文本框、表。使用“列表”控件作為單據的邊界,并在列表中設置一個“單號”分組,實現分頁,在“列表”中設計單據表頭及明細表體。
二、 詳細步驟
1. 建立列表
在主體中插入一個列表,并指定其數據源。
選擇列表,在行組中用鼠標右鍵選擇詳細信息,選擇 組屬性 ,設置“單據號碼”分組,為了明了,修改組名稱為 “單據號碼”。排序選項根據需要設定。
在分頁符選項卡上設置分頁,這樣可以實現一張單據分頁的效果。
此時得到了一個單據容器,用以容納我們即將要設計的單據。
2. 單據明細信息:列表與矩形
細心一點你會發現,在我們剛才插入的“列表”控件中,還有嵌套了一個“矩形”(Rectangle)控件,這是布局所需要的。如果沒有矩形的話,我們拖進列表中的字段,將會成為列表本身的值。所以不管是列表、表或矩陣,如果想在Tablix表格之中再進行布局,則先鋪一個矩形是非常必要的。
因為有矩形的存在,所以我們可以像普通報表一樣,在列表中布置表頭文本框,和表體詳細數據。需要注意的是一些設計細節,比如表頭居中,表體數量型字段需要居右,其他字段居左,小數位數的取舍等等。
表頭的設計推薦兩種方式:
1)表頭信息可以使用下圖中的“文本框”控件,設計空間比較自由。
?
2)也可以在詳細數據表第一行之上再添加一個數據行,合并整行后插入個矩形控件,再插入一個無邊框的數據表用來作為表頭,這樣比較整齊
3. 頁眉頁腳
將每頁都有重復顯示的東西放在頁眉和頁腳。當然還有表格的表頭也要設置為在每頁中重復。方法是先選中“表”,進入高級模式,在行組中選擇作為表頭的“靜態”行,在屬性中將RepeatOnNewPage設置為True。
如果有些信息需要在每頁中都要顯示,但因為針式打印中存在換頁切紙問題,所以把一些重要信息設置在表中,也可以通過設置RepeatOnNewPage屬性,在每頁中顯示。
4. 單據分頁
在第一步中已經設置了單據分頁,需要注意的是,這個列表空間與“頁腳”之間不能存在空隙,否則單據最后一頁就總會有一個空白頁。
其實實現單據分頁有很多種方法,不拘泥于這一種。大家自行摸索。
三、 其他細節
1. 大寫金額
在報表空白處右擊鼠標,選擇報表屬性,將下面的通過網絡搜集的代碼粘貼進去,在表中表達式中引用此函數即可。
=code.CNMoney(Sum(Fields!金額.Value))
?
1 '############################################################################# 2 3 '貨幣轉換為中文漢字表述 4 5 '函數名稱:CNMoney 6 7 '參數:ls 8 9 '返回值:轉換后的字符串 10 11 '整理人:阿泰 12 13 '版本歷史 14 15 '本文函數來源于 feng442624978,原帖地址: 16 17 'http://topic.csdn.net/u/20100303/15/0f0ceca7-d29d-4269-b0f5-17ea09d0f139.html 18 19 '############################################################################# 20 21 Shared Function CNMoney(ls As Double) As String 22 23 Dim dx_sz As String 24 25 Dim dx_dw As String 26 27 Dim str_int As String 28 29 Dim str_dec As String 30 31 Dim dx_str As String 32 33 Dim fu As String 34 35 Dim a As String 36 37 Dim b As String 38 39 Dim c As String 40 41 Dim d As String 42 43 Dim b2 As String 44 45 Dim num_int As Long 46 47 Dim num_dec As Long 48 49 Dim len_int As Long 50 51 Dim i As Long 52 53 Dim a_int As Long 54 55 Dim pp As Long 56 57 dx_sz = "零壹貳叁肆伍陸柒捌玖" 58 59 dx_dw = "萬仟佰拾億仟佰拾萬仟佰拾圓" 60 61 If ls = 0 Then 62 63 CNMoney = "零圓整" 64 65 Exit Function 66 67 End If 68 69 If ls < 0 Then 70 71 ls = Abs(ls) 72 73 fu = "負" 74 75 Else 76 77 fu = "" 78 79 End If 80 81 dx_str = CStr(ls) 82 83 dx_str = Replace(dx_str, "¥", "") 84 85 dx_str = Replace(dx_str, ",", "") 86 87 If (ls >= 0) And (ls < 1) Then dx_str = "0" + dx_str 88 89 pp = InStr(dx_str, ".") 90 91 If pp > 0 Then 92 93 str_int = Mid(dx_str, 1, InStr(dx_str, ".") - 1) 94 95 Else 96 97 str_int = dx_str 98 99轉載于:https://www.cnblogs.com/bluedy1229/p/7266046.html
總結
以上是生活随笔為你收集整理的RDL/RDLC批量单据打印 [转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入分析Java Web技术内幕pdf
- 下一篇: 前后端联调实践总结