動(dòng)態(tài)報(bào)表的實(shí)現(xiàn)與報(bào)表數(shù)據(jù)的組織(一)
動(dòng)態(tài)報(bào)表的實(shí)現(xiàn)與報(bào)表數(shù)據(jù)的組織(一)
[摘要]本文介紹了一種實(shí)現(xiàn)復(fù)雜數(shù)據(jù)集合的靈活運(yùn)算、儲(chǔ)存、匯總、查詢功能和數(shù)據(jù)的動(dòng)態(tài)組合的簡(jiǎn)單方法,做到“使用一個(gè)軟件,管理所有數(shù)據(jù)”,提高了工作效率,減少重復(fù)勞動(dòng)。
1引言
為了解決復(fù)雜數(shù)據(jù)集合的靈活運(yùn)算、儲(chǔ)存、匯總、查詢功能,設(shè)計(jì)了一個(gè)數(shù)據(jù)管理軟件,該軟件可以管理多種報(bào)表,每種報(bào)表可含有多個(gè)機(jī)構(gòu),每個(gè)機(jī)構(gòu)內(nèi)可有多個(gè)數(shù)據(jù)集合。各種報(bào)表可以有自己獨(dú)立的運(yùn)算公式、平衡檢查公式,以及錯(cuò)誤提示信息。每種報(bào)表可以進(jìn)行數(shù)據(jù)匯總、平均以及其它各種數(shù)學(xué)運(yùn)算,等等。
如果用戶用Excel結(jié)合Access,可以滿足上述功能,但缺點(diǎn)顯而易見,就是使用復(fù)雜、數(shù)據(jù)不安全、維護(hù)不便。用PowerBuilder的動(dòng)態(tài)SQL語句生成動(dòng)態(tài)數(shù)據(jù)窗口,并結(jié)合專用的數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)組織,可以方便地實(shí)現(xiàn)上述功能,下面將軟件設(shè)計(jì)思路介紹如下。
2.設(shè)計(jì)思路
為了實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)組合,軟件需要特設(shè)三張表,一張記錄動(dòng)態(tài)表的數(shù)據(jù)(記為Bbdata),一張記錄動(dòng)態(tài)表行的格式定義(記為Bbhdy),一張記錄動(dòng)態(tài)表列的格式定義(記為Bbldy),格式分別如下:
1.Bbdata表(表1)
AgencyReportbmBmHsLsValue
10022121348895.00
100221315740.00
10022141326505.00
100221523436.00
10022162592.00
字段含義為:
Agency:報(bào)表機(jī)構(gòu)編碼(例:假定分公司A為1,分公司B為2,等等)
Reportbm:報(bào)表編碼(例:資產(chǎn)負(fù)債表為1,損益表為2,等等)
Bm:報(bào)表中數(shù)據(jù)集合編碼(例:資產(chǎn)負(fù)債表1月份報(bào)表為1,2月份報(bào)表表為2,等等)
Hs:數(shù)據(jù)在表中的具體位置所在行數(shù)
Ls:數(shù)據(jù)在表中的具體位置所在列數(shù)
Value:數(shù)據(jù)值
2.Bbhdy表(表2)
BbbmHmcHssSfjsx
3固定資產(chǎn)10
3累計(jì)資產(chǎn)20
3工資支出30
3合計(jì)支出41
字段含義為:
Bbbm:報(bào)表編碼(與Bbdata表的Reportbm字段關(guān)聯(lián))
Hmc:行項(xiàng)目名稱
Hss:行順序(即:行在報(bào)表中的行序)
Sfjsx:該行是否為計(jì)算性行,取值1或0(即:值由其它的行或者常數(shù)運(yùn)算得出)
3.Bbldy表(表3)
字段含義為:
Bbbm:報(bào)表編碼(與Bbdata表的Reportbm字段關(guān)聯(lián))
Lmc:列項(xiàng)目名稱
Llen:列寬度(即:報(bào)表中每列列的`寬度)
Lss:列順序(即:列在報(bào)表中的列序)
Sfjsx:該列是否為計(jì)算性列,取值1或0(即:值由其它的列或者常數(shù)運(yùn)算得出)
下列代碼中的dw_1用于放置動(dòng)態(tài)數(shù)據(jù)窗口,dw_2為Bbhdy數(shù)據(jù)庫(kù)得出數(shù)據(jù)窗口,dw_3為Bbldy數(shù)據(jù)庫(kù)得出數(shù)據(jù)窗口,dw_4為Bbdata數(shù)據(jù)庫(kù)得出數(shù)據(jù)窗口,調(diào)入內(nèi)存后,進(jìn)行下列算法:
integer i,j,hs,ls
string model1,model2,a,a1
decimal value
model1=""
model2=""
a="'a' 項(xiàng)目,"
for i=1 to dw_3.rowcount()
// dw_3.rowcount()為報(bào)表的實(shí)際列數(shù)
model1="0.00 "
a1=dw_3.object.data[i,2]
// dw_3.object.data[i,2]為報(bào)表的列名稱
j=0
do while j <= len(a1)
j++
if right(left(a1,j),1)=" " then
a1=Replace(a1,1,j,trim(left(a1,j)))
j=j - 1
end if
loop
model2=model2+model1+a1+","
next
a=a+model2
a=left(a,len(a) - 1)
經(jīng)過上述算法之后,字符串a(chǎn)最終變成動(dòng)態(tài)SQL可辨析的串,上列表格所示的列項(xiàng)目會(huì)被組合為: 'a' 項(xiàng)目,0.00 第一季度,0.00 第二季度,0.00 第三季度,0.00 第四季度,0.00 全年合計(jì),請(qǐng)有興趣的讀者自己驗(yàn)證。
接著就可以利用動(dòng)態(tài)SQL語句生成動(dòng)態(tài)數(shù)據(jù)窗口對(duì)象:
new_sql = "SELECT "+a+" from reportbm"
// reportbm為報(bào)表編碼表
new_syntax=sqltrans.SyntaxFromSQL(new_sql,'Style(Type=grid)',error_syntaxfromSQL)
dw_1.Create(new_syntax, error_create)
//根據(jù)SQL字符串創(chuàng)建動(dòng)態(tài)數(shù)據(jù)窗口
for i=1 to dw_2.rowcount()
dw_1.insertrow(0)
dw_1.object.data[dw_1.rowcount(),1]=dw_2.object.data[i,2]
//根據(jù)行元素的多少在生成的數(shù)據(jù)窗口中插入行,并在第一列輸入行項(xiàng)目
next
for i=1 to dw_4.rowcount()
hs=dw_4.object.data[i,4]
ls=dw_4.object.data[i,5]
value=dw_4.object.data[i,6]
dw_1.object.data[hs,ls]=value
//將Bbdata中的數(shù)據(jù)填入生成表
next
最后,生成的動(dòng)態(tài)報(bào)表如表4所示,調(diào)整列寬度、顏色、是否可為空等屬性的代碼不再贅述。
如要在上表中輸入新數(shù)據(jù)并將之保存為一組數(shù)據(jù)集合,代碼如下:
integer bm,i,j,hs,ls,value
SELECT max(bm)
INTO :bm
FROM bbdata
where reportbm=:num
//num為已知報(bào)表編碼
USING sqltrans;
if isnull(bm) then
bm=1
else
bm++
end if
//系統(tǒng)自動(dòng)得出數(shù)據(jù)集合編碼,取最大值+1
for i=1 to hs
for j=2 to ls+1
//hs為報(bào)表行數(shù),ls為報(bào)表列數(shù)
value= dw_1.object.data[i,j]
if not isnull(value) then
INSERT INTO bbdata(agency,reportbm,bm,hs,ls,value)
VALUES (:agency,:num,:bm,:i,:j,:value)
using sqltrans;
commit using sqltrans;
end if
next
next
3.結(jié)束語
該程序在Windows98操作系統(tǒng)和PowerBuilder6.5環(huán)境下調(diào)試通過,對(duì)數(shù)據(jù)的管理取得了預(yù)期的效果,能實(shí)現(xiàn)數(shù)據(jù)集合的多維操作,在一定場(chǎng)合下可作為企業(yè)的數(shù)據(jù)管理系統(tǒng)軟件使用,也可為個(gè)人提供數(shù)據(jù)管理,使用范圍廣、操作難度小,是一個(gè)功能較好的程序。
[參考文獻(xiàn)]
1.《PowerBuilder 7.0編程員指南》,王鵬主編,北京希望電子出版社,2000.12
2.《POWERBUILDER 7.0高級(jí)教程》,馬暉編,電子工業(yè)出版社,2000.1
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 yyfangchan@163.com (舉報(bào)時(shí)請(qǐng)帶上具體的網(wǎng)址) 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除