if sqlca.sqlcode <> 0 then
messagebox("提示信息","获得销售单明细编号失败!")
return
end if
//得到最大销售单明细编号
select max(convert(decimal(8,0),编号)) into :ll_xhbh from 销售单明细;
if sqlca.sqlcode <> 0 then
messagebox("提示信息","获得销售单明细编号失败!")
return
end if
//得到最大销售明细编号
if ll_lsbh > ll_xhbh or isnull(ll_xhbh) then
ll_xhbh = ll_lsbh
end if
//循环赋值最大销售单编号
for i =1 to dw_1.rowcount()
ls_lsbh =dw_1.getitemstring(i,"编号")
//销售编号 +1
if isnull(ls_lsbh) or ls_lsbh =" " then
ls_xhbh +=1
if ls_xhbh = 0 or isnull(ll_xhbh) then
ls_xhbh ="1"
else
ls_xhbh =string(ll_xhbh)
end if
dw_1.setitem(i,"编号",ls_xhbh)
end if
dw_1.setitem(i,"销售单号",ls_bh)
ld_she =dw_1.getitemdecimal(i,"税额")
ld_sjhj =dw_1.getitemdecimal(i,"税价合计")
ld_bhsj =dw_1.getitemdecimal(i,"不含税价")
next
dw_bt.setitem(1,"税额",dw_1.getitemdecimal(1,"she"))
dw_bt.setitem(1,"税价合计",dw_1.getitemdecimal(1,"sjhj"))
dw_bt.setitem(1,"不含税价",dw_1.getitemdecimal(1,"bhsj"))
//更新
if dw_bt.update() =1 and dw_1.update() =1 then
commit ; //提交数据
messagebox("提示信息","销售单保存成功!")
else
rollback; //回滚
messagebox("提示信息","销售单保存失败,请重试!")
return
end if
(20)在数据窗cb_confirm的CLICKED事件加入如下代码,并调用存储过程.
//调用存储过程
declare sp_helptext procedure for sf_销售单;
//执行存储过程
execute sp_helptext;
close(parent)
因为改变了库存和应付款以后,不允许对销售单进行进一步的编辑,所以关闭窗口
(21)在数据窗cb_exit的CLICKED事件加入如下代码
integer msg
msg=messagebox("提示信息","你确定现在要退出吗?",question!,yesno!,2)
if msg =2 then return
close(this)
(22)在数据窗cb_print的CLICKED事件加入如下代码,调用打印窗口打印销售单,并询问用户是否确认销售单
string ls_dwfullstate,ls_bh
if dw_1.rowcount() < 1 then
msg=messagebox("提示信息","没有可以打印的销售单数据!")
return
end if
//得到销售单号
ls_bh =dw_1.getitemstring(1,"销售单号")
//检索数据
dw_print.retrieve(ls_bh)
dw_print.getfullstate(ls_dwfullstate)
//打开打印窗口
openwithparm(w_print,ls_dwfullstate)
if messagebox("提示信息","是否记账确认进货单!",question!,yesno!,1) =1 then
cb_confirm.triggerevent(clicked!)
end if
(23)创建一个数据窗对象"d_xsd_print",其风格为free form,data source为sql select 选择"销售单明细"的所有字段
和销售单的“编号”,客户编号和销售日期字段“商品清单”的品名,单位字段和“客户清单”的名称字段。
//----------------------------------------------------------------------------------------------------------------------------------------
2.1.6.3 创建打印窗口
窗口各个控件的属性如下表
控件类型 对象名称 属性 取值
window w_print window type response!
datawindow dw_1
statictext st_1 text 缩放比例
statictext st_2 text 打印份数
singlelineedit sle_1 text
editmask em_zoom text 100
vscrollbar vsb_zoom
editmask 1
vscrollbar vsb_pages
checkbox cbx_preview text 打印预览
commandbutton cb_2 test 设置
commandbutton cb_1 test 打印
commandbutton cb_close test 关闭
注意:打印主要用到函数"setfullstate","getfullstate"
(1)在窗口w_print的open事件中加入如下代码
string ls_dwfullstate
ls_dwfullstate =message.stringparm
dw_1.setfullstate(ls_dwfullstate)
//----------------------------------------------------------------------------------------------------------------------------------------
2.1.7 库存查询
(1)创建一个窗口,保存名称为"w_kccx"
(2)设置窗口的属性为main!
(3)窗口各个控件的属性如下表
窗口各个控件的属性如下表
控件类型 对象名称 属性 取值
window w_kccx window type main!
datawindow dw_1 dataobject d_kzcx
datawindow dw_2 dataobject d_ck
statictext st_hh text 货号
statictext st_pym text 拼音编码
statictext st_ck text 仓库
singlelineedit sle_hh
singlelineedit sle_pym
commandbutton cb_1 test 查询
(4)创建一个数据窗对象"d_kccx",其风格为free form,data source为sql select 选择"库存库"的所有字段
“商品清单”的品名,拼音码,单位字段
(5)在数据窗cb_1的CLICKED事件加入如下代码
string ls_hh,ls_pym,ls_ck
string ls_select
//得到输入的值
ls_hh=trim(sle_hh.text)
ls_pym=trim(sle_pym.text)
ls_ck=is_ck
//货号
if isnull(ls_hh) then
ls_hh ="%"
end if
//拼音码
if isnull(ls_pym) then
ls_pym="%"
end if
//仓库
if ls_ck =" " or isnull(ls_ck) then
ls_ck ="%"
end if
ls_hh ="%" +ls_hh+ "%"
ls_pym ="%" +ls_pym+ "%"
ls_ck ="%" +ls_ck+ "%"
//生成SQL语句
ls_select =" and 库存库.货号 LIKE '"+ ls_hh + "'"
ls_select =ls_select + " and 商品清单.拼音编码 LIKE '"+ ls_pym + "'"
ls_select =ls_select + " and 库存库.仓库 LIKE '"+ ls_ck + "'"
//生成数据窗SQL语句
ls_select =is_sql +ls_select
//赋值SQL语句
dw_1.setsqlselect(ls_select)
dw_1.retrieve()
(6)窗口各个控件的属性如下表
//----------------------------------------------------------------------------------------------------------------------------------------
2.1.8 权限管理
窗口各个控件的属性如下表
控件类型 对象名称 属性 取值
window w_qx_gl window type main!
datawindow dw_1 dataobject d_qx_user
datawindow dw_2 dataobject d_qx_qx
datawindow dw_2 visible false
treeview tv_1 checkboxes true
注意:1> 在窗口打开的时候,数据窗dw_1检索出使用该系统的所有用户,数据窗dw_2即权限数据窗检索出该系统所拥有的所有权限,
并将权限都添加到树上,由于所有的权限以树的形式显示出来,所以将数据窗dw_2的visible属性设置为false
2> 然后建立一个数据存储"ids_qxyh",该数据存储保存的现有的各个用户所拥有的权限。,当在数据窗dw_1选择一个用户的时候
系统就根据选中的用户从过滤数据存储“ids_qxyh”中选中用户的权限,并且将树上给用户所拥有的权限的"checkbox"属性设置为true
3> 当对用户的权限进行增加和删除时,直接用SQL语句对数据进行修改,并实时的检索"ids_qxyh",这样当下次单击改变了权限的用户时
数据为最新修改的数据。
在窗OPEN事件代码如下(并建立数据存储"ids_qxyh"):
treeviewitem ltvi_item
long ll_tv,i,ll_rowcount
string ls_privilege
//连接数据库
dw_1.settranobject(sqlca)
dw_2.settranobject(sqlca)
//检索数据
dw_1.retrieve()
dw_2.retrieve()
//建立数据存储,并检索数据
ids_qxyh=create datastore
ids_qxyh.dataobject ="d_qx_yh"
ids_qxyh.settranobject(sqlca)
ids_qxyh.retrieve()
//生成菜单变量
im_privilege = create m_main
//赋值权限树根
ltvi_item.label = "所有权限"
ltvi_item.data = "all"
ltvi_item.pictureindex = 1
ltvi_item.selectedpictureindex = 1
ll_tv = tv_1.insertitemlast(0,ltvi_item)
ll_rowcount=dw_2.rowcount()
if ll_rowcount < 1 then return
/循环,给树赋值所有的权限名称
for i =1 to ll_rowcount
ls_privilege = dw_2.getitemstring(i,"权限名称")
ltvi_item.label = ls_privilege
ltvi_item.data = ls_privilege
ltvi_item.pictureindex = 2
ltvi_item.selectedpictureindex = 2
tv_1.insertitemlast(ll_tv,ltvi_item)
next
//tv_1.expanditem(2)
tv_1.expandall(1)
建立窗口函数“wf_setcheck”,返回值为integer,参数"al_handle"为树的句柄,"as_user"为选中的用户,
代码如下:
long li_handle,ll_row_found
treeviewitem ltvi_item
string ls_menu,ls_user
ls_user = as_user
li_handle=al_handle
//得到参数
if li_handle = 1 then
//得到子项目
li_handle = tv_1.finditem(childtreeitem!,1)
else
//否则,得到同级的下一个项目
li_handle = tv_1.finditem(nexttreeitem!,li_handle)
end if
do while li_handle <> -1
tv_1.getitem(li_handle,ltvi_item)
//得到菜单项
ls_menu=ltvi_item.data
ll_row_found =ids_qxyh.find("权限名称 ='" +ls_menu +"' and 用户编号='" +ls_user +"'",1,ids_qxyh.rowcount())
if ll_row_found>0 then
ltvi_item.statepictureindex = 2
else
ltvi_item.statepictureindex = 1
tv_1.setitem(li_handle ,ltvi_item)
//递规调用
wf_setcheck(li_handle,ls_user)
//find next at this level
li_handle = tv_1.finditem(nexttreeitem!,li_handle)
loop
retrun 1
在数据窗dw_1 的clicked事件中加入以下代码,选中的用户调用窗口函数“wf_setcheck”来设置树的checkbox属性为true or false
treeviewitem ltvi_item
long li_handle,ll_row_found
string ls_user,ls_menu,ls_bm
if row < 1 then return
//选择单击的行
this.selectrow(0,false)
this.selectrow(row,true)
//得到用户编号和部门
ls_user=this.getitemstring(row,"用户编号")
ls_bm=this.getitemstring(row,"部门")
is_user= ls_user
is_bm = ls_bm
//调用函数显示权限
wf_setcheck(1,ls_user)
ltvi_item.statepictureindex = 2
在树tv_1的CLICKED事件中加入以下代码:
treeviewitem ltvi_item
string ls_data
//得到数据
this.getitem(handle,ltvi_item)
ls_data = ltvi_item.data
if handle > 1 then
if ltvi_item.statepictureindex = 1 then
//插入权限表
insert into 权限清单
(用户编号,
部门,
权限名称 )
values (:is_user,
:is_bm,
:ls_data);
if sqlca.sqlcode <> 0 then
messagebox("提示信息","增加权限失败!")
return
else
commit;
ids_qxyh.retrieve()
end if
else
//删除权限
delete from 权限清单
where 用户编号 =:is_user and 部门 =:is_bm and 权限名称=:ls_data;
if sqlca.sqlcode <> 0 then
messagebox("提示信息","删除权限失败!")
rollback;//回滚数据;
return
else
commit; //提交数据
ids_qxyh.retrieve()
end if
end if
end if
//----------------------------------------------------------------------------------------------------------------------------------------
2.1.8 系统编译并发布