日付と名称のカテゴリ集計について

1点、分からない部分がありましてご教授いただければ幸いです。

添付図のような資材管理(在庫)を管理しており、サブテーブルで計上した日々の資材在庫数をスペースフィールドに表示したいと思っております。
過去の投稿記事から、日付関係なく資材毎の在庫数は表示てきたのですが、日付かつ資材毎の在庫を表示することができない状況でして
勉強不足でどのような修正をすればいいのか分からなかった為、お教えいただければ助かります。宜しくお願いいたします。

(function() {

    "use strict";

    kintone.events.on('app.record.detail.show', function(event) {

        var subTotals = {};

        var tableRecords = event.record.資材管理.value;

        // テーブル内の各レコードをカテゴリごとに集計する

        for (var i = 0; i < tableRecords.length; i++) {

            var category = tableRecords[i].value['資材名'].value;

            if (!subTotals[category]) {

                subTotals[category] = 0;

            }

            var nyuko = tableRecords[i].value['資材入庫数量'].value;

            var seizou = tableRecords[i].value['資材製造数量'].value;

            var furyou = tableRecords[i].value['資材不良数量'].value;

            var rosu = tableRecords[i].value['資材ロス数量'].value;

            subTotals[category] += nyuko-seizou-furyou-rosu;

        }

        // 集計結果をスペースフィールドに表示する

        var myTotalSpace = document.createElement('ul');

        for (var category in subTotals) {

            var categorySpace = document.createElement('li');

            categorySpace.innerText = category + ': ' + subTotals[category] + '個';

            myTotalSpace.appendChild(categorySpace);

        }

        var text1 = document.createElement('text1');

        text1.innerHTML = '残数計';

        var el = kintone.app.record.getSpaceElement('zansukei').appendChild(text1);

        console.log(el);

        kintone.app.record.getSpaceElement('zansukei').appendChild(myTotalSpace);

    });

})();

t.satoさん

こんにちは。

 

subTotalsの連想配列のキーを「資材名」でなく「資材名+日付」にしたらいかがでしょうか。

 

以下のような連想配列が作れれば、あとは同様の処理で表示できるかと思います。

subTotals = {

  資材A2021-12-15: 5

  資材A2021-12-16: 15

  資材B2021-12-15: 10

  資材B2021-12-16: 20

}

koichiさん

こんにちは、せっかくコメントいただいたのにも関わらず、返信が遅くなってしまいまして申し訳ございません。

アドバイスをいただいた連想配列の件ですが、実は理解できておりませんでして…
下記のあたりを直せば。というお話ですよね。
var category = tableRecords[i].value[‘資材名’].value;

できないなりに、アドバイスをいただいた内容を元にkintone側で、資材名+日付のフィールドを作成して
対応できるようにしてみました。

本当は、JavaScriptで組めればスマートでしたが、勉強して改善できるようにしてみたいと思います。

コメントいただきありがとうございました。本当助かりました。

t.satoさん

ご返信ありがとうございます。ざっくりとした回答ですみません。

kintone側でフィールド作成して解決されたとのことで、以下は補足程度に記載します。

 

具体的には以下のような形です(テストできていないのでエラー出すかもしれません)。

var category = tableRecords[i].value['資材名'].value;
var date = tableRecords[i].value['日付'].value;

// sutTotalsのキーが資材名(category)のところを資材名(category)+日付(date)にする
if (!subTotals[category + date]) {
subTotals[category + date] = 0;
}

subTotals[category + date] += nyuko-seizou-furyou-rosu;

資材名+日付のキーでsubTotalsに数量が格納されるため

あとは最初のコードと同様に、subTotalsの中身(キーと数量)をループして画面表示させる流れです。

koichiさん

再度ご返信いただき誠にありがとうございます。

頂いた内容ですが、スマートで完璧です!
早速参考にさせていただき、動作テストいたしました。
このような書き方をすれば解決したのですね、大変勉強になりました。

本当にありがとうございました!