摘要:本文利用组态王“报表系统”的报表向导工具建立的月报表,针对该月报表不能根据月份变化其行数的问题,提出了一种利用脚本命令语言来处理该问题的方法,使得月报表能根据不同的大小月份及是否闰年等情况呈现相应的行数。
关键字:组态王 月报表 命令语言
Abstract: In this paper, a monthly report, based on the Report Wizard of the Kingview, is set up. In view of the problem that the monthly report can not vary it's rows according to the different months, a method of using the script command language to deal with the problem is proposed so that the monthly report can show corresponding rows according to the different months and whether or not a leap year.
Keywords: Kingview Monthly Report Command Language
1 引言
组态王自带的“报表向导”工具,可以方便的生成日报表、月报表等,但其自带的报表向导建立的月报表存在当利用按钮切换不同月份时,其报表行数不跟随月份的大、小月(天数不同)变化的问题,比如选择查询起始时间为某年的3月,则为31天,应有31行数据,若换为2月或者4月等小于31天的月份,该表并不能自动变化月报表行数,以至于更改月份后的月报表末尾几行仍旧是3月份的内容。
基于此,本论文提出了一种利用脚本命令语言通过对月报表的月份以及年份进行脚本编程处理来解决该问题的方法,使月报表可以根据月份的大小及是否闰年改变相应行数以适应月份的变化。
2 改良前月报表组态及运行
首先,利用“报表向导”组态报表画面[1],观察利用本文所述方式改良前的月报表在切换不同月份时的运行结果。
组态过程为:工具箱选择“报表窗口”元件,在画面中绘制报表,点击报表灰色空白处,弹出报表设计对话框,可设计报表控件名以及表格的行数及列数。点击报表,在弹出的“报表工具箱”中点击向右箭头“->”,打开“报表向导”,第一步是添加变量,本文项目暂不添加变量,点击下一步,弹出“报表属性”对话框,设置如下图1,类型为“月报表”,时间间隔默认为1天。
图1 报表属性设置
画面中组态一个“报表起始时间设置按钮”,编辑其弹起时的命令语言为:ReportSetStartTime("Report0");[2]利用该按钮设置日期时间。注意:月报表从每月的1号开始记录,所以日期应选择每个月的1号。
运行调试,首先选择一个大月份,比如3月,然后再选择一个小月份比如4月,最后选择2月,观察运行情况,需要把表格拖到底观察如图2所示。
通过上述实验结果看到,当选择3月份,数据行数到3月31日;当改变为4月份后,该月天数为30天,观察到3月31日的那一行数据还在;当改变为2月份后,该月天数为28天,观察到多余的三行数保留了4月和3月选择过后的数据,这样的结果不利于报表的保存及查看,本文将对此给出相应的解决方案。
3 解决方案
3.1 技术路线
当通过“报表起始时间设置按钮”选择了起始时间为某个月的第一天后,该设置值在报表中呈现的方式是一个包含年月日时分秒的字符型数据,每天一行数据填写在报表中,从而生成月报表。解决方案将利用日期时间的第一行数据(即每个月1号的数据),通过脚本编程处理,实现月报表行数的随月变化。
3.2 解决方案
(1) 利用ReportGetCellString函数,取出第一天的日期及时间,保存该字符串
(2) 利用StrRight及StrLeft函数从上述字符串中取出年和月的信息,并利用函数StrToReal将年和月转化为Real类型。参考脚本如下[2](脚本中用到的变量请自行建立):
\\本站点\xuanze1=ReportGetCellStrin
g("Report0",2,1);
\\本站点\xuanzeyue1=StrRight(StrLef
t(\\本站点\xuanze1,7),2);
\\本站点\xuanzeyue=StrToReal(xuanze
yue1);
\\本站点\xuanze1=StrLeft( \\本站点
\xuanze1,4);
\\本站点\xuanze=StrToReal(xuanze1);
(3) 实型月份及年份数据用于判断大、小月及平、闰年来获得每月的天数,从而控制月报表的行数
l 1、3、5、7、8、10、12月份,天数为31天
l 4、6、9、11月份,天数为30天
l 2月份,平年时28天,闰年时29天
注意,本文中所做示例的报表,有一行表头“月报表”,因此总行数需外加一行表头,即上述天数+1,数据都是从第2行开始,参考脚本如下[2](脚本中用到的变量请自行建立):
if(\\本站点\xuanzeyue==1||\\本站点\xuanzeyue==3||\\本站点\xuanzeyue==5||\\本站点\xuanzeyue==7||\\本站点\xuanzeyue==8||\\本站点\xuanzeyue==10||\\本站点\xuanzeyue==12)
{ReportSetRows("Report0",32);}
if(\\本站点\xuanzeyue==4||\\本站点\xuanzeyue==6||\\本站点\xuanzeyue==9||\\本站点\xuanzeyue==11)
{ReportSetRows("Report0",31);}
if(\\本站点\xuanzeyue==2)
{ if((xuanze%4==0&&xuanze%100!=0)||(xuanze%400==0))
{平闰="闰年";
ReportSetRows("Report0",30);}
else
{平闰="平年";
ReportSetRows("Report0",29);}
}
4 改良后运行结果
首先选择一个大月份,比如3月,再选择一个小月份比如4月,第三步选择一个平年的2月,最后选择一个闰年的2月,观察改良后月报表结果如下图3所示,同样需要把表格拖到底观察。
(3月) (4月) (平年2月) (闰年2月)
图3 改良后月报表运行结果
由上述结果可知,年份不同,月份不同,导致的天数不同,从而月报表在运行状态下的行数也不同,实现了预期结果。
5 结束语
本论文通过对月报表年份及月份的脚本处理,完全实现了月报表的天数(行数)随月份不同实时改变的目标,为组态王人机界面月报表的实现方法提供了新的思路,可供工程人员参考。
参考文献
[1] 工业控制组态软件应用技术.北京理工大学出版社
[2] 组态王6.55函数手册.北京亚控科技发展有限公司