摘要:本文利用組態王“報表系統”的報表向導工具建立的月報表,針對該月報表不能根據月份變化其行數的問題,提出了一種利用腳本命令語言來處理該問題的方法,使得月報表能根據不同的大小月份及是否閏年等情況呈現相應的行數。
關鍵字:組態王 月報表 命令語言
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函數手冊.北京亞控科技發展有限公司