■年次ごとの自動採番を行うワザ
上記URLを見て、年次ではなく、月ごとにリセットする採番を作りたいのですが、うまくいきません。
具体的には、
「取引発生日」の値が「2023-10-09」の時、「自動採番」の値を「202310-0001」、
「取引発生日」の値が「2023-10-10」の時、「自動採番」の値を「202310-0002」、
「取引発生日」の値が「2023-10-11」の時、「自動採番」の値を「202310-0003」…
「取引発生日」の値が「2023-11-01」の時、「自動採番」の値を「202311-0001」、
「取引発生日」の値が「2023-11-05」の時、「自動採番」の値を「202311-0002」、
「取引発生日」の値が「2023-11-08」の時、「自動採番」の値を「202311-0003」…
と採番したいです。
現状、月ごとのリセットが効かず、下記のように連番されます。
「取引発生日」の値が「2023-09-01」の時、「自動採番」の値を「202309-0001」、
「取引発生日」の値が「2023-10-01」の時、「自動採番」の値を「202310-0002」、
「取引発生日」の値が「2023-11-01」の時、「自動採番」の値を「202311-0003」、
また、12月を指定すると、
「レコードの取得でエラーが発生しました - error: フィールド「取引発生日」に指定した2023-13-15の日付書式が不正です。」と出て、保存できません。
よろしくお願いします。
(() => {
"use strict";
const autoNum = event => {
const record = event.record;
// 日付を取得し、年と月を取得する
const dt = record["取引発生日"].value;
const year = dt.substring(0, 4);
const month = dt.substring(5, 7);
const day = dt.substring(8, 10);
const dtyyMM = `${year}${month}`;
const dtyy = dt.substring(0, 4);
const dtyyMMdd = `${year}${month}${day}`;
const dtmin = `${dtyy}-01-01`;
const dtmax = `${year}-${parseInt(month, 10) + 1}-${day}`;
// クエリ文の設定
const query = {
app: kintone.app.getId(),
query: `取引発生日 >= "${dtmin}" and 取引発生日 < "${dtmax}" order by 自動採番 desc limit 1`
};
// 設定された日付から最新の番号を取得する
return kintone
.api(kintone.api.url("/k/v1/records", true), "GET", query)
.then(resp => {
const records = resp.records;
// 対象レコードがあった場合
if (records.length > 0) {
const rec = records[0];
let autono = rec["自動採番"].value;
autono = parseInt(autono.substring(7), 10) + 1;
autono = `0000${autono}`;
autono = `${dtyyMM}-${autono.substring(autono.length - 4)}`;
event.record["自動採番"].value = autono;
// 対象レコードがなかった場合
} else {
event.record["自動採番"].value = `${dtyyMM}-0001`;
}
return event;
})
.catch(e => {
alert(`レコードの取得でエラーが発生しました - error: ${e.message}`);
return false;
});
};
// 新規作成画面の保存
kintone.events.on("app.record.create.submit", autoNum);
// 新規作成画面表示
kintone.events.on("app.record.create.show", event => {
const record = event.record;
// フィールドを非活性にする
record["自動採番"].disabled = true;
return event;
});
// 編集画面表示
kintone.events.on(["app.record.edit.show", "app.record.index.edit.show"], event => {
const record = event.record;
// フィールドを非活性にする
record["自動採番"].disabled = true;
record["取引発生日"].disabled = true;
return event;
});
})();