📚 Architectural Blueprint

SAP Universal Journal (ACDOCA) & Clean Core Finance Guide

A definitive guide to financial extensibility in SAP S/4HANA: Replacing legacy BSEG user exits with modern posting BAdIs, CDS view extensions, and RAP I_JournalEntryTP.

1. The Financial Core Transformation: From BSEG to ACDOCA

In legacy SAP ECC, financial data was scattered across disparate tables: BKPF (Header), BSEG (Line Items), BSIS/BSAS (GL Indexes), FAGLFLEXA (New GL), and COEP (Controlling Line Items). Developers customized financial logic using:

In SAP S/4HANA, the Universal Journal (table `ACDOCA`) harmonizes Financial Accounting (FI) and Controlling (CO) into a single line item repository. Directly appending to BSEG or relying on legacy RGGBS000 ABAP includes is incompatible with Clean Core and fails ATC checks in ABAP Cloud.

2. Clean Core Extensibility Architecture for Finance

Capability Legacy Approach (ECC) Clean Core Architecture (S/4HANA)
Custom Fields Append structure to BSEG Custom Fields app extended onto FINS_ACDOC_EXT_FIELDS
Posting Derivation OBBH / User exit RGGBS000 Developer BAdI FINS_ACDOC_POSTING_EXTENSION
Posting Validation OB28 / Include RGGBR000 Cloud BAdI FINS_VAL_JE_ITM_BADI
Financial Reporting ABAP reports querying BSEG CDS View Entity Extensions on I_JournalEntryItem
Programmatic Posting BAPI_ACC_DOCUMENT_POST Released RAP BO I_JournalEntryTP via EML

3. Deriving Custom Dimensions via `FINS_ACDOC_POSTING_EXTENSION`

When custom dimensions (such as ESG carbon tax indicators, custom trade identifiers, or regulatory tags) must be calculated dynamically during financial posting:

METHOD if_fins_acdoc_posting_extension~change_line_item.
  // Verify target ledger
  IF is_journal_entry_item-ledger = '0L'.
    IF is_journal_entry_item-glaccount CP '00004*'.
      // Calculate custom dimension
      cs_journal_entry_item-zz_esg_carbon_tax_code = 'EU_ETS_TIER1'.
    ENDIF.
  ENDIF.
ENDMETHOD.
🚨 Critical Rule: Zero-Balance Integrity

Never modify debit/credit amounts or currency codes inside change_line_item. Doing so will corrupt the document zero-balance check, resulting in transaction dump FINS_ACDOC_POSTING_001.

4. Modern Programmatic Posting via RAP `I_JournalEntryTP`

In ABAP Cloud (Tier-1), classic function module BAPI_ACC_DOCUMENT_POST is unreleased. The official clean core mechanism is EML on Business Object `I_JournalEntryTP`:

MODIFY ENTITIES OF I_JournalEntryTP
  ENTITY JournalEntry
  CREATE FIELDS ( CompanyCode DocumentDate PostingDate AccountingDocumentType )
  WITH VALUE #( (
    %cid                   = 'CID_HDR'
    CompanyCode            = '1010'
    DocumentDate           = cl_abap_context_info=>get_system_date( )
    PostingDate            = cl_abap_context_info=>get_system_date( )
    AccountingDocumentType = 'SA'
  ) )
  CREATE BY \_Item FIELDS ( GLAccount AmountInTransactionCurrency TransactionCurrency )
  WITH VALUE #( (
    %cid_ref = 'CID_HDR'
    %target  = VALUE #(
      ( %cid = 'ITEM_1' GLAccount = '0000400000' AmountInTransactionCurrency = '100.00' TransactionCurrency = 'EUR' )
      ( %cid = 'ITEM_2' GLAccount = '0000100000' AmountInTransactionCurrency = '-100.00' TransactionCurrency = 'EUR' )
    )
  ) ).
COMMIT ENTITIES.

Interactive ACDOCA & Financial Code Generator

Generate compliant ABAP Cloud financial posting BAdIs, CDS view entity extensions on I_JournalEntryItem, and RAP EML dispatchers with our free interactive architect.

💰 Launch Universal Journal Architect