注:この記事は内容が古くなっています
この記事は内容が古くなっていますが、参照のために残しています。
最新の(よりシンプルな)実現方法については「テーブルで項目別の累計計算をしてみる」をご覧ください。
はじめに
テーブルにある数値の右に累計値を追加したいというケースはよくあると思います。その場合の作成方法はこちらのページで紹介しています。「テーブルで累計計算をしてみる」
しかしその方法とは別で、累計値は項目別で計算したいという場合があると思います。
今回は編集画面で項目別の累計計算する方法を紹介します。
今回のカスタマイズで出来ること
ボタンを押すと項目別の累計値がセットできます。
アプリには以下のフィールドを作成しました
Customineの設定
全体の設定はこのようになります。
設定が長いので、部分ごとに分けて説明します。
事前準備
「追加画面・編集画面を表示した時」に「ボタンをスペースに配置する」でボタンを用意します。
ループ開始
「ボタンを押した時」に「テーブルの列に行番号をセットする」で最初に行番号をセットします。次に「フィールドに値をセットする」でカウンターに0をセットします。
これによりループが開始されます。
ループ終了判定
「フィールドの値を編集して値が変わった時」でカウンターの値が変わったときに「フィールド値が空ならば」で、「情報ダイアログを表示する」を使って完了したことをダイアログ表示で知らせます。
カウンターが空になるのは、19番の「フィールド値が特定の値ならば」でカウンターがテーブル行数よりも多くなったときです。その比較値には = テーブル.length を使います。テーブルや複数選択などのフィールドに .length を付けると数が取得できるので、アクション数を減らしたいときには便利です(「テーブル行数をカウントする」を使わなくても大丈夫です)
ループ処理
「フィールドの値を編集して値が変わった時」でカウンターの値が変わったときに「フィールド値が空ならば」でカウンターの値とテーブル行数を比較して、カウンターの方が少なければループを継続します。またこの時には「フィールド値が空でないならば」も指定してください。
ループ内部の処理が終わったら「他のアクションの実行が完了した時」に「フィールドに値をセットする」でカウンターを+1します。
これによりループ終了判定から再度実行されます。
項目別の累計計算
「他のアクションの実行が完了した時」に「テーブル行をレコードとして取得する」でテーブルをレコードにします。その後、「取得したレコードを絞り込む」で同一項目だけにした上で「レコード内の条件に合う行のフィールド合計値を計算する」で集計します。
最後に「フィールド値が特定の値ならば」で今処理した行を指定して「フィールドに値をセットする」で累計値をセットします。
以上で項目別の累計値の計算が可能になります。
まとめ
今回の仕組みは、項目を順番に並べておけば小計の計算にも使えますので、応用範囲は広いと思います。
みなさんも色々とお試しください。