SAP tableObjectBDCPModuleBTP_INTEGRATION

BDCP table — Change Pointer Table for ALE Distribution

BDCP stores one entry per changed field, per change document, per message type that is flagged for change-pointer-based ALE distribution. Each row is a candidate for outbound IDoc generation. It does not mean an IDoc was created or sent successfully; it only means a relevant field change was captured and is waiting for, or has already gone through, the change pointer processing report.

This page covers what a row in BDCP actually represents, the fields a consultant uses to trace a missing or duplicate outbound IDoc back to a master data change, and the read pitfalls that lead people to blame the wrong layer. It also covers how BDCP behaves in S/4HANA and who owns the configuration that controls whether it fills up at all.

Published 15 Sept 2026· 1,148 words

What it stores

A row in BDCP represents a single field change, on a single change document, that is relevant to a single ALE message type. When a change document object is configured for change-pointer-based distribution and a field flagged as relevant to that object changes, the standard change document logic writes one BDCP entry for each combination of changed field and active message type. The row carries the change document number, the changed table and key, the field name, and the message type it is relevant for. It sits between the change document tables (CDHDR and CDPOS) and the outbound IDoc. The periodic change pointer processing job reads unprocessed BDCP rows for a given message type, groups them by object, and triggers IDoc creation, then marks the rows processed. A row existing does not guarantee an IDoc was ever generated correctly downstream.

Key fields

  • MANDT - client, always restrict on this first
  • CHANGENR - change document number, links back to CDHDR
  • TABNAME - name of the table where the field change occurred
  • TABKEY - concatenated key of the changed record, including client, in the source table's key format
  • FNAME - name of the field that changed and triggered the pointer
  • MESTYP - IDoc message type this change pointer is relevant for
  • STATUS - processing status of the pointer, whether it has been picked up by the change pointer report
  • UDATE and UTIME - date and time the change document, and therefore the pointer, was created

How it joins the data model

  • BDCP-CHANGENR = CDHDR-CHANGENR to get who made the change, on what object, and when
  • BDCP-TABNAME and BDCP-TABKEY decode to the actual master data record, for example a customer or material key embedded in TABKEY
  • BDCP-MESTYP correlates to EDIDC-MESTYP once the change pointer report has run and produced an outbound IDoc control record
  • The IDoc segments produced from a processed pointer land in EDIDD, keyed by the DOCNUM assigned in EDIDC
  • BDCPS holds message-type-specific processing status for a change pointer where the same pointer needs independent status per receiver or message type

How to read it safely

Always filter on MANDT and on MESTYP before touching this table in a productive system; an unrestricted select can return millions of rows in a system with heavy master data churn and no active reorganization job. STATUS is the next filter to add, since most investigations only care about unprocessed rows waiting for the change pointer report, or a specific window of already-processed rows around an incident time. UDATE combined with UTIME lets a narrow time window replace a full table scan when chasing a single incident. TABNAME plus a partial match on TABKEY is the fastest way to find every pointer generated for one specific business object without decoding CHANGENR first.

How to prove it in the data

Symptom: a customer master change made this morning has not appeared as an outbound IDoc to the receiving system. Select BDCP where MANDT equals the client, TABNAME equals the master table, TABKEY contains the customer number, and MESTYP equals the expected message type. If no row exists, the field that was changed is not configured as relevant for change pointers on that message type, or the change document object itself was never triggered. If a row exists with STATUS still unprocessed, the change pointer report has not run for that message type since the change was made.

ECC vs S/4HANA

BDCP is unchanged in shape and still actively written and read in S/4HANA wherever classic ALE change-pointer-based distribution is still configured for a given master data object. There is no compatibility view replacing it because it is not a classic dictionary-only ECC artifact being retired; the underlying mechanism is still supported. What has shifted is architectural preference: many new integration scenarios on S/4HANA favor event-based outbound triggers or API-based replication instead of configuring new change pointer objects, so BDCP activity is increasingly limited to legacy master data distribution flows carried forward from ECC rather than newly designed interfaces.

Common pitfalls

  • Assuming no BDCP rows means no data changed. It usually means the changed field is not on the relevant-fields list for that change document object and message type, which is a configuration gap, not a data gap
  • Reading STATUS as processed as confirmation that the IDoc arrived successfully downstream. It only confirms the change pointer report picked the row up and generated an IDoc; outbound port, port not configured, or partner profile issues can still fail the IDoc afterward
  • Counting BDCP rows as a proxy for number of business changes. One change document can spawn several rows, one per relevant field per active message type, so row count overstates the number of actual master data updates
  • Forgetting that TABKEY includes the client and the source table's exact key format, so a naive string comparison against a business key without padding or client prefix returns nothing even when the row exists
  • Not knowing whether the periodic deletion of processed change pointers is scheduled. Without it the table grows indefinitely and both the report runtime and any ad hoc query against it degrade over time
  • Blaming the change pointer mechanism for a message type that was never activated globally or per message type, when the real defect is in the activation configuration, not in this table's data

Whose problem this is

The functional team responsible for master data distribution, usually whoever owns the ALE or IDoc configuration for that master data object, owns whether change pointers are activated correctly for a given message type and field. The integration or interface team owns diagnosing why a processed pointer did not become a successful IDoc downstream. Basis owns the scheduling and health of the change pointer processing and reorganization jobs, since an unrun reorg job is a basis-side scheduling gap, not a configuration gap.

Related SAP objects

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

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