收藏 分享(赏)

单证打印的完整流程.doc

上传人:dreamzhangning 文档编号:2244616 上传时间:2018-09-07 格式:DOC 页数:11 大小:83.50KB
下载 相关 举报
单证打印的完整流程.doc_第1页
第1页 / 共11页
单证打印的完整流程.doc_第2页
第2页 / 共11页
单证打印的完整流程.doc_第3页
第3页 / 共11页
单证打印的完整流程.doc_第4页
第4页 / 共11页
单证打印的完整流程.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、1. 数据库的设置和格式文件设计:1.1 数据库的设置:数据库的设置是打印一张单证的基础,也是较为困难的部分。该部分工作由开发人员对本地库直接进行操作。前台需要设置的表有 t_insrnc_dfn(险种定义表) ,T_DOC_INFO(单证信息主档) ,T_DOC_DATABLK (单证数据块档) ,T_ITEM_DCRB(单证数据项描述档) 。后台的设置和前台相同。各表的详细说明见内部接口的单证设置表部分。 (注:t_insrnc_dfn(险种定义表)的定义未包含在内,该表设置了险种的信息,其中的 c_doc_id 字段是单证打印模块所需要的。 )首先,要分析提供的单证的格式样本。然后根据单

2、证的格式样本中要打印的单证数据来确定该单证的数据块及每个数据块包含的数据项;在此基础上,写出得到这些数据块和数据项的值的 SQL 语句,并将数据块,数据项和设计的 SQL 语句添加到数据库中相关的单证设置表中。供单证打印系统使用。在此以单证 PC0002 为例说明分析和设置的过程(可用单证编辑器打开 PC0002.FMP浏览其格式) 。在 PC0002 的单证样本中,我们可以看到以下信息:险种,保单号,被保险人姓名,保险标的地址,受益人名称,保险项目及保险金额,保险期限,免赔信息,保险费率,付款日期及方式,特别约定和保险公司的信息等。这些信息都可以根据该保单的保单号从数据库中获得。当然不一定只

3、用一个 SQL 语句就可获得所有的信息。我们将每个 SQL 语句查询出的信息称为一个数据块,而每个数据块由多个数据项组成。在本例中,有四个数据块:PLY_HEAD(保单的基本信息) ,PLY_OBJ(标的物信息) ,PLY_RDR (附加险信息)和 PLY_TERM(缴费信息) 。每个数据块包含的数据项可在“域”对象的表达式属性页中点击“数据项”按钮浏览。每个数据块包含的数据项的个数应和该数据块对应的 SQL 语句SELECT 出的字段的个数一致,并且 SELECT 出的字段的顺序必须和该数据块中的数据项的 n_ord_id 的顺序相同。否则该单证无法打印或打印出的数据与要求不一致。在设置时,

4、每个数据块应尽可能包含可能需要的所有信息,而不应局限于提供的单证格式样本。1.2 格式文件的设计参照单证格式样本用单证编辑器设计单证格式文件。2.软件设计:2.1 模块关系图:2.2 层次结构2.2.1 客户端2.2.1.1 软件结构以下是单证打印的概要设计,其详细设计请参阅文档单证打印(车险)详细设计书.doc本系统所提供的各项业务、功能在系统设计实现阶段按三个层次划分。这三个层次是: 主模块;单证打印客户端的功能主要分成两个独立的部分:数据读取和格式打印,通常先通过前一部分从服务器取到单证数据后,才能开始按格式进行打印,但这两个步骤不一定是连续完成的,数据读取可以将读来的数据暂存在客户端(

5、可以是多个单证的数据),格式打印根据暂存数据打印单证。其描述如下:功能: 数据读取参数:单证类别号、相关编号(如保单号、批单号等)以及其它参数(详见定义)1. 将参数打包发送给服务器;2. 接收服务器送来的数据,数据可能是分批送来的多个二维数据块(可根据单证设置表的本地版本得到这些数据块的定义);3. 如果有数据需要由用户输入的数据替换,且用户输入的数据不为空,则替换相应的数据;4. 将接收的数据存放到本地临时数据库中。详细定义:序号 模块名称 功能介绍1 GetDocTempDataId 查询单证临时数据的 ID2 GetFormDataIntoMDB 从服务器查询单证临时数据并放入本地数据

6、库数据读取格式打印保批单快速打印单证格式编辑器单证预览或打印本地临时单证数据格式文件服务器收据打印保批单打印临时单证数据管理表达式处理调用调用函数求值3 GetFormNo 查询单证的单证号4 InsertTempDoc 插入单证数据到本地数据库5 PutDataIntoMDB 将单证临时数据放入本地数据库1.1.1 GetDocTempDataId(): 原型:CString GetDocTempDataId(char *lpPara) 功能:从本地库中查询单证临时数据的 ID 流程:首先分析参数 lpPara 生成 SQL 语句,用该语句打开本地库中的 t_tmp_doc表,如果记录集为空

7、则返回空串,否则返回 c_data_id 字段的值。1.1.2 GetFormDataIntoMDB() 原型:CString GetFormDataIntoMDB(CBASEBASE *pThis, char *lpPara, short len) 功能:从服务器端查询获得要打印单证的临时数据并将其保存在本地库中,同时返回单证临时数据的 ID 流程:向服务器发包并收包,失败则返回空串,成功则调用 PutDataIntoMDB 将接收的数据保存到本地库中,失败则报错,成功则返回单证临时数据的 ID1.1.3 GetFormNo() 原型:BOOL GetFormNo(CString sInsr

8、ncCde, CString 5. 根据用户的选择,调用 print_bill 来打印各个单证;功能: 本地临时单证数据管理描述: 本地临时单证数据的删除、打印及锁定与解锁。锁定表示该单证数据将不被自动删除。系统显示一个列表,列出本客户机上临时单证数据库中的所有单证,用户通过按与以上几个功能对应的按钮完成相应的动作。功能: 表达式处理描述: 由于在一个单证中各个可打印域的数据来源是用表达式表示的,因此需要有专门的表达式处理程序,这里主要提供了表达式语法分析模块和表达式求值模块供其它程序调用。功能: 函数求值描述: 域的表达式中可能包含有本系统提供给用户使用的各种函数,在表达式求值过程中需要对函

9、数进行求值。此模块完成此功能供表达式求值模块调用,具体函数描述见本文档用户接口部分。功能: 格式编辑器描述: 格式编辑器是一个独立执行的程序,它实现对单证格式文件的建立、编辑调整。要求用可视化的界面对单证中各个可打印对象进行拖放,定义其属性,并能实现模拟的预览和打印。因此此程序需要调用表达式求值模块和print_bills 模块。 公用类; CDocRecordSet 类:该类表示一个数据块,该类继承了类 CDaoRecordSet,除此之外要用到以下的属性和方法:1. doc_id 单证号2. data_id 单证临时数据标识3. blk_id 数据块号4. item_count 数据项个数

10、5. item_name 数据项名数组,可用 CArray 类6. offset 数据项的偏移值,可用 CArray 类7. type 数据项的类型,可用 CArray 类8. CDocRecordSet() 构造函数,可从一个存在的相同类对象复制,也可以用单证号、数据块号为参数得到9. GetItemVal() 得到一个数据项的值,参数可以为序号也可以为数据项名10. SetItemVal() 设置一个数据项的值,参数可以为序号也可以为数据项名11. SetVal() 设置记录值,参数可以为 Cstring 类,也可以为 char *类型12. AddNew() 插入一条记录,参数可以为 C

11、string 类,也可以为 char *类型 CDocVal 类:该类继承了类 CString,它定义了单证打印对象的表达式计算的结果。 CEvaluate 类:该类无父类。它负责对单证打印对象的表达式的语法检查和计算。 CDocObj 类:该类无父类。它定义了单证打印对象。即用户接口部分的可打印对象。实现了可打印对象的画面预览和实际打印功能。 CDocPrint 类:该类无父类。它实现了单证数据按单证格式文件在对话框中预览,单证数据输出到打印机和读取单证格式文件的单证格式的功能。2.2.2 服务器端2.2.2.1 软件结构单证打印在服务器端的处理较为简单,主要流程如下:1. 接受到客户端的读

12、取数据参数,按其中的单证类别码从单证设置表中取得该类单证的数据处理信息(单证设置表结构见本文档内部接口定义);2. 对于该单证的每个数据块,得到读取数据的 SQL 语句,将参数填入到该语句适当位置,执行该 SQL 语句,将结果按格式打包发送到客户端;3. 如果以上语句执行出现错误,则返回错误信息;否则成功返回。2.3 接口设计2.3.1 用户接口需要用户了解的信息主要有以下几个:1. 数据块的概念每类单证的数据应该由多个数据块组成, (数据块设置见内部接口中单证设置表的定义);可以将各个数据块之间的数据关联描述为一种树型层次关系,最多只有三层,相邻层的数据块之间有关键字相互关联。根结点的数据块

13、只能得到单条记录(无关键字) ,第二层数据块可能是一维表格(即仅有一个关键字) ,第三层数据块实际上是二维表格,它的每条记录是由上层的父数据块和本数据块关键字确定(即有两个关键字) 。2. 可打印对象 域最重要的可打印对象是域,它其实是打印内容由表达式来计算的一个文本框,该文本框的内容需要定义以下属性:1) 输出项的数据转换:定义一种输出转换关系(要求缺省打印原值) ,如:若原值为Y输出为 是,若原值为N ,则输出为 否,对未定义值打印原值。2) 数据项的输出格式:如日期类型使用“YYYY/MM/DD ”等格式,数值使用“-9999.99”的格式等。3) 可定义域的高度和宽度及打印字体,字符串

14、类型的值可以在域中折行(某数据域在指定范围内如果不能折行打印完的话,那么,要在下一页的同样位置打印剩余的内容,此功能可作为一项属性,用户可选择换页,也可选择截取剩余内容。若选择换页,而在打印时真的发生换页的话,应向用户给出提示,以便让用户知道换什么样的纸来打印)。4) 可定义域中内容是左对齐、右对齐还是居中 表格这里的表格是一种内嵌了域的一维表格,但与数据块之间有一一对应的关系,主要是需要使用其数据。对于第三层结点的数据块,在格式定义的表格中还要指定其与第二层数据块关联的关键字的值,注意,一张单证格式定义中每个数据块只能对应一个表格。表格要定义属性如下:1) 表格所对应数据块的名( 若是第三层

15、数据块,还需指定其对应第二层数据块的关键字的值)2) 记录走向是横向还是纵向;3) 每行的行高(横向表格则是列宽) ,在每页中可打印的行数 (横向表格是列数);4) 可以定义任何可打印的域,域的含义同前,域定义的表达式中包含的数据块的列值,如果是本身数据块中的列,在每行根据记录顺序取值;否则,该列值在每行中应该都是固定取值。但是不能直接引用其下层数据块的列,可以使用下层数据块的列作参数的函数,但其取值受本数据块当前行的限制。5) 可以指定从对应数据块的第几行记录开始打印,即跳过前面 n 条记录。 其它可打印对象其它对象如图形、图像和自由文字,可定义其尺寸、字体等属性。 对象公共属性:1) 每页

16、打印属性:定义对象是否在每一页的相同位置都打印;2) 隐藏属性:定义对象是否可以隐藏,可以隐藏时应规定隐藏条件;3) 所属表格属性:定义对象是否是表格中的对象;3. 表达式语法表达式中的运算仅限于四则运算(包括括号) 或字符连接操作,参加运算的操作数可以是常数和在数据处理部分中定义的表格中的列,也可以是下面定义的函数,其中字符常数用双引号括起来;4. 函数用户可以使用的函数包括以下几个:(这里参数中的 T 代表数据块名;C 代表列名)sum(T,C,f): 对一个数据块的某列求和 (f 为 0 表示求总和;为 1 则求到当前页为止的累计数) ;averge(T,C): 对一个数据块的某列求平均

17、数;count(T,C ,f): 计算一个数据块的记录数( f 为 0 求总记录数;为 1 则求到当前页为止的记录数) ;upper(e,f): 将数值表达式 e 的结果转换成金额大写形式, f 为 0 表示中文大写,为 1 表示英文大写;substr(e,f1 ,f2):求串表达式的子串,从位置 f1 开始,取 f2 长;tochar(e, fmt): 将数值表达式 e 的内容按格式 fmt 转换成字符串; e 为日期型时,fmt 对应的格式为:1:YYYY/MM/DD;2:DD/MM/YYYY;3:YYYY 年 MM月 DD 日;4:YYYY-MM-DD;5:YYYY.MM.DD;6:MO

18、N DD,YYYY;7:MM/DD/YYYYyear(d): 取日期 d 的年 month(d): 取日期 d 的月date(d): 取日期 d 的日getval(T,C,k): 得到数据块 T 中指定列 C,关键字为 k 的行的值,仅适用于非根结点表格;page(): 当前页号;sumofpg(): 总共页数。注意,这些函数中的 T 为第三层数据块的时候,则其取值将被限定为与上层数据块当前行相关联的数据行,如:对 sum 函数,当 T 为第三层数据块时,仅对与上层数据块当前行相关联的行进行求和。5. 打印区域(目前有 detail 和 tail 区,但 tail 区域只可打印页码)单证的打印

19、区域有三个:header、detail 和 tail,三个区域除只有 detail 中可以包含表格外,都可以包含任何其它可打印对象,且在 header 和 tail 中,域在每页中的内容一般都相同(除非包含了与页相关的函数的域,如 page()、sum(T,C,1) 、count(T,C,1)等) 。每个单证可以先打印一个封面,封面和后面的页可以是不同大小的纸,并且由于没有换页,所以不包含三个打印区域,整个只有一个打印区域,封面中可以包含任何可打印对象,但若有表格则仅能打印该表格对应数据块的前面若干行。2.3.2 外部接口无2.3.3 内部接口 单证打印部分的内部接口主要包括:单证设置表、单证

20、格式文件、单证数据临时数据库和一些内部数据结构。1. 内部接口单证设置表单证设置表为数据库中的三个表:单证信息主档、单证数据块档、单证数据项描述档,这些表都可本地化。它们的构成分别如下: 单证信息主档(设置单证的基本信息):c_doc_id 单证号c_doc_cnm 单证中文名c_inscde 险种,非固定险种则为空c_language 中文或英文(C-中文、E-英文、N-不限制)c_doc_cls 类别(A:投保单;B:批改申请;E:批单;L:最新保单;M:赔款收据;N :无赔退费收据;O:现场查勘报告?;P:保单; R:保费收据;S:手续费收据;U:退保费通知单)c_crt_cde 创建人

21、代码c_upd_cde 修改人代码t_crt_tm 创建时间t_upd_tm 修改时间c_privilege 权限操作码n_priv_tag 权限检查标志n_cls_ord 类别序号 单证数据块档(设置单证数据块的信息):c_doc_id 单证号c_blk_id 数据块号c_blk_nme 数据块的名称c_key1 关键字 1 的序号c_key2 关键字 2 的序号c_parent 上层数据块号c_sql 得到数据的 SQL 语句,该语句中若包含 #1、 #2则在执行时,它们的位置被参数代替;n_level 所处层数n_item_count 该数据块包含的数据项的个数 单证数据项描述档(设置单

22、证各数据块中的数据项的信息):c_doc_id 单证号c_blk_id 数据块号n_ord_id 在本数据块中的序号c_item_enm 数据项英文名c_item_cnm 数据项中文名c_type 类型(0:字符;1:数字;2:日期)n_length 长度此档中单证号和数据项英文名为关键字,即在一个单证中各数据项的英文名不能重名。2. 单证格式文件单证格式文件中定义了一个单证的属性以及它所包含的各种可打印对象的属性。这里仅初步地描述单证格式中两个重要的可打印对象的定义:域和表格 单证格式域定义:sheet 所属表格序号expression 表达式x 位置横坐标,若 c_sheet 不为空,则指

23、在当前表格一行中的横坐标,否则为打印区域横坐标y 位置纵坐标,若 c_sheet 不为空,则指在当前表格一行中的纵坐标,否则为打印区域纵坐标width 域宽度height 域高度wordwrap 是否允许折行overpage 若打印内容超出本域的打印范围是否换页font 字体定义format 格式定义alignment 格式排列(左对齐、右对齐或居中)listtable 转换表 单证格式表格定义:blk_id 数据块号direction 打印方向(横向或纵向)x 位置横坐标y 位置纵坐标width 表格宽度height 表格高度border 是否有边框rowheight 行高,若是横向打印则是

24、行宽startrec 开始记录号3. 单证数据临时数据库单证数据临时数据库仅在客户端存在,它分为主档和付档两个表,构成分别如下: 单证临时数据主档:c_data_id 临时数据标识c_doc_id 单证号d_build_time 生成时间c_argv1 参数 1c_argv2 参数 2c_argv3 参数 3c_argv4 参数 4c_argv5 参数 5c_argv6 参数 6 单证临时数据付档:c_data_id 临时数据标识c_blk_id 数据块号c_key1 关键字 1c_key2 关键字 2c_value 行值(长字段) ,根据各数据项在单证数据项描述表中 c_offset 和 c

25、_length 的值来分离出各数据项的取值4. 其它数据结构单证打印部分内部还需要定义一些数据结构用于内部的通信,主要有单证执行参数和单证数据传送格式 单证执行参数:doc_id 单证号argv1_len 参数 1 长度argv2_len 参数 2 长度argv3_len 参数 3 长度argv4_len 参数 4 长度argv5_len 参数 5 长度argv6_len 参数 6 长度prn_no 单证印刷号argv_data 参数值,此字段不定长,由六个参数按顺序串接而成,因此其长度为六个参数长度之和 单证数据传送格式:单证数据从服务器传送到客户端时采用一个数据块为一组报文,每组报文中各记录连续存放的方式,客户端根据单证数据项描述档求取每个数据块一行记录的长度,从而分离出各记录的值,直接存贮到临时数据库中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报