Configuration Guide

SAP SD Revenue Account Determination — VKOA & Account Keys

VKOA · access sequence KOFI · account keys · account assignment groups · Last updated September 2026

Revenue account determination is the last link in the Order-to-Cash chain — the point where a sales document finally becomes a number in the general ledger. It answers one question: which G/L account does this invoice line post to?

It is also where SD stops being an SD topic. Get it wrong and the invoice still saves — it simply never reaches accounting, and finance closes the month with revenue missing. This guide covers the condition technique behind VKOA, all five accesses, the account keys that connect pricing to FI, and the diagnostic order for a billing document that will not post.

01

What revenue account determination is

When a billing document is released to accounting, SAP creates an FI document. That document debits the customer’s receivables account and credits revenue — but “revenue” is not one account in most businesses. Product revenue, service revenue, export revenue, freight recovered, discounts given: each may need its own G/L account so that finance can report on them separately.

Revenue account determination is the configuration that makes that choice automatically, line by line, for every invoice. The G/L account does not come from the material master and it does not come from the customer master. It comes from a lookup table maintained in VKOA.

The one-line version: pricing decides what a line is worth; account determination decides where that value goes. The account key is the handshake between the two.

02

The condition technique behind it

Account determination uses exactly the same machinery as pricing and output: condition tables, an access sequence, condition types, a procedure, and condition records. If you can explain pricing, you already understand this — only the names change.

ProcedureKOFI00Assigned to the billing type in VOFA. If this is blank, nothing posts.
Condition typeKOFI / KOFKKOFI without CO account assignment; KOFK with it.
Access sequenceKOFIFive accesses, most specific first.
Condition tables001 - 005The key combinations the accesses search.
Condition recordsVKOAThe actual G/L account assignments you maintain.

Naming KOFI specifically in an interview is worth more than describing the concept generically. Most candidates say “it uses an access sequence”. Saying “access sequence KOFI, five accesses, procedure KOFI00 on the billing type” signals that you have opened the configuration.

03

The five accesses of KOFI

Scroll the diagram sideways to see all of it →

SAP SD revenue account determination: how VKOA finds the G/L accountThe billing document supplies the chart of accounts, sales organisation, customer account assignment group KTGRD, material account assignment group KTGRM and the account key from the pricing procedure. Access sequence KOFI then searches five condition tables in order, from the most specific combination of customer and material account assignment group plus account key, down to a general fallback. The first access that finds a record supplies the G/L account. If no access finds a record, the billing document is not released to accounting.How VKOA finds the G/L accountAccess sequence KOFI · searched most specific first · first hit winsThe billing document supplies· Chart of accounts· Sales organisation· Customer AAG (KTGRD)· Material AAG (KTGRM)· Account key (ERL, ERS)001Cust. AAG + Material AAG + Account keyno record found002Cust. AAG + Account keyno record found003Material AAG + Account keyno record found004Account key onlyno record found005General fallbackFirst hit wins, G/L account postedNo hit at any access: billing document not released to accountingProcedure KOFI00Condition type KOFI / KOFKMaintained in VKOA

SAP SD revenue account determination: access sequence KOFI searches five condition tables from the most specific combination down to a general fallback, and the first record found supplies the G/L account.

001

Cust. AAG + Material AAG + Account key

The most specific access, and the one most projects actually use. Lets domestic customers buying finished goods post to a different revenue account than export customers buying services.

002

Cust. AAG + Account key

Splits revenue by customer category alone — domestic, export, intercompany — regardless of what was sold.

003

Material AAG + Account key

Splits revenue by what was sold alone — goods versus services versus trading stock — regardless of who bought it.

004

Account key only

The general catch-all. One revenue account, one discount account, one freight account for the whole sales organisation.

005

Fallback entry

The last resort in the access sequence. Many projects deliberately maintain this so that billing never hard-fails on a missing account.

Why the order matters: the search stops at the first hit. If the material account assignment group is blank, access 001 cannot match and the system falls through to a more general entry — which posts to a real account, just not the one you intended. Silent wrong postings are far harder to spot than hard failures, which is why blank assignment groups deserve more attention than they usually get.

04

Account keys: the bridge from pricing

An account key is a short code assigned to a condition type in the pricing procedure (V/08, the ActKy column). It is what allows one invoice to split across several G/L accounts: the price posts to revenue, the discount to sales deductions, the freight to freight income — because each condition type carries a different account key into VKOA.

KeyNamePosts to
ERLRevenueSales revenue G/L account
ERSSales deductionsDiscount / deduction G/L account
ERFFreight revenueFreight income G/L account
MWSOutput taxOutput tax G/L account
ERURebate accrualRebate accrual G/L account
EVVCash settlementCash clearing G/L account
ERL

Revenue

The main one. Assigned to the base price condition (PR00 and its successors). If ERL is missing from the pricing procedure, the invoice has a value but nothing to post it to.

ERS

Sales deductions

Used on discount condition types (K004, K005, K007). Posts the discount as a reduction of revenue rather than netting it silently into the revenue line.

ERF

Freight revenue

Used on freight conditions (KF00). Keeps freight recovered from the customer separate from product revenue, which finance almost always wants.

MWS

Output tax

Assigned to tax conditions (MWST). Note the exception below — the tax account itself is normally found through the tax code, not through VKOA.

ERU

Rebate accrual

Used on rebate accrual conditions so the accrual builds up on the balance sheet as sales happen, rather than hitting the P&L only at settlement.

EVV

Cash settlement

Used in cash sales (BV), where payment is collected at the point of sale and posts to a cash clearing account instead of receivables.

The failure nobody expects: a condition type with no account key is not an error. The invoice is created, the value appears on the document, and nothing posts for that line. It behaves as statistical from accounting’s point of view. Every time a new condition type is added to a pricing procedure, the account key is the field most often forgotten.

05

Account assignment groups

Account assignment groups are the classification codes that let the same account key resolve to different G/L accounts. There are two, and knowing which master record each lives on is standard interview ground.

KTGRD

Customer account assignment group

Customer master / BP → Sales Area data → Billing

Classifies who bought. Typical values are 01 domestic, 02 export, 03 intercompany — letting export revenue land in its own account for statutory reporting.

KTGRM

Material account assignment group

Material master → Sales: Sales Org 2

Classifies what was sold. Typical values are 01 trading goods, 02 services, 03 raw materials — letting service revenue be reported separately from product revenue.

The detail that catches people out: both groups are copied into the billing document when it is created. Correcting the customer or material master afterwards does not repair invoices that already exist — those carry the old value and will keep determining the old account. The usual remedy is to fix the master data, cancel with VF11, and bill again.

06

Configuring VKOA step by step

01

Check the account determination procedure

VOFA (billing type) → Account determination procedure

Standard is KOFI00. If this field is blank on the billing type, no account determination runs at all and every invoice of that type will fail to post.

02

Confirm the condition types

Procedure KOFI00 → KOFI / KOFK

KOFI is account determination without CO account assignment; KOFK is the variant that also carries a CO object. Both use access sequence KOFI.

03

Assign account keys in the pricing procedure

V/08 → ActKy column

Every condition type whose value must reach FI needs an account key. A condition with no account key is statistical as far as accounting is concerned — its value never posts.

04

Maintain the customer account assignment group

Customer master / BP → Sales Area data → Billing (field KTGRD)

Typical values: 01 domestic, 02 export, 03 intercompany. This is copied into the billing document at creation, so changing it later does not fix documents already created.

05

Maintain the material account assignment group

Material master → Sales: Sales Org 2 (field KTGRM)

Typical values: 01 trading goods, 02 services, 03 raw materials. Blank here is a very common cause of a failed access on table 001.

06

Assign the G/L accounts

VKOA

Pick the condition table, then maintain one row per combination: chart of accounts, sales organisation, the account assignment groups, the account key, and the G/L account it posts to.

A design note: resist the temptation to use every access. Each account assignment group you introduce multiplies the rows to maintain and the ways billing can fail. Most healthy setups use table 001 for the splits finance genuinely reports on, plus a general entry as a safety net so no invoice ever hard-fails on a combination nobody anticipated.

07

“Billing document not released to accounting”

This is the error that brings most people to this topic. The invoice exists, the customer can be sent it, and yet finance sees nothing. The reason is structural: the billing document and the accounting document are two separate creations, and the second one failed. Work the checks in this order.

01

Read the actual error first

VF02 → Billing Document → Release to Accounting. SAP names the missing combination. Do not guess before reading this — it usually tells you the exact account key and account assignment groups it could not resolve.

02

Is there a VKOA entry for that combination?

VKOA, open the condition table the access sequence would have used, and look for the chart of accounts + sales org + AAG + account key row. This is the single most common cause.

03

Are the account assignment groups actually filled?

Check the billing document itself, not the master data — KTGRD on the header and KTGRM on the item. If either is blank, the specific accesses cannot match and only the general access can save you.

04

Does the condition type have an account key?

V/08 for the pricing procedure in use. A newly created condition type with no ActKy entry will carry value in the invoice and post nothing.

05

Is the FI posting period open?

OB52. A closed period produces a posting failure that looks like an account determination problem but is not one. Check the billing date against the open periods.

06

Is the G/L account itself usable?

FS00. The account may be blocked for posting, marked for deletion, or not created in the company code — the VKOA row can be perfectly correct and still fail here.

07

Missing CO assignment or exchange rate

If the revenue account is a cost element, it needs a CO object (profit centre, cost centre, or a derivation rule). For foreign-currency invoices, a missing rate in OB08 blocks the posting.

08

Release in bulk once fixed

VFX3 lists billing documents blocked for accounting and releases them. For large volumes, report RFBIBLU0 does the same as a background job.

The habit worth building: always read the error in VF02 before opening VKOA. SAP names the combination it could not resolve. Consultants who read the message first fix this in two minutes; consultants who start guessing at configuration can lose an afternoon.

08

What VKOA does not cover

Two exceptions separate people who have configured this from people who have read about it.

Cost of goods sold is determined in OBYC, not VKOA

COGS posts at goods issue, not at billing. It is found through MM account determination — transaction OBYC, transaction key GBB with account modifier VAX or VAY. So a single Order-to-Cash cycle touches two entirely different account determination mechanisms: OBYC at PGI for the cost side, VKOA at billing for the revenue side.

The tax account normally comes from the tax code

The MWS account key sits in the pricing procedure like any other, but the output tax G/L account is normally resolved through the tax code and its account assignment (FTXP, and OB40 for the accounts) rather than a VKOA revenue row. If tax is posting to the wrong account, VKOA is usually the wrong place to look.

09

What changed in S/4HANA

The determination logic itself did not change. VKOA, procedure KOFI00, access sequence KOFI, the account keys and both account assignment groups work as they always have. This is one of the genuinely stable corners of SD, which makes it a reliable thing to know well.

What changed is the ledger underneath. The Universal Journal — table ACDOCA — consolidates what used to live across separate FI and CO tables into one, so the posting your VKOA row produces now lands in a single line carrying financial and controlling detail together. The customer master is also now maintained as a Business Partner, so KTGRD is maintained through BP rather than the old customer transactions.

Around it, the rest of the chain has moved more: advanced ATP for availability and BRF+ for output. Account determination staying still is exactly why it keeps appearing in interviews.

10

Interview questions

Q01

How does SAP determine the revenue G/L account for a billing document?

Through the condition technique — the same framework as pricing and output. The billing type carries an account determination procedure (KOFI00), which contains condition type KOFI (or KOFK), which uses access sequence KOFI. That access sequence tries five condition tables from most specific to most general, using chart of accounts, sales organisation, customer account assignment group, material account assignment group and the account key. The first access that finds a record wins, and its G/L account is used.

Q02

What is an account key and where is it maintained?

An account key is a short code in the pricing procedure (V/08, the ActKy column) that links a condition type to account determination. ERL is revenue, ERS sales deductions, ERF freight revenue, MWS output tax. It is the bridge between SD pricing and FI: VKOA is keyed partly on the account key, so without one a condition type has no route to a G/L account and its value never posts.

Q03

Where do the account assignment groups come from?

The customer account assignment group (KTGRD) comes from the customer master — in S/4HANA, the Business Partner in its sales area billing data. The material account assignment group (KTGRM) comes from the material master, Sales: Sales Org 2 view. Both are copied into the billing document when it is created, which is why correcting master data does not repair documents that already exist.

Q04

Why would a billing document save but not post to accounting?

Because the billing document and the FI document are two separate creations. The invoice saved fine; the posting failed. The usual causes are a missing VKOA entry for the combination, a missing account key on a condition type, blank account assignment groups, a closed FI posting period, a blocked G/L account, a missing CO object on a cost element, or a missing exchange rate. VF02 → Release to Accounting names the specific failure.

Q05

What is the difference between KOFI and KOFK?

Both are account determination condition types in procedure KOFI00. KOFI performs account determination without CO account assignment; KOFK is the variant used when the posting must also carry a Controlling object. Projects that post revenue to cost elements requiring CO assignment rely on KOFK.

Q06

Is the cost of goods sold account also determined in VKOA?

No, and this is a favourite interview trap. COGS is posted at goods issue, not at billing, and it is determined through MM account determination in OBYC using transaction key GBB with account modifier VAX or VAY. VKOA determines revenue and revenue-related accounts only. Revenue goes through VKOA, COGS through OBYC.

Q07

How granular should the VKOA setup be?

As granular as finance genuinely needs for reporting, and no more. Every additional account assignment group multiplies the number of rows to maintain and the number of ways billing can fail. Most projects use table 001 for the combinations that matter and maintain a general entry as a safety net so that no invoice hard-fails.

Q08

What happens if no access in the sequence finds a record?

Account determination fails, and the billing document is created but not released to accounting. It sits in the billing document list with no accounting document until the missing configuration is added and the document is released, individually in VF02 or in bulk through VFX3.

Q09

How is the output tax account determined?

Tax is the exception. The MWS account key appears in the pricing procedure like any other, but the tax G/L account is normally found through the tax code and its account assignment (FTXP and OB40) rather than through a VKOA revenue row. Saying this in an interview shows you have actually configured tax rather than only read about account keys.

Q10

A new material is billing to the wrong revenue account. Where do you look?

The material account assignment group on the material master (KTGRM, Sales Org 2) first — a new material often inherits a blank or a copied wrong value, so the access on table 001 misses and the system falls through to a more general entry with a different account. Then confirm what the billing document actually carries, since it holds the value copied at creation, not the current master data.

Where this sits in the SD chain

Account determination is the final step of the Order-to-Cash process. Before it, item category determination decides how a line behaves, schedule line determination decides how it is delivered, the pricing procedure decides what it is worth, and copy control decides what carries into the invoice. VKOA decides where the money finally lands.

Frequently Asked Questions

What is VKOA in SAP SD?

VKOA is the transaction for revenue account determination — where G/L accounts are assigned for the combinations of chart of accounts, sales organisation, customer account assignment group, material account assignment group and account key. When a billing document posts to accounting, the system uses these assignments to find the revenue, discount and freight accounts.

What is the access sequence for revenue account determination?

KOFI. It contains five condition tables, searched from most specific to most general: customer AAG plus material AAG plus account key; customer AAG plus account key; material AAG plus account key; account key alone; and a general fallback. The search stops at the first record it finds.

What is the difference between KTGRD and KTGRM?

KTGRD is the account assignment group on the customer, maintained in the customer master or Business Partner sales area billing data, and typically classifies domestic, export or intercompany. KTGRM is the account assignment group on the material, maintained in the material master Sales: Sales Org 2 view, and typically classifies finished goods, trading goods or services.

Why is my billing document not released to accounting?

Most often because no VKOA entry matches the combination in the document. Other frequent causes are a condition type with no account key, a blank account assignment group on the customer or material, a closed FI posting period, a blocked or non-existent G/L account, a missing CO object on a cost element, or a missing exchange rate for a foreign currency invoice. VF02 and then Release to Accounting shows the specific error.

What is the difference between VF02 and VFX3?

VF02 releases one billing document to accounting and is where you read the error message. VFX3 lists all billing documents blocked for accounting and releases them collectively, which is what you use after fixing the underlying configuration. Report RFBIBLU0 does the same as a background job for large volumes.

What are the standard account keys in SAP SD?

ERL for revenue, ERS for sales deductions such as discounts, ERF for freight revenue, MWS for output tax, ERU for rebate accruals and EVV for cash settlement in cash sales. They are assigned to condition types in the pricing procedure in V/08.

Is COGS determined through VKOA?

No. Cost of goods sold is posted at goods issue, not at billing, and is determined through MM account determination in OBYC under transaction key GBB with account modifier VAX or VAY. VKOA covers revenue and revenue-related postings only.

Did revenue account determination change in S/4HANA?

The determination logic itself did not. VKOA, the KOFI access sequence, the account keys and the account assignment groups all work as they did in ECC. What changed is where the postings land: the Universal Journal, table ACDOCA, replaces the separate FI and CO tables, and the customer master is now maintained as a Business Partner.

Can I change the account assignment group on an existing billing document?

Not directly in a way that repairs the posting. The account assignment groups are copied into the billing document when it is created. The usual approach is to correct the master data, cancel the billing document with VF11, and re-create it so that the corrected values are copied in.

How does the account key connect pricing to accounting?

The pricing procedure decides what a condition is worth; the account key decides where that value goes. VKOA is keyed partly on the account key, so the same revenue amount can be split across different G/L accounts by assigning different account keys to different condition types — which is exactly how discounts and freight are kept separate from product revenue.

Rahul Narain Saxena, SAP SD Solution Architect

Written by

Rahul Narain Saxena

SAP SD Solution Architect with 17+ years of hands-on implementation experience across SAP ECC and S/4HANA. Every guide on The SD Vault is written from live project experience, not summarised from documentation.

SD/FI integration is where interviews get serious.

Account determination is the question that separates consultants who have closed a month-end from those who have only configured sales orders. The SD Vault has 230+ depth-graded questions and 38 real configuration scenarios covering exactly this ground.

Get Lifetime Access →

Or start free with the sample pack, Order-to-Cash guide, and Pricing Procedure guide.