WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)

         WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)

对于已经完成体检的病人,对其进行体检结果的打印,其体检结果报告打印效果如图:

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第1张图片

界面涉及到的控件有:

    控件

          说明

 

从工具箱中找到对应的报表控件,可以设置控件的一些属性。如显示的文本,命名是规范

 

文本对象 (Text)

线条对象(Line)

框对象 (Box)

数据库中用到的表和关系有:

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第2张图片


WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第3张图片


表1:病人表(PatientTable)

      列名

数据类型

主键/外键

说明

PatientID

int

     主键

病人ID

PatientCardNumber

nchar (50)

 

病人卡号

PatientName

nchar (30)

 

病人名称

RegisterCategoryID

int

    外键

挂号类别 ID

AS_SexID

int

    外键

性别ID

Birthday

datetime

 

出生年月

IDCardNo

nchar (50)

 

身份证号

AS_MaritalStatusID

int

    外键

婚姻情况ID

Profession

nchar (50)

 

所在职业

MemberTypeID

int

    外键

会员类型ID

MedicareCardNumber

nchar (50)

 

医保卡号

AS_InsuredTypeID

int

    外键

参保类型ID

ContactTelephone

nchar (30)

 

联系电话

ContactAddress

nchar (100)

 

联系地址

DrugAllergyHistory

nchar (100)

 

药物过敏史

PatientCategoryID

int

    外键

病人类别ID

Age

nchar (30)

 

年龄

AlphabeticBrevityCode

nchar (20)

 

拼音简码

WubiInCode

nchar (20)

 

五笔简码

ContactMobilePhone

nchar (30)

 

联系手机

Email

nchar (30)

 

电子邮件

Introducer

nchar (30)

 

介绍人员

PersonalTaboo

nchar (70)

 

个人忌讳

HighestReputation

nchar (70)

 

信誉上限

NowIntegral

nchar (50)

 

当前积分

Debt

decimal (18, 2)

 

尚欠金额

ExpenseSum

decimal (18, 2)

 

消费金额

LastTime

datetime

 

上次时间

LastDoctor_StaffID

int

    外键

上次医生

Prescriptions

nchar (50)

 

总处方数

PatientPhotos

char (200)

 

病人照片

WhetherEffective

bit

((1))

有效否

WhetherFromPhysicalExamination

Bit

 

是否体检

 

表2:属性明细表(AttributeDetailsTable):

 

         列名

数据类型

主键/外键

说明

AttributeDetailsID

int

    主键

属性明细ID

AttributeDetailsID_F

int

    外键

属性明细ID_F

AttributeSetID

int

    外键

属性明细ID

AttributeDetailsName

nchar (30)

 

属性明细名称

Number

nchar (30)

 

编号

RetrievalInCode

nchar (30)

 

检索简码

BuiltInIdentifiers

bit

((0))

内置标识

Remarks

nchar (100)

 

备注

WhetherEffective

bit

((1))

有效否

 

表3:处方单表(PW_OrdonnanceTable

      列名

数据类型

主键/外键

说明

OrdonnanceID

int

    主键

处方单ID

OrdonnanceNumber

nchar (30)

 

处方单号

PatientID

int

    外键

病人ID

PrescriptionDate

datetime

 

处方时间

ClinicTechnicalOffices_TechnicalOfficesID

int

    外键

就诊科室_科室ID

TreatmentDoctor_StaffID

int

    外键

就诊医生_员工ID

AS_ChargeStatusID

int

    外键

收费状态ID

ChargeForPersonnel_StaffID

int

    外键

收费人员_员工ID

ChargeTime

datetime

 

收费时间

AS_TakeMedicineStatusID

int

    外键

发药状态ID

TakeMedicinePersonnel_StaffID

int

    外键

发药人员_员工ID

TakeMedicineTime

datetime

 

发药时间

BedID

int

    外键

床位ID

WhetherEffective

bit

((1))

有效否

 

表4:会员类别表(BT_MemberCategoryTable)

   列名

数据类型

主键/外键

说明

MemberCategoryID

int

    主键

会员类别 ID

MemberCategoryNumber

nchar (30)

 

会员类别编号

MemberCategoryDiscount

numeric (18, 2)

 

会员类别折扣

MemberCategoryName

nchar (30)

 

会员类别名称

Remarks

nchar (150)

 

备注

WhetherEffective

bit

((1))

有效否

 

表5:项目表(BT_ItemTable

            列名

数据类型

主键/外键

说明

ItemID

int

    主键

项目ID

ItemName

nchar (70)

    外键

项目名称

ItemCoding

nchar (50)

    

项目编号

AS_UserStatusID

int

    外键

使用状态ID

ProjectPrice

decimal (18, 2)

   

现金价格

TechnicalOfficesID

int

    外键

科室ID

DiscountProportion

decimal (18, 2)

  

折扣比例

WhetherEffective

bit

((1))

有效否

ItemRemarks

nchar (100)

   

项目备注

ItemUnit

nchar (20)

   

项目单位

表6:体检执行内容明细表[PW_PhysicalExaminationExecuteContentDetailTable】


            列名

数据类型

主键/外键

说明

PhysicalExaminationExecuteContentDetailID

int - Identity

主键

体检执行内容明细ID

PhysicalExaminationContentID

int

外键

体检执行内容ID

ItemID

int

外键

项目ID

PhysicalExaminationExecuteContentMessage

nchar (250)

体检执行内容信息

WhetherEffective

bit

((1))

有效否

PhysicalExaminationExecuteID

int

外键

体检执行ID

ReportDoctor_StaffID

int

外键

报告医生ID

ReportTime

date

报告时间

:7 体检执行表:【PhysicalExaminationExecuteTable】


            列名

数据类型

主键/外键

说明

PhysicalExaminationExecuteID

int

主键

体检执行ID

ChargeBillID

int

外键

收费单ID

ExecuteDoctor_StaffID

int

外键

执行医生ID

ExecuteNumber

nchar (20)

 

体检执行单号

Remarks

nchar (200)

 

备注

HealthSuggest

nchar (200)

 

健康建议

WhetherEffective

bit

((1))

是否有效

表8:员工 表(BT_StaffTable)

            列名

数据类型

主键/外键

说明

StaffID

int

       主键

员工ID

TechnicalOfficesID

int

       外键

科室ID

StaffNumber

nchar (20)

 

员工编号

StaffName

nchar (20)

 

员工名称

WhetherOperator

bit

 

操作员否

AlphabeticBrevityCode

nchar (20)

 

拼音简码

WubiInCode

nchar (20)

 

五笔简码

AS_StaffPositionID

int

       外键

员工职务ID

AS_MedicalTitlesID

int

       外键

医务职称ID

AS_WorkingStatusID

int

       外键

工作状态ID

AS_SexID

int

       外键

性别ID

ContactTelephone

nchar (50)

 

联系电话

WhetherBuiltIn

bit

 

内置否

RegisteredSum

decimal (18, 2)

 

挂号金额

AS_IntoTheHobbyID

int

        外键

录入爱好ID

StaffPhotos

char (200)

 

员工照片

Email

nchar (70)

 

电子邮件

IDCardNo

nchar (100)

 

身份证号

ContactAddress

nchar (100)

 

联系地址

Birthday

datetime

 

出生日期

WhetherBirthdayRemind

bit

 

生日提醒否

WorkDate

datetime

 

工作日期

TerminationDate

datetime

 

离职日期

AS_OfficialAcademicCredentialsID

int

        外键

最高学历ID

StudySubject

nchar (70)

 

学习专业

AS_PoliticsStatusID

int

        外键

政治面貌ID

Remarks

nchar (100)

 

员工备注

WhetherEffective

bit

((1))

有效否


 

表9:收费单表(PW_ChargeBillTable)

        列名

数据类型

主键/外键

说明

ChargeBillID

int

       主键

收费单ID

ReceiptNumber

nchar (30)

 

收据号

BillNumber

nchar (30)

 

发票号

AS_ChargeStatusID

int

       外键

收费状态ID

OrdonnanceID

int

       外键

处方单ID

Discount

decimal (18, 2)

 

折扣

CashPaySum

decimal (18, 2)

 

现金支付金额

MedicarePaySum

decimal (18, 2)

 

医保支付金额

BlockPaySum

decimal (18, 2)

 

卡付金额

TallyPaySum

decimal (18, 2)

 

记账支付金额

Operator_StaffID

int

       外键

操作员_员工ID

OperateTime

datetime

 

操作时间

WhetherCancel

bit

 

作废否

WhetherEffective

bit

((1))

有效否

WhetherOrdonnance

Bit

 

是否经过处方


10体检检查内容表(PW_PhysicalExaminationContentTable)

            列名

数据类型

主键/外键

说明

PhysicalExaminationContentID

int - Identity

主键

体检检查内容ID

PhysicalExaminationContentName

nchar (100)

 

体检检查内容名称

PhysicalExaminationTypeName

nchar (100)

 

体检检查分类

WhetherEffective

bit

 

有效否


该报表涉及到的储存过程有:

IF @TYPE = 'FRM_TiJianZhiXing_Main_提交打印ToolStripMenuItem_Click_OnChuFangDan'
	BEGIN
		SELECT   distinct  BT_ItemTable.ItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationContentID, 
                      PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteContentMessage, PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteID, 
                      PW_PhysicalExaminationExecuteTable.HealthSuggest, PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteContentDetailID, 
                      PW_PhysicalExaminationContentTable.PhysicalExaminationContentName, PW_PhysicalExaminationContentTable.PhysicalExaminationTypeName, BT_StaffTable.StaffName, 
                      PW_PhysicalExaminationExecuteTable.ExecuteDoctor_StaffID, PW_PhysicalExaminationExecuteTable.Remarks, PW_PhysicalExaminationExecuteTable.ExecuteNumber, 
                      PW_PhysicalExaminationExecuteContentDetailTable.ReportDoctor_StaffID, Convert(nchar(10) ,PW_PhysicalExaminationExecuteContentDetailTable.ReportTime,120) AS ReportTime , BT_StaffTable_1.StaffName AS 报告医生, 
                      PW_PhysicalExaminationExecuteTable.ChargeBillID, BT_PatientTable.PatientID, BT_PatientTable.PatientName, BT_AttributeDetailsTable.AttributeDetailsName, 
                      BT_MemberCategoryTable.MemberCategoryName, BT_AttributeDetailsTable_1.AttributeDetailsName AS 参保类型, BT_PatientTable.IDCardNo, PW_OrdonnanceTable.OrdonnanceID
		FROM         PW_PhysicalExaminationExecuteContentDetailTable INNER JOIN
                      BT_ItemTable ON PW_PhysicalExaminationExecuteContentDetailTable.ItemID = BT_ItemTable.ItemID INNER JOIN
                      PW_PhysicalExaminationExecuteTable ON 
                      PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteID = PW_PhysicalExaminationExecuteTable.PhysicalExaminationExecuteID INNER JOIN
                      PW_PhysicalExaminationContentTable ON 
                      PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationContentID = PW_PhysicalExaminationContentTable.PhysicalExaminationContentID INNER JOIN
                      BT_StaffTable ON PW_PhysicalExaminationExecuteTable.ExecuteDoctor_StaffID = BT_StaffTable.StaffID INNER JOIN
                      BT_StaffTable AS BT_StaffTable_1 ON PW_PhysicalExaminationExecuteContentDetailTable.ReportDoctor_StaffID = BT_StaffTable_1.StaffID INNER JOIN
                      PW_ChargeBillTable ON PW_PhysicalExaminationExecuteTable.ChargeBillID = PW_ChargeBillTable.ChargeBillID INNER JOIN
                      PW_OrdonnanceTable ON PW_ChargeBillTable.OrdonnanceID = PW_OrdonnanceTable.OrdonnanceID INNER JOIN
                      BT_PatientTable ON PW_OrdonnanceTable.PatientID = BT_PatientTable.PatientID INNER JOIN
                      BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
                      BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON BT_PatientTable.AS_InsuredTypeID = BT_AttributeDetailsTable_1.AttributeDetailsID   
         WHERE      PW_PhysicalExaminationExecuteTable. PhysicalExaminationExecuteID = @PhysicalExaminationExecuteID                    
	END

BLL中对应的方法有:

//报表打印     经过处方单的报表打印
        [OperationContract]
        public DataSet FRM_TiJianZhiXing_Main_提交打印ToolStripMenuItem_Click_OnChuFangDan(int intPhysicalExaminationExecuteID)//根据最后一个体检执行单ID查询体检执行内容明细
        {
            SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ),
                                              new SqlParameter ("@PhysicalExaminationExecuteID",SqlDbType .Int ),
                                              };
            mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_提交打印ToolStripMenuItem_Click_OnChuFangDan ";
            mySqlParameters[1].Value = intPhysicalExaminationExecuteID;
            DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

报表打印在UIL中涉及到的强数据集,建立强数据集有如下几个过程:第一点击数据,然后点击添加数据源,如下图:

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第4张图片

第二步:点击数据库

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第5张图片

然后 点击数据集

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第6张图片

然后在数据源配载向导中点击新建连接

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第7张图片

第三步:新建连接后,会出现如下窗体

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第8张图片


选择服务器名和连接的数据库中对应的名称,再点击测试连接,会提示测试连接成功WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第9张图片

点击确定后弹出如下窗体:

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第10张图片


点击数据源配置向导中的下一步,再弹出如下窗体

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第11张图片

在表中的前面打上勾再输入数据集的名称,然后点击完成这样就建立好一个强数据集了。

第四步:在解决方案中(如下图所示)找到刚才添加的强数据集

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第12张图片

点击刚才添加的强数据集会弹出该界面中的数据表:如下图:

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第13张图片

点击右键该界面中的空白处,然后点击添加如下图:

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第14张图片

点击添加会出现TableAdapter配置向导(如下图) 然后点击下一步:

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第15张图片


出现如下界面后,继续点击下一步

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第16张图片

在输入SQL语句中把数据库中用到的储存过程的复制下来,注意不要带WHERE条件中的储存过程也复制下来

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第17张图片

把储存过程复制好后,会看到如下界面

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第18张图片

然后点击完成

点击完成后,你会发现刚才添加的强数据集多的一张表,点击表头对其命名即可

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第19张图片

第五步:右键点击添加新建项

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第20张图片

点击后出现如下界面(如果没有安装水晶报表的不会出现如下的中的内容)

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第21张图片

添加水晶报表(注意选择中的

在对添加的水晶报表进行命名

命名完成后,点击添加,选择Crystal Reports库中的作为空白报表,再点击确定

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第22张图片

 

出现水晶报表后,点击工具箱对水晶报表设置控件吧

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第23张图片

在数据库字段右键点击数据库专家

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第24张图片

找到ADO.NET数据集中刚才添加的表 选择该表后点击添加进选定的表中,再点击确定


会看到数据库字段中出现刚才添加的强数据集中的表

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第25张图片

用数据库字段中的数据与工具箱中的工具对报表进行自定义布局

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第26张图片

对水晶报表的界面用控件布局完成后添加一个窗体,把工具箱中报表设计中CrystalReportViewer的控件拉进界面中

WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)_第27张图片

最后在该窗体的Load事件中添加如下代码:

 BLL医院管理系统.TiJianZhongXin.FRM_TiJianZhiXing_Main.FRM_TiJianZhiXing_MainClient myFRM_TiJianZhiXing_MainClient =
                new BLL医院管理系统.TiJianZhongXin.FRM_TiJianZhiXing_Main.FRM_TiJianZhiXing_MainClient();
            DataTable dt = new DataTable();//实例化一个数据表
            dt = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_提交打印ToolStripMenuItem_Click_OnChuFangDan(intPhysicalExaminationExecuteID).Tables[0];
           
            //实例化强数据集
            DS_TiJianZhiXin myDS_TiJianZhiXin = new DS_TiJianZhiXin();
            //把查询的数据dt合并到强数据集对象里表名为BaoBiao_TiJianZhiXin_OnChuFang 
            myDS_TiJianZhiXin.Tables["BaoBiao_TiJianZhiXin_OnChuFang"].Merge(dt);
            //实例化报表模板
            BaoBiaoTongJi.CRP_TiJianZhiXin_OnChuFang myCRP_TiJianZhiXin_OnChuFang = new BaoBiaoTongJi.CRP_TiJianZhiXin_OnChuFang();
            //设置模板的数据源
            myCRP_TiJianZhiXin_OnChuFang.SetDataSource(myDS_TiJianZhiXin);
            //设置报表控件的报表源
            crystalReportViewer1.ReportSource = myCRP_TiJianZhiXin_OnChuFang;

这样一个完整的水晶报表就完成了。运行结果就为第一张图中所示了。


注意:该文章仅供与学习,禁止用于商业用途,否则后果自负!!!


你可能感兴趣的:(WCF)