使用RDL或RDLC進行單據打印時,單張單據打印比較直觀簡單,無需說明。下面我們來談一下批量單據打印的實現方法。以下以RDL的ReportBuilder設計環境為例進行講解,RDLC、VS設計環境同理。實現效果如下。

數據集:將單據表頭、表體合并為一個數據集。例如將以下兩個表合并為一個DataSet查詢:單據號碼、客戶代碼、部門、貨品代碼、貨品名稱、倉庫、數量、單價、金額等。
控件:列表、矩形、文本框、表。使用“列表”控件作為單據的邊界,并在列表中設置一個“單號”分組,實現分頁,在“列表”中設計單據表頭及明細表體。
1. 建立列表
在主體中插入一個列表,并指定其數據源。

選擇列表,在行組中用鼠標右鍵選擇詳細信息,添加以“單據號碼”分組。

刪除“詳細信息”組及自動新增的“單據號碼”列。


此時得到了一個單據容器,用以容納我們即將要設計的單據。

2. 列表與矩形
細心一點你會發現,在我們剛才插入的“列表”控件中,還有嵌套了一個“矩形”控件,這是布局所需要的。如果沒有矩形的話,我們拖進列表中的字段,將會成為列表本身的值。所以不管是列表、表或矩陣,如果想在Tablix表格之中再進行布局,則先鋪一個矩形是非常必要的。
因為有矩形的存在,所以我們可以像普通報表一樣,在列表中布置表頭文本框,和表體詳細數據。不再贅述。

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 End If100 101 num_int = CLng(str_int)102 103 If (ls > 0) And (ls < 1) Then104 105 num_dec = ls * 100106 107 Else108 109 num_dec = (ls - num_int) * 100110 111 End If112 113 str_dec = CStr(num_dec)114 115 str_dec = Replace(str_dec, "¥", "")116 117 len_int = Len(str_int)118 119 dx_str = ""120 121 For i = 1 To len_int122 123 a = Mid(str_int, i, 1)124 125 a_int = CLng(a)126 127 b = Mid(dx_sz, (a_int + 1), 1)128 129 c = Mid(dx_dw, (13 - len_int + i), 1)130 131 If dx_str <> "" Then132 133 d = Mid(dx_str, Len(dx_str) - 1, 1)134 135 Else136 137 d = ""138 139 End If140 141 If (b = "零") And ((d = "零") Or (b = b2) Or (c = "圓") Or (c = "萬") Or (c = "億")) Then b = ""142 143 If (a = "0") And (c <> "圓") And (c <> "萬") And (c <> "億") Then c = ""144 145 If ((c = "圓") Or (c = "萬") Or (c = "億")) And (d = "零") And (a = "0") Then146 147 dx_str = Mid(dx_str, 1, Len(dx_str) - 2)148 149 d = Mid(dx_str, Len(dx_str) - 1, 2)150 151 If ((c = "圓") And (d = "萬")) Or ((c = "萬") And (d = "億")) Then c = ""152 153 End If154 155 dx_str = dx_str + b + c156 157 b2 = b158 159 Next i160 161 '處理金額小于1的情況162 163 If Len(dx_str) < 2 Then dx_str = ""164 165 If (num_dec < 10) And (ls > 0) Then166 167 a_int = CLng(str_dec)168 169 b = Mid(dx_sz, (a_int + 1), 1)170 171 If num_dec = 0 Then dx_str = dx_str + "整"172 173 If num_dec > 0 Then dx_str = dx_str + "零" + b + "分"174 175 End If176 177 If num_dec >= 10 Then178 179 a_int = CLng(Mid(str_dec, 1, 1))180 181 a = Mid(dx_sz, (a_int + 1), 1)182 183 a_int = CLng(Mid(str_dec, 2, 1))184 185 b = Mid(dx_sz, (a_int + 1), 1)186 187 If a <> "零" Then a = a + "角"188 189 If b <> "零" Then b = b + "分" Else b = ""190 191 dx_str = dx_str + a + b192
新聞熱點
疑難解答