单证打印的整流程
- 格式:doc
- 大小:61.50 KB
- 文档页数:11
1. 数据库的设置和格式文件设计:1.1数据库的设置:数据库的设置是打印一张单证的基础,也是较为困难的部分。
该部分工作由开发人员对本地库直接进行操作。
前台需要设置的表有t_insrnc_dfn(险种定义表),T_DOC_INFO(单证信息主档),T_DOC_DA TABLK(单证数据块档),T_ITEM_DCRB(单证数据项描述档)。
后台的设置和前台相同。
各表的详细说明见内部接口的单证设置表部分。
(注:t_insrnc_dfn (险种定义表)的定义未包含在内,该表设置了险种的信息,其中的c_doc_id字段是单证打印模块所需要的。
)首先,要分析提供的单证的格式样本。
然后根据单证的格式样本中要打印的单证数据来确定该单证的数据块及每个数据块包含的数据项;在此基础上,写出得到这些数据块和数据项的值的SQL语句,并将数据块,数据项和设计的SQL语句添加到数据库中相关的单证设置表中。
供单证打印系统使用。
在此以单证PC0002为例说明分析和设置的过程(可用单证编辑器打开PC0002.FMP浏览其格式)。
在PC0002的单证样本中,我们可以看到以下信息:险种,保单号,被保险人姓名,保险标的地址,受益人名称,保险项目及保险金额,保险期限,免赔信息,保险费率,付款日期及方式,特别约定和保险公司的信息等。
这些信息都可以根据该保单的保单号从数据库中获得。
当然不一定只用一个SQL语句就可获得所有的信息。
我们将每个SQL语句查询出的信息称为一个数据块,而每个数据块由多个数据项组成。
在本例中,有四个数据块:PL Y_HEAD(保单的基本信息),PL Y_OBJ(标的物信息),PL Y_RDR(附加险信息)和PL Y_TERM(缴费信息)。
每个数据块包含的数据项可在“域”对象的表达式属性页中点击“数据项”按钮浏览。
每个数据块包含的数据项的个数应和该数据块对应的SQL语句SELECT出的字段的个数一致,并且SELECT出的字段的顺序必须和该数据块中的数据项的n_ord_id的顺序相同。
否则该单证无法打印或打印出的数据与要求不一致。
在设置时,每个数据块应尽可能包含可能需要的所有信息,而不应局限于提供的单证格式样本。
1.2格式文件的设计参照单证格式样本用单证编辑器设计单证格式文件。
2.软件设计:2.12.2层次结构2.2.1客户端2.2.1.1 软件结构以下是单证打印的概要设计,其详细设计请参阅文档单证打印(车险)详细设计书.doc本系统所提供的各项业务、功能在系统设计实现阶段按三个层次划分。
这三个层次是: 主模块;单证打印客户端的功能主要分成两个独立的部分:数据读取和格式打印,通常先通过前一部分从服务器取到单证数据后,才能开始按格式进行打印,但这两个步骤不一定是连续完成的,数据读取可以将读来的数据暂存在客户端(可以是多个单证的数据),格式打印根据暂存数据打印单证。
其描述如下:参数:单证类别号、相关编号(如保单号、批单号等)以及其它参数(详见定义)1. 将参数打包发送给服务器;2. 接收服务器送来的数据,数据可能是分批送来的多个二维数据块(可根据单证设置表的本地版本得到这些数据块的定义);3. 如果有数据需要由用户输入的数据替换,且用户输入的数据不为空,则替换相应的数据;4. 将接收的数据存放到本地临时数据库中。
详细定义:1.1.1GetDocTempDataId():●原型:CString GetDocTempDataId(char *lpPara)●功能:从本地库中查询单证临时数据的ID●流程:首先分析参数lpPara生成SQL语句,用该语句打开本地库中的t_tmp_doc表,如果记录集为空则返回空串,否则返回c_data_id字段的值。
1.1.2GetFormDataIntoMDB()●原型:CString GetFormDataIntoMDB(CBASEBASE *pThis, char *lpPara, short len)●功能:从服务器端查询获得要打印单证的临时数据并将其保存在本地库中,同时返回单证临时数据的ID●流程:向服务器发包并收包,失败则返回空串,成功则调用PutDataIntoMDB将接收的数据保存到本地库中,失败则报错,成功则返回单证临时数据的ID1.1.3GetFormNo()●原型:BOOL GetFormNo(CString sInsrncCde, CString &sDocId)●功能:根据险种代码sInsrncCde查询该险种保单的ID●流程:根据sInsrncCde生成SQL语句,用该语句打开本地库中的t_insrnc_dfn表,如果记录集为空则返回假,否则返回真,该险种保单的ID保存在sDocId中。
1.1.4InsertTempDoc()●原型:BOOL InsertTempDoc(CDaoDatabase *m_pdbpasys, CString sDataID, char*lpPara)●功能:将单证的临时数据的参数保存在本地库中●流程:先分析lpPara生成SQL语句,用该语句将单证临时数据插入到本地库中的t_tmp_doc表,成功则返回真,失败则返回假。
1.1.5PutDataIntoMDB()●原型:CString PutDataIntoMDB(char *lpPara, char *lpData)●功能:将从服务器端查询获得的单证的临时数据保存在本地库中●流程:(1)在本地库的t_doc_info表中查询指定单证的数据块,失败则报错并返回,有则继续;(2)循环:while 还有指定单证的数据块✧获得该数据块的ID✧构造单证记录集对象CDocRecordset✧把从服务器传来的数据lpData分块存入本地数据库中, 每块的记录数保存到row中✧将该数据块的单证临时数据写入本地库中✧返回循环开始处(3)模块名:print_doc参数:本地临时单证数据ID,打印或预览标记1.根据临时数据库的数据得到单证类别;2.打开该类别的格式文件,将格式信息读取到格式信息结构中;3.申请一页数据的缓冲,根据格式信息确定该页要打印哪些对象;4.对于每一个对象,若对象为一个域,则根据其表达式分析计算其值,计算过程中需要读取临时数据库的内容,将值填入该域对应的位置,并按格式设置其属性;5.如果还需要打印下一页,转3;6.根据缓冲数据,按要求预览或打印该单证的内容。
详细定义PrintForm()●原型:BOOL PrintForm(CBASEBASE *pThis, prtGetNameAndPrintNoStru Cond, CStringsFormNos, int func)●功能:单证打印子系统打印指定单证的模块。
●流程:(1)根据是否合并和单证类型生成单证ID,在本地库的t_doc_info表中查询是否有该单证ID,无则报错并返回,有则继续;(2)根据结构prtGetNameAndPrintNoStru中的数据生成参数lpPara(3)调用函数GetDocTempDataId(4)如果返回值为空则调用GetFormDataIntoMDB(5)如果返回值为空则结束返回,否则继续(6)如果有印刷号✧填写单证查询、修改处理数据结构vchProcessStruct✧如果是收据➢如果不合并打印则将印刷号填写到vchProcessStruct中➢否则填写系统单证号列表数据结构vchSysprnNoStruct并添加到要发送的数据包✧向服务器发包做销号处理,返回值存到bSucc(7)指定格式文件(8)如果是预览则调用单证打印类的预览功能,否则调用单证打印类的直接打印功能(9)返回bSuccPrintForm()●原型:extern "C" void WINAPI PrintForm(CBASEBASE *pThis, CString sDocID, CStringsP1, CString sP2, CString sP3="", CString sP4="", CString sP5="", CString sP6="", int func=1)●功能:其他子系统打印单证的调用接口。
●流程:(1)在本地库的t_doc_info表中查询是否有该单证ID,无则报错并返回,有则继续;(2)根据传入的参数生成参数lpPara(3)调用函数GetDocTempDataId(4)如果返回值为空则调用GetFormDataIntoMDB(5)如果返回值为空则结束返回,否则继续(6)指定格式文件(7)如果是预览则调用单证打印类的预览功能,否则调用单证打印类的直接打印功能●子系统;除以上两个模块,单证打印部分还包括界面处理、本地临时单证数据管理、表达式处理、函数求值以及格式编辑器等部分,界面处理涉及到保批单打印、快速打印和收据打印,除快速打印处理较简单外,另两个处理过程基本相似,这里统一描述:1.显示查询界面;2.将用户输入的查询条件,打包发到服务器;3.接收服务器传回的符合条件单证的有关信息,将其列表显示出来;4.对于每一个用户在列表中选定的单证,如果在本地临时数据库没有该单证的信息,则调用get_bill_data,调用的参数根据具体单证类型来确定,注意如果是合并打印,可能参数不止是一个编号,而是一组编号,这时在客户端需要将这组编号串接成(‘No.1’,’No.2’,’No.3’,……’No.n’)形式的字符串作为参数,而在服务器端的SQL语句会将该参数拼装作为IN子句的操作数;5.根据用户的选择,调用print_bill来打印各个单证;描述:本地临时单证数据的删除、打印及锁定与解锁。
锁定表示该单证数据将不被自动删除。
系统显示一个列表,列出本客户机上临时单证数据库中的所有单证,用户通过按与以上几个功能对应的按钮完成相应的动作。
描述:由于在一个单证中各个可打印域的数据来源是用表达式表示的,因此需要有专门的表达式处理程序,这里主要提供了表达式语法分析模块和表达式求值模块供其它程序调用。
描述:域的表达式中可能包含有本系统提供给用户使用的各种函数,在表达式求值过程中需要对函数进行求值。
此模块完成此功能供表达式求值模块调用,具体函数描述见本文档用户接口部分。
描述:格式编辑器是一个独立执行的程序,它实现对单证格式文件的建立、编辑调整。
要求用可视化的界面对单证中各个可打印对象进行拖放,定义其属性,并能实现模拟的预览和打印。
因此此程序需要调用表达式求值模块和print_bills模块。
●公用类;➢CDocRecordSet类:该类表示一个数据块,该类继承了类CDaoRecordSet,除此之外要用到以下的属性和方法:1.doc_id 单证号2.data_id 单证临时数据标识3.blk_id 数据块号4.item_count 数据项个数5.item_name[] 数据项名数组,可用CArray类6.offset[] 数据项的偏移值,可用CArray类7.type[] 数据项的类型,可用CArray类8.CDocRecordSet() 构造函数,可从一个存在的相同类对象复制,也可以用单证号、数据块号为参数得到9.GetItemVal() 得到一个数据项的值,参数可以为序号也可以为数据项名10.SetItemVal() 设置一个数据项的值,参数可以为序号也可以为数据项名11.SetVal() 设置记录值,参数可以为Cstring类,也可以为char *类型12.AddNew() 插入一条记录,参数可以为Cstring类,也可以为char *类型➢CDocVal类:该类继承了类CString,它定义了单证打印对象的表达式计算的结果。