テーブル内の数値を科目ごとに集計してフィールドに入れたい

はじめまして、よろしくお願いいたします。

テーブル内の数値を科目ごとに集計してフィールドに入れようと苦戦しております。

第6回 テーブルの値を利用する を参考にして、スペースフィールドにリスト表示することはできたのですが、この合計値を数値フィールドに入れたいのです。

第8回 簡単な更新処理に挑戦してみよう も参考にして、なんとかできないか悩んでいるのですが、JavaScriptも初心者でして、どう処理すれば良いのか途方に暮れています。

参考になりそうなコードや事例があれば、ご教示いただけませんでしょうか。よろしくお願いいたします。

Masa さん

こんな感じで集計できます。

フィールドコードは、対象アプリに合わせて変更してください。

‘科目’, ‘金額’, ‘Table’,‘切符代合計’,‘宿泊費合計’,‘車関係合計’

 

(function() {
"use strict";

var fields = ['科目', '金額', 'Table'];
var kamokuInfos = {
'切符代': '切符代合計',
'宿泊費': '宿泊費合計',
'車関係': '車関係合計',
}

var events = ["app.record.edit.show", "app.record.create.show"];
fields.forEach(function(field) {
events.push("app.record.edit.change." + field);
events.push("app.record.create.change." + field);
})

var totalFields = [];
Object.keys(kamokuInfos).forEach(function(kamoku) {
var tcode = kamokuInfos[kamoku];
if (totalFields.indexOf(tcode) < 0) {
totalFields.push(tcode);
}
});

kintone.events.on(events, function(event) {
var record = event.record;
totalFields.forEach(function(tcode) {
record[tcode].value = 0;
record[tcode].disabled = true;
});
var subTable = record['Table'].value;
subTable.forEach(function(rows) {
var kamoku = rows.value['科目'].value;
if (Object.keys(kamokuInfos).indexOf(kamoku) >= 0) {
var tcode = kamokuInfos[kamoku];
if (rows.value['金額'].value) {
record[tcode].value += Number(rows.value['金額'].value);
}
}
});

return event;
});
})();

rex0220 様

早々にアドバイス頂きまして、どうもありがとうございます。
いままで試行錯誤していたものと全くルーチンが違い、目から鱗でございます。

”Table”はテーブルのフィールドコート名でよろしかったでしょうか?
(科目、金額、切符代合計等については、フィールドコートを同一名にしております)

テーブルのフィールドコート名を”Table”に変更して試しておりますが、数値フィールド(各合計金額)に金額が反映されない状況です。
どこかこちらでミス、または勘違いをしているのでしょうか・・・。

 

はい、”Table”はテーブルのフィールドコードです。

こんな感じで、試作しています。

こちらで試作したアプリでは、動作しましたので、フィールドコードが違うというのが怪しい気がします。

デバッグツールを見ていただいて、何かエラーが出ているか確認してください。

こんな感じで、試作しています。

 

rex0220 様

ありがとうございます、正常に動くようになりました!
原因ですが、ご指摘どおりフィールドコートの命名ミスでした。

その後、科目をもっと増やしてみましたが、rex0220様が書いていただいたコードそのままで動作しております。
これで目的どおりの運用ができるようになりそうです。

この度はお手数をお掛けしまして申し訳ございませんでした。
重ね重ねですが、本当にどうもありがとうございました!

無事動作したようですね。

ご参考に、有償ですが計算式プラグインを使うと、下記のような計算式の設定だけで同じように動作します。

切符代合計 : SUMIF(科目==“切符代”, 金額, 0)

複数の科目を集計する場合は、IN 関数を使います。

車関係合計 : SUMIF(IN(科目,“車関係”, “タクシー代”, “バス代”), 金額, 0)

JavaScript を使うより、簡単にテーブル集計ができますので機会がございましたら、お試しください。

 

rex0220 様

プラグインの詳細ページを拝見してきましたが、とても便利そうですね。
簡単に事細かな計算ができそうなので、機会がございましたら購入を検討してみたいと思います。
ご紹介どうもありがとうございました。

すいません、まったくの初心者で似たようなことをやりたいのですが

どこを変更すればいいかもわからないのです

教えていただけないでしょうか?

テーブルは下記のようなものがあります

売上月のところが4月、5月、6月から3月までの12か月分がありまして、その月ごとの売上金額を別のフィールドに設定したいのですが

どうしたらよいかを教えていただけないでしょうか?