ABAP short dumpObjectCALL_FUNCTION_NOT_FOUNDModuleABAP

CALL_FUNCTION_NOT_FOUND — CALL_FUNCTION_NOT_FOUND Runtime Error

CALL_FUNCTION_NOT_FOUND means the ABAP runtime tried to resolve a function module name in a CALL FUNCTION statement and found no active, generated function module of that name in the target system, whether local or across RFC. It almost always traces to a transport gap, a typo or renamed FM, a stale RFC destination, or a function group that failed generation.

This page covers the CALL_FUNCTION_NOT_FOUND runtime error: what the exception actually means, the concrete causes that produce it in real landscapes, how to read the ST22 dump to identify which cause applies, and how to fix each variant without masking the underlying transport or code defect.

Published 16 Sept 2026· 1,235 words

What the dump means

CALL_FUNCTION_NOT_FOUND is raised when the ABAP runtime cannot locate the function module named in a CALL FUNCTION statement, either because no TFDIR entry exists for that name in the system being addressed, or an entry exists but has no active generated load, or the call is remote and the target system reports the same failure back. This resolution happens before parameter interface checking, so it fires earlier in the call sequence than errors like CALL_FUNCTION_PARM_MISSING or CALL_FUNCTION_CONFLICT_TYPE, which assume the function module was at least found. For a literal, statically coded function name this is a build or transport defect, not a runtime data condition. For a dynamic call, where the name is built from a variable, the runtime performs a genuine lookup at execution time and the ABAP exception class CX_SY_DYN_CALL_ILLEGAL_FUNC exists specifically to let that case be caught; an uncaught dynamic lookup failure still produces this dump.

Root causes that actually produce it

  • Transport gap between systems: the function module's own transport request has not been imported into the system where the caller runs, even though the calling program's transport was imported successfully. Common in three-system landscapes where the caller and the FM travel in different requests.
  • Typo or stale reference after renaming: a static CALL FUNCTION literal still points to an old function module name that was renamed or deleted during a refactor, and one code path was missed.
  • RFC destination pointing to the wrong logical system: an SM59 destination was repointed during a system copy or refresh and now resolves to a system, client, or release that does not carry this function module.
  • Function group not generated: the TFDIR metadata exists but the function group failed to activate, usually because of a syntax error left over from an incomplete or failed transport import.
  • Dynamic call built from a variable with wrong case, trailing spaces, or an outdated name pulled from a customizing table, BAdI implementation, or configuration entry that was never updated when the target FM was renamed.
  • Release or version mismatch in a distributed scenario: an RFC call from an older release partner system targets an interface that only exists in a newer release, common in hub or group-company landscapes before a synchronized upgrade.
  • Direct creation in a restricted system: a developer created a Y or Z function module directly in a system without a transport, so it works there but nowhere downstream.
  • SAP removed or renamed a delivered function module during a support package or upgrade, and custom code still calls the deprecated name.

What to inspect in ST22

  • Short text and 'What happened' block: confirms this is a resolution failure, not a parameter or type conflict, and states the exact function module name the runtime tried to find, including case and any trailing characters.
  • Termination location: the program, include, and line number of the CALL FUNCTION statement, and whether it is a literal name or a variable (dynamic call).
  • Call context: whether the statement includes DESTINATION and, if so, which RFC destination was used, since a remote call fails differently from a local one.
  • Source code extract in the dump: shows whether the name was hardcoded or assembled from a variable, config lookup, or customer exit result.
  • Follow-on checks: SE37 to confirm whether the function module exists and is active in the local system; SE80 or the function builder to check the function group's generation status; SM59 to test the RFC destination and confirm which system and client it actually reaches; SE01 or SE09/SE10 to compare the transport status of the function module against the transport status of the calling program; SM58 if the call was queued (transactional RFC) rather than synchronous.

Resolution path

If the cause is a transport gap, release and import the function module's transport into the affected system before re-testing; this needs a change request through the normal transport path, not a manual object creation. If it is a typo or stale reference in custom code, correct the literal name in the source and transport the fix, which requires a development change request. If the RFC destination is wrong, correct the target system or client in SM59; this is a Basis-side configuration fix and usually does not need a change request unless the destination is centrally managed. If the function group failed to generate, fix the syntax error and reactivate it, then re-import any pending transport that depends on it. If the cause is a release mismatch across systems in a hub scenario, the fix is coordination of the upgrade or release-dependent logic in the interface, which is a project-level change request, not a quick patch. If SAP removed the function module, replace the call with the successor API or a supported alternative rather than trying to restore the old one.

The fix people try first (and why it fails)

The reflex is to add or extend the EXCEPTIONS list on the CALL FUNCTION statement, expecting system_failure or communication_failure to trap it. For a static literal call this does nothing, because the runtime never reaches exception dispatch; it dumps before the interface is even checked. For a dynamic call, wrapping the statement in a blanket TRY CATCH cx_root and swallowing the exception does stop the dump, but it also silently skips whatever business step that function module was supposed to perform. The dump disappears and the process appears to succeed, while the actual defect, a missing or mis-referenced function module, is now hidden until someone notices the downstream data gap.

Prevention

Enforce transport sequencing so a function module and its callers travel together or the FM lands first; a pre-go-live consistency check that verifies every function module referenced in transported objects is active in the target system catches this before cutover. Disallow direct object creation in QA or production. For dynamic calls built from configuration or customizing tables, validate the resolved name against SE37's function module directory at runtime and raise a controlled, catchable exception rather than letting the raw dynamic call fail unguarded.

Whose problem this is

Development or ABAP owns typo fixes, dynamic name construction logic, and adapting to a removed or renamed SAP function module. Basis owns RFC destination configuration and transport import sequencing across the landscape. Functional consultants own it when a configuration table or exit determines the function module name and that entry is wrong. The handover note should state the exact function module name from the dump, whether the call was static or dynamic, the destination if RFC, and confirmation of the FM's transport and activation status in each affected system.

Related SAP objects

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

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