現在、
https://developer.cybozu.io/hc/ja/articles/202422244
の記事を参考に、売上げ集計アプリを作成しています。
サブテープの内は以下のような感じになっており、エリアと売上月はドロップダウン、予定売上は数値です。
| エリア | 売上月 | 予定売上 |
| 東 京 | 4月 | 1500000 |←1段目
| 東 京 | 5月 | 1950000 |←2段目
| 名古屋 | 4月 | 6550000 |←3段目
| 名古屋 | 5月 | 1950000 |←4段目
| 大 阪 | 6月 | 7590000 |←5段目
各地区の売上集計をフィールドに表示するところまではできています。
この地区別の売上げを下記のように月別に集計したいと思っています。
東 京 4月 5月 6月・・・・
名古屋 4月 5月 6月・・・・
大 阪 4月 5月 6月・・・・
どなたかご教授いただけないでしょうか?
どうぞよろしくお願いいたします。
下記は現在のコードです
(function () {
"use strict";
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit', 'app.record.detail.show'], function (event) {
var record = event.record;
var subTotals = new Array();
var tableRecords = event.record.Table_2.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;
var price = tableRecords[i].value['予定原価'].value;
subTotals[category] += 1 * number;
}
// 集計結果をスペースフィールドに表示する
var sum = {};
var myTotalSpace = document.createElement('ul');
for (var category in subTotals) {
var categorySpace = document.createElement('li');
categorySpace.innerHTML = category + ': ' + subTotals[category] + '円';
myTotalSpace.appendChild(categorySpace);
sum[category] = subTotals[category];
}
kintone.app.record.getSpaceElement('sub_total_area').appendChild(myTotalSpace);
if (event.type === 'app.record.create.submit' || event.type === 'app.record.edit.submit') {
for (var key in sum) {
record[key].value = sum[key];
}
}
return event;
});
})();
やるしかないんだ!様
お世話になっております。
cstapの江田と申します。
二次元配列を用いるのが良いのではないでしょうか。
以下のようなコードで実装できるかと思います。
(function(){"use strict";kintone.events.on(['app.record.create.submit','app.record.edit.submit','app.record.detail.show'],function(event){varrecord=event.record;varsubTotals=newArray();vartableRecords=event.record.Table\_2.value;varmonths=newArray();// テーブル内の各レコードをカテゴリごとに集計するfor(vari=0;i\<tableRecords.length;i++){vararea=tableRecords[i].value['エリア'].value;varmonth=tableRecords[i].value['売上月'].value;if(months.indexOf(month)===-1){months.push(month);}if(!subTotals[area]){subTotals[area]=newArray();subTotals[area]['sum']=0;}if(!subTotals[area][month]){subTotals[area][month]=0;}varnumber=tableRecords[i].value['予定売上'].value;varprice=tableRecords[i].value['予定原価'].value;subTotals[area][month]+=1\*number;subTotals[area]['sum']+=1\*number;}months.sort(function(a,b){if(Number(a)\<4)a+=12;if(Number(b)\<4)b+=12;if(Number(a)\<Number(b))return-1;if(Number(a)\>Number(b))return1;return0;});// 集計結果をスペースフィールドに表示するvarsum={};varmyTotalSpace=document.createElement('table');varrowSpace=myTotalSpace.insertRow();varcellSpace=rowSpace.insertCell();cellSpace.innerHTML='エリア';for(varkeyinmonths){cellSpace=rowSpace.insertCell();cellSpace.innerHTML=months[key]+'月';}for(varareainsubTotals){rowSpace=myTotalSpace.insertRow();cellSpace=rowSpace.insertCell();cellSpace.innerHTML=area;for(varkeyinmonths){cellSpace=rowSpace.insertCell();cellSpace.innerHTML=(subTotals[area][months[key]]||0)+'円';}sum[area]=subTotals[area]['sum'];}kintone.app.record.getSpaceElement('sub\_total\_area').appendChild(myTotalSpace);if(event.type==='app.record.create.submit'||event.type==='app.record.edit.submit'){for(varkeyinsum){record[key].value=sum[key];}}returnevent;});})();
cstap 江田様
ご教授ありがとうございました!
大変感謝いたします。
おかげさまで無事に表示することができました。
これをベースにいろいろといじってみようと思います。
もしよろしければなのですが、もう一点アドバイスいただければありがたいのですが・・・
現在は用意したスペース内にエリア別、月別の集計が表示されている状態ですが、
これを下記のように用意したフィールドに表示することは可能でしょうか?
|エリア| 4月 | 5月 | 6月 | 7月 |・・・・・|3月 |
|東 京|150000|250000|150000|350000|・・・・・|190000|←|東京3月(フィールドコード)|
|名古屋|100000|200000|180000|300000|・・・・・|300000|←|名古屋3月(フィールドコード)|
|大 阪|250000|550000|450000|250000|・・・・・|180000|←|大阪3月(フィールドコード)|
エリアは3つ程度しかないのでフィールドの作成はさほど苦労はありません。
この月別エリア別の集計をいろいろ派生させていきたいので、何卒よろしくお願いいたします。
やるしかないんだ!様
お世話になっております。 cstapの江田です。
以下のようなコードで実装できるかと思います。
(function(){"use strict";kintone.events.on(['app.record.create.submit','app.record.edit.submit'],function(event){varrecord=event.record;varsubTotals=newArray();vartableRecords=record.Table\_2.value;// テーブル内の各レコードをカテゴリごとに集計するfor(vari=0;i\<tableRecords.length;i++){vararea=tableRecords[i].value['エリア'].value;varmonth=tableRecords[i].value['売上月'].value;if(!subTotals[area]){subTotals[area]=newArray();subTotals[area]['sum']=0;}if(!subTotals[area][month]){subTotals[area][month]=0;}varnumber=tableRecords[i].value['予定売上'].value;subTotals[area][month]+=1\*number;subTotals[area]['sum']+=1\*number;}// 集計結果をレコードに代入するfor(varareainsubTotals){record[area].value=subTotals[area]['sum'];for(varmonth=1;month\<=12;month++){record[area+month+'月'].value=subTotals[area][month];}}returnevent;});})();
江田様
さっそく作成いただきましてありがとうございます。
まだ試しておりませんが、実装してみたいと思います。
このたびは2度にわたり、お時間いただきましてありがとうございました。