PB中使用FORMULA ONE

 
PB中使用FORMULA ONE
 

  以一个例子来详细说明F1的用法。此例为电力企业停电申请票的上报审批过程,内含过程权限控制,每一权限只能修改F1报表的一个部分,且有做图功能,采用PB 6.5 和 F1 6 所编,下面将详细说明:  4.读模板的内容至控件:

 

declare instance variables:

BLOB vcf_form

declare global variables:

string gs_ztm,gs_lrdw,gs_gldw

datetime gd_lrsj,gd_tdsj

在窗口的OPEN事件中写脚本:

datetime sj

int fh

string ls_dwmc

em_1.text=string(gd_tdsj,"yyyy年mm月dd日hh:mm")

selectblob SQPNR into :vcf_form from DFS_TDSQP

where LRSJ=:gd_lrsj and LRDW=:gs_lrdw

using sqlca;//取出库中申请票内容

if isnull(vcf_form) then

ole_1.object.Read("模板.vts", ref fh)//把模板读入OLE控件

ole_1.object.setactivecell(21,2)

ole_1.object.Entry=string(gd_tdsj,"mm月dd日hh时mm分至")//填入计划停电时间

ole_1.object.setactivecell(4,3)

select ZZ_DWMC into :ls_dwmc from B04 where ZZ_DWBM=:gs_lrdw;

ole_1.object.Entry=ls_dwmc//填入计划停电单位

ole_1.object.setactivecell(4,6)

ole_1.object.Entry=xm//填入姓名

else

if fileexists("c:/book1.vts") then

filedelete("c:/book1.vts")

end if

fh=fileopen("c:/book1.vts",streammode!,write!)//建一临时文件

if fh<>-1 then

filewrite(fh,vcf_form)//把库中的库中申请票内容写入临时文件

fileclose(fh)

ole_1.object.Read("c:/book1.vts", ref fh)//把临时文件内容读入控件

else

MessageBox("错误提示", "打开文件操作错误!")

close(this)

return

end if

END IF

 

CHOOSE CASE qx

CASE "lr"//权限为二级单位录入时只能录入左半边的报表

ole_1.object.selection="A1:G38"

ole_1.object.setprotection(false,false)//将A1:G38的单元格置为可写,其余不可。

ole_1.object.enableprotection=true

ole_1.object.selection="C4"//光标停在C4单元格处

CASE "gl"

 

CASE "zd"

 

CASE "zb"

 

END CHOOSE

  5.鼠标右键双击OLE_1控件可直接编辑报表,填入内容至可写的单元格内,可以采用F1的画图工具对报表进行简单的做图。

  6.将已修改的控件内容写入数据库:

int fh

OLEobject book;

string filename="c:/book1.vts"

 

book=ole_1.object

book.Write(filename, 12)//将控件内容写入临时文件

fh=fileopen( filename, StreamMode!)

IF fh<>-1 THEN

FileRead(fh, vcf_form) //将临时文件内容写入BLOB变量

FileClose(fh)

ELSE

RETURN 0

END IF

 

if len(vcf_form )>0 then

UPDATEBLOB DFS_TDSQP set SQPNR=:vcf_form

where LRSJ=:gd_lrsj and LRDW=:gs_lrdw

using sqlca;//将BLOB变量内容写入库中

IF SQLca.sqlcode=0 THEN

COMMIT using sqlca;

// MessageBox("提示", "完成对数据库的申请票存储操作!")

ELSE

ROLLBACK using sqlca;

MessageBox("提示", "申请票存储操作失败!")

RETURN 0

END IF

end if

 

gd_tdsj=datetime(date(left(em_1.text,4)+"-"+mid(em_1.text,7,2)+"-"+mid(em_1.text,11,2)),&

time(mid(em_1.text,15,5)+":00"))

update DFS_TDSQP set TDSJ=:gd_tdsj , ZTM=:ztm_wf

where LRSJ=:gd_lrsj and LRDW=:gs_lrdw

using sqlca;//保存录入时间和录入单位的值

IF SQLca.sqlcode=0 THEN

COMMIT using sqlca;

MessageBox("提示", "完成对数据库的存储操作!")

return 1

ELSE

ROLLBACK using sqlca;

MessageBox("提示", "停电时间存储操作失败!")

RETURN 0

END IF

  7、打印控件内容

  ole_1.object.fileprint(true)

  实际上,read、write、savefiledlg、fileprint等函数都是FORMULA ONE所有的,POWERBUILDER中只需在Ole_1后加一个object即可引用这些函数,函数的定义在F1的帮助中,请自己用时查阅。

  1.建一张申请票的F1文件作为模板,如下图:

  为实现权限控制,将I1:P38的单元格设上保护,使右半边报表不可写:

  1)、选中单元格,鼠标右键FORMAT CELLS:PROTECTION下的LOCKED前打勾。

  2)、FORMAT菜单下SHEET项的PROTECTION前打勾,这句很重要,否则上句不起作用。

  2.库中建一停电申请票表DFS_TDSQP:

  LRSJ 录入时间 TDSJ 停电时间

  LRDW 录入单位

  GLDW 管理单位

  TDSB 停电设备

  GZNR 工作内容

  KGSJ 开工时间

  WGSJ 完工时间

  GZR 工作人

  ZTM 状态码

  SQPNR 申请票内容  IMAGE类型

  3.在PB窗口中插入F1控件:

  在POWERBUILDER的窗口中点中OLE图标:会出现“插入对象”对话框,选择insert control 标签项(如下图),

  在对象列表中选择 Vci Formula One Workbook,按确定键后,选好插入位置点击鼠标,即加入了一个名为ole_1的OLE对象,在其上用鼠标右键选中OCX Properties项,在Show标签下可将Row Heading和Column Heading项取消选中,将Tabs的值由Bottom改为Off(如下图),加入的OLE对象就是一个没有行头、列头及标签的空白表格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值