コンテンツにスキップ

iDempiere シーケンス番号の使い方|会計 操作マニュアル・技術仕様

📖 会計の全体像: 会計の全体図 も合わせてご覧ください。

シーケンス番号は、システム内のレコードIDと伝票番号の採番ルールを定義するウィンドウです。伝票番号に接頭辞・接尾辞を付けたり、開始番号や増加数を変更したり、年度・月ごとに番号をリセットする運用が設定できます。

📌 ポイント: 伝票番号のシーケンスは「伝票タイプ」ウィンドウの「伝票番号シーケンス」から参照されます。番号体系を変える場合はこのウィンドウでシーケンスを作成・変更し、伝票タイプ側で割り当てます。

  • 伝票番号の接頭辞(Prefix)・接尾辞(Suffix)の設定
  • 次に採番される番号(次の番号)と増加数の変更
  • 毎年・毎月の番号リスタート(年月別の採番管理)
  • 組織ごとに独立した採番(組織毎に採番)
  • 値フォーマット(VFormat)による番号の書式チェック
タブ名テーブル項目数役割
番号シーケンスAD_Sequence約18項目採番定義(接頭辞・接尾辞・次の番号・リスタート設定)
採番管理AD_Sequence_No約6項目年月(SequenceKey)ごとの現在番号の管理

💡 ヒント: 「採番管理」タブは「毎年リスタート」等を有効にした場合に、年月キーごとの次番号が記録される管理用タブです。通常の設定は「番号シーケンス」タブのみで完了します。

graph TD
    A["🚀 メニューから開く<br/>会計管理 > 会計設定 > シーケンス番号"] --> B["🔍 対象シーケンスを検索<br/>(伝票タイプ名等で特定)"]
    B --> C{変更内容}
    C -->|番号体系の変更| D["✏️ 接頭辞・接尾辞<br/>を設定(例: INV-)"]
    C -->|開始番号の変更| E["🔢 次の番号を変更<br/>(重複しない値に)"]
    C -->|年次リセット| F["📅 毎年リスタートにチェック<br/>+日付カラムを指定"]
    D --> G["💾 保存"]
    E --> G
    F --> G
    G --> H["🔗 伝票タイプウィンドウで<br/>シーケンスを割り当て"]

メニューから開く 会計管理 > 会計設定 > シーケンス番号 対象シーケンスを検索 (伝票タイプ名等で特定) 接頭辞・接尾辞 を設定(例: INV-) 次の番号を変更 (重複しない値に) 毎年リスタートにチェック +日付カラムを指定 保存 伝票タイプウィンドウで シーケンスを割り当て 変更内容 番号体系の変更 開始番号の変更 年次リセット

⚠️ 注意: 「次の番号」を小さくすると既存伝票と番号が重複する恐れがあります。変更する場合は既存の最大番号より大きい値を設定してください。

メニューから「会計管理 > 会計設定 > シーケンス番号」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称: シーケンス名(例: 売上請求書番号
    • 自動採番: チェック(自動で次番号を割当)
    • 増加数: 番号の増分(デフォルト 1
    • 次の番号: 次に使用される番号(デフォルト 1000000
    • 接頭辞 / 接尾辞: 必要に応じて(例: 接頭辞 INV-
  3. 年次・月次で番号をリセットする場合:
    • 毎年リスタート: チェック+日付カラム(例: DateInvoiced)を指定
    • 毎月リスタート: 「毎年リスタート」と併用してチェック
  4. 保存」をクリック
項目名必須説明
名称必須文字列シーケンスの名称
自動採番必須チェック次番号を自動で割り当てる
レコードIDとして使用-チェック伝票番号をレコードキーとして使用(システム用)
増加数必須整数採番の増分(デフォルト 1)
次の番号必須整数次に使用される番号(デフォルト 1000000)
開始番号必須整数開始番号(デフォルト 1000000)
接頭辞-文字列番号の前に付ける文字列
接尾辞-文字列番号の後に付ける文字列
Decimal Pattern-文字列Java の DecimalFormat パターン(桁数固定等)
値フォーマット-文字列値の書式(固定文字と変数 “_lLoOaAcCa09”、または ~正規表現)
組織毎に採番必須チェック組織ごとに独立採番する
組織カラム-文字列組織を判定するカラム(完全修飾の AD_Org_ID)
毎年リスタート-チェック毎年1/1に開始番号へ戻す
毎月リスタート必須チェック毎月リセット(毎年リスタートと併用)
日付カラム-文字列年月判定に使う日付カラム(完全修飾)

全項目は 画面リファレンス: シーケンス番号 を参照してください。

Q. 「毎月リスタート」だけチェックしても効かないのはなぜですか?

Section titled “Q. 「毎月リスタート」だけチェックしても効かないのはなぜですか?”

MSequence.beforeSave() の実装により、「毎年リスタート」がオフのまま「毎月リスタート」のみをチェックして保存すると、自動的に「毎月リスタート」もオフに戻されます。月次リセットを使う場合は必ず「毎年リスタート」と併せて有効化し、「日付カラム」も設定してください。

Q. 伝票番号を「INV-2026-000123」のような形式にできますか?

Section titled “Q. 伝票番号を「INV-2026-000123」のような形式にできますか?”

接頭辞に固定文字列(例: INV-)を設定し、「毎年リスタート」を有効にして年別に採番管理する構成が基本です。桁数を固定したい場合は「Decimal Pattern」に Java の DecimalFormat パターン(例: 000000)を設定します。

Q. 年次リスタート時の番号はどこで管理されますか?

Section titled “Q. 年次リスタート時の番号はどこで管理されますか?”

「採番管理」タブ(AD_Sequence_No)に、年月を表す SequenceKey(YearMonth)ごとの「次の番号」が自動的に記録されます。年が変わると新しいキーの行が作られ、開始番号から採番が再開されます。

Q. レコードID用シーケンスと伝票番号用シーケンスの違いは?

Section titled “Q. レコードID用シーケンスと伝票番号用シーケンスの違いは?”

「レコードIDとして使用」がチェックされたシーケンスはテーブルの内部ID採番用で、通常は変更しません。伝票番号用のシーケンス(DocumentNo_xxx 等)のみ、運用に合わせて接頭辞や開始番号を調整してください。

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

シーケンス番号は AD_Sequence テーブル(アクセスレベル: System/Client)に格納され、MSequence クラス(1,525行)がレコードID採番(getNextID)と伝票番号採番(getDocumentNo)の両方を担う、iDempiere の採番基盤の中核クラスです。年月別の採番状態は AD_Sequence_No に保持されます。

classDiagram
    class MSequence {
        +getNextID(AD_Client_ID, TableName) int$
        +getDocumentNo(C_DocType_ID, trxName, definite, po) String$
        +getDocumentNoFromSeq(seq, trxName, po) String$
        +checkClientSequences(ctx, AD_Client_ID, trxName) boolean$
        +createTableSequence(ctx, TableName, trxName) boolean$
        +get(ctx, tableName) MSequence$
        +getNextID() int
        +validateTableIDValue() String
        #beforeSave(newRecord) boolean
    }
    class X_AD_Sequence {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MSequence --|> X_AD_Sequence
    X_AD_Sequence --|> PO
    MSequence --> X_AD_Sequence_No : YearMonth別の採番状態

+getNextID(AD_Client_ID, TableName) int$ +getDocumentNo(C_DocType_ID, trxName, definite, po) String$ +getDocumentNoFromSeq(seq, trxName, po) String$ +checkClientSequences(ctx, AD_Client_ID, trxName) boolean$ +createTableSequence(ctx, TableName, trxName) boolean$ +get(ctx, tableName) MSequence$ +getNextID() int +validateTableIDValue() String #beforeSave(newRecord) boolean <> <> > X_AD_Sequence X_AD_Sequence --

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

カラム名必須説明備考
AD_Sequence_IDIDPKシーケンスID主キー
NameStringY名称
IsAutoSequenceYesNoY自動採番
IsTableIDYesNoNレコードIDとして使用
IncrementNoIntegerY増加数デフォルト 1
CurrentNextIntegerY次の番号デフォルト 1000000
CurrentNextSysIntegerYシステム用次番号デフォルト 100
StartNoIntegerY開始番号デフォルト 1000000
Prefix / SuffixStringN接頭辞・接尾辞
DecimalPatternStringNJava DecimalFormat パターン
VFormatStringN値フォーマット固定文字+変数 / ~regex
IsOrgLevelSequenceYesNoY組織毎に採番デフォルト N
OrgColumnStringN組織カラム
StartNewYearYesNoN毎年リスタート
StartNewMonthYesNoY毎月リスタートデフォルト N
DateColumnStringN日付カラム
カラム名必須説明
AD_Sequence_IDTableDirectYシーケンスFK
SequenceKeyStringY採番スコープを決めるキー(YearMonth 等)
CurrentNextIntegerY当該キーの次の番号

MSequence.beforeSave() は 1 点のみ:「毎月リスタート(StartNewMonth)」がオンで「毎年リスタート(StartNewYear)」がオフの場合、StartNewMonth を強制的にオフへ戻します。月次リセットは年次リセットの下位オプションという設計です。

  1. getDocumentNo(C_DocType_ID, trxName, definite, po) が伝票タイプの DocNoSequence_ID(definite=true の場合は DefiniteSequence_ID)を解決
  2. getDocumentNoFromSeq() が対象シーケンス行を FOR UPDATE 相当でロックし CurrentNext を取得・加算
  3. 年次/月次リスタート有効時は DateColumn の値から SequenceKey を求め、AD_Sequence_No の行を参照・更新
  4. 接頭辞 + (DecimalPattern 適用済み)番号 + 接尾辞 を連結して返却

getNextID() 系はレコードID(IsTableID=Y)の採番に使われ、checkClientSequences() はクライアント作成時のシーケンス一式の検証・補完に使われます。

  • Model Validator: AD_Sequence 自体へのバリデーション追加は可能ですが、採番ロジック本体(getDocumentNoFromSeq)は静的メソッドのため、番号体系のカスタマイズは原則「接頭辞・接尾辞・DecimalPattern・リスタート設定」の組み合わせで実現します
  • 伝票タイプ経由の差し替え: 伝票タイプごとに別シーケンスを割り当てることで、部門別・伝票種別の番号体系を無改造で構成できます
  • このテーブルにはカラム callout の定義はありません(gw_column.tsv 確認済み)

伝票番号体系は標準機能(接頭辞・リスタート・DecimalPattern)で多くの要件に対応できますが、特殊な採番ルールが必要な場合も OSGi プラグインでコア改変なしに拡張可能です。

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

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