注:この記事は内容が古くなっています

この記事は内容が古くなっていますが、参照のために残しています。
最新の(よりシンプルな)実現方法については「テーブルで項目別の累計計算をしてみる」をご覧ください。


はじめに

テーブルにある数値の右に累計値を追加したいというケースはよくあると思います。その場合の作成方法はこちらのページで紹介しています。「テーブルで累計計算をしてみる

 

しかしその方法とは別で、累計値は項目別で計算したいという場合があると思います。

今回は編集画面で項目別の累計計算する方法を紹介します。

 

今回のカスタマイズで出来ること

ボタンを押すと項目別の累計値がセットできます。



アプリには以下のフィールドを作成しました

フィールド名

フィールドコード

テーブル

フィールドタイプ

カウンター

カウンター


数値


button


スペース

行番号

行番号

テーブル累計

数値

項目

項目

テーブル累計

文字列

数値

数値

テーブル累計

数値

累計

累計

テーブル累計

数値


Customineの設定

全体の設定はこのようになります。

設定が長いので、部分ごとに分けて説明します。

 

事前準備

追加画面・編集画面を表示した時」に「ボタンをスペースに配置する」でボタンを用意します。


ループ開始

ボタンを押した時」に「テーブルの列に行番号をセットする」で最初に行番号をセットします。次に「フィールドに値をセットする」でカウンターに0をセットします。

これによりループが開始されます。


ループ終了判定

フィールドの値を編集して値が変わった時」でカウンターの値が変わったときに「フィールド値が空ならば」で、「情報ダイアログを表示する」を使って完了したことをダイアログ表示で知らせます。


カウンターが空になるのは、19番の「フィールド値が特定の値ならば」でカウンターがテーブル行数よりも多くなったときです。その比較値には = テーブル.length を使います。テーブルや複数選択などのフィールドに .length を付けると数が取得できるので、アクション数を減らしたいときには便利です(「テーブル行数をカウントする」を使わなくても大丈夫です)


ループ処理

フィールドの値を編集して値が変わった時」でカウンターの値が変わったときに「フィールド値が空ならば」でカウンターの値とテーブル行数を比較して、カウンターの方が少なければループを継続します。またこの時には「フィールド値が空でないならば」も指定してください。



ループ内部の処理が終わったら「他のアクションの実行が完了した時」に「フィールドに値をセットする」でカウンターを+1します。

これによりループ終了判定から再度実行されます。


項目別の累計計算

他のアクションの実行が完了した時」に「テーブル行をレコードとして取得する」でテーブルをレコードにします。その後、「取得したレコードを絞り込む」で同一項目だけにした上で「レコード内の条件に合う行のフィールド合計値を計算する」で集計します。

最後に「フィールド値が特定の値ならば」で今処理した行を指定して「フィールドに値をセットする」で累計値をセットします。

 

 

以上で項目別の累計値の計算が可能になります。

 

まとめ

今回の仕組みは、項目を順番に並べておけば小計の計算にも使えますので、応用範囲は広いと思います。

 

みなさんも色々とお試しください。