




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BS报表制作向导一、 制作报表样式1. 新建水晶报表样式打开Visual Studio或水晶报表工具,点击菜单条中的文件新建项目,在弹出的页面中选择其他语言-Visual J#-Crystal Reports应用程序修改名称和位置后,点击确定按钮,再在弹出的页面中选择作为空白报表,再点击确定按钮;如果已有一个水晶报表,要在现有项中再新增一个水晶报表样式,可以在解决方案资源管理器中在解决方案子主目录下,右键-添加新项,弹出以下页面,选择Crystal报表即可水晶报表工具Crystal Reports2008制作报表:工具栏 文件-新建-空白报表/标准报表/交叉报表 -数据库专家2. 将报表数据源绑定数据库在显示的页面中,单击鼠标右键选择数据库-数据库专家在创建新连接中,点击OLE DB(ADO),弹出页面,提供程序中选择Microsoft OLE DB Provide for SQL Server,再点击下一步按钮,在弹出的页面中输入内容后,点击下一步按钮在弹出的页面中点击添加命令,输入SQL查询报表所需字段(也可以是视图或存储过程),再点击确定按钮。3. 制作水晶报表A. 工具箱-在左边工具箱中,可以选择工具画报表,文本对象(文本框及内容的输入),线条对象(画线),框对象(表格外面的框)水晶报表工具Crystal Reports2008: 工具栏 插入-文本对象/线/框B. 字段-在字段中可以直接将要显示在报表中的字段拖放到报表中去C. 合计的显示选中要合计的字段,如金额,点击右键,插入-汇总在弹出的页面中,选择要汇总的字段和方式(求和,差,平均)点击确定后自动生成一个汇总字段,将该字段拖放到合计金额的位置即可水晶报表工具Crystal Reports2008:在“公式字段”新建“合计”,汇总字段为CalFee,拖动到页脚D. 合计金额小写转换成大写在右边字段中,选择公式字段,右键-新增(名为test),点击使用专家按钮,在弹出的页面中,选择报表自定义函数,再点击右键-新建,在弹出的页面中输入自定义函数有的名称(AmountToWord2),点击使用编辑器在下面的输入框中,输入以下函数(语法选择Basic语法)选择之前添加的公式字段test,在下面的输入框中输入以下内容(调用上面的函数)(语法选择Basic语法)Function CNMoney(ls As Number) 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 Number Dim num_dec As Number Dim len_int As Number Dim i As Number Dim a_int As Number Dim pp As Number dx_sz = 零壹贰叁肆伍陆柒捌玖 dx_dw = 万仟佰拾亿仟佰拾万仟佰拾圆 If ls = 0 Then CNMoney = 零圆整 Exit Function End If If ls = 0) And (ls 0 Then str_int = Mid(dx_str, 1, InStr(dx_str, .) - 1) Else str_int = dx_str End If num_int = tonumber(str_int) If (ls 0) And (ls 1) Then num_dec = ls * 100 Else num_dec = (ls - num_int) * 100 End If str_dec = totext(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 = tonumber(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 0) Then a_int = tonumber(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 = tonumber(Mid(str_dec, 1, 1) a = Mid(dx_sz, (a_int + 1), 1) a_int = tonumber(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_strEnd Function(注:CNMoney为自定义函数的名称,命令_1.CalFee为要转换为大写的字段名称)formula = CNMoney(CDbl (Sum (命令_1.CalFee)点击确定后,将公式字段从工具箱中拖放到水晶报表中即可E. 插入图片在要插入图片的位置,单据鼠标右键,插入-图片,选择要插入的图片位置即可(注:图片要小,图片最好为png和gif的格式)F. 转换日期格式选择要转换格式的文本,单据鼠标右键,设置对象格式,在弹出的页面中选择系统默认短格式-自定义-日期,在显示的页面中可以设置该日期的显示样式G. 一张单据分页显示在详细资料上,右键,点击节专家,在显示的页面中,将在后面页新增页勾上,再点击后面的编辑按钮再在弹出的页面输入脚本(语法选择Crystal语法) if #RTotal0 mod 6=0 then if count(命令.ChargeDetailID)=#RTotal0 then false else trueelse false(注:命令.ChargeDetailID是从上面命令框里面拖下来的字段,表示以ChargeDetailID来判断是否分页,RTotal0为“运行总计字段”,根据记录条数判断分页)另一种分页:右键点击设计里的“详细资料”,点选“节专家”-分页-之后新建页,勾选可见记录,设置每页数据条数为15分页合计:思路如下(Crystal语法): 1:用一个变量mySum来累计页面数据 “订单.订单金额”公式CurrentSum,放在详细资料节需要进行汇总的字段的位置 WhilePrintingRecords;CurrencyVarmySum;mySum:=mySum+订单.订单金额;如果不需要显示,抑制显示即可2: 在每页的页脚获取到这个变量的值(也就是该页最后一个Sum值),当然这个时候后一个mySum是前面所有数据的和。 CurrentPageSumWhilePrintingRecords;CurrencyVarmySum;3:关键所在,在每页的页眉的位置将我们的变量重置ResetPageSum,保证在每页的开始它都是从0开始累计的 WhilePrintingRecords;CurrencyVarmySum:=0;在这里对两个基本概念进行说明 WhilePrintingRecords: 这里的Printing不是指打印机打印的时候,而是水晶报表在获取完数据后将数据显示在报表上的过程 WhilePrintingRecords强制公式将在程序打印数据库记录的同时进行计算。该函数也可以强制不含数据库字段和组字段的公式在打印记录的同时而不是在读取记录之前进行处理。它还强制含有数据库字段的公式在打印记录而不是在读取记录的同时进行处理。H、计量单位转换 这是一个非常简单的例子,主要是为了演示在公式中进行不同变量类型的转换和计算。 有时数据库字段的单位和报表中显示的单位不同,我们需要进行计量单位之间的转换,这时就离不开公式的使用。比如,我们的数据库中有一个Length字段,它记录以米为单位的长度,而在打印时需要以厘米为单位,我们就可以使用下面的函数。ToText(Order Details.Length *100) + 厘米 这里的ToText函数就是转换数字型为字符型。常用的转换函数还有ToNumber等。I、.中文星期 在这个例子中我们将演示如何进行字符串操作。 我们在打印报表时经常会遇到显示中文星期的问题。Crystal Reports有DateOfWeek函数可以判断一个日期是星期几,比如DateOfWeek返回4时表示星期三。我们可以使用下面的公式来显示中文星期。这里的Today函数只是一个示例,你可以将其修改为你所需的日期函数或字段。StringVar x;NumberVar n;x:=日一二三四五六;n:=DayOfWeek (Today);x:=星期+x2*n-1 to 2*n 前两行,我们定义了字符串变量x和数字变量n。一个公式可以有很多行,但只有最后一行的计算结果才会作为整个公式的结果打印在报表中。J、条件计算 在这个例子中我们重点演示如何使用If-Then-Else操作符。 条件计算在报表中使用得非常普遍。例如,我们要根据用户购买的总价格决定折扣的多少。我们假定用户购买200元以下的产品,不打折;200元到1000元提供5%的折扣;1000元以上提供7%的折扣。我们可以使用下面的公式计算最终用户需要付多少钱。CurrencyVar cValue;cValue := Order Details.UnitPrice *Order Details.Quantity; /计算总价格If cValue 200 Then cValueElse If cValue 1000 Then cValue * 0.95Else cValue * 0.93K、.条件统计 Crystal Reports提供了一些基本的统计功能,可以按分组进行统计。但是实际应用中的统计往往更为复杂。比如,我们需要根据一定的条件进行统计。假定我们要统计每组中单价超过10元的商品的销售数量。我们可以先在报表的Detail部分插入一个公式。假定该公式名字为ConditionSum,在公式内输入如下内容:If Order Details.UnitPr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 塑料食品购销合同范本
- 货车保险购买合同范本
- 采购家电家具合同范本
- 2025中国邮政集团有限公司东营市分公司校园招聘备考练习试题及答案解析
- 产品加工出售合同范本
- 门店技术入股合同范本
- 2025年意外伤害急救应急处理模拟答案及解析
- 景观园林土建合同范本
- 2025中国国家地理科考旅行部实习生招聘考试参考试题及答案解析
- 2025年新乡卫辉市招聘在外在编教师回乡任教考试参考试题及答案解析
- 1.1《土壤里面有什么》课件 2025-2026学年苏教版科学三年级上册
- 汽修厂污染防治知识培训课件
- 海运销售入门培训
- 2025年北师大版新教材数学一年级上册教学计划(含进度表)
- 学校2025年秋季学期1530安全教育记录(全学期带内容模板)
- 2025四川农信(农商行)社会招聘800人笔试历年典型考题及考点剖析附带答案详解
- 人教版2024-2025学年七年级数学上册教学计划(及进度表)
- 乐软物业经营管理系统V8.0操作手册
- 2017年社区居家养老服务工作绩效自评表
- 宁夏普通高中毕业生登记表学生综合素质评价手册完整版
- 康复医学概论
评论
0/150
提交评论