見出し画像

Kintoneテーブル内の数値を科目別に集計する

やりたいこと

Kintoneの交通費申請アプリで、サブテーブルの経費明細に「経費分類」を追加して、経費分類毎に小計を表示したい。
具体的な計算結果イメージは、以下の通りです。

経費分類の小計

上記の様な集計は、エクセルならばSUMIF関数で簡単に実現できるのですが、Kintoneの標準機能には、SUMIF関数の様な機能が有りません。
今回もJavascriptを用いたカスタマイズで経費分類毎の集計を実現します。

/* サブテーブルの数値を経費区分で小計して表示する */
(() => {
    'use strict';

    // 初期設定
    const SUBTABLE_FIELD_CODE = '経費明細';  // サブテーブルのフィールドコード
    const EXPENSE_ITEM_FIELD_CODE = '経費分類';  // 経費項目のフィールドコード
    const AMOUNT_FIELD_CODE = '金額';  // 金額のフィールドコード

    // 経費項目と対応する出力フィールドの連想配列
    const EXPENSE_FIELDS = {
        '電車代': '電車代合計',
        '飛行機': '飛行機合計',
        '宿泊費': '宿泊費合計',
        'その他': 'その他合計'
    };

   // 経費分類別の集計を実行
    const calculateAndSetExpense = (event) => {
        let totals = {};

        const expenses = event.record[SUBTABLE_FIELD_CODE].value;

        for (const expense of expenses) {
            const item = expense.value[EXPENSE_ITEM_FIELD_CODE].value;
            const amount = parseFloat(expense.value[AMOUNT_FIELD_CODE].value);

            if (!totals[item]) {
                totals[item] = 0;
            }

            totals[item] += amount;
        }

        for (const [item, field] of Object.entries(EXPENSE_FIELDS)) {
             event.record[field].value = totals[item];  // 経費分類の集計値をセット
             event.record[field].disabled = true;	// 合計フィールドを編集不可に設定
        }

        return event;
    };

    const events = ['app.record.create.show', 'app.record.edit.show', 'app.record.detail.show', 'app.record.create.submit', 'app.record.edit.submit'];
    kintone.events.on(events, calculateAndSetExpense);
})();

初期設定と経費項目と対応する出力フィールドの連想配列の設定を、アプリのフィールド設定内容と合わせる必要が有ります。

初期設定の内容は、アプリのテーブルのフィールドコードとテーブル内のフィールドコードの内容に合わせます。

    // 初期設定
    const SUBTABLE_FIELD_CODE = '経費明細';  // サブテーブルのフィールドコード
    const EXPENSE_ITEM_FIELD_CODE = '経費分類';  // 経費項目のフィールドコード
    const AMOUNT_FIELD_CODE = '金額';  // 金額のフィールドコード

経費項目と対応する出力フィールドの連想配列の設定は、前にサブテーブルの経費分類(ドロップリスト)の設定キーワードと同じ内容を宣言し、後に経費分類毎の小計をセットしたい数値フィールドのコード名をセットします。以下の図を参考にしてください。

連想配列の設定

(有料)分類別の小計を表示するアプリテンプレート

自力でカスタマイズするのが難しい方のために、テーブルの分類項目と金額を分類項目別に小計を集計して表示するアプリのテンプレート(有料版)を作成しました。
レコード詳細画面で下記画面の赤枠の部分を自動集計して表示します。
※分類項目小計表示の並び順は、テーブル内の登録順になります。

テーブルの分類集計表示

アプリのテーブル内のデータを自動的に読み込んで、分類項目別に支出金額を集計しHTML形式のテーブルで表示するので、分類集計用のフィールドを準備する必要はありません。
本アプリテンプレートでアプリを作成したら「分類項目」のドロップダウンリストの設定内容を用途に合わせて変更するだけですぐに利用できます。
(初期値は、以下の画面の通りです)

ドロップダウンの設定

アプリテンプレートに好きなフィールドを追加すれば、経費申請や購買申請アプリ等の作成に利用できると思います。
このアプリテンプレートのダウンロードと設定方法については、以下の有料記事に記載しています。

【ご注意事項】

  • 本アプリテンプレートは、Javascriptでカスタマイズされていますので、利用するには「kintoneスタンダードコース」の契約とkintoneシステム管理者権限が必要です。

  • 本アプリテンプレートは、PCデスクトップ版で動作確認済です。

  • 本アプリテンプレートは1つのドメインでのみご利用ください。

  • 本アプリテンプレート購入後のサポートは行っていませんので、予めご承知おき下さい。

  • 本アプリテンプレートの導入で生じたいかなる損害にも、当方は一切の責任を負いません。自己責任でご利用ください。


ここから先は

1,321字 / 4画像 / 1ファイル

¥ 2,000

よろしければサポートお願いします! いただいたサポートは、note記事制作の活動費に使わせていただきます!