首页 > 其他 > 详细

批量单据打印

时间:2014-02-08 00:57:52      阅读:525      评论:0      收藏:0      [点我收藏+]

使用RDL或RDLC进行单据打印时,单张单据打印比较直观简单,无需说明。下面我们来谈一下批量单据打印的实现方法。以下以RDL的ReportBuilder设计环境为例进行讲解,RDLC、VS设计环境同理。实现效果如下。

bubuko.com,布布扣

一、 基本思路

数据集:将单据表头、表体合并为一个数据集。例如将以下两个表合并为一个DataSet查询:单据号码、客户代码、部门、货品代码、货品名称、仓库、数量、单价、金额等。

  • 表头字段:单据号码、客户代码、部门等;
  • 表体字段:项次、货品代码、货品名称、仓库、数量、单价、金额等字段;

控件:列表、矩形、文本框、表。使用“列表”控件作为单据的边界,并在列表中设置一个“单号”分组,实现分页,在“列表”中设计单据表头及明细表体。

bubuko.com,布布扣

二、 详细步骤

1. 建立列表

在主体中插入一个列表,并指定其数据源。

bubuko.com,布布扣

选择列表,在行组中用鼠标右键选择详细信息,添加以“单据号码”分组。

bubuko.com,布布扣

删除“详细信息”组及自动新增的“单据号码”列。

bubuko.com,布布扣

bubuko.com,布布扣

此时得到了一个单据容器,用以容纳我们即将要设计的单据。

bubuko.com,布布扣

2. 列表与矩形

细心一点你会发现,在我们刚才插入的“列表”控件中,还有嵌套了一个“矩形”控件,这是布局所需要的。如果没有矩形的话,我们拖进列表中的字段,将会成为列表本身的值。所以不管是列表、表或矩阵,如果想在Tablix表格之中再进行布局,则先铺一个矩形是非常必要的。

因为有矩形的存在,所以我们可以像普通报表一样,在列表中布置表头文本框,和表体详细数据。不再赘述。

bubuko.com,布布扣

3. 页眉页脚

将每页都有重复显示的东西放在页眉和页脚。当然还有表格的表头也要设置为在每页中重复。方法是先选中“表”,进入高级模式,在行组中选择作为表头的“静态”行,在属性中将RepeatOnNewPage设置为True。

如果有些信息需要在每页中都要显示,但因为针式打印中存在换页切纸问题,所以把一些重要信息设置在表中,也可以通过设置RepeatOnNewPage属性,在每页中显示。

bubuko.com,布布扣

三、 其他细节

1. 大写金额

在报表空白处右击鼠标,选择报表属性,将下面的通过网络搜集的代码粘贴进去,在表中表达式中引用此函数即可。

=code.CNMoney(Sum(Fields!金额.Value))

bubuko.com,布布扣

bubuko.com,布布扣

‘#############################################################################

‘货币转换为中文汉字表述

‘函数名称:CNMoney

‘参数:ls

‘返回值:转换后的字符串

‘整理人:阿泰

‘版本历史

‘本文函数来源于 feng442624978,原帖地址:

‘http://topic.csdn.net/u/20100303/15/0f0ceca7-d29d-4269-b0f5-17ea09d0f139.html

‘#############################################################################

Shared Function CNMoney(ls As Double) As String

Dim dx_sz As String

Dim dx_dw As String

Dim str_int As String

Dim str_dec As String

Dim dx_str As String

Dim fu As String

Dim a As String

Dim b As String

Dim c As String

Dim d As String

Dim b2 As String

Dim num_int As Long

Dim num_dec As Long

Dim len_int As Long

Dim i As Long

Dim a_int As Long

Dim pp As Long

dx_sz = "零壹贰叁肆伍陆柒捌玖"

dx_dw = "万仟佰拾亿仟佰拾万仟佰拾圆"

If ls = 0 Then

CNMoney = "零圆整"

Exit Function

End If

If ls < 0 Then

ls = Abs(ls)

fu = "负"

Else

fu = ""

End If

dx_str = CStr(ls)

dx_str = Replace(dx_str, "¥", "")

dx_str = Replace(dx_str, ",", "")

If (ls >= 0) And (ls < 1) Then dx_str = "0" + dx_str

pp = InStr(dx_str, ".")

If pp > 0 Then

str_int = Mid(dx_str, 1, InStr(dx_str, ".") - 1)

Else

str_int = dx_str

End If

num_int = CLng(str_int)

If (ls > 0) And (ls < 1) Then

num_dec = ls * 100

Else

num_dec = (ls - num_int) * 100

End If

str_dec = CStr(num_dec)

str_dec = Replace(str_dec, "¥", "")

len_int = Len(str_int)

dx_str = ""

For i = 1 To len_int

a = Mid(str_int, i, 1)

a_int = CLng(a)

b = Mid(dx_sz, (a_int + 1), 1)

c = Mid(dx_dw, (13 - len_int + i), 1)

If dx_str <> "" Then

d = Mid(dx_str, Len(dx_str) - 1, 1)

Else

d = ""

End If

If (b = "零") And ((d = "零") Or (b = b2) Or (c = "圆") Or (c = "万") Or (c = "亿")) Then b = ""

If (a = "0") And (c <> "圆") And (c <> "万") And (c <> "亿") Then c = ""

If ((c = "圆") Or (c = "万") Or (c = "亿")) And (d = "零") And (a = "0") Then

dx_str = Mid(dx_str, 1, Len(dx_str) - 2)

d = Mid(dx_str, Len(dx_str) - 1, 2)

If ((c = "圆") And (d = "万")) Or ((c = "万") And (d = "亿")) Then c = ""

End If

dx_str = dx_str + b + c

b2 = b

Next i

‘处理金额小于1的情况

If Len(dx_str) < 2 Then dx_str = ""

If (num_dec < 10) And (ls > 0) Then

a_int = CLng(str_dec)

b = Mid(dx_sz, (a_int + 1), 1)

If num_dec = 0 Then dx_str = dx_str + "整"

If num_dec > 0 Then dx_str = dx_str + "零" + b + "分"

End If

If num_dec >= 10 Then

a_int = CLng(Mid(str_dec, 1, 1))

a = Mid(dx_sz, (a_int + 1), 1)

a_int = CLng(Mid(str_dec, 2, 1))

b = Mid(dx_sz, (a_int + 1), 1)

If a <> "零" Then a = a + "角"

If b <> "零" Then b = b + "分" Else b = ""

dx_str = dx_str + a + b

End If

dx_str = fu + dx_str

dx_str = Replace(dx_str, "零亿", "亿")

dx_str = Replace(dx_str, "零万", "万")

dx_str = Replace(dx_str, "零千", "千")

dx_str = Replace(dx_str, "零圆", "圆")

CNMoney = dx_str

End Function

2. 页码

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

批量单据打印

原文:http://www.cnblogs.com/SampsonShan/p/3539942.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!