特定の番号に紐づけながら自動採番をしたい

自動採番について、ご質問があります。

現在、伝票アプリのバージョンアップをしております。
伝票アプリには、商品番号と商品識別番号を登録しています。
商品番号に紐づけて商品識別番号を手動で登録していたのですが
商品識別番号が重複する問題が発生したため商品識別番号を自動採番できるように設定したいです。
ただし、自動採番の際には、商品番号に紐づいた形にする必要があります。

特定の番号に紐づけながら自動採番ができる方法があれば、ご教示いただきたいです。

 

■実現したいイメージ

最新の伝票を作成する際、商品番号『N』を選択し、
その後、商品番号『N』に紐づいている商品識別番号の最大値に+1をした数字を
最新の伝票の商品識別番号に自動入力する。
※商品識別番号は、出荷先、担当者の識別などに使用

↓商品アプリ

商品番号 | 商品名 |

1   リンゴ
2 みかん
3 トマト

↓伝票アプリ

商品番号|商品識別番号|出荷先

1    1 千葉
1 2 東京
2 1 埼玉
2 2 神奈川

↓商品追加後

商品番号|商品識別番号|出荷先

1    1 千葉
1 2 東京
1 3 茨城
2 1 埼玉
2 2 神奈川

⇒商品番号『1』で追加した際に、商品識別番号に『3』が自動採番される。

kasandora さん、こんにちは。

変数を作成して、商品番号ごとにカウントすることで、
商品番号ごとに採番を行うことが可能です。

以下のページを参考にすることで、ご希望の動作が可能かと思います。

▼ テーブルに連番をつける
https://developer.cybozu.io/hc/ja/articles/204014210
▼ 第6回 テーブルの値を利用する(条件付きでデータを集計)
https://developer.cybozu.io/hc/ja/articles/202422244

伝票アプリはテーブルを利用していると仮定すると、
下記のようなコードになるかと思います。

(function() {
"use strict";

var events = ['app.record.create.submit','app.record.edit.submit'];

kintone.events.on(events,function(event){
var product = {};
var record = event.record;

//テーブル内の商品ごとに採番する
for( var i = 0; i < record.テーブル.value.length; i++){
var category = record.テーブル.value[i].value.商品名.value;
if(!product[category]){
product[category] = 1;
}
record.テーブル.value[i].value.商品識別番号.value = product[category];
product[category]+=1;

}
return event;
});

})();

なお、伝票アプリ全体で重複しない商品識別番号を作成したい場合には、
以下のページが参考になるかと思います。

▼ 顧客ごとの自動採番
https://developer.cybozu.io/hc/ja/articles/203236240

kjさん

ありがとうございます。

参考にさせていただきます。

ちなみに、内部テーブルからではなく、レコード一覧の情報をレコード詳細画面に反映することは、可能でしょうか?

イメージ:

1.伝票アプリでデータを追加する。

2.追加した際に、伝票アプリレコード一覧画面から該当する商品番号を参照し、かつその商品番号に紐づく商品詳細番号で一番大きいものを読み込む。

3.データを登録した際、一番大きい商品詳細番号に+1された商品詳細番号が入る。

返信が遅くなってしまいすみません。

 

‘app.record.create.submit.success’ イベントなどでレコード一括取得 API を利用し、

商品番号ごとに最大値を見つけて変数に入れることで、ご希望の動作が可能になるかと思います。

コードの作成については、以下のページが参考になるかと思いますよ。

 

レコードの一括取得(クエリで条件を指定)

kintone JavaScript API(イベント)一覧

JavaScript オブジェクト配列の要素で最大値を取得する

kintone.Promiseとは

kintoneにおけるPromiseの書き方の基本

kjさん

色々とありがとうございます。

参考にさせていただきます。