Power Apps / Dataverse の自動採番(オートナンバー)で連番を振ると詰まる5つの限界 — 年度でリセットできない・日付がUTCになる
- DATE
- 2026-04-04
- REVISION
- A
- AUTHOR
- スルガクラフト合同会社
- SHEET
- 01 / 01
Dataverseには「オートナンバー列」という機能があります。テーブルの列定義で書式を指定すれば、レコード作成時に自動で連番を振ってくれます。プロトタイプで試すと「おっ、これでいいじゃん」と思うものです。私たちもそう思いました。
本番で痛い目を見るまでは。
この記事では、実際の業務システムでオートナンバーを使って踏んだ地雷を共有します。同じ穴に落ちる人が一人でも減ればと思い、共有します。
一番やばい問題: 日付プレフィックスがUTCになる(朝9時まで前日の日付)
オートナンバーには日付をプレフィックスに含める書式があります。
{DATETIMEUTC:yyyyMMdd}-{SEQNUM:4}
名前をよく見てください。DATETIMEUTC。そう、UTCです。ローカルタイムではありません。
これが何を意味するか。日本時間(JST = UTC+9)で2026年4月1日の朝8時59分にレコードを作成すると、UTCではまだ3月31日23時59分です。つまり生成される番号はこうなります。
20260331-0001
2026年度の最初の伝票番号が「20260331」始まりになります。
年度の切り替わり。月次の締め。日次の集計。全部ズレます。毎朝9時まで「昨日の日付」が採番される世界です。
経理から「この伝票、日付が昨日になってるんですけど」と問い合わせが来ます。そして説明します。「Dataverseの仕様でUTCなんです」。納得してもらえるわけがありません。
しかもこれ、設定で変更する方法がありません。{DATETIMELOCAL:yyyyMMdd} のような書式は存在しません。UTCで固定です。日本企業にとっては致命的です。
限界2: 年度・月で連番をリセットできない
日本企業の伝票番号は、年度が変わったら連番をリセットするのが常識です。
2025年度: INV-2025-0001, INV-2025-0002, ..., INV-2025-1234
2026年度: INV-2026-0001 ← ここで0001に戻したい
オートナンバーのシード値(SEQNUM)は単調増加しかできません。年度が変わっても番号は増え続けます。リセットするにはPower Automate等で裏からシード値を書き換えるハックが必要ですが、公式にサポートされた方法ではありません。
月次リセット(毎月0001に戻す)も同様に不可です。
限界3: 欠番管理ができない
レコードを削除しても番号は戻りません。これ自体は採番の原則として正しい動作です。問題はその先にあります。
「欠番の一覧を出してください」
監査や内部統制でこう言われたとき、オートナンバーには欠番を追跡する仕組みがありません。どの番号が使われてどの番号が欠番かは、自分でクエリを書いて突合するしかありません。欠番を再利用する要件にも当然対応できません。
限界4: 動的プレフィックスが付けられない
「営業部の伝票は SALES-2026-0001、経理は ACCT-2026-0001」
こういう部門別プレフィックスの要件は多いです。しかしオートナンバーのプレフィックス({RANDSTRING} や固定文字列部分)は列定義で固定されます。レコードの属性値に応じて動的に切り替えることはできません。
結局、Business Ruleやプラグインで別途採番ロジックを書くことになります。オートナンバーの意味とは。
限界5: 枝番が振れない
INV-2026-0001-01 ← 親伝票の1番目の明細
INV-2026-0001-02 ← 親伝票の2番目の明細
こうした枝番構造は、見積明細・請求明細・出荷明細など至るところで必要になります。親レコードの番号を引き継いで、子レコードに連番の枝番を振りたい。
オートナンバーはテーブル単位の単純連番なので、「親レコードごとの枝番カウンタ」という概念自体が存在しません。
私たちはどうしたか
上記の問題を全部踏んだ結果、Dataverseのプラグインとして動く採番エンジンを自作しました。オートナンバーの代わりにこのエンジンが採番を担当します。
利用者側の操作は何も変わりません。レコードを作成すると、自動的に正しい番号が振られます。管理画面で採番ルールを設定するだけです。
オートナンバーとの違い:
| 項目 | オートナンバー | 採番エンジン |
|---|---|---|
| 日付プレフィックス | UTCで固定 | 組織のタイムゾーン設定に連動 |
| 年度リセット | 不可 | 年度・月次・日次から選択可能 |
| 年度開始月 | — | 任意の月を設定可能(デフォルト4月) |
| 欠番追跡 | 不可 | 採番履歴から突合可能 |
| 部門別プレフィックス | 固定値のみ | レコードの属性値に応じて動的に切替 |
| 枝番 | 不可 | 親番号ごとの枝番を自動採番 |
| 同時作成時の重複 | — | 排他制御で番号重複を防止 |
導入はDataverseにソリューションをインポートするだけです。既存のテーブルやアプリへの影響はありません。
まとめ
Dataverseのオートナンバーは、社内ツールやプロトタイプには十分使えます。ID的な一意キーが欲しいだけなら問題ありません。
ただし、本番の業務システムで伝票番号として使うなら要注意です。UTCの日付ズレ、年度リセット不可、欠番管理なし、動的プレフィックス不可、枝番不可。日本企業の業務要件とのギャップは大きいです。
私たちはプラグインによる採番エンジンで解決しましたが、Power Automateのフローで簡易的に対処する方法もあります。いずれにせよ「オートナンバーで全部いける」と思い込まないことが大事です。
採番の設計でお困りのことがあれば、お気軽にご相談ください。同じ地雷を踏んだ者同士、きっと話が早いはずです。