The Business Problem
Imagine your company sells an on-site installation service for 36,000 CNY. As part of the deal, you also send a technician to unbox and inspect the equipment beforehand — at no charge to the customer. It's part of the package.
From a sales perspective this is simple: one order, two line items, one invoice. The customer sees a clean quote with the installation fee and a zero-value unboxing line. Nothing surprising.
From a finance perspective, though, there's a real question: the unboxing work still costs money. If that cost disappears into a black hole — not recorded anywhere in your management accounting — your profitability reports will be overstated. You need the cost to hit COPA even though the customer pays nothing.
From an SAP configuration perspective, getting this right requires choosing the correct item category for the free-of-charge line — and in S/4HANA Cloud, the default options are not all what they seem.
This post walks through exactly what we set up, what we tried that didn't work, and why, ending with a complete end-to-end flow from sales order to posted invoice.
The Setup at a Glance
| Detail | |
| System | SAP S/4HANA Cloud, SalesOrg 1320, DC 20 |
| Order type | OR (Standard Order) |
| Item category group | SERV (service materials, no physical delivery) |
| Billing approach | Order-related (FKREL=B) — invoice directly from SO, no delivery |
The two items:
Item Material Description Charge
| 10 | LQ_SRV-INSTALL | On-site Installation | 36,000.00 CNY |
| 20 | LQ_SRV-UNBOX | Unboxing & Inspection | 0.00 CNY (free) |
Part 1: Configuration — For the Consultant
1.1 Assign Item Category Determination
SAP derives the item category for each sales order line from three inputs: order type + item category group + usage. This is maintained in SSCUI 102807 (Assign Item Categories).
For order type OR and item category group SERV, the system's determination table looks like this:
Role Item Category Description Pricing COPA Cost
| Default | TAD | Standard paid service | Y13101 runs | VPRS determined |
| Manual alt | TADN | Service FoC | Y13101 runs | VPRS determined ✓ |
| Manual alt | CTAD | Complementary service | Y13101 runs | VPRS determined |
| Manual alt | TADL | Service NoP FoC | Suppressed | Not determined |
Details
Screenshot 01 — VOV4 Details (activity 102807): OR + SERV. Item Category (default) = TAD; Manual ItemCat. 1 = TADN, 2 = CTAD, 3 = TADL.
1.2 Why CTAD Is Wrong for Free-of-Charge
CTAD looks like a natural choice — “C” stands for complementary. In practice, its incompletion procedure requires net value > 0. When you assign CTAD to a line with a 0.00 price, the incompletion log fires two entries:
- Net Value — the check expects a value above zero
- Pricing — flagged incomplete because net value is zero
A PPR0 condition record at 0.00 satisfies the pricing run but does not satisfy this incompletion check. The order cannot be saved cleanly.
1.3 Why TANN Is Not Available
TANN would be ideal: it runs the pricing procedure (so VPRS is determined and cost flows to COPA) and sets net value = 0 for the customer. When we tried to assign TANN in VA02, SAP returned:
“Item category TANN is not defined for item 000020”
The wording matters. “Is not defined” means TANN does not exist at all in this Cloud tenant — it is not just missing from the determination table. Adding it would require creating the item category from scratch, which is complex customizing not available to most Cloud customers without SAP involvement.
1.4 TADL vs TADN — Choosing the Right FoC Category
This is the real decision point:
TADL TADN + PPR0
| Pricing procedure | Suppressed (PRSFD=blank) | Runs (Y13101) |
| VPRS cost condition | Not determined | Determined |
| Cost flows to COPA | No | No |
| Net value result | 0 automatically | 0 via PPR0 at 0.00 |
| PPR0 condition record | Not required | Required per material |
| Incompletion log | Clean | Clean when PPR0 exists |
| When to use | Quick FoC, COPA irrelevant | does not, by itself, give cost visibility in COPA |
Decision: TADN + PPR0 at 0.00.
Pricing runs → VPRS is determined → cost posts to COPA correctly. Net value is zero for the customer. The only overhead is maintaining one PPR0 record per free-of-charge material.
TADN FoC does not, by itself, give cost visibility in COPA.
Why: In the standard FoC setup you described, the internal cost condition (e.g., PCIP=99) is marked Statistical. Statistical conditions do not create FI/CO postings, so no ACDOCA/COPA line items are generated. Hence, you only see zero revenue; no cost flows to COPA.
To enable “FoC but cost in COPA,” you need one of these changes:
- Make the internal cost condition non-statistical and account-determined (CBC), posting to an expense G/L → COPA.
- Or collect costs on a CO object (Service Order/Internal Order/WBS) and settle to COPA.
- Or record activities to cost centers and derive to COPA.
1.5 Creating the PPR0 Condition Record
TADN requires a PPR0 (list price override) condition record in pricing table 304 (Material / SalesOrg / Distribution Channel) with a rate of 0.00. Without it, the order's incompletion log shows Net Value and Pricing as missing — the same symptoms as CTAD.
We created the record via the OData API API_SLSPRICINGCONDITIONRECORD_SRV:
ConditionType: PPR0 ConditionTable: 304 Material: LQ_SRV-UNBOX SalesOrganization: 1320 DistributionChan.: 20 Rate: 0.00 CNY / H Valid: 2026-05-14 → 9999-12-31 → Record number: 0000009310
After creation, repricing must be triggered in the sales order: Item Detail → Conditions tab → Update → Type B (new pricing). SAP will confirm: “New pricing performed for item 000020”.
Part 2: Creating the Sales Order (VA01)
With configuration in place, creating the order is straightforward.
Header Data
Navigate to VA01, order type OR, sales area 1320 / 20 / 00.
Field Value
| Sold-to Party | 1000260 (TD_LQ_CM03) |
| Customer Reference | TEST-REF-001 |
| Incoterms | EXW / SHANGHAI |
| Payment Terms | 0001 |
| Requested Delivery Date | 05/14/2026 |
Details
Screenshot 04 — VA01 header: sold-to party, incoterms, payment terms all completed.
Item 10 — Chargeable Installation
Field Value
| Material | LQ_SRV-INSTALL |
| Order Quantity | 1 H |
| Item Category | TAD (derived automatically from SERV group) |
| Plant | 1320 |
| Net Value | 36,000.00 CNY |
TAD picks up the standard pricing condition and nets at 36,000 CNY. No manual intervention needed.
Details
Screenshot 05 — Item 10: TAD assigned automatically, 36,000 CNY net value.
Item 20 — Free-of-Charge Unboxing
Field Value
| Material | LQ_SRV-UNBOX |
| Order Quantity | 1 H |
| Item Category | TADN (manually overridden from TAD) |
| Plant | 1320 |
| Net Value | 0.00 CNY |
Enter TADN in the ItCa field and press Enter. SAP triggers a server round-trip, finds PPR0 record 0000009310, and runs pricing — net value drops to 0.00. The status bar confirms: “New pricing performed for item 000020”.
Details
Screenshot 06 — Item 20: TADN manually assigned, PPR0 found automatically, net value = 0.00 CNY.
Sales Order Overview — Final State
Details
Screenshot 08 — SO 575 final overview: item 10 (TAD, 36,000 CNY) + item 20 (TADN, 0.00 CNY). Total: 36,000.00 CNY.
Part 3: Billing (VF01)
Because both items use FKREL=B (order-related billing), there is no delivery to create and no service confirmation to process. Go directly to VF01.
- Open VF01
- Enter SO 575 in the “Documents to Be Processed” grid
- Press Enter — SAP proposes billing type F2 (Invoice) and loads both items
- Verify net value: 36,000.00 CNY (item 10 contributes 36,000; item 20 contributes 0.00)
- Save
Result: Invoice 90000455 saved successfully.
Details
Screenshot 09 — VF01: SO 575 entered, F2 Invoice proposed, net value 36,000.00 CNY.
Details
Screenshot 10 — VF01 save confirmation: “Document 90000455 has been saved.”
Part 4: Document Flow and FI Posting
Open SO 575 in VA03 and click Display Document Flow to see the complete chain.
Details
Screenshot 11 — Document flow: SO 575 → Invoice 90000455 (Completed) → Journal Entry 9400000001 (Not Cleared).
Standard Order 0000000575 / 10 36,000.00 CNY 05/14/2026 Completed
Invoice 0090000455 / 10 36,000.00 CNY 05/15/2026 Completed
Journal Entry 9400000001 05/15/2026 Not Cleared
What “Not Cleared” means: The FI journal entry has been posted — the AR (Accounts Receivable) open item is on the customer account. “Not Cleared” simply means the incoming payment has not yet been matched. The billing chain is complete; clearing happens when the bank payment arrives.
Summary
What started as a simple question — why does the incompletion log still complain about pricing when I've already set the price to zero? — turned into a full exploration of service item categories in S/4HANA Cloud.
The end-to-end path, once correctly configured:
VA01 (Create SO)
→ Item 10: TAD, 36,000 CNY (auto-derived)
→ Item 20: TADN + PPR0, 0.00 CNY (manual override)
↓
VF01 (Create Billing — no delivery, no confirmation)
→ F2 Invoice 90000455, 36,000 CNY
↓
FI Journal Entry 9400000001 (AR open item posted)
Key Takeaways
- CTAD is not a true free-of-charge category — its incompletion procedure requires
net value > 0. A PPR0 record at 0.00 won't fix this. - TANN does not exist in this S/4HANA Cloud tenant's VOV7. The error “is not defined” (not “not permitted for OR”) means the item category is completely absent.
- TADN + PPR0 at 0.00 is the correct pattern: pricing runs → VPRS determined → cost flows to COPA. Net value = 0 for the customer.
- TADL is a valid alternative only when COPA cost recording is not required — simpler, no PPR0 needed, but VPRS is never determined.
- VOV4 changes in S/4HANA Cloud must go through CBC (Central Business Configuration), not directly via IMG in the tenant.
- FKREL=B on service item categories means the entire fulfillment chain collapses to: Create SO → Create Invoice. No delivery, no service confirmation.
The features covered in this article are based on SAP S/4HANA Cloud, Public Edition 2602, please refer to the latest information for changes in subsequent versions.
Hope you LIKE it if it addresses your issue. After that, please feel free to comment after following my account and I will reply ASAP.



