飞迪信息 - ActiveReports 助力 HIS 医院系统
所使用产品:ActiveReports
一. 企业背景
上海飞迪计算机信息科技有限公司(以下简称飞迪科技),成立于 2006 年,是国内最先专注于校园管理及校园健康信息化的高科技企业。飞迪科技经过 10 年的积累与发展,学校客户拥有量和市场占有率迅速扩大,并得到学校诸多的好评和赞誉,其中上海市教委和上海市卫计委已成为我们重要合作伙伴。飞迪科技凭借先进的技术和研发力量,完善的客户服务网络,以“团结、诚信、进取”的精神,为学校提供了优秀的解决方案和技术产品,用以服务学校、提升自身、贡献社会。
二. 项目名称和项目概况
上海飞迪计算机信息科技有限公司在医疗行业发展多年,其主要客户群体是教育机构,如上海大多数高校,小学等。其 HIS 产品也是针对于校医院级别的,因此功能上虽然不如医院的HIS模块多,数据量大,但是麻雀虽小,五脏俱全,系统内的整体业务流程也是极具专业性的,不差分毫。
由于医保局对交易结算计算机有绝对限制,并且网络实现公网封闭,HIS 系统整体采用 .Net 平台 C/S 架构,WPF 的前端。开发这样一套系统并不容易,涵盖了较深的业务知识,财务管理,进销存管理,以及外部接口等。并且每一点都有大量对统计报表、凭证打印、数据导出的需求。如果能将这些分包出去,交给第三方去处理,就可以节省开发时间,节省企业成本,从而让开发人员更多的专注数据和业务本身,使系统稳定而强大。
总体结构:
(1)临床诊疗部分:医生工作站,护士工作站,临床检验系统等;
(2)药品管理部分:数据准备及药品字典、药品库房管理功能、门急诊药房管理功能、住院药房管理功能、药品核算功能、药品价格管理等;
(3)经济管理部分:门急诊挂号系统,门急诊划价收费系统,财务管理与经济核算管理系统等;
(4)综合管理与统计分析部分:病案管理系统、医疗统计系统、查询与分析系统等;
(5)外部接口部分:医疗保险接口、社区卫生服务接口等;
三. 应用实例
发票打印
发票在 HIS 中属于最常见的凭证之一,是病人付款的证明。不同的病人、不同的收费类型会开具不同的发票,每个医疗机构单位采购的发票单可能都是不一样的。以下图医保发票为例:
取需求:
- 属于套打格式的票据
- 尺寸固定
- 包含至少一个实体和一个集合的数据源
以前我们一般使用 System.Drawing 这个程序集在后台进行绘制,一个标签一行代码,而且每个都要计算在布局内的坐标,没有可视化的设计,标签位置全凭估算,然后一遍遍的调整。其坐标是画布内的绝对定位,但凡某个标签局部尺寸发生变化,将会引起多米诺效应,更别说我们还需面对各式各样的发票种类样式,开发起来简直叫人崩溃。用了ActiveReports的页面报表很好的解决了这个问题,我最喜欢葡萄城在介绍 ActiveReports 页面报表时的那句话:“使用页面报表,所见即所得”。
如下图所示,设计界面,只需嵌入发票的图片作为背景,设置好实际尺寸,接着拖控件绑定数据源就行了,超方便。
处方笺
医生站使用的最多的凭证之一,其他还包含“转诊单”、“病假单”等,但原理相同。
上图是一种常见的处方样式,除了头疼各个客户处方模板的不同,另外处方药品的不规则展示也是难点之一,单个数据分多行展示,但是有了 ActiveReports 的“RDL”报表问题就简单了。
RDL 报表支持 N 个数据源,并且其可视化的设计操作起来实在是方便。
RDL 更是提供了多种内置函数和运算方法来处理数据,熟练运用这些函数方法将会事半功倍。
非常轻松的实现了该效果。此外,如若统计一些无参数的数据源(例如数据字典表等),直接一个 RDL 报表就够了。
医保报表
HIS 系统中肯定少不了医保,这是一个无比强势的第三方,其公布的接口文档有一本书那么厚,可想而知,只有你迁就他,没有他迁就你。每个医疗机构会根据当月产生的交易情况,然后结合自己的级别向医保局递交一份“医保报表”,如下图所示:
取需求:
- 固定页眉页脚
- 复杂表头
- 每页固定 20 行数据
- 含页合计和总合计行
- 打印规格 A3
- 包含一个集合和多个实体数据源
认识 ActiveReports 之前,我采用后台创建流文档加分页的模式去处理,不说写了多少行代码了,不堪回首。付出了艰辛然而打印出来的效果不佳,数据总是对不齐,或者大小比例不对。浪费了很多纸张,让我总是在怀疑到底是代码的问题,还是打印机的问题、亦或是纸的问题?到最后怀疑人生。现在用了ActiveReports的区域报表,嘿,腰也不疼了,腿也走得动了,每次去医保局都昂首挺胸的。
对于该类报表最重要的是尺寸设置好,我如今用ActiveReports开发报表第一件事就是去模板属性中设置尺寸和打印规格,这是一种安全感。
总高度 -(页眉+页脚+表头)的高度,再除以 20 就是 detail 数据行的高度,然后设置除 detail 外的其他对象每页 RepeatAll,就这么简单。
打印导出
报表的展示呈现是一部分,但是打印和导出也是不可分割的。通常原生的 .Net控件工具中极少提供打印和导出的功能,这样就得写一套打印方法,再写一套导出的方法。另外导出还分多种形式,十个开发人员可能掌握十种导出方法,都喜欢用自己熟悉的,孰优孰劣也会争执个没完,放开去做的话,项目就会很乱,HIS系统也遇到过这样的阶段。
但自从使用的 ActiveReports 之后就没这样的烦恼了,ActiveReports 继承好了打印和导出,就是几行代码的事,简直就是 So—Easy ,妈妈再也不用担心我的学习了。
下图是区域报表的 Excel 导出效果
所见即所得,完美!只有写过Excel导出方法的人员才知道这有多么棒。
四. 总结
HIS 系统的开发历时一年多也快接近尾声了,葡萄城给予的帮助是巨大的,否则拖到明年项目也不见得完工。现如今遇到报表的需求,无论B/S还是C/S架构,会立即想到用 ActiveReports 怎样进行设计,它已经不只是优秀的工具这么简单了,它是开发上的伙伴和搭档,一同解决难题,并肩作战。
对这个“伙伴”我了解的还不多,即便如此还解决了这么多的问题,感谢ActiveReports背后的研发工程师,感谢葡萄城的运维人员!优秀的软件用之于人,取之于人。你们的产品会成为我们的标杆,激励我们前行。最后说一句:“ActiveReports!你值得拥有”。
本文作者:飞迪信息科技 - 张青