PB中使用FORMULA ONE

简介:

google了一下,网上似乎没有,发上来与大家分享吧。我将以一个例子来详细说明F1的用法,以补充前文所述,此例为电力企业停电申请票的上报审批过程,内含过程权限控制,每一权限只能修改F1报表的一个部分,且有做图功能,采用PB 6.5和F1 6所编,下面将详细说明:
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对象就是一个没有行头、列头及标签的空白表格。 
 
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的帮助中,请自己用时查阅。




本文转自 小王 51CTO博客,原文链接:http://blog.51cto.com/xiaowang/713460,如需转载请自行联系原作者

相关文章
|
3月前
|
人工智能 自然语言处理 安全
Milvus x n8n :自动化拆解Github文档,零代码构建领域知识智能问答
本文介绍了在构建特定技术领域问答机器人时面临的四大挑战:知识滞后性、信息幻觉、领域术语理解不足和知识库维护成本高。通过结合Milvus向量数据库和n8n低代码平台,提出了一种高效的解决方案。该方案利用Milvus的高性能向量检索和n8n的工作流编排能力,构建了一个可自动更新、精准回答技术问题的智能问答系统,并介绍了部署过程中的可观测性和安全性实现方法。
|
JavaScript 开发者 索引
搞懂 TypeScript 中的映射类型(Mapped Types)
搞懂 TypeScript 中的映射类型(Mapped Types)
847 0
|
传感器 数据格式
STM32外设系列—DHT11
本文详细介绍了什么是DHT11,介绍了DHT11使用的单总线通信,并详细分析了与DHT11进行数据交互时的时序图。此外,给出了DHT11初始化,接收温湿度信息并校验的程序设计。
770 0
STM32外设系列—DHT11
|
XML 安全 Java
包体积优化 · 工具论 · 初识包体积优化
包体积优化 · 工具论 · 初识包体积优化
904 0
包体积优化 · 工具论 · 初识包体积优化
|
监控 Linux 测试技术
嵌入式硬件库的基本操作方式与分析
嵌入式硬件库的基本操作方式与分析
211 0
|
存储 缓存 Prometheus
受Prometheus启发的开源日志工具:Loki
提及日志收集搜索框架,最常看到的解决方案就是 **ELK**。虽然现在有 Docker、k8s 帮我们简化了部署流程,但 **ELK** 对硬件的要求却很高。光是 **Elasticsearch** 官网就提及到需要 8 GB 内存以上的机器部署,可见占据的资源之多。为了能降本增效(**穷~~~**),在网上看到了 Grafana 团队的日志框架: **Loki**。为此进行了深入的了解并应用在了一些项目上。
1420 0
受Prometheus启发的开源日志工具:Loki
|
机器学习/深度学习 人工智能 对象存储
HaaS年度经典案例:二次元穿越小电视
最近抖音上测一测你的动漫人物有点火啊。感觉不过瘾,我想要随时穿越二次元,动手用HaaS开发板打造一台二次元穿越小电视,大家排队来穿越吧!
HaaS年度经典案例:二次元穿越小电视
|
SQL NoSQL Oracle
mysql数据库如何处理重复数据?
前段时间,很多人问我能不能写一些数据库的文章,正好自己在测试mysql数据库性能的时候,出现了一个问题,也就是出现了很多重复的数据,想起来自己long long ago写过一篇类似的,仅此就拿来总结了一下。如果你在使用mysql的时候也遇到了这个问题,希望能对你有所帮助。 注意: 这篇文章不是数据库系列的正式文章,有关mysql、MongoDB、redis、oracle等数据库系列的文章正在整理中。
552 0
|
Web App开发 测试技术 Apache