# 2つのテーブルから集計して、別テーブルに

**URL:** <https://community.cybozu.dev/t/topic/5223>\
**Category:** kintone 開発相談\
**Created:** [2021 年 8 月 31 日午後 4:00 UTC](https://community.cybozu.dev/t/topic/5223 "2021-08-31T16:00:37Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account381](https://avatars.discourse-cdn.com/v4/letter/l/bb73d2/32.png) [@Legacy\_Account381](https://community.cybozu.dev/u/Legacy_Account381)\
**Post date:** [2021 年 8 月 31 日午後 4:00 UTC](https://community.cybozu.dev/t/topic/5223/1 "2021-08-31T16:00:37Z")

</div>

**背景・実現したいこと**

はじめまして。キントーン初学者です。

注文内容、出荷内容をそれぞれ打ち込むと、その差異（未出荷分）が別テーブルに集計されるというコードを書いています。（下図参照）

↑この時、商品（型番）はルックアップで取っています。

[https://developer.cybozu.io/hc/ja/articles/202422244-%E7%AC%AC6%E5%9B%9E-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E5%80%A4%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B-%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E9%9B%86%E8%A8%88-](https://developer.cybozu.io/hc/ja/articles/202422244-%E7%AC%AC6%E5%9B%9E-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E5%80%A4%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B-%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E9%9B%86%E8%A8%88-)

上記参考に、注文内容・出荷内容それぞれのテーブルで商品ごとの集計は出来た様なのですが、その先の差異の出し方、テーブルに入力していくやり方が分かりません。

ご教示願います。

&nbsp;

(function() {  
‘use strict’;  
kintone.events.on([  
‘app.record.create.show’,  
‘app.record.create.change.注文内容’,  
‘app.record.create.change.出荷内容’,  
‘app.record.detail.show’,  
‘app.record.edit.show’,  
‘app.record.edit.change.注文内容’,  
‘app.record.edit.change.出荷内容’  
],function(event) {  
var subTotals = {};  
var subTotals2 = {};  
var tableRecords = event.record.注文内容.value;  
var tableRecords2 = event.record.出荷内容.value;

// テーブル内の各レコードをカテゴリごとに集計する  
for (var i = 0; i \< tableRecords.length; i++) {  
var category = tableRecords[i].value[‘受注\_型番’].value;  
if (!subTotals[category]) {  
subTotals[category] = 0;  
}  
var number = tableRecords[i].value[‘受注\_台数’].value;  
subTotals[category] += number\*1;  
}

for (var j = 0; j \< tableRecords2.length; j++) {  
var category2 = tableRecords2[j].value[‘出荷\_型番’].value;  
if (!subTotals2[category2]) {  
subTotals2[category2] = 0;  
}  
var number2 = tableRecords2[j].value[‘出荷\_台数’].value;  
subTotals2[category2] += number2\*1;  
}

//この先が分かりまん。

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1740](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1740](https://community.cybozu.dev/u/Legacy_Account1740)\
**Post date:** [2021 年 9 月 1 日午前 5:07 UTC](https://community.cybozu.dev/t/topic/5223/2 "2021-09-01T05:07:50Z")

</div>

tanakaさん

お世話になっております。

tableRecordsとtableRecords2をもとに新しくテーブル用のデータを作成し、event.record.受注残.valueに代入すればよいかと思います。

テーブル用のデータの構造については下記を参考にすると良いかと思います。  
[https://developer.cybozu.io/hc/ja/articles/360027244231](https://developer.cybozu.io/hc/ja/articles/360027244231)

数回にわたるチュートリアルになっているので、わからない単語などがある場合は第1回からご覧になることをおすすめします。  
[https://developer.cybozu.io/hc/ja/articles/115002336526](https://developer.cybozu.io/hc/ja/articles/115002336526)

---

<div class="post-metadata">

**Author:** ![Legacy\_Account381](https://avatars.discourse-cdn.com/v4/letter/l/bb73d2/32.png) [@Legacy\_Account381](https://community.cybozu.dev/u/Legacy_Account381)\
**Post date:** [2021 年 9 月 2 日午後 9:02 UTC](https://community.cybozu.dev/t/topic/5223/3 "2021-09-02T21:02:20Z")

</div>

ご回答ありがとうございます。

色々と調べながらやってみたいと思います。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account381](https://avatars.discourse-cdn.com/v4/letter/l/bb73d2/32.png) [@Legacy\_Account381](https://community.cybozu.dev/u/Legacy_Account381)\
**Post date:** [2021 年 9 月 9 日午後 1:42 UTC](https://community.cybozu.dev/t/topic/5223/4 "2021-09-09T13:42:45Z")

</div>

[江田篤史 様](https://community.cybozu.dev/hc/ja/profiles/5826575706-%E6%B1%9F%E7%94%B0%E7%AF%A4%E5%8F%B2)

以下の様なコードを書いてみたのですが

Cannot read property ‘value’ of undefined

というエラーが出て思い通りに動作しません。

43行目あたりで何か引っかかっている様なのですが

何が悪いのかが分かりません。

ご教示頂けますと幸いです。

&nbsp;

(function() {  
‘use strict’;  
kintone.events.on([  
‘app.record.create.show’,  
‘app.record.create.change.注文内容’,  
‘app.record.create.change.出荷内容’,  
‘app.record.detail.show’,  
‘app.record.edit.show’,  
‘app.record.edit.change.注文内容’,  
‘app.record.edit.change.出荷内容’  
],function(event) {  
var subTotals = {};  
var subTotals2 = {};  
var tableRecords = event.record.注文内容.value;  
var tableRecords2 = event.record.出荷内容.value;  
var tableRecords3 = event.record.受注残.value;

// テーブル内の各レコードをカテゴリごとに集計する  
for (var i = 0; i \< tableRecords.length; i++) {  
var category = tableRecords[i].value[‘受注\_型番’].value;  
if (!subTotals[category]) {  
subTotals[category] = 0;  
}  
var number = tableRecords[i].value[‘受注\_台数’].value;  
subTotals[category] += number\*1;  
}

for (var j = 0; j \< tableRecords2.length; j++) {  
var category2 = tableRecords2[j].value[‘出荷\_型番’].value;  
if (!subTotals2[category2]) {  
subTotals2[category2] = 0;  
}  
var number2 = tableRecords2[j].value[‘出荷\_台数’].value;  
subTotals2[category2] += number2\*1;  
}

for (var k = 0; k \< tableRecords.length; k++) {  
if (category === category2){  
var sai = subTotals[category] - subTotals2[category2];  
tableRecords3[k].value[‘受注残\_型番’].value = category;  
tableRecords3[k].value[‘受注残\_台数’].value = sai;  
}else{  
tableRecords3[k].value[‘受注残\_型番’].value = category;  
tableRecords3[k].value[‘受注残\_台数’].value = subTotals[category];  
}  
}

return event;  
});  
})();

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1740](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1740](https://community.cybozu.dev/u/Legacy_Account1740)\
**Post date:** [2021 年 9 月 10 日午前 4:50 UTC](https://community.cybozu.dev/t/topic/5223/5 "2021-09-10T04:50:56Z")

</div>

tanakaさん

注文内容の行数が受注残の行数より大きい場合(tableRecords.length \> tableRecords3.length)、tableRecords3[k]がundefinedになるのかと思います。

いくつか対策は考えられますが、value[‘受注残\_型番’].valueなどのプロパティを持ったオブジェクトを直接代入するのがかんたんかと思います。  
また、フィールドタイプも指定しないとエラーになるかと思うので、そちらも追加すると良いかと思います。

```
tableRecords3[k] = {
  value: {
    受注残_型番: {
      value: category,
      type: 'SINGLE_LINE_TEXT'
    },
    受注残_台数: {
      value: subTotals[category],
      type: 'NUMBER'
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account381](https://avatars.discourse-cdn.com/v4/letter/l/bb73d2/32.png) [@Legacy\_Account381](https://community.cybozu.dev/u/Legacy_Account381)\
**Post date:** [2021 年 9 月 10 日午前 5:40 UTC](https://community.cybozu.dev/t/topic/5223/6 "2021-09-10T05:40:31Z")

</div>

[江田篤史 様](https://community.cybozu.dev/hc/ja/profiles/5826575706-%E6%B1%9F%E7%94%B0%E7%AF%A4%E5%8F%B2)

ご教示ありがとうございます！

早速試してみたいと思います。
