我在一个多月之前换了一个工作,搞金融方面的程序化交易软件,第一个工作任务就是解析深圳交易所和上海交易所的数据,深交所的数据是STEP协议,是纯字符的TCP/IP流,每秒的流量达200多K,接收数据的客户端一定要设计合理,不然这么大的数据流就死定了。而上证所的数据是采用金融行业最先进的STEP/FIX/FAST协议,这数据流比STEP协议压缩了80%,解析这数据可大费我的脑精,找别的公司帮忙,人家开价每人每天8000元,还只是讲解协议,不提供源代码。没办法,硬着头皮上,生吞活剥的读完了那一百多页英文,终于懂得了协议的原理,然后再加上别人公司的一点提醒,终于把那该死的数据解析出来。以后要是有朋友要做FAST协议的解析,也可以问问我,我只要五折的价格就行了,哈哈。
我在最近主持开发的人力资源管理系统中遇到一个新的问题:就是最终用户要能够设计和编辑报表。在人力资源管理系统中有一个基本的功能,就是编辑和打印员工的工作证,不同职务的员工的工作证可能不一样,同一个员工不同工作时期(比如实习员工、正式员工)的工作证也可能不一样。项目方要求我们一定要做到操作员可以在线设计和修改工作证的格式(实际上就是报表),否则就一切免谈。客户是上帝!呵呵,努力做吧。于是大家搜罗了所有的Web打印软件,结果包括大名鼎鼎的水晶报表也没有这个功能。
好在天无绝人之路,我在以前所设计的一个基于FastReport的Web打印控件之上进行了大量的修改,终于实现了最终用户的在线设计和编辑报表的功能,用户也比较满意。
报表的预览窗口如下图:

报表的最终用户在线设计和编辑窗口如下图:
当然报表的在线编辑窗口有一点专业,操作员需要经过一点培训才会使用,不过一般情况是我们先帮用户设计好了模板,操作员平时只是要做一些微调,比如改个字或改个格式等。报表编辑好后,点击
就可以自动把报表保存到服务器,且提示
。
下面详细的讲解一下怎样利用我设计的Web打印控件实现最终用户的在线设计和修改报表,且自动把报表保存至服务器。讲解以ASP.NET为例,当然其它语言也可以举一反三,很容易实现。因为调用打印控件统一是JavaScirpt,提交服务器的数据是Http协议的Post方式,这些都是通用的。
最终用户在线设计和修改Web报表的部分代码如下:
调用Web打印控件
报表控件在以前的基础上增加了PostURL属性,设置此属性,则在报表在线编辑时,单击“保存”按钮或“保存”菜单项,则把报表内容组织为String,且通过Http的Post方式直接提交到所设置的URL页面,用户可以在URL接收报表内容,把报表内容保存在指定文件或数据库中。Post的字段名指定为ReportFileValue,用户可以通过接收此字段的值保存在线编辑的报表内容。报表的内容为String,打印或预览时可以直接调用此内容,无需用FileToStr函数进行转换。
报表控件的DesignReport函数,功能为在线编辑报表,参数:报表文件字符串,报表参数名称字符串,报表参数值字符串,数据集1的字符串,数据集2的字符串,数据集3的字符串,数据集4的字符串,数据集5的字符串,数据集6的字符串。报表文件字符串调用FileToStr函数产生;报表参数名称字符串为报表中所使用的参数的名称,各名称之间以`~分隔;报表参数值字符串为报表中所使用的参数所对应的值,各参数值之间以`~分隔;数据集的字符串通过调用FileToStr函数产生,若没有数据则为空。
作为接收Http的Post数据的服务器的页面设计如下:
接收提交的报表内容
FileName是PostURL中所设置的保存的报表文件名,ReportFileValue则为报表文件的内容。
如果你的项目也需要最终用户在线设计和修改报表,我所设计这个Web打印控件是一种比较快捷方便的解决方法。Web打印控件目前对于个人可以申请免费注册,有什么问题请加入QQ群:218392762(一群:135506194、二群:150850837都已满,请加入三群)或者请直接Q我:12988672。
报表预览、编辑和下载的网址:http://www.xinyuerj.com/ASP/
http://www.xinyuerj.com/ASP.NET/