SAPを初めて触ったとき、一番混乱したのが「データが上書きされない」という点でした。
本記事では、SAPの伝票管理を支えるテーブル VBFA(伝票フロー) の仕組みを、一般的なデータベースの更新モデルと比較しながら解説します。
一般的なシステム:最新値を上書きする
一般的なシステムでは、データテーブルに対して “最新値” を保存・上書きします。
受注テーブル
+---------+---------+----------+
| 伝票番号 | 状態 | 金額 |
+---------+---------+----------+
| 1001 | 受付中 | 100,000 |
+---------+---------+----------+
基本的な更新方法は下記のようなものです。
UPDATE orders
SET 状態 = '出荷済み'
WHERE 伝票番号 = '1001';
テーブル上のレコードは1件で、常に最新状態を保持します。
シンプルで分かりやすいですが、過去の状態を知りたい場合は別途ログテーブルを設ける必要があります。
SAPの方式:「変更=新しい伝票の生成」
SAPでは「変更=新しい伝票の生成」です。
VBELN(販売伝票)
+---------+----------+----------+
| 伝票番号 | 状態 | 元伝票番号 |
+---------+----------+----------+
| 1001 | 受付中 | (なし) |
| 2001 | 出荷済み | 1001 |
+---------+----------+----------+
修正や進捗は新しい伝票(Document)として登録され、
伝票フロー(VBFA) で前後関係を管理します。
「1001 → 2001 → 3001…」という履歴の連鎖で、
受注から出荷・請求・会計までの全プロセスを追跡できます。
VBFAとは(概要)
■ 定義
VBFA は「Sales and Distribution: Document Flow(販売伝票フロー)」を格納するテーブルです。
SAPでは伝票間の前後関係を 履歴リンクとして保持 しており、単なる「伝票間のリンク表」ではなく、
SAP全体のデータモデルの中で 時間の概念を担う唯一のテーブル です。
目的:
- 「どの伝票からどの伝票が派生したか」を管理する
- 「受注 → 出荷 → 請求 → 会計伝票」の追跡を可能にする
- システム上の トレーサビリティ(履歴追跡) を実現する
VBFAテーブル構造
| 項目名 | 意味 | 補足 |
|---|---|---|
| VBELV | 前伝票番号 (Preceding Document) | “From” 側の伝票番号 |
| POSNV | 前伝票明細番号 | 明細単位の紐付けを持つ |
| VBELN | 後伝票番号 (Subsequent Document) | “To” 側の伝票番号 |
| POSNN | 後伝票明細番号 | 明細レベルでのリンク |
| VBTYP_V | 前伝票のタイプ | 例:C=受注、J=出荷、M=請求など |
| VBTYP_N | 後伝票のタイプ | 同上。前後関係を判断するのに使う |
| RFMNG | 残数量 | 前伝票のうち未処理分の数量 |
| RFWRT | 残金額 | 未処理金額を保持 |
| ERDAT / ERNAM | 登録日 / 登録者 | 履歴管理用 |
典型的な伝票連鎖の例
VBFAをたどることで 業務プロセスの履歴 が可視化されます。
| 前伝票 | 後伝票 | 関係例 | 備考 |
|---|---|---|---|
| 受注伝票(SO) | 出荷伝票(Delivery) | 受注明細から出荷伝票を作成 | VBAK → LIKP |
| 出荷伝票(Delivery) | 請求伝票(Billing) | 出荷分を請求化 | LIKP → VBRK |
| 請求伝票(Billing) | 会計伝票(Accounting) | 請求が自動仕訳として転記 | VBRK → BKPF |
| 見積伝票 | 受注伝票 | 商談→受注への派生 | VBTYP_V='A', VBTYP_N='C' |
VBFA:イベント発生時の具体的な記録例
※以下は検証環境がないため、概念理解を目的とした例です。
実際のシステムではカスタマイズにより差異がある点にご注意ください。
見積 → 受注
営業担当が見積を登録し、それをもとに受注を作成した場合。
| イベント | 前伝票 | 後伝票 | VBFAに記録される |
|---|---|---|---|
| 見積登録 | VBELN=1000001 | (なし) | ― |
| 見積を元に受注作成 | VBELV=1000001 | VBELN=2000001 | VBFAに1行追加 |
VBTYP_V='A'(見積), VBTYP_N='C'(受注)
VBELV = 1000001 -- 前伝票=見積
VBELN = 2000001 -- 後伝票=受注
意味:「見積1000001から受注2000001が派生した」
受注 → 出荷(納品)
倉庫で出荷処理を実行した際。
| イベント | 前伝票 | 後伝票 | VBFA内容 |
|---|---|---|---|
| 出荷伝票作成 | VBELV=2000001(受注) | VBELN=3000001(出荷) | VBTYP_V='C', VBTYP_N='J' |
VBELV = 2000001
VBELN = 3000001
VBTYP_V = 'C' -- Sales Order
VBTYP_N = 'J' -- Delivery
RFMNG = 出荷数量
意味:「受注2000001から出荷3000001が生成された」
ポイント:
受注明細(VBAP)と出荷明細(LIPS)間で、POSNR(明細番号)レベルの対応も保持される。
出荷 → 請求
出荷伝票を請求伝票として転記する(Billing)。
| イベント | 前伝票 | 後伝票 | VBFA内容 |
|---|---|---|---|
| 請求伝票作成 | VBELV=3000001(出荷) | VBELN=4000001(請求) | VBTYP_V='J', VBTYP_N='M' |
VBELV = 3000001
VBELN = 4000001
VBTYP_V = 'J' -- Delivery
VBTYP_N = 'M' -- Billing
RFWRT = 請求金額
意味:「出荷3000001から請求4000001が派生した」
請求 → 会計伝票
請求伝票を会計に転記したタイミング。
(この段階では、伝票連携は SD → FI 領域に移行)
| イベント | 前伝票 | 後伝票 | 備考 |
|---|---|---|---|
| 会計伝票作成 | VBRK.VBELN=4000001 | BKPF.BELNR=5000001 | FI転記で自動仕訳生成 |
VBFAは “販売系伝票” の履歴のみを保持するため、FI転記は BKPF / BSEG に格納されます。
ただし、VBRK(請求ヘッダ)からBKPF(会計伝票)へのリンクは内部的に保持されています。
出荷取消(Reverse Delivery)
出荷後にミスが見つかり、出荷伝票を取り消した場合。
| イベント | 前伝票 | 後伝票 | VBFA内容 |
|---|---|---|---|
| 出荷取消実施 | VBELV=3000001(元出荷) | VBELN=3000002(取消伝票) | VBTYP_V='J', VBTYP_N='L' |
VBELV = 3000001
VBELN = 3000002
VBTYP_V = 'J' -- Delivery
VBTYP_N = 'L' -- Cancellation
意味:「出荷3000001を取消し、取消伝票3000002が作成された」
取消伝票は “逆方向の数量” として扱われ、残数量(RFMNG)が調整されます。
請求取消・クレジットメモ(返品)
請求伝票を訂正または返品処理した場合。
| イベント | 前伝票 | 後伝票 | VBFA内容 |
|---|---|---|---|
| 返品請求作成 | VBELV=4000001(請求) | VBELN=4000002(クレジットメモ) | VBTYP_V='M', VBTYP_N='N' |
VBELV = 4000001
VBELN = 4000002
VBTYP_V = 'M' -- Billing
VBTYP_N = 'N' -- Credit Memo
RFWRT = 返品金額(負の値)
意味:「請求4000001をもとに、返品(4000002)が発生」
販売 → 製造指図(Make-to-Order)
販売伝票から製造指図が直接発生する(受注生産)の場合。
このときも 販売伝票(KDAUF)と製造指図(AUFNR) の間に VBFA レコードが生成されます。
| イベント | 前伝票 | 後伝票 | VBFA内容 |
|---|---|---|---|
| 製造指図作成 | VBELV=2000001(受注) | VBELN=AUFNR=6000001(製造指図) | VBTYP_V='C', VBTYP_N='F' |
VBELV = 2000001
VBELN = 6000001
VBTYP_V = 'C' -- Sales Order
VBTYP_N = 'F' -- Production Order
意味:「受注2000001を起点に製造指図6000001を生成」
これにより、生産モジュール(PP)と販売モジュール(SD)が連結します。
プロジェクト(PS)連携:販売 → WBS要素
WBS要素が販売伝票に紐づいている場合(RE601経由)。
| イベント | 前伝票 | 後伝票 | 管理テーブル |
|---|---|---|---|
| プロジェクト受注登録 | VBELV=2000001(販売) | POSID=P-001(WBS) | RE601(KDAUF/KDPOS で紐付け) |
VBFAとRE601を組み合わせることで、
販売 → WBS → 原価 → 会計 の流れを追跡できます。
まとめ:
・SAPはデータを上書きせず、履歴として残す「イベントドリブン」型設計。
・VBFAを理解すると、SAPのモジュール連携(SD→MM→PP→FI)の流れを“時系列で読む力”がつく。
次回は、VBAK/VBAP(販売伝票)との関係 を整理します。