数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 1
第 13章 发票管理项目开发
本章重点内容
项目开发的整体过程
掌握 PowerBuilder开发项目的各种界面组成
掌握窗口和数据窗口的数据交互技术
熟悉数据窗口数据的常用技术数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 2
13.1 项目整体介绍
1.发票管理系统整体功能:
(1)发票管理:
1)录入:自动生成发票号码、日期、发票号码区间检测。
2)打印:将发票内容保存后打印,打印后,此发票记录将不能删除、修改。
3)浏览:可遍历已经开出来的发票。
4)作废:当发票出现问题后,由于发票是套打,并且发票时是税务部门监制,具有唯一性,所以一旦作废,
记录不能删除,应保持在数据库内,加上作废标记。。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 3
13.1 项目整体介绍
2.统计查询模块
统计查询模块提供 8种统计方式:
( 1)按日期统计:要求输入时间范围:起始日期和结束日期,查询出在这个时间段 内开具的发票及其项目、数额统计,查询结果可以打印或转换成 Excel表格。
( 2)按发票号查询:输入要查询的发票号,查询出相应发票的详细信息,此项内容只能查看不能打印,以免发票造假。
( 3)按收货单位统计:要求选择某一收货单位,统计某一收货单位开具的发票的明细;也可以设置时间段,即统计在某一时间段内为某一收货单位开具的发票明细。统计结果可浏览、打印或转 换成 Excel表格。
( 4)按发货地点统计:要求选择某一发货地点,统计某一发货地点开具的发票的明细;也可以设置时间段,即统计在某一时间段内为某一发货地点开具的发票明细。统计结果可浏览、打印或转 换成 Excel表格。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 4
13.1 项目整体介绍
( 5)按收费项目查询:要求选择某一收费项目,统计对应某一收费项目开具的发票的明细;也可以设置时间段,即统计在某一时间段内为某一收费项目开具的发票明细。统计结果可浏览、打印或转换成 Excel表格。
( 6)作废发票明细查询:查询被作废的发票的明细。
可以设置发票号码范围,即起始发票号码、结束发票号码;也可以同时设置时间范围,即起始日期和结束日期。查询结果可打印。
( 7)按月统计开具发票:输入日期,统计该月开具的发票数量和发票号码,查询结果可打印。
( 8)按月统计作废发票:输入日期,统计该月作废的发票数量和发票号码,查询结果可打印。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 5
13.1 项目整体介绍
4.系统初始化模块
该模块包括 5个子模块:
( 1)收费项目初始化:对于收费项目进行增加、删除、修改的操作。每一个收费项目包括项目编号、收费项目名称和单价。
( 2)用户管理:该模块只有管理员才可以操作,因此进入该模块之前要求用户输入管理员口令。用户管理模块实现开票人帐号和 密码的增加、删除、修改。
( 3)发票号码初始化:该模块只有管理员才可以操作,因此进入该模块之前要求用户输入管理员口令。该模块设置发票起始号码 和结束号码,目的是为了开具发票时可以自动设置发票号码。
( 4)打印机设置:调用打印机设置界面,使用户可以完成打印机的设置工作。
( 5)转换 Excel表格:查询某一时间段内的发票明细转换成 Excel
表格。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 6
发票管理系统模块关系图按日期统计 收费项目初始化按收货单位统计按发货地点统计按收费项目查询作废发票明细按月统计开具发票按月统计作废发票主模块统计查询 帮助 发票管理登录模块 发票管理系统初始化按发票号查询 用户管理发票号码初始化打印机设置转换 Excel 表格数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 7
13.2 数据表的设计表 13-1 发票抬头等数据表(表名 fp)
列名 数据类型 宽度 小数位数 是否为空 说明
fpno float 否 发票号码
date datetime 否 发票日期
shdw char 40 否 收货单位
heji float 是 金额合计
fhdw char 30 是 发货单位
kpr char 8 是 开票人
sfzf char 1 是 是否作废
address char 40 是 开户地址
bank char 35 是 开户银行数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 8
13.2 数据表的设计
表 13-2 发票收费项目数据表(表名 fp_detail)
列名 数据类型宽度 小数位数是否为空说明
fpno float 否 发票号码
dno float 否 发票日期
xm char 14 是 收费项目
shl float 是 销售数量
dj float 是 单价
je float 是 金额数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 9
13.2 数据表的设计
表 13-3 发票号码数据表(表名 fphm)
列名 数据类型宽度 小数位数是否为空说明
hmfirst Int 否 发票段起始号码
hmend int 否 发票段结束号码
表 13-4 开票人数据表(表名 kpr)
列名 数据类型宽度 小数位数是否为空说明
id char 8 否 开票人员帐号
pass char 5 否 开票人员密码数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 10
13.2 数据表的设计
表 13-5 收费项目数据表(表名 sfxm)
列名 数据类型宽度 小数位数是否为空说明
xuhao char 14 否 收费项目序号
sfxm char 12 否 收费项目内容
dj float 是 收费单价数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 11
13.2 数据表的设计
发票管理系统数据表的关系图数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 12
13.3 发票管理模块
13.3.1 发票管理模块界面构成
发票管理模块式依托一个窗口对象来完成的,在这个对象上使用了多种窗口控件和技术,具有一定的普遍应用性,学好这个模块的设计方法,可以将其应用到很多地方。整体截面图如图 13-2所示。
该窗口所用到的各种控件说明如表 13-6。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 13
13.3 发票管理模块控件名 控件类型 说明
dw_1 datawindo
w
发票抬头数据输入(挂接数据窗口对象 d_fp_title)
dw_2 datawindo
w
发票详细数据输入(挂接数据窗口对象 d_fp_detail)
dw_3 datawindo
w
发票打印(挂接数据窗口对象 d_fp_print)
cb_top command
button
,顶记录,按钮数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 14
13.3 发票管理模块
cb_last commandbutton,上一条,按钮
cb_next commandbutton,下一条,按钮
cb_bottom commandbutton,尾记录,按钮
cb_append commandbutton,追加,按钮,开局新发票时用
cb_prn commandbutton,打印,按钮,打印发票用
cb_save commandbutton,保存,按钮
cb_delete commandbutton,删除,按钮,删除未保存过的开错发票
cb_cancel commandbutton,取消,按钮
cb_exit commandbutton,退出,按钮,
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 15
13.3 发票管理模块图 13-2 发票管理窗口主界面图数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 16
13.3 发票管理模块
13.3.2 发票管理模块界面典型设计技巧
1.收货单位的输入框设计
( 1)设计要求:能够自动储存输入的收货单位名称,
第一次输入后,即可从下来列表框中选择。
( 2)设计方法,w_fp_in窗口对象中包含的 dw_1数据窗口控件,dw_1控件挂接的数据窗口对象是 d_fp_title,
在该数据窗口对象画笔中,针对“收货单位”列,设置其属性对话框为 Edit标签页,设置该 Style Type属性为 DropDownDW,再设置 DataWindow属性为 d_shdw,
Display Column属性为 shdw,Data Column属性为 shdw。
参见图 13-3。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 17
下拉数据窗口风格的输入列属性设置数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 18
13.3 发票管理模块图 13-3种涉及到的数据窗口对象 d_shdw在设计时注意:在数据窗口对象画笔中,点击工具栏中的按钮,进入到图 13-4画面,选择 Design菜单中的
Distinct菜单项选 择 此 处的 D i st i nct
菜单项发货单位以及 dw_2所挂接的
d_fp_detail数据窗口对象中的
xm和 shl列的设计方法同收货单位一致。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 19
13.3 发票管理模块
2.典型程序段代码设计
,追加”按钮程序代码设计
,追加”按钮要完成的功能比较多,需要对 dw_1,dw_2中的数据分别追加空记录,并且要实现自动追加发票号码,开具发票日期等功能。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 20
,追加,按钮程序代码设计
//定义局部变量
integer i
long endofdw,pendofdw,no1,no2,v_hm1,v_hm2
date current_date
dw_1.enabled = true
dw_2.enabled = true
cb_top.enabled = false
cb_last.enabled = false
cb_next.enabled = false
cb_bottom.enabled = false
cb_prn.enabled = true
cb_save.enabled = true
endofdw = dw_1.rowcount()
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 21
,追加,按钮程序代码设计
IF endofdw = 0 THEN
//数据库如果是第一次使用
SELECT max(hmfirst)
INTO,v_hm1
FROM fphm ;
dw_1.InsertRow(0)
//在表的尾部插入新的空行
dw_1.setitem(dw_1.getrow(),"date",today()) //设置新的空白记录日期列为当前系统日期
dw_1.setitem(dw_1.getrow(),"fpno",v_hm1) //设置新的空白记录发票号码列为前边取出来的变量值
dw_1.setitem(dw_1.getrow(),"sfzf","0")
dw_1.setitem(dw_1.getrow(),"kpr",user_id)
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 22
,追加,按钮程序代码设计FOR i = 1 TO 7
dw_2.InsertRow(0)
endofdw = dw_2.rowcount()
dw_2.setitem(endofdw,"fpno",v_hm1)
dw_2.setitem(endofdw,"dno",i)
dw_2.setitem(endofdw,"xm"," ")
NEXT
ELSE
//如果数据库不是第一次使用,并且不是刚输入发票号码段
IF rtn = 0 THEN
endofdw = dw_1.InsertRow(0)
pendofdw = endofdw - 1
dw_1.scrolltorow(pendofdw)//将记录指针指向空白记录前一条
no1 = dw_1.GetItemDecimal(pendofdw,"fpno")// 取得前一条记录的号码
no2 = no1 + 1
SELECT max(hmfirst),max(hmend)
INTO,v_hm1,:v_hm2
FROM fphm ;
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 23
,追加,按钮程序代码设计
IF no2 >= v_hm1 and no2 <= v_hm2 THEN
dw_1.scrolltorow(endofdw)
//将记录指针指向空白记录
dw_1.setitem(endofdw,"fpno",no2)
dw_1.setitem(endofdw,"date",today())
dw_1.setitem(dw_1.getrow(),"sfzf",'0')
dw_1.setitem(dw_1.getrow(),"kpr",user_id)
dw_2.retrieve(no2)
//设置发票细节窗口的数据值
FOR i = 1 TO 7
dw_2.InsertRow(0)
endofdw = dw_2.rowcount()
dw_2.setitem(endofdw,"fpno",no2)
dw_2.setitem(endofdw,"dno",i)
dw_2.setitem(endofdw,"xm"," ")
NEXT
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 24
,追加,按钮程序代码设计
ELSE
MessageBox(,错误提示,,“目前的发票号码已经超出当前发票本的范围,请输入新的号码段 ",Exclamation!,OK!)
open(w_pass)
END IF
ELSE
IF rtn = 9 THEN
SELECT max(hmfirst)
INTO,v_hm1
FROM fphm ;
dw_1.scrolltorow(endofdw) //将记录指针指向空白记录
dw_1.setitem(endofdw,"fpno",v_hm1)
dw_1.setitem(endofdw,"date",today())
dw_1.setitem(dw_1.getrow(),"sfzf",'0')
dw_1.setitem(dw_1.getrow(),"kpr",user_id)
dw_2.retrieve(v_hm1)
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 25
,追加,按钮程序代码设计
//设置发票细节窗口的数据值
FOR i = 1 TO 7
dw_2.InsertRow(0)
endofdw = dw_2.rowcount()
dw_2.setitem(endofdw,"fpno",v_hm1)
dw_2.setitem(endofdw,"dno",i)
dw_2.setitem(endofdw,"xm"," ")
NEXT
rtn = 0
END IF
END IF
END IF
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 26
13.4 统计查询模块
统计查询模块主要根据用户的输入条件如日期等,从数据表中查出符合条件的记录。
图 13-5为按照日期统计查询窗口。
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 27
13.4 统计查询模块
该窗口的设计技巧是使用了一个自定义对象 uo_comctl_datetime,
实现年历日期的选择。
1.“转出 Excell”按钮的程序代码是:
integer v_saved
v_saved = dw_3.saveas("",Excel5!,true)
IF v_saved = 1 THEN
MessageBox("信息 ","转换成 Excell表格成功 ",Information!)
ELSE
MessageBox("警告 ","不能转换成 Excell表格 ",Exclamation!)
END IF
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 28
13.4 统计查询模块
2.“查询”按钮的程序代码是:
string DWfilter,start_date,end_date
long rows
start_date = f_getdate(uo_start_date)//取得用户选择的日期
end_date = f_getdate(uo_end_date)
//根据用户日期情况设置 dw_1,dw_2,dw_3的数据窗口控件数据过滤条件
if start_date = "" and end_date = "" then
DWfilter = ""
dw_1.SetFilter(DWfilter)
dw_1.Filter()
dw_2.SetFilter(DWfilter)
dw_2.Filter()
rows = dw_2.rowcount()
dw_1.object.fpsl.text = "符合条件的发票共有 " + string(rows) + "张 "
dw_3.SetFilter(DWfilter)
dw_3.Filter()
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 29
2.,查询,按钮的程序代码
else
DWfilter = "date >= date('"+start_date+"') and date <= date('"
+end_date+"')"
dw_1.SetFilter(DWfilter)
dw_1.Filter()
dw_2.SetFilter(DWfilter)
dw_2.Filter()
rows = dw_2.rowcount()
dw_1.object.fpsl.text = "符合条件的发票共有 " + string(rows) + "张 "
dw_3.SetFilter(DWfilter)
dw_3.Filter()
end if
数据库原理及应用 -“十一五”国家级规划教材数据库原理及开发 30
本章小结
掌握项目的开发常用技术和设计技巧
上机练习发票管理系统的开发