新規投稿
フォローする

サブテーブルの合計をカテゴリごとに数値フィールドに出したい

下記のようなサブテーブルがあり

カテゴリ合計を 別の数値フィールドに出したいです

カテゴリは決まっているものしか入らず ルックアップなので カテゴリ名を間違えることはないです

https://cybozudev.zendesk.com/hc/ja/articles/202422244-%E7%AC%AC6%E5%9B%9E-%E3%82%B5%E3%83%96%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

のスペース欄にはうまくできたのですが それをプリントクリエイターに出さなくてはいけなく 悩んでいます

よろしくお願いします

数値フィールド ごはん  パン おかず

ルックアップフィールド 商品名 カテゴリ 金額 個数
  AAA パン 100 1
  BBB ごはん 150 2
  CCC おかず 200 1
  DDD パン 300 1
0

5件のコメント

Avatar
武井 琢治

hassy様

いつもお世話になっております。

サイボウズスタートアップスの武井です。

弊社「プリントクリエイター」をご使用いただいていらっしゃるとのことで、誠にありがとうございます。

 

弊社落合が書いた記事について、

スペースフィールドにカテゴリ別合計額を表示しているところを、

kintoneで別途ご用意された数値フィールドに出力したいとのご要件と認識いたしました。

 

まず、記事のフィールドとプラスしてフィールドコード"パン"、"ごはん"、"おかず"の3つの数値フィールドをご用意ください。

JavaScriptは以下のようになります。

(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.order_items.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] += price * 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;
});
})();

 

こちらですと、レコードの編集保存時や作成保存時に、

自動的に数値フィールドに合計額を保存することが可能です。

 

なお、カテゴリが「ごはん」などでない場合は、

数値フィールドのフィールドコードを、そのカテゴリ名に変更していただければ、

そのまま対応できます。

 

何かあればご連絡くださいませ。

よろしくお願いいたします。

 

武井

武井 琢治により編集されました
0
Avatar
hassy

武井様

無事できました

ありがとうございます

0
Avatar
hassy

追加の質問なのですが

合計値をプリントクリエイターを使用しバーコード印刷

バーコードを印刷するためには文字列にする必要があり 単純に計算式で文字列フィールドを作り持ってくると

値が入ってない場所が#N/Aになりバーコード印刷でエラーになってしまいます

プリントクリエイターにて エラー値の場合印刷しない

もしくは #N/Aを強制定期に0にするなどの方法はありますか?

よろしくお願いします

0
Avatar
武井 琢治

hassyさん

 

プリントクリエイターにそのような機能はないと思いますので、

kintoneのプログラムの方で制御する必要があります。

 

ただし、ご質問の意図が分かりかねています。

 

1.ごはん・おかず・パンのすべての合計値を算出した文字列フィールドが欲しい(文字列フィールドは1つ)

2.ごはん・おかず・パンのそれぞれの合計値を算出した文字列フィールドが欲しい(文字列フィールドは3つ)

のどちらでしょうか。

 

1.の解決策は以下をご参照ください。

  • まず、フィールドコード「sum_text」という文字列フィールドをご用意ください。
  • 以前ご提示したソースコードの一部を以下のようにご変更ください。
// 集計結果をスペースフィールドに表示する
var sum = {};
var myTotalSpace = document.createElement('ul');
var sum_bar = 0;
for (var category in subTotals) {
var categorySpace = document.createElement('li');
categorySpace.innerHTML = category + ': ' + subTotals[category] + '円';
myTotalSpace.appendChild(categorySpace);
sum[category] = subTotals[category];
sum_bar += 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];
}
record.sum_text.value = sum_bar;
}

これで、すべての合計値を文字列フィールドに格納することができます。

 

2.については、以前ご用意いただいた数値フィールドをそのまま文字列フィールドに変えていただければよろしいかと思います。

武井 琢治により編集されました
0
Avatar
hassy

ありがとうございます

出来ました

0
サインインしてコメントを残してください。