RDL/RDLC批量单据打印

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

一、 基本思路

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

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

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

二、 详细步骤

1. 建立列表

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

选择列表,在行组中用鼠标右键选择详细信息,选择 组属性 ,设置“单据号码”分组,为了明了,修改组名称为 “单据号码”。排序选项根据需要设定。

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

在分页符选项卡上设置分页,这样可以实现一张单据分页的效果。

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

2. 单据明细信息:列表与矩形

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

因为有矩形的存在,所以我们可以像普通报表一样,在列表中布置表头文本框,和表体详细数据。需要注意的是一些设计细节,比如表头居中,表体数量型字段需要居右,其他字段居左,小数位数的取舍等等。

表头的设计推荐两种方式:

1)表头信息可以使用下图中的“文本框”控件,设计空间比较自由。

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

 

2)也可以在详细数据表第一行之上再添加一个数据行,合并整行后插入个矩形控件,再插入一个无边框的数据表用来作为表头,这样比较整齐

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

3. 页眉页脚

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

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

4. 单据分页

在第一步中已经设置了单据分页,需要注意的是,这个列表空间与“页脚”之间不能存在空隙,否则单据最后一页就总会有一个空白页。

其实实现单据分页有很多种方法,不拘泥于这一种。大家自行摸索。

三、 其他细节

1. 大写金额

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

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

 

  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 

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

一、 基本思路

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

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

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

二、 详细步骤

1. 建立列表

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

选择列表,在行组中用鼠标右键选择详细信息,选择 组属性 ,设置“单据号码”分组,为了明了,修改组名称为 “单据号码”。排序选项根据需要设定。

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

在分页符选项卡上设置分页,这样可以实现一张单据分页的效果。

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

2. 单据明细信息:列表与矩形

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

因为有矩形的存在,所以我们可以像普通报表一样,在列表中布置表头文本框,和表体详细数据。需要注意的是一些设计细节,比如表头居中,表体数量型字段需要居右,其他字段居左,小数位数的取舍等等。

表头的设计推荐两种方式:

1)表头信息可以使用下图中的“文本框”控件,设计空间比较自由。

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

 

2)也可以在详细数据表第一行之上再添加一个数据行,合并整行后插入个矩形控件,再插入一个无边框的数据表用来作为表头,这样比较整齐

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

3. 页眉页脚

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

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

4. 单据分页

在第一步中已经设置了单据分页,需要注意的是,这个列表空间与“页脚”之间不能存在空隙,否则单据最后一页就总会有一个空白页。

其实实现单据分页有很多种方法,不拘泥于这一种。大家自行摸索。

三、 其他细节

1. 大写金额

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

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

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

RDL/RDLC批量单据打印 [转]
    




RDL/RDLC批量单据打印

 

  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 

相关文章: