はじめまして、よろしくお願いいたします。
テーブル内の数値を科目ごとに集計してフィールドに入れようと苦戦しております。
第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か月分がありまして、その月ごとの売上金額を別のフィールドに設定したいのですが
どうしたらよいかを教えていただけないでしょうか?