ドキュメント印刷

Q
CSVデータ印刷時の合計表示  (KeyBreak)
[内容]
CSVデータ印刷時に合計を表示したい

A
[解決方法]
CSVデータのKeyBreakイベント発生時に合計を計算します。


[サンプルコード]


CSVデータ

下記の例では、「部名」「課名」ごとの「個数」の小計を計算しています。
部名の列、課名の列の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)
よりご利用いただけます。

管理番号:Doc_005
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ