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 End If
100
101 num_int = CLng(str_int)
102
103 If (ls > 0) And (ls < 1) Then
104
105 num_dec = ls * 100
106
107 Else
108
109 num_dec = (ls - num_int) * 100
110
111 End If
112
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_int
122
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 <> "" Then
132
133 d = Mid(dx_str, Len(dx_str) - 1, 1)
134
135 Else
136
137 d = ""
138
139 End If
140
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") Then
146
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 If
154
155 dx_str = dx_str + b + c
156
157 b2 = b
158
159 Next i
160
161 ‘处理金额小于1的情况
162
163 If Len(dx_str) < 2 Then dx_str = ""
164
165 If (num_dec < 10) And (ls > 0) Then
166
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 If
176
177 If num_dec >= 10 Then
178
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 + b
192
193 End If
194
195 dx_str = fu + dx_str
196
197 dx_str = Replace(dx_str, "零亿", "亿")
198
199 dx_str = Replace(dx_str, "零万", "万")
200
201 dx_str = Replace(dx_str, "零千", "千")
202
203 dx_str = Replace(dx_str, "零圆", "圆")
204
205 CNMoney = dx_str
206
207 End Function

2. 页码

所有的单据中都需要显示第几页共几页,所以我们只需要打开两个报表文件复制粘贴即可,这样做不仅省时省力,还可以保持统一风格。

页码在新版RDL/RDLC中分为组内页码与全部页码两种,作为全局变量都只能放置于页眉或页脚。全部页码指示报表所有的页码情况,而组内页码通常用于单据打印时显示每张单据的第几页共几页。

组内页码:第Globals!PageNumber 页 共 Globals!TotalPages 页

全部页码:第 Globals!OverallPageNumber 页 共 Globals!OverallTotalPages 页

要使用组内分页效果还需设置分页符所在对象中的ResetPageNumber属性,其位于PageBreak属性组中。如本例中,分页符设置在了“总列表”中的组属性中,则就在这个组的属性中设置。

时间: 2024-10-11 21:26:41

RDL/RDLC批量单据打印 [转]的相关文章

批量横向打印Excel

使用VBA脚本写的,具体使用如下:在批量需要打印的Excel文档下面,新建一个文档,将代码粘贴VBA工程里,然后运行即可. 具体代码如下: Attribute VB_Name = "模块1" Sub PiLiangPring() Attribute PiLiangPring.VB_ProcData.VB_Invoke_Func = " \n14" Dim curPath As String curPath = ThisWorkbook.Path & &quo

单据打印模板默认启用打印机本身设置尺寸设置方法

usePaperKind设置为true就会启用打印机本身配置参数. 合川公司由原针式打印机更换为爱普生热敏打印机,更换后,单据打印不全,同一打印模板针式打印机可以打印全,爱普生标签打印机打印不全,经多次测试 分析后,初步断定是纸张类型设置不匹配.如果屏蔽打印模板本身设置成为一个问题,突然发现这个参数设置后,启用 OK.打印机设置生效.可以正常打印 原文地址:https://www.cnblogs.com/xiaoxihebei/p/11612971.html

小巧单据打印管理软件

A.软件名称 小巧票据打印管理软件 B.软件版本  v3.1 C.软件大小  24mb D.软件所需系统要求 win all E.软件是否免费 试用50次 F.软件下载地址 http://www.vtitsoft.net/download/xiaoqiaopiaoju.rar G.软件截图http://www.vtitsoft.net/1.jpg H.PC端:64*64 移动端:http://www.vtitsoft.net/64.jpg 150*150 PNG格式LOGO文件(重要) http

开发版速达软件ERP-销售开单单据打印格式设计

由于开发版软件和速达软件的报表样式无法兼容,使用开发版速达,报表样式必须重新设置:故针对开发版单据样式设计录制一个视频,共大家参考学习: http://v.youku.com/v_show/id_XMzU2NDU4MTk4NA==.html?spm=a2h3j.8428770.3416059.1 原文地址:https://www.cnblogs.com/devsuperdata/p/8947530.html

VS2012报表(RDLC)系列应用之单据批量打印

一.前言 最近做的项目需要单据批量打印的功能,优先想到用RDLC来实现.经过Visual Studio几个版本的发展后,RDLC愈发成熟,操作方式也变得简洁,相比vs2005的版本,有质的提升,不过仍有一下几点缺憾: 1.内置函数不支持C#,只支持Visual Basic 2.不支持Asp.net MVC,支持webForm和winForm 3.VS2008及以下版本开发WebForm时,不建议使用RDLC,因为生成的报表样式不兼容chrome浏览器. 如果未来时间充裕,我将会把RDLC一系列应

个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能

在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改功能.听说Excel最好用的功能是打印功能,在此谨借第50波功能的重大里程碑,献给打印这一最古老且长存的功能,推出批量打印功能. 视频演示 Excel催化剂已正式在千聊上发布视频,如查阅文章有理解障碍,不妨查看下视频,视频不定期更新,内容丰富,干货满满,有术亦有道! 推广期间有砍价购活动,白菜价59

关于图片的一些说法 批量打印 批量制造图片

-------批量打印 1.如何批量处理打印图片及相片等  要求安装“ACDsee”看图软件 2.全能美图看看!看照片还能批量打印照片    要求安装”美图看看“软件 ------批量制造图片 1.以excel2003的文件为数据库   (后缀一定是.xls)    要求安装”office 或者wps“软件并且是xls文件 BarTender 9.4 创建图片控件-设置他的属性----     要求安装”BarTender 9.4“软件 2.创建图片控件 3.-设置他的属性 图片 图片处理 数据

吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享

很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很多人觉得在线设计报表这个功能比较不错,但是很多人也会有疑问.这边文章就简单讲解一下如何开发这个功能的,供大家学习参考,如果有任何疑问可以直接联系我,当然也有很多不足之处希望大家多多谅解和指点. 一. 各种需求报表以及打印 最开始之初在Web上做打印是每个打印也都会做一个页面,利用的是浏览器自身带的打

android 控制POS机图文打印(一)

因为公司业务的需要,要用android客户端控制pos机打印票据,不单只是中文的,而且还要包括二维码的打印的!经过两天的努力!终于搞定了!!!!我真是! 首先,先奉上ESC/POS指令集. EPSON打印控制指令集 打印命令               功能 格式: ASCII: 以标准ASCII字符序列表示 十进制: 以十进制数字序列表示 十六进制: 以十六进制数字序列表示 说明:该命令功能和使用说明. HT                 水平制表 格式: ASCII: HT 十进制: 09