SAP SD — Sales & Distribution Complete Guide
In this tutorial, you'll learn about SAP SD. We cover key concepts, practical examples, and best practices.
SAP SD (Sales and Distribution) manages sales in SAP S/4HANA — pricing, orders, deliveries, and billing across the complete quote-to-cash lifecycle.
What You'll Learn
SAP SD controls the entire sales process — from customer inquiry to order entry, delivery, billing, and payment collection — all connected to inventory and finance.
Why It Matters
Every revenue dollar flows through SD. If the sales order has wrong prices, shipping dates, or billing terms, the company loses money, customers get angry, and financial statements become unreliable.
Doda Browser uses SD-inspired pricing engines for its ad and subscription tiers — a customer's profile, usage history, and discounts are combined into a final price just like SAP SD condition types.
Real-World Use
A distributor sells 1000 laptops to a retailer. The salesperson enters one sales order. SD automatically checks the customer's credit limit ($500,000 — approved), checks stock availability (850 in warehouse, 150 on order), calculates pricing ($1000 each minus 10% volume discount plus freight), and schedules delivery. From one transaction, the warehouse gets a pick list, the customer gets an invoice, and finance records $900,000 in revenue.
Learning Path
flowchart LR A[SAP Overview] --> B[SAP Modules] B --> C[SAP MM] C --> D[SAP SD
You are here] D --> E[SAP HR/HCM]
What Is SAP SD?
SAP SD manages the sell side of the business. Think of it as the company's ordering system — everything from "Can I buy this?" to "Here's your invoice, please pay."
The full SD process is called O2C (Order-to-Cash):
flowchart LR A[Inquiry] --> B[Quotation] B --> C[Sales Order] C --> D[Delivery] D --> E[Goods Issue] E --> F[Billing] F --> G[Payment]
Core Components
| Component | Purpose | Key TCode |
|---|---|---|
| Customer Master | Customer name, address, payment terms, pricing | BP, XD01, XD02 |
| Sales Order Processing | Order entry, availability check, delivery scheduling | VA01, VA02, VA03 |
| Pricing | Price calculation with discounts, surcharges, taxes | VOV8, VK11 |
| Delivery | Picking, packing, shipping, goods issue | VL01N, VL02N |
| Billing | Invoice, credit memo, debit memo | VF01, VF02 |
| Credit Management | Credit limit check and monitoring | F.31, OVA8 |
Master Data in SD
SD uses three levels of master data:
Customer Master
| Level | What It Stores | Example |
|---|---|---|
| General | Name, address, tax ID, bank | Same across all company codes |
| Company Code | Payment terms, reconciliation account | Different for each legal entity |
| Sales Area | Pricing, shipping, sales group | Different for each sales channel |
Material Master (Sales View)
The sales view of a material defines:
- Base unit of measure (each, box, kg)
- Minimum order quantity
- Loading group
- Item category group (standard, configurable, service)
Condition Master (Pricing)
Pricing conditions store the actual prices, discounts, and surcharges:
* ABAP: Read pricing condition from table KONP
DATA: lt_konp TYPE TABLE OF konp.
SELECT * FROM konp
WHERE knumh IN ( SELECT knumh FROM konh
WHERE kappl = 'V'
AND kschl = 'PR00'
AND datbi >= sy-datum )
INTO TABLE lt_konp
UP TO 10 ROWS.
LOOP AT lt_konp ASSIGNING FIELD-SYMBOL(<ls_konp>).
WRITE: / 'Condition record:', <ls_konp>-knumh,
/ 'Amount:', <ls_konp>-kbetr.
ENDLOOP.
* Output:
* Condition record: 0000001234
* Amount: 100.00
Sales Order Processing (VA01)
Creating a sales order is the central event in SD. Here is what happens when you enter VA01:
Step-by-Step Flow
- Enter customer, material, quantity, date
- System performs:
- Credit check: Is the customer under their limit?
- ATP check: Available-to-promise — is stock available?
- Pricing: Calculate net price from condition table
- Tax determination: Apply correct tax rate
- Delivery scheduling: Calculate route and delivery date
- Order saved with unique document number
* ABAP: Create sales order using BAPI
DATA: ls_header TYPE bapisdh1,
lt_items TYPE TABLE OF bapisditm,
lt_partners TYPE TABLE OF bapiparnr,
lt_return TYPE TABLE OF bapiret2.
ls_header-doc_type = 'OR'.
ls_header-sales_org = '1000'.
ls_header-distr_chan = '10'.
ls_header-division = '00'.
lt_items = VALUE #( ( material = 'BATTERY-100'
target_qty = 500
plant = 'PL01'
partwmn = 1
partn_numb = 'CUSTOMER-001' ) ).
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in = ls_header
TABLES
order_items_in = lt_items
order_partners = lt_partners
return = lt_return.
* Output: Sales order 1000001234 created
Pricing in SD
SD pricing is the most powerful and complex pricing engine in any ERP system. It uses condition technique:
| Condition Type | Description | Example Value |
|---|---|---|
| PR00 | Base price | $100.00 |
| K004 | Material discount | -$5.00 |
| K005 | Customer discount | -$10.00 |
| KF00 | Customer group discount | -$3.00 |
| VPRS | Cost | $60.00 |
| FK01 | Freight | $8.00 |
| MWST | Tax | $7.50 |
| NET VALUE | Final net price | $97.50 |
How Pricing Is Calculated
SAP reads condition records in a pricing procedure (maintained in VOV8). Each condition type has:
- Step number: Calculation sequence
- Condition type: What to calculate
- From / To step: Basis for calculation (e.g., tax calculated on subtotal)
- Manual flag: Can the user override the price?
* ABAP: Display sales order pricing
DATA: lt_komv TYPE TABLE OF komv.
SELECT * FROM komv
WHERE knumv = '00001001234'
INTO TABLE lt_komv.
LOOP AT lt_komv ASSIGNING FIELD-SYMBOL(<ls_komv>).
WRITE: / <ls_komv>-kschl,
<ls_komv>-kbetr CURRENCY 'USD',
<ls_komv>-krate.
ENDLOOP.
* Output:
* PR00 100.00 100.00
* K004 -5.00 -5.00
* MWST 7.50 7.50
Delivery and Goods Issue
Outbound Delivery (VL01N)
The delivery document:
- References the sales order
- Specifies picking location and quantity
- Determines shipping point and route
- Manages handling units (pallets, boxes)
Picking and Goods Issue
MM integration triggers during delivery:
- Warehouse picks the items (can use barcode scanning via SAP WM or EWM)
- Goods issue is posted (movement type 601)
- MM: Inventory decreases by the picked quantity
- FI: Cost of goods sold is recorded
Billing (VF01)
Billing creates the invoice for the customer. Billing types include:
| Document Type | Use |
|---|---|
| F2 | Standard invoice |
| G2 | Credit memo |
| L2 | Debit memo |
| S1 | Proforma invoice (not legally binding) |
Each billing document posts to FI automatically:
- Debit: Customer account (Accounts Receivable)
- Credit: Revenue account (P&L)
Credit Management
SAP SD credit management prevents sales to risky customers:
| Strategy | How It Works |
|---|---|
| Static credit limit | Fixed limit; order blocked if exceeded |
| Dynamic credit limit | Limit = (static limit + open orders + AR balance) |
| Credit horizon | Check only orders within a rolling window |
A blocked order sits until the credit controller reviews and releases it (transaction code VKM1).
Security Angle
SD pricing manipulation is a real attack vector. A malicious user with condition table access could change prices to zero or apply unauthorized discounts. SAP controls this via:
- Authorization object V_VKOND: Controls who can create/change condition records
- Pricing audit log: Available in SAP S/4HANA to track condition changes
- Document flow: Every SD document links back to its source — you can trace a billing document to its sales order and delivery
Durga Antivirus Pro uses SD-style document flow for licensing — each license key is traceable from order through delivery to activation, preventing ghost licenses.
Common Errors
1. Incomplete Log
The sales order has a red "incomplete" status. Missing data: customer PO number, incoterms, or payment terms. Use transaction code V.02 to process the incomplete log.
2. Pricing Procedure Returns Zero Price
The condition record PR00 is missing or expired. Check VK11 for the material/customer combination and verify validity dates.
3. ATP Check Fails — No Stock Available
Material is out of stock and no re-supply is scheduled. Options: schedule a later delivery, do a partial delivery, or transfer stock from another plant.
4. Credit Limit Exceeded
The customer's open orders + AR balance exceed their credit limit. The order is blocked in VA01. Use VKM1 to review and release.
5. Delivery Cannot Be Created
The sales order has no schedule line or the delivery plant is missing. Check the item details in VA02 — ensure the schedule line tab has quantity and date.
6. Billing Due List Doesn't Pick Up the Billing Document
The billing block on the sales order or delivery hasn't been removed. Check item details and delivery for billing blocks.
Practice Questions
What does O2C stand for? Order-to-Cash — the end-to-end sales process from inquiry to payment.
What transaction code creates a sales order? VA01. Enter customer, material, quantity, and schedule date.
What is a condition type in SD pricing? A pricing element like base price (PR00), discount (K004), or tax (MWST). Condition types are combined in a pricing procedure.
How does SD check inventory availability? Through the ATP check (Available-to-Promise), which reads current stock, scheduled receipts, and planned issues.
What happens when a billing document is posted? FI receives a document debiting the customer account (AR) and crediting the revenue account. CO receives profitability data.
Challenge: A sales order has price $500 with a 15% customer discount and 8% tax. The system returns $459 net (not $459.50). Find the rounding rule in the pricing procedure and explain the difference.
Real-World Task: You are the SD consultant for a furniture company. Create a sales order for 50 chairs to customer "FURN-RETAIL-01" at $120 each. Apply a 5% new customer discount. Create the delivery and post goods issue. Create the billing document.
What's Next
| Tutorial | What You'll Learn |
|---|---|
| SAP Overview — Complete Guide | Foundational SAP ERP concepts |
| SAP MM — Materials Management Guide | How MM provides inventory data for SD sales orders |
| SAP ABAP Programming | Write ABAP programs to automate SD processes |
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. Updated 2026-06-21.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro