Skip to content

LOAD_PROGRAM_NOT_FOUND

The runtime could not load a program or include that is required for execution.

ABAP tried to load a program, include, function group, or class pool that does not exist in the current system. The object was referenced at runtime — either directly called or included — but is absent from the repository.

Symptom

ST22 shows:

Runtime Errors         LOAD_PROGRAM_NOT_FOUND
Short text             Program "ZPROGRAMNAME" not found.

The "Variables in memory" section names the missing object. The call stack shows where the load was triggered.

Cause

Root cause Details
Incomplete transport The calling program was transported but a dependent include or function group was left out of the transport request
Object not activated The object exists but was never activated after creation or import
Wrong system Development object exists in DEV but was never transported to QAS/PRD
Deleted object The program was deleted but calling code was not updated
Name typo in dynamic call CALL FUNCTION lv_fm_name where lv_fm_name has a typo

Reproduce

" Dynamic call to a non-existent FM — lv_fm_name is a variable, not in parentheses
DATA lv_fm_name TYPE string VALUE 'Z_FM_THAT_DOES_NOT_EXIST'.

CALL FUNCTION lv_fm_name.   " <-- LOAD_PROGRAM_NOT_FOUND

No parentheses for variable FM names

CALL FUNCTION lv_fm_name — the variable is passed directly. CALL FUNCTION (lv_fm_name) is the older obsolete syntax and also works, but the modern style without parentheses is preferred.

Fix

Step 1 — Identify the missing object from ST22 Open the dump in ST22. The short text names the missing object (e.g. ZPROG_MISSING or LFGRP_TOP).

Step 2 — Check if the object exists in the source system In development: open SE38 / SE37 / SE24 and search for the object name. If it exists in DEV but not in the target system, proceed to Step 3.

Step 3 — Transport the missing object In SE10, find the transport request containing the object, or create a new request and manually add the object. Release and import via STMS.

Step 4 — Activate after import After transport, open the object in SE38 / SE24 and activate it (Ctrl+F3). Also activate the calling program to regenerate dependencies.

Step 5 — For dynamic calls, validate the name first and catch call exceptions

LOAD_PROGRAM_NOT_FOUND itself cannot be caught

This dump fires at kernel level when the function group cannot be loaded — it bypasses the ABAP exception mechanism entirely. TRY/CATCH will not prevent it. The SELECT check below only validates that the FM name exists in the catalog; if the function group program is missing or inactive, the dump still fires. The transport fix in steps 1–4 is the only real remedy.

DATA lv_fm_name TYPE string VALUE 'Z_MY_FUNCTION'.

" Step 1 — verify FM name exists in the function catalog
SELECT SINGLE funcname
  FROM tfdir
  INTO @DATA(lv_exists)
  WHERE funcname = @lv_fm_name.

IF sy-subrc <> 0.
  " FM name not found at all — wrong name or not transported
  MESSAGE |Function module { lv_fm_name } not found in this system| TYPE 'E'.
  RETURN.
ENDIF.

" Step 2 — call dynamically and catch all call-level exceptions
" CX_SY_DYN_CALL_ERROR is the parent of:
"   CX_SY_DYN_CALL_ILLEGAL_FUNC  — FM name invalid at call time
"   CX_SY_DYN_CALL_PARAM_MISSING — required parameter not supplied
"   CX_SY_DYN_CALL_ILLEGAL_TYPE  — parameter type mismatch
TRY.
    CALL FUNCTION lv_fm_name
      EXCEPTIONS
        OTHERS = 1.
    IF sy-subrc <> 0.
      MESSAGE |{ lv_fm_name } raised a functional exception| TYPE 'W'.
    ENDIF.
  CATCH cx_sy_dyn_call_error INTO DATA(lx).
    MESSAGE lx->get_text( ) TYPE 'W'.
ENDTRY.

Check the transport object list

In SE10, open the transport request and check the object list. Include files (type REPS) and function modules (FUNC) must be explicitly listed — they are not automatically included when you transport the main program.

Prevention

  • When transporting programs with includes or function groups, always verify the transport object list includes all dependent objects.
  • After any transport import, run a syntax check (SE38 → Program → Check → Syntax) on affected programs.
  • For dynamic FM calls, always validate the FM name against TFDIR and wrap the call in a TRY/CATCH.

See also

  • LOAD_PROGRAM_CLASS_MISMATCH — related dump when class version mismatches after transport
  • Transaction SE10 — transport organizer
  • Transaction STMS — transport management
  • Transaction ST22 — ABAP runtime error analysis

Comments