|
|
[サンプルコード]
下記の例では、「部名」「課名」ごとの「個数」の小計を計算しています。
部名の列、課名の列のKeyBreakイベント発生時に小計の計算処理を行います。
最終行ではKeyBreakイベントが発生しないため、部名の列のEndBreakイベント発生時に
計算処理を行います。
Doc goukei {
Format = "A5V";
Number start1 = 0; /*次の部小計のスタート行*/
Number start2 = 0; /*次の課小計のスタート行*/
Number sum1 = 0; /*部小計*/
Spread Spread1 {
X = 49;
Y = 35
Width = 366;
Height = 400;
Border = $TRUE;
SpreadRow SpreadRow1[0] {
height = 30;
SpreadColumn SpreadColumn1 {
Title = "部";
BreakKey = 2;
Suppress = $TRUE;
/*部名のKeyBreak時の処理*/
Function OnKeyBreak( e ) {
/*課小計処理を呼び出す*/
goukei.Spread1.SumGroup2( e.CurrentIndex );
/*インデックスを1行進める*/
e.CurrentIndex++;
/*部小計処理を呼び出す*/
goukei.Spread1.SumGroup1( e.CurrentIndex );
/*インデックスを1行進める*/
e.CurrentIndex++;
/*次の部小計のスタート行を退避*/
goukei.start1 = e.CurrentIndex + 1;
/*次の課小計のスタート行を退避*/
goukei.start2 = e.CurrentIndex + 1;
}
/*部名のEndBreak時(最終行)の処理*/
Function OnEndBreak( e ) {
goukei.Spread1.SumGroup2( e.CurrentIndex );
e.CurrentIndex++;
goukei.Spread1.SumGroup1( e.CurrentIndex );
e.CurrentIndex++;
goukei.start1 = e.CurrentIndex + 1;
goukei.start2 = e.CurrentIndex + 1;
}
}
SpreadColumn SpreadColumn2 {
Title = "課";
BreakKey = 1;
Suppress = $TRUE;
/*課名のKeyBreak時の処理*/
Function OnKeyBreak( e ) {
/*課小計処理を呼び出す*/
goukei.Spread1.SumGroup2( e.CurrentIndex );
/*インデックスを1行進める*/
e.CurrentIndex++;
/*次の課小計のスタート行を退避*/
goukei.start2 = e.CurrentIndex + 1;
}
}
SpreadColumn SpreadColumn3{
Title = "個数";
HorizontalAlign = $RIGHT;
}
/*部小計処理*/
Function SumGroup1( index ) {
/*部小計表示用の行を挿入*/
SpreadRow1.insert();
/*部名を表示*/
SpreadRow1[[index+1].SpreadColumn2 =
SpreadRow1[goukei.start1].SpreadColumn1 + "計";
/*部小計を表示*/
SpreadRow1[index + 1].SpreadColumn3 = str( goukei.sum1 );
/*部小計を初期化*/
goukei.sum1 = 0;
}
/*課小計処理*/
Function SumGroup2( index ) {
var sm = 0;
/*課小計のスタート行から現在行までの小計を計算*/
for( var i = goukei.start2; i <= index; i++ ) {
sm += val( SpreadRow1[i].SpreadColumn3 );
}
/*課小計表示用の行を挿入*/
SpreadRow1.insert();
/*課名を表示*/
SpreadRow1[index+1].SpreadColumn2 =
SpreadRow1[goukei.start2].SpreadColumn2 + "計";
/*課小計を表示*/
SpreadRow1[index + 1].SpreadColumn3 = str( sm );
/*部小計に加算*/
goukei.sum1 += sm;
}
CSVDocument csvdata;
csvdata << CSV {
営業部,1課,1
営業部,1課,2
営業部,2課,3
営業部,2課,4
開発1部,1課,5
開発1部,1課,6
};
if( !$DESIGNTIME ) {
SpreadRow1 << csvdata;
}
}
if ( !$DESIGNTIME ) {
showpage();
delete();
}
}
}
CRSファイル形式のサンプルを
「合計行表示サンプル(Doc_005.zip)」
よりご利用いただけます。
|
|