PB动态报表设计思路--欢迎关注

时间:2022-12-12 16:05:33
作为一个软件开发员,最痛苦的莫过于面对客户提出的各种不同样式的报表--天!简直就是没完没了,如果是定制软件,如果你的软件卖给了N个客户,那你这套软件就有N个版本了,让你苦恼的是--这N个版本软件的不同点只是界面的不同!人世间最痛苦的事莫过于此了。
   不可否认,如果能让客户自己定义所需的报表,那我们绝对可抽出不少时间去喝喝茶、陪陪女朋友、痛快的玩一玩尘封已久的游戏。。。
   实际上PB可以方便地实现动态报表的功能,看看PB通用强档-致用《动态数据窗口设计器》V6.0就知了,只可惜那价钱不是我们平常人出的起的。所以这里想请大家一起来研究PB动态报表的实现。
   思路:
       1、dw可以直接用语法创建dw_1.Create(st_Syntax,st_error)
那么我们首先可以将DW的语法保存到数据库中去,需要时在数据库中读取出来然后动态创建,这样我们就解决了动态报表的保存功能,也可以解决不同版本不同报表的问题。(注:读取dw语法可以用st_Syntax = dw_set.Describe("DataWindow.Syntax") )
2、报表的保存功能已经解决,现在重点是解决界面修改问题。界面可能设置对象的Moveable和Resizeable属性,让用户可以自己移动和放大缩小。语句如下:
public subroutine of_set_editmode (boolean isedit);string st_syntax1,st_syntax2,st_syntax3,st_objects,st_object
Integer l_start = 1,l_pos

//b_iseditmode = isEdit
if isedit then
st_syntax1 = "Moveable='1'"
st_syntax2 = "Resizeable='1'"
st_syntax3 = "Border='2'"
dw_1.reset()
dw_1.insertrow(0)
else
st_syntax1 = "Moveable='0'"
st_syntax2 = "Resizeable='0'"
st_syntax3 = "Border='0'"
// if of_save_face() = -1 then
// MessageBox('错误!','系统界面修改保存失败!')
// end if
end if
//循环修改各个对象的属性
st_objects = dw_1.Describe("Datawindow.Objects")
do
l_pos=pos(st_objects,"~t",l_start)
if l_pos=0 then 
st_object=mid(st_objects,l_start)
ELSE
st_object=mid(st_objects,l_start,l_pos - l_start)
END IF
dw_1.Modify(st_object+'.'+st_syntax1)
dw_1.Modify(st_object+'.'+st_syntax2)
dw_1.Modify(st_object+'.'+st_syntax3)
l_start=l_pos+1
loop until l_pos=0
end subroutine
以上代码是将dw中各对象设为可移动和可缩放,这样用户就可自己调整界面了。
如果想要往里面添加对象,则可用dw的modify()函数,如以下例子为创建一个文本对象
string st_syntax
integer iw,ih
iw=0,ih=0,i_x=0,i_y=0
st_syntax = "create text(band=Detail name="+st_name + &
" text='"+st_text+"' alignment='2' border='0' font.height='-9' font.face='宋体' font.charset='134'" + &
" height.autosize=No x='"+string(i_x)+"' y='"+string(i_y)+"' "+&
" height='"+string(ih)+"' width='"+string(iw)+"' Background.Color='553648127')"
dw_1.Modify(st_syntax)
删除一个对象可以用
  st_syntax = " destroy "+st_object //st_object为对象名称
  dw_1.Modify(st_syntax)
修改对象的字体,颜色可以用弹出窗口,让用户自己设定好,然后调用modify函数。
    
以上只是我自己对动态报表实现的一些思路,只要应用的是modify函数,根据以前代码已经能简单实现动态报表的功能,但目前主要的问题是如何dw中各栏的问题,即修改Header,detail,summary等栏的属性,现无法在界面中直观地实现修改,如果可以解决这个问题,相信这个动态报表的功能基本就可完善了。欢迎各位高手共同讨论,一起来完成一个属于大家的PB动态报表程序。
我的邮箱是wxd9610@21cn.com

22 个解决方案

#1


关注,不知道要怎么才能加入图形等东西呢

#2


加入图形也可用modify函数,代码如下
st_syntax = "create bitmap(band=Detail name="+st_name+ &
" filename='"+st_picname+"' x='"+string(i_x)+"' y='"+string(i_y)+"' "+&
"height='"+string(ih)+"' width='"+string(iw)+"')"

dw_1.Modify(st_syntax)

#3


N年前就有人做出了PB的动态报表设计模块

但是,客户能否买帐才最重要,现在我已经放弃动态报表的想法,把数据原封不动输入到电子表格的Sheet2,让客户在Sheet1里去折腾吧^_^

#4


刚脆把这个变成开源的,省得还要发钱买别人的。
数据窗体的EDITSOURCE里面的源码很有用

#5


同意 ykqmail(文雅剑客) 看法, 因为开源才有了现在linux!
数据窗体的EDITSOURCE里面的源码就是用dw_1.Describe("DataWindow.Syntax") 得到的语法

#6


up

#7


软件源码对程序员来说,一定要免费的。
我们的市场是*和企业,不是自己程序员内部,坚持开源!

#8


支持assdeng(山野村夫)的说法,其实实际中客户不一定真正买帐动态报表的问题,
理由有以下:1。客户不管实现方式,只管结果。2、客户不想面对众多的表
  我做过的项目中,有90%的客户对这个是不感兴趣的,宁愿用EXCEL来编辑。
说句实在话,那东西只能是给开发人员自己用的啦。而如果开发人员自己用那还不如用PB和
华表,
  而实在要给客户用的话,我还不如教他怎么用PB好了。开放相关PBL给他自己去折腾好了

#9


太专业不好,太死板也不好,做个一般适用就可以了,客户可以自己挪挪位置,省得为了一点位置还打开PBL,编译,烦~~

#10


delphi的一般的动态报表(可以简单的挪位置),一句代码也不用,一DELPHI程序员说了句,我们的报表不用维护的,把我羡慕了半天,靠,PB啥时候也能这样呀,嘿嘿~~

#11


顶呀,PB在这个报表方面真是太显得呆板一些...

#12


到,用select 语句取值创建报表的记录不能超过8000条,不然要挂了。怎么办

#13


动态的datawindow好设计,就是create来destroy去,但是像位置调整等等客户很难去耐心对待,
所以还不如用excel,有时候真的是自己给自己找麻烦。
我们可以开发组件实现自定义报表:随意增加删除字段、控件、图形、文本、改变控件字段风格,不说是万能,起码是个“百能”吧,但是客户哪有心事去用,他们宁愿用excel之类的东西,或者让你什么都给他们设置好。
伤心。。。
所以最后所谓的自定义报表只是用到及其少的功能,根本谈不上自定义。。。

#14


各位说的没错,自定义报表对于客户来说,有点像鸡肋,一般是调试过一次后就基本上不会再用了,我们不用做到万能,能实现基本的功能就行了,否则做出的软件就太死板了。这段时间较忙,自行设计动态报表只有一些基本功能,增加删除控件,设置基本属性,挪挪位置还是行的。刚在网上找到一个pfc的简化版,发现里面的一个调试属性窗口很有用,准备将它集成到上去,这样dwobject的所有属性就可设置了。完成这个功能后准备将它公布出大家一起来研究,希望大家支持!

#15


支持!支持!

#16


将报表和单据全放到一个PBL中去,发布给用户,然后在程序中从中导入,客户可以用PB改了.我现在是这么做的,很爽.客户一般没那个神气去自定义什么报表,只是方便实施人员按客户意思改而已.

#17


客户自己设计?不现实!
liuyunhe(yunheliu)的做法比较合适

#18


支持希望有可行的方案

#19


我有一个这方面的方案,但不是十分完善,也做了一部分代码;不过我不知道是不是实用,而且内容太大,不知道论坛里可不可以贴附件啊,真想贴出来和大家讨论!有这方面需求的企业真的太多了!
我的邮箱:jink1977@163.com

#20


jojojk(特护侯)
可不可以给一份啊
iuzzy@sina.com

#21


俺2年前就弄出了一个动态报表,几乎可以实现pb6.5的所有数据窗设计功能,包括分组,甚至操作界面也类似。但是客户却嫌繁。因此也只能作为练习的靶子。

#22


给我一份:mb459@sohu.com
小弟谢过2了

#1


关注,不知道要怎么才能加入图形等东西呢

#2


加入图形也可用modify函数,代码如下
st_syntax = "create bitmap(band=Detail name="+st_name+ &
" filename='"+st_picname+"' x='"+string(i_x)+"' y='"+string(i_y)+"' "+&
"height='"+string(ih)+"' width='"+string(iw)+"')"

dw_1.Modify(st_syntax)

#3


N年前就有人做出了PB的动态报表设计模块

但是,客户能否买帐才最重要,现在我已经放弃动态报表的想法,把数据原封不动输入到电子表格的Sheet2,让客户在Sheet1里去折腾吧^_^

#4


刚脆把这个变成开源的,省得还要发钱买别人的。
数据窗体的EDITSOURCE里面的源码很有用

#5


同意 ykqmail(文雅剑客) 看法, 因为开源才有了现在linux!
数据窗体的EDITSOURCE里面的源码就是用dw_1.Describe("DataWindow.Syntax") 得到的语法

#6


up

#7


软件源码对程序员来说,一定要免费的。
我们的市场是*和企业,不是自己程序员内部,坚持开源!

#8


支持assdeng(山野村夫)的说法,其实实际中客户不一定真正买帐动态报表的问题,
理由有以下:1。客户不管实现方式,只管结果。2、客户不想面对众多的表
  我做过的项目中,有90%的客户对这个是不感兴趣的,宁愿用EXCEL来编辑。
说句实在话,那东西只能是给开发人员自己用的啦。而如果开发人员自己用那还不如用PB和
华表,
  而实在要给客户用的话,我还不如教他怎么用PB好了。开放相关PBL给他自己去折腾好了

#9


太专业不好,太死板也不好,做个一般适用就可以了,客户可以自己挪挪位置,省得为了一点位置还打开PBL,编译,烦~~

#10


delphi的一般的动态报表(可以简单的挪位置),一句代码也不用,一DELPHI程序员说了句,我们的报表不用维护的,把我羡慕了半天,靠,PB啥时候也能这样呀,嘿嘿~~

#11


顶呀,PB在这个报表方面真是太显得呆板一些...

#12


到,用select 语句取值创建报表的记录不能超过8000条,不然要挂了。怎么办

#13


动态的datawindow好设计,就是create来destroy去,但是像位置调整等等客户很难去耐心对待,
所以还不如用excel,有时候真的是自己给自己找麻烦。
我们可以开发组件实现自定义报表:随意增加删除字段、控件、图形、文本、改变控件字段风格,不说是万能,起码是个“百能”吧,但是客户哪有心事去用,他们宁愿用excel之类的东西,或者让你什么都给他们设置好。
伤心。。。
所以最后所谓的自定义报表只是用到及其少的功能,根本谈不上自定义。。。

#14


各位说的没错,自定义报表对于客户来说,有点像鸡肋,一般是调试过一次后就基本上不会再用了,我们不用做到万能,能实现基本的功能就行了,否则做出的软件就太死板了。这段时间较忙,自行设计动态报表只有一些基本功能,增加删除控件,设置基本属性,挪挪位置还是行的。刚在网上找到一个pfc的简化版,发现里面的一个调试属性窗口很有用,准备将它集成到上去,这样dwobject的所有属性就可设置了。完成这个功能后准备将它公布出大家一起来研究,希望大家支持!

#15


支持!支持!

#16


将报表和单据全放到一个PBL中去,发布给用户,然后在程序中从中导入,客户可以用PB改了.我现在是这么做的,很爽.客户一般没那个神气去自定义什么报表,只是方便实施人员按客户意思改而已.

#17


客户自己设计?不现实!
liuyunhe(yunheliu)的做法比较合适

#18


支持希望有可行的方案

#19


我有一个这方面的方案,但不是十分完善,也做了一部分代码;不过我不知道是不是实用,而且内容太大,不知道论坛里可不可以贴附件啊,真想贴出来和大家讨论!有这方面需求的企业真的太多了!
我的邮箱:jink1977@163.com

#20


jojojk(特护侯)
可不可以给一份啊
iuzzy@sina.com

#21


俺2年前就弄出了一个动态报表,几乎可以实现pb6.5的所有数据窗设计功能,包括分组,甚至操作界面也类似。但是客户却嫌繁。因此也只能作为练习的靶子。

#22


给我一份:mb459@sohu.com
小弟谢过2了