老问题:PB报表控件,报表问题...

jacksu19 2008-01-16 11:53:21
以前没有用过报表控件,原因是PB Datawindows自身的功能已经很强大了。

可是,最近遇到一些新问题,用户提出了比较麻烦的自定义报表的功能需求,如下:

一个设备有许多的测量点,也还有一些控制点;
有许多类似(同类)的设备;
(例如,一个变电站有几条进线,有10多条出线,它们都需要对各项电流Ia,Ib,Ic,Io,电功率P,Q,电压Uab,Uac,Ubc等进行测量)
报表需要检出某天的整时(按小时抽样或统计的值),或某月(按天统计的值),或年(按月统计的值)。

制作,日/月/年报表

用户(工程部)需要自己设计报表,可以从这些测量量中,选择不同的组合成新的报表,而且组合包括设备/测量量

例如:
| 西二旗支路 | 西三旗支路 |
Ia Ib Ic P Q Uab F Ia Ib Ic P Q Uab F
1
2
3

21
22
23

类似这样的格式报表,需要由工程部自己能够制作报表。

请指导。。。 有例子或控件代码最好。
...全文
589 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishcoat 2010-10-18
  • 打赏
  • 举报
回复
顶一下看看
冰点软件 2010-06-14
  • 打赏
  • 举报
回复
用存储过程来做,生成动态报表即可
jacksu19 2008-01-16
  • 打赏
  • 举报
回复
一楼的建议不可行。因为并列的可能是西二旗西三旗,但也可能是西一旗和西二旗?(代表了一组设备中,具体的某两/三个或五/六个设备)

因为我见到别的系统有用c实现的,类似的功能。(虽然我不赞成类似的功能,其实,许多信息查询,看看就可以了,不一定要打印出来。或者打印出来也不必要几个设备的信息并列于同一张表中)
AFIC 2008-01-16
  • 打赏
  • 举报
回复
一个最简单的办法就是你制作一个最大最全的报表(因为貌似报表很简单,grid的就可以)
用户决定哪些列显示,你把不显示的visible改一下就好了。
或者你教会工程部那些用户怎么用pb,你就可以换份工作了。
jacksu19 2008-01-16
  • 打赏
  • 举报
回复
简单,就一点号,一个采样值。

noteHandle nValue

一个代码表
noteHandle Name ValueType(测量量的类别,取值为[Ia,Ib,...P,Q...]) Equment(所属设备)


AFIC 2008-01-16
  • 打赏
  • 举报
回复
有必要先说下你的表结构……
jacksu19 2008-01-16
  • 打赏
  • 举报
回复
这里,大概是我没有能将问题描述清楚。

需要开发这么一套软件,用于变电站项目中制作各变电站运行所需要的报表。

分日/月/年报表(分别按时/日/月进行统计)
每个变电站的运行管理人员从经验出发,可能关注的测量量侧重不同;而每一个变电站的进/出线或其它设备配置是有差别的(命名不同,运行管理人员想要的报表排序也未定)。

当然,如果不分栏的情况下,最简单。
但,如果对方坚持需要不改变程序,就实现,那么我是用交叉表实现了不分栏的报表。如果分栏,我就无能为力了。

所以来向各位请教。
报表控件/自定义报表...
dawugui 2008-01-16
  • 打赏
  • 举报
回复
这个应该直接用SQL语句写好,然后放到定制的DW中.

例如:


一个按小时统计的例
比如有一个表timeTable,有字段id,score,inputDate.
数据如下
id score inputDate
1 2 '2007-4-5 3:33:33'
2 1 '2007-4-5 4:33:33'
3 4 '2007-3-5 3:33:33'
4 2 '2007-4-2 2:33:33'
我要按时间分组统计score,结果如下
0:00-1:00 0
1:00-2:00 0
2:00-3:00 2
3:00-4:00 6
4:00-5:00 1
5:00-6:00 0
....
23:00-24:00 0

declare @a table(id int, score int, inputDate smalldatetime)
insert @a select 1, 2, '2007-4-5 3:33:33'
union all select 2, 1, '2007-4-5 4:33:33'
union all select 3, 4, '2007-3-5 3:33:33'
union all select 4, 2, '2007-4-2 2:33:33'

select right(100+a,2)+':00-'+right(100+b,2)+':00',
sum(case when datepart(hour,inputdate) >=a and datepart(hour,inputdate)<b then score else 0 end)
from @a a ,
(select 0 a,1 b
union all select 1,2
union all select 2,3
union all select 3,4
union all select 4,5
union all select 5,6
union all select 6,7
union all select 7,8
union all select 8,9
union all select 9,10
union all select 10,11
union all select 11,12
union all select 12,13
union all select 13,14
union all select 14,15
union all select 15,16
union all select 16,17
union all select 17,18
union all select 18,19
union all select 19,20
union all select 20,21
union all select 21,22
union all select 22,23
union all select 23,24
)aa
group by right(100+a,2)+':00-'+right(100+b,2)+':00'



--------------- -----------
00:00-01:00 0
01:00-02:00 0
02:00-03:00 2
03:00-04:00 6
04:00-05:00 1
05:00-06:00 0
06:00-07:00 0
07:00-08:00 0
08:00-09:00 0
09:00-10:00 0
10:00-11:00 0
11:00-12:00 0
12:00-13:00 0
13:00-14:00 0
14:00-15:00 0
15:00-16:00 0
16:00-17:00 0
17:00-18:00 0
18:00-19:00 0
19:00-20:00 0
20:00-21:00 0
21:00-22:00 0
22:00-23:00 0
23:00-24:00 0

(所影响的行数为 24 行)
AFIC 2008-01-16
  • 打赏
  • 举报
回复
哦,你做的时候,西一旗,西二旗,西三旗全坐上(应该是有限个吧),
然后隐藏西二旗不行吗?我觉得这种东西最好不要做到一个dw里,不是不可以,
而是没那个必要,或者你也可以用openuserobject,要哪个齐,显示对应的uo啥的。

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧