コンテンツにスキップ

iDempiere シリアルNo管理の使い方|在庫管理 操作マニュアル・技術仕様

📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。

シリアルNo管理は、品目のシリアル番号を自動採番するためのルール(接頭辞・開始番号・増加数・接尾辞)を定義するマスタです。属性セット(M_AttributeSet)の「シリアルNo管理」として参照され、シリアル番号管理対象の品目に対して連番のシリアルNoを自動生成します。

📌 ポイント: シリアルNo管理は単体では機能しません。属性セット(M_AttributeSet)の M_SerNoCtl_ID に紐付け、その属性セットを品目マスタに設定することで、入出荷時のシリアルNo自動採番が有効になります。

  • シリアル番号の自動採番ルール定義(開始番号・増加数)
  • 接頭辞・接尾辞による番号フォーマットの指定(例: SN-100-A
  • 次に採番される番号(次の番号)の管理
  • 除外タブによる、特定テーブル・取引方向(販売/購買)でのシリアルNo採番の抑止

シリアルNo管理はシンプルな2タブ構成です。

タブ名テーブル項目数役割
シリアルNo管理M_SerNoCtl約10項目採番ルール本体(開始番号・増加数・接頭辞・接尾辞)
除外M_SerNoCtlExclude約6項目シリアルNo作成を除外するテーブル・取引方向の指定
graph TD
    A["🚀 メニューから開く<br/>在庫管理 > 品目属性管理 > シリアルNo管理"] --> B["➕ 新規で名称を入力"]
    B --> C["🔢 開始番号・増加数・次の番号を設定<br/>(デフォルト: 100 / 1 / 100)"]
    C --> D["🏷️ 必要に応じて接頭辞・接尾辞を設定"]
    D --> E["💾 保存"]
    E --> F["🔗 属性セットのシリアルNo管理に設定<br/>(シリアルNoフラグ ON)"]
    F --> G["📦 品目マスタに属性セットを設定<br/>→ 入出荷時に自動採番"]

メニューから開く 在庫管理 > 品目属性管理 > シリアルNo管理 新規で名称を入力 開始番号・増加数・次の番号を設定 (デフォルト: 100 / 1 / 100) 必要に応じて接頭辞・接尾辞を設定 保存 属性セットのシリアルNo管理に設定 (シリアルNoフラグ ON) 品目マスタに属性セットを設定 → 入出荷時に自動採番

メニューから「在庫管理 > 品目属性管理 > シリアルNo管理」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称: 採番ルールの名称(例: 製品シリアル採番
    • 開始番号: 採番の起点となる番号(デフォルト: 100
    • 増加数: 採番ごとに加算する数(デフォルト: 1
    • 次の番号: 次に採番される番号(デフォルト: 100。運用中はシステムが自動更新)
    • 接頭辞 / 接尾辞: 番号の前後に付ける文字列(任意。例: 接頭辞 SN-
  3. 保存」をクリック

採番結果は「接頭辞 + 次の番号 + 接尾辞」の形式になります(例: 接頭辞 SN-、次の番号 100、接尾辞 -ASN-100-A)。

特定の画面(テーブル)・取引方向ではシリアルNoの新規作成をさせたくない場合に使用します。

  1. 除外」タブに移動
  2. テーブル: シリアルNo作成を除外するテーブルを選択
  3. 販売(ON) / 購買(OFF): 除外を適用する取引方向を指定
  4. 保存」をクリック

⚠️ 注意: 除外設定の情報はキャッシュされます。設定を反映させるには再ログインまたはキャッシュリセットが必要です(リファレンスページの記載どおり)。

項目名必須説明
名称必須文字列採番ルールの名称
説明-文字列補足説明
開始番号必須整数採番の起点(デフォルト 100)
増加数必須整数採番ごとの加算値(デフォルト 1)
次の番号必須整数次に使用される番号(デフォルト 100)
接頭辞-文字列番号の前に付ける文字列(最大10文字)
接尾辞-文字列番号の後に付ける文字列(最大10文字)

全項目一覧はリファレンス参照

Q. 複数ユーザーが同時に入荷処理をしても番号は重複しませんか?

Section titled “Q. 複数ユーザーが同時に入荷処理をしても番号は重複しませんか?”

重複しません。採番処理(MSerNoCtl.createSerNo())は「次の番号」カラムに対する楽観的ロックを使用しており、競合が発生した場合は 500ms 待機して最大3回リトライします。3回とも失敗した場合のみエラーになります。

Q. 除外タブを設定したのにシリアルNo作成ボタンが消えません

Section titled “Q. 除外タブを設定したのにシリアルNo作成ボタンが消えません”

除外情報はキャッシュされるため、即時には反映されません。再ログインするか、キャッシュリセットを実行してください。

Q. 「開始番号」と「次の番号」の違いは何ですか?

Section titled “Q. 「開始番号」と「次の番号」の違いは何ですか?”

「開始番号」は採番ルールの起点を記録する項目、「次の番号」が実際に次回採番で使用される値です。採番のたびに「次の番号」に増加数が加算されて更新されます。採番を任意の番号から再開したい場合は「次の番号」を変更します。

🛠 技術仕様(開発者向け)

シリアルNo管理はマスタデータ型のウィンドウ(AD_Window_ID: 259)で、M_SerNoCtl テーブル(採番ルール)と M_SerNoCtlExclude テーブル(除外定義)で構成されます。モデルクラスは MSerNoCtl(153行)と MSerNoCtlExclude(95行)です。Document 型ではなく、DocAction/DocStatus はありません。

classDiagram
    class MSerNoCtl {
        +createSerNo() String
    }
    class MSerNoCtlExclude {
        +MSerNoCtlExclude(ctx, id, trxName)
    }
    class X_M_SerNoCtl {
        <<generated>>
    }
    class X_M_SerNoCtlExclude {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MSerNoCtl --|> X_M_SerNoCtl
    MSerNoCtlExclude --|> X_M_SerNoCtlExclude
    X_M_SerNoCtl --|> PO
    X_M_SerNoCtlExclude --|> PO
    MSerNoCtl <-- MSerNoCtlExclude : M_SerNoCtl_ID
    MSerNoCtl <-- MAttributeSet : M_SerNoCtl_ID

+createSerNo() String +MSerNoCtlExclude(ctx, id, trxName) <> <> > X_M_SerNoCtl MSerNoCtlExclude -- > PO X_M_SerNoCtlExclude --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MSerNoCtl.java / MSerNoCtlExclude.java

カラム名必須説明備考
M_SerNoCtl_IDIDPKシリアルNo管理ID主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織
NameString(60)Y名称識別子
DescriptionString(255)N説明
StartNoIntegerY開始番号デフォルト 100
IncrementNoIntegerY増加数デフォルト 1
CurrentNextIntegerY次の番号デフォルト 100
PrefixString(10)N接頭辞
SuffixString(10)N接尾辞
カラム名必須説明備考
M_SerNoCtlExclude_IDIDPK除外ID主キー
M_SerNoCtl_IDTableDirectYシリアルNo管理FK親リンク
AD_Table_IDTableDirectY対象テーブル除外するテーブル
IsSOTrxYesNoY販売取引フラグ販売=Y / 購買=N

テーブル属性: M_SerNoCtl はアクセスレベル 3(Client+Org)、M_SerNoCtlExclude は 2(Client)。いずれも削除可能・ビューではありません。

MSerNoCtl.createSerNo() の処理(ソース根拠):

  1. CurrentNext カラムを楽観的ロック対象に設定(set_OptimisticLockingColumns + set_UseOptimisticLocking(true)
  2. 最大3回のリトライループ。各試行でレコードを再ロードし、トランザクション中なら Savepoint を作成
  3. Prefix + CurrentNext + Suffix を連結してシリアルNo文字列を生成
  4. CurrentNextIncrementNo を加算して saveEx()(ここで楽観的ロック競合を検出)
  5. 競合時は Savepoint までロールバックし 500ms 待機して再試行。3回目の失敗で例外を送出

MSerNoCtlExclude はコンストラクタとコピーコンストラクタのみで、独自のビジネスロジックは持ちません(除外判定は参照側でキャッシュされます)。

  • Model Validator: M_SerNoCtl の保存前後に独自制約(例: 接頭辞の命名規則チェック)を追加できます。コア改変は不要です。
  • Callout: gw_column.tsv 上、本テーブルに標準の Callout は定義されていません。
  • 採番フォーマット自体を大きく変えたい場合は、createSerNo() を呼び出す側のロジックを OSGi プラグインで差し替える設計を検討してください。

リファレンスページ・メニュー上、このウィンドウ固有の関連プロセスはありません。


シリアル番号の採番ルールは、Model Validator や OSGi プラグインでコア改変なしに拡張できます。ロット・シリアル追跡の導入設計もお任せください。

As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。

OSS ERP導入・カスタマイズサービスの詳細はこちら