下記のようなサブテーブルがあり
カテゴリ合計を 別の数値フィールドに出したいです
カテゴリは決まっているものしか入らず ルックアップなので カテゴリ名を間違えることはないです
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 |
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;
});
})();
こちらですと、レコードの編集保存時や作成保存時に、
自動的に数値フィールドに合計額を保存することが可能です。
なお、カテゴリが「ごはん」などでない場合は、
数値フィールドのフィールドコードを、そのカテゴリ名に変更していただければ、
そのまま対応できます。
何かあればご連絡くださいませ。
よろしくお願いいたします。
武井
追加の質問なのですが
合計値をプリントクリエイターを使用しバーコード印刷
バーコードを印刷するためには文字列にする必要があり 単純に計算式で文字列フィールドを作り持ってくると
値が入ってない場所が#N/Aになりバーコード印刷でエラーになってしまいます
プリントクリエイターにて エラー値の場合印刷しない
もしくは #N/Aを強制定期に0にするなどの方法はありますか?
よろしくお願いします
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.については、以前ご用意いただいた数値フィールドをそのまま文字列フィールドに変えていただければよろしいかと思います。