# フィールドの条件による動的な自動採番

**URL:** <https://community.cybozu.dev/t/topic/6620>\
**Category:** kintone 開発相談\
**Created:** [2020 年 8 月 1 日午後 2:00 UTC](https://community.cybozu.dev/t/topic/6620 "2020-08-01T14:00:41Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1409](https://avatars.discourse-cdn.com/v4/letter/l/df788c/32.png) [@Legacy\_Account1409](https://community.cybozu.dev/u/Legacy_Account1409)\
**Post date:** [2020 年 8 月 1 日午後 2:00 UTC](https://community.cybozu.dev/t/topic/6620/1 "2020-08-01T14:00:41Z")

</div>

採番について、質問お願い致します。 部門(A.B.C)ドロップダウン 店舗(1.2)ルックアップ 上記の選択によって、例として

部門A、店舗1の選択をしたレコード1の場合「1-A1000」

部門B、店舗2の選択をしたレコード2の場合「2-B1000」

部門A、店舗2の選択をしたレコード3の場合「2-A1000」

部門A、店舗1の選択をしたレコード4の場合「1-A1001」

といった2つの条件別による連番で採番したいのですが(伝え方難しくて伝わらなかったらスミマセン)、方法ありますかね？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2229](https://avatars.discourse-cdn.com/v4/letter/l/ce7236/32.png) [@Legacy\_Account2229](https://community.cybozu.dev/u/Legacy_Account2229)\
**Post date:** [2020 年 8 月 2 日午前 6:02 UTC](https://community.cybozu.dev/t/topic/6620/2 "2020-08-02T06:02:37Z")

</div>

gsc-hnd-dadさん

こんにちは。下記はいかがでしょうか。

```
(function() {

 'use strict';

 // レコード追加画面保存時
 var events = ['app.record.create.submit'];
 kintone.events.on(events, function(event) {

  var record = event.record;

  var body = {
   'app': event.appId,
   'query': '部門 in ("' + record.部門.value + '") and 店舗 = "' + record.店舗.value + '" order by 識別数字 desc limit 1',
   'fields': ['識別番号', '識別数字']
  };

  return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {

   if (resp.records.length == 0) {
    // 採番（1番目）
    record.識別数字.value = 1000;
    record.識別番号.value = record.店舗.value + '-' + record.部門.value + 1000;
   } else {
    // 採番（2番目以降）
    var myId = Number(resp.records[0].識別数字.value) + 1;
    record.識別数字.value = myId;
    record.識別番号.value = record.店舗.value + '-' + record.部門.value + myId;
   }

   return event;

  }).catch(function(error) {
   console.log(error);
  });

 });

})();

```

採番されるフィールドを「識別番号」（文字列1行）としています。

GET時に現在の最終番号を取得（order by 識別数字 desc limit 1）するため、別途、連番部分を数値で保持しておく必要があります。

ここでは、「識別数字」（数値）というフィールドを設けています。

※文字列の場合、仮に連番が10000に到達した際、文字コードで9999 \> 10000となるため、10001が発番されません。

&nbsp;

識別番号は、上記例のようにコード内で更新する他に、文字列1行フィールドの自動計算を使用しても良いと思います。

自動計算式 ： 店舗 & “-” & 部門 & 識別数字

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1409](https://avatars.discourse-cdn.com/v4/letter/l/df788c/32.png) [@Legacy\_Account1409](https://community.cybozu.dev/u/Legacy_Account1409)\
**Post date:** [2020 年 8 月 2 日午後 11:52 UTC](https://community.cybozu.dev/t/topic/6620/3 "2020-08-02T23:52:31Z")

</div>

早速のご回答ありがとうございます。

動作確認致しました。

しかしながら、上記"店舗"ルックアップにて１番目の選択の時は"1000"の値がついたのですが、２番目選択肢の時"1"となってしまったのは何か考えれる要因ありますでしょうか。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2229](https://avatars.discourse-cdn.com/v4/letter/l/ce7236/32.png) [@Legacy\_Account2229](https://community.cybozu.dev/u/Legacy_Account2229)\
**Post date:** [2020 年 8 月 3 日午前 6:36 UTC](https://community.cybozu.dev/t/topic/6620/4 "2020-08-03T06:36:28Z")

</div>

gsc-hnd-dadさん

フィールドの種類は、下記のようになってますでしょうか。

部門：ドロップダウン

店舗：ルックアップ（参照元アプリでは数値）

識別番号：文字列1行

期別数字：数値

また、今回登録されたレコード以外に、同アプリ内にはレコードが無い（部門と店舗の組合せが同じレコードは無い）状態でしょうか。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1409](https://avatars.discourse-cdn.com/v4/letter/l/df788c/32.png) [@Legacy\_Account1409](https://community.cybozu.dev/u/Legacy_Account1409)\
**Post date:** [2020 年 8 月 3 日午前 7:00 UTC](https://community.cybozu.dev/t/topic/6620/5 "2020-08-03T07:00:01Z")

</div>

部門：ドロップダウン（５項目）

店舗：ルックアップ（文字列）

識別番号：文字列1行

期別数字：数値

&nbsp;

となっております。また、同アプリ内において、現状はテストレコード含め数レコード（複数組み合わせ）がある状態です。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2229](https://avatars.discourse-cdn.com/v4/letter/l/ce7236/32.png) [@Legacy\_Account2229](https://community.cybozu.dev/u/Legacy_Account2229)\
**Post date:** [2020 年 8 月 3 日午前 9:48 UTC](https://community.cybozu.dev/t/topic/6620/6 "2020-08-03T09:48:22Z")

</div>

gsc-hnd-dadさん

期別数字→識別数字の誤記でした。ただ、フィールドは問題ないようです。

アプリ設定内の「アプリの動作テスト」内でテスト実行しているということもないでしょうか。

また、差し支えないようでしたら、今回設定した部分のコードを貼り付けていただくこと可能でしょうか。

何かわかるかもしれません。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2229](https://avatars.discourse-cdn.com/v4/letter/l/ce7236/32.png) [@Legacy\_Account2229](https://community.cybozu.dev/u/Legacy_Account2229)\
**Post date:** [2020 年 8 月 3 日午前 10:18 UTC](https://community.cybozu.dev/t/topic/6620/7 "2020-08-03T10:18:01Z")

</div>

gsc-hnd-dadさん

もう1点補足です。

既存レコードの中で、識別数字が空欄のものがあると、識別数字が「1」になるかもしれません。

&nbsp;

■既存レコード

部門：A、店舗：2、識別数字：空欄

&nbsp;

■新規レコード

部門：A、店舗：1で登録 → 識別数字：1000 になる。

部門：A、店舗：2で登録 → 識別数字：1 になる。

&nbsp;

クエリを下記のようにしても良いかもしれません。識別数字が空欄のものを除外できます。

```
'query':'識別数字 != "" and 部門 in ("'+ record.部門.value +'") and 店舗 = "'+ record.店舗.value +'" order by 識別数字 desc limit 1',

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2025 年 10 月 2 日午前 1:27 UTC](https://community.cybozu.dev/t/topic/6620/8 "2025-10-02T01:27:20Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
