お世話になっております。
自動採番のプログラムを作って動かしているのですが、不安定な動きをします。
原因がわかりませんのでお力をお貸しいただけないでしょうか。
レコード1つ1つに対して、識別コードである「受付No.」を付与しようとしています。
それに必要な自動採番のプログラムを作成中です。
基本的には、新規保存時に最大値 + 1 を付与してくれるのですが、前触れなく45 → 46 → 47 → 1 → 1 → 48 や 45 → 46 → 1 → 2 → 3 → 47 といった謎の採番をしてしまいます。
「受付No.」は「会社区分-yyyymm-自動採番」となっています。
画面上のドロップダウンである「会社区分」と「新規保存時の年月」と「月ごとリセットの自動採番値」をハイフンで結合しています。
javascriptに不慣れなもので、つたない部分があるかと思いますが宜しくお願いいたします。
$(function() {
“use strict”;
/* レコード追加画面の保存実行前のイベント */
var events4 = [‘app.record.create.submit’];
kintone.events.on(events4, function(event) {
var record4 = event[‘record’];
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// 新規登録時のシステム日付を取得
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// システム日付(年、月、日をそれぞれ取得)
var dt = new Date();
// 保存時西暦
var dt_yyyy = dt.getFullYear();
// 保存時月
var dt_mm = dt.getMonth()+1;
// 保存時日にち
var dt_dd = dt.getDate();
// 登録時日付にシステム日付を代入
record4[‘登録時日付’][‘value’] = dt_yyyy + ‘-’ + dt_mm + ‘-’ + dt_dd
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// 月を2桁にする
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// 月を2桁にする(2 → 02)
// 頭に0を付けて、右から2桁を取り出す
var dt_mm2
dt_mm2 = ‘0’ + dt_mm;
dt_mm2 = dt_mm2.substring(dt_mm2.length - 2);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// max値検索の範囲を設定(dtmin ~ dtmax)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////// dtmaxを作成 (来月1日)///////////////
var dtmax
// 保存時の月が12の場合は、12/1 ~ 来年1/1。
if(dt_mm === 12){
dtmax = (parseInt(dt_yyyy, 10) + 1) + ‘-01-01’;
}else{
var dt_nmm
// dtmaxを作成(保存時日付の来月の1日)
dt_nmm = ‘0’ + (parseInt(dt_mm, 10) + 1);
dt_nmm = dt_nmm.substring(dt_nmm.length - 2);
dtmax = dt_yyyy + ‘-’ + dt_nmm + ‘-01’;
}
//////////// dtminを作成(今月1日) ///////////////
// dtminは、保存時の月の1日
var dtmin = dt_yyyy + ‘-’ + dt_mm + ‘-01’;
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// クエリの設定と実行
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// クエリ文の設定(上で設定した検索範囲で、「自動採番」フィールドのmax値とそのレコードを取得)
var query = {
// アプリのID
“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(function(resp) {
var records = resp.records;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 新規保存するレコードに、番号(max値 + 1)を付与。文字を結合して受付noを作成。その月の最初のレコードだった場合は無条件で「会社区分-年月-01」
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 既に同月のレコードが存在する場合、同月のmax番号に+1
if (records.length > 0) {
var rec = records[0];
var autono = rec[‘自動採番’][‘value’];
var autononew = Number( autono ) + 1;
// 番号を2桁にする(2 → 02)
var autono2 = ‘0’ + String( autononew );
// 頭に0を付けて、右から2桁を取り出す
autono2 = String(autono2).substring( String(autono2).length - 2 );
record4[‘自動採番’][‘value’] = Number(autononew);
record4[‘受付No’][‘value’] = record4[‘会社区分_DD’][‘value’] + “-” + dt_yyyy + dt_mm2 + “-” + String(autono2);
// 対象レコードがなかった場合は「yyyymm-01」
} else {
record4[‘自動採番’][‘value’] = 1;
record4[‘受付No’][‘value’] = record4[‘会社区分_DD’][‘value’] + “-” + dt_yyyy + dt_mm2 + “-01”;
}
return event;
});
});
})();