SAP tableObjectVBAKModuleSD_O2C

VBAK table — VBAK Sales Document Header Table

VBAK stores one row per sales document header (order, quotation, contract, scheduling agreement) keyed by VBELN. It holds organizational data (sales org, channel, division), document type, currency, net value, and the pricing document number. It does not store the customer directly; sold-to and ship-to come from VBPA. Item detail lives in VBAP, status in VBUK.

This page covers what a VBAK row represents, the fields worth querying directly, and the joins needed to reach items, partners, pricing and document flow. The pitfalls section focuses on the wrong conclusions people draw from NETWR, missing customer fields, and stale header values after repricing or rejection.

Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,126 words

What it stores

One row in VBAK represents the header of a single sales document: a standard order, inquiry, quotation, contract, or scheduling agreement, identified by VBELN. The header carries data that applies to the whole document rather than to any one line: creation stamp, sales area (sales organization, distribution channel, division), sales office and group, document currency, net value at header level, and the number of the pricing document used to determine conditions. VBAK does not contain the customer number, the material, or quantities; those live in the partner, item, and business-data tables that hang off the same VBELN. A row in VBAK persists even after the order is fully delivered, invoiced, or rejected — deletion is rare, status is tracked elsewhere, not by removing the row.

Key fields

  • MANDT - client
  • VBELN - sales document number, primary key, the join field into VBAP, VBKD, VBUK, VBFA and VBPA
  • ERDAT - creation date of the document
  • ERNAM - user who created the document
  • AUART - sales document type, drives item category and pricing procedure determination in customizing
  • VKORG - sales organization
  • VTWEG - distribution channel
  • SPART - division
  • VKBUR - sales office
  • VKGRP - sales group
  • NETWR - net value of the document header in document currency
  • WAERK - document currency
  • KNUMV - number of the pricing document, the join key into KONV for condition records
  • VGBEL - preceding sales document number where the order was created with reference
  • BSTNK - customer purchase order number
  • AUDAT - document date entered on creation
  • VDATU - requested delivery date
  • LIFSK - delivery block set at header level
  • FAKSK - billing block set at header level
  • CMGST - overall credit status of the document

How it joins the data model

  • VBAK-VBELN = VBAP-VBELN, header to item detail, material, quantity, item value
  • VBAK-VBELN = VBKD-VBELN, header business data such as payment terms and incoterms where VBKD-POSNR is blank
  • VBAK-VBELN = VBUK-VBELN, overall header status flags for delivery, billing, credit and rejection
  • VBAK-VBELN = VBPA-VBELN, partner functions at header level, sold-to and ship-to among them
  • VBAK-VBELN = VBFA-VBELV, preceding document lookup in the document flow, used to trace a quotation or contract behind an order
  • VBAK-KNUMV = KONV-KNUMV, the pricing conditions applied to the document header
  • VBAK-AUART = TVAK-AUART, sales document type customizing that governs the header's behaviour

How to read it safely

Always restrict on MANDT first in any direct table access; forgetting it is the most common way to return rows from the wrong client in a shared development system. VBELN is the most selective field available and should anchor any single-document lookup. For date-range extracts, ERDAT is a reasonable second filter but has low selectivity on its own in a system with years of history, so pair it with VKORG or AUART. Never query VBAK without at least one of VBELN, a date range, or a sales-area combination; a bare select on AUART alone on a mature production system returns an unmanageable result set because order types have very low cardinality relative to row count.

How to prove it in the data

Symptom: an order appears stuck with no delivery created. Select VBAK where VBELN equals the document number and check LIFSK for a header delivery block; a populated value confirms the block exists before looking anywhere else. Next check VBUK for the same VBELN and read the delivery status field to confirm nothing has been created downstream, then check VBFA with VBELV equal to the same VBELN to confirm no successor delivery document exists in the flow at all.

ECC vs S/4HANA

VBAK is retained as a transparent table in S/4HANA with its structure largely unchanged; it remains the primary persistence for sales document headers rather than being replaced by a compatibility view. Analytical and Fiori access typically goes through CDS views built on top of VBAK rather than reading it directly, but the table itself is still the object that VA01/VA02 write to. A small number of fields have been added over time to support newer functionality, but the core key fields behave the same as on ECC.

Common pitfalls

  • Treating VBAK-NETWR as the current, authoritative order value. It reflects the value at the last pricing update; an order that has not been re-priced after a condition change shows a stale figure.
  • Searching VBAK for a customer number and finding nothing. The sold-to party is not a VBAK field; it sits in VBPA against the same VBELN with partner function AG, and this is the single most common wrong assumption new consultants make against this table.
  • Assuming a rejected or fully cancelled order disappears from VBAK. The header row remains; rejection and cancellation are recorded in VBUK and at item level in VBAP's reason-for-rejection field, not by deleting the row.
  • Comparing VBAK-NETWR directly to an invoice gross amount and calling it a discrepancy. NETWR is net of tax and, depending on configuration, net of certain header conditions; the comparable figure sits in VBRK/VBRP, not here.
  • Assuming one VBAK row corresponds to one delivery or one invoice. A single order can spawn multiple deliveries and multiple invoices; reconciling revenue from VBAK alone ignores partial fulfilment entirely.
  • Reading CMGST as proof that every item is credit-blocked. It is a header-level rollup; individual items can carry their own credit status that CMGST does not expose.
  • Forgetting that VBELN is stored with leading zeros as a ten-character field. Joins against external system order numbers fail silently when the conversion exit is skipped in a custom query or extract.

Whose problem this is

Questions about what a VBAK row should contain, why a header field carries a given value, or why pricing has not re-triggered belong to the SD order-management functional consultant. Structural changes to the table, custom append fields, or extraction logic for reporting belong to the ABAP or data team, but the business meaning is validated by SD, not by basis.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-tables/vbakERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.