HomeAboutBlog ContactSAPHTML SQLPython
🔍 SAP ABAP Debugger · Config Issues · 2026-27 Guide

How to Identify SAP Configuration Issues Using Debug - Step-by-Step Process

2026-27 Guide LearntoSAP.com 28 min read ABAP Debug · /H · Breakpoints · SPRO · Real Scenario

🔍 Why Use the Debugger to Find Configuration Issues?

Today we are discuss Identify SAP Configuration Issues Using Debug. Many SAP consultants run Directly to SPRO when something is not working. That is a perfectly reasonable first instinct - configuration issues live in configuration tables, so check the configuration. But here is the problem: SAP has thousands of configuration settings spread across hundreds of tables, linked together in chains of lookups that are not obvious from reading the SPRO documentation. When a posting fails with a cryptic error message, or when the system behaves differently in production versus quality, you can spend hours clicking through configuration screens and still not find the root cause. The ABAP Debugger changes all of that. The debugger lets you follow the exact code path SAP takes when it processes your transaction - step by step, table lookup by table lookup. Instead of guessing which of the 47 possible configuration settings might be causing the issue, you watch SAP read the value it actually uses, from the actual table, at the actual moment of execution. When the value it reads is wrong or missing - you have found your configuration issue. Exact table, exact field, exact entry that needs to be fixed. No guessing, no trial and error.This tutorial or document breaks down the process step by step, using simple language and real-world examples to help you master the skill.

8 Minutes vs 3 Hours

The real scenario in this guide shows a configuration issue resolved in 8 minutes using debug that 20 minutes of SPRO clicking could not find.

🎯

100% Accuracy

The debugger does not lie. When a SELECT returns sy-subrc=4, that missing table entry IS the problem. No interpretation needed.

🔧

No ABAP Knowledge Needed

You do not need to write ABAP to use the debugger for config investigation. You just need to know what to look for - this guide shows you exactly that.

ABAP Debugger (/H)
Breakpoints & Watchpoints
Variables Tab Inspection
Live Table Reads
5-Step Repeatable Method
Root Cause to Fix

⚔️ Debugger vs SPRO Clicking - Why Debug Wins Every Time

Let’s understand what happens without a debugger. You get an error. You read the error message. It says something like "F5 702 - No amount tolerance group found." You open SPRO, navigate to Financial Accounting → General Ledger Accounting → Tolerances → Define Tolerance Groups for Employees. You look at the list. The tolerance group FIN1 is right there. So why is SAP saying it cannot find it? You open the group, check the amounts - all fine. You close it, open the company code assignment screen, check the assignment - it is there too. Thirty minutes in, you still do not know what is wrong.

Now contrast that with the debugger. You type /H, run MIRO, set a breakpoint on message F5 702, and in 90 seconds you are watching SAP execute a SELECT on table T043T with keys BUKRS=1000, BKLAS=FIN1, USERN=PRAMOD MEHTA. sy-subrc = 4. Not found. You open T043T directly in the debugger. You can see entries for four users - but not PRAMOD MEHTA. That is the missing configuration. Go to OB57, add PRAMOD MEHTA, done. Eight minutes total from activating /H to resolved posting.

Debugger vs Other Approaches - Time and Accuracy Comparison
ApproachHow It WorksTime to Root CauseAccuracyWhat You Actually Learn
SPRO Clicking Navigate configuration menus hoping to find the wrong or missing setting 30 min – 3 hours Hit or miss - depends on experience with that module You find something that might be the cause. You change it. You test. Maybe it works.
Reading Error Message Only Look up the error message number and follow generic documentation 5 – 60 minutes Limited - error messages describe symptoms, not root causes F5 702 tells you what failed, not which specific config entry is missing for this specific user
Asking a Colleague Find someone who has seen this error before and ask what they did Depends on availability Good if colleague remembers correctly - bad if different system version You get a fix but rarely understand why it works or what else might be affected
SAP Support / OSS Note Search the SAP ONE Support Launchpad for the error message 10 – 60 minutes Good for known bugs - poor for config gaps unique to your system setup Useful when a bug exists, useless when the issue is a missing config entry specific to your company
🔍 ABAP Debugger Follow SAP's exact code path, watch table reads, identify the exact missing or wrong entry 5 – 20 minutes with practice Exact - the debugger shows precisely which table, which key, which value failed You know the exact table, exact key combination, exact config transaction. No ambiguity.
💡

The Golden Rule of Config Debug: Also The debugger does not lie. When you watch SAP execute a SELECT and you see sy-subrc = 4 returned - the entry being searched for does not exist in that table. That blank, missing configuration entry is your problem. You fix that specific entry in that specific table and re-run. This certainty is why experienced SAP consultants reach for /H before opening SPRO. You are not guessing - you are watching.

🛠️ The Debugger Toolkit - Four Things You Must Know

Before the real-world wide guide, you need to understand the four tools inside the ABAP Debugger that matter most for configuration investigation. You do not need to be an ABAP developer to use these. You just need to know what each one shows you and when to use it.

How to Start the Debugger - Three Ways

ACTIVATION

Three Ways to Start the ABAP Debugger

1
Method 1 - Type /H in the Command Field (Fastest)

Type /H in the SAP command field - the box where you normally type T-codes - and press Enter. SAP responds "Debugging switched on." Now run whatever transaction is failing. The moment the program starts, the debugger opens. This activates debug for everything you run next, so use it when you want to watch from the very beginning of the transaction.

Type: /H → Enter → confirm "Debugging switched on" → then run: MIRO / FB50 / VA01 / MIGO etc.
2
Method 2 - Set a Breakpoint on the Program (SE38 / SE80)

If you already know which program is involved, open it in SE38 (ABAP Editor) or SE80 (Object Navigator), navigate to the relevant section, and double-click in the line number column to place a red critical point dot. When any transaction calls that program and reaches that line, the debugger activates automatically - jumping you straight to the relevant code without stepping through thousands of preceding lines.

SE38 → open program → double-click line number → red dot = breakpoint · SE80 → same approach for classes and function groups
3
Method 3 - Breakpoint on a Function Module (SE37 - Most Useful for Config)

For configuration issues specifically, this is often the most useful method. Open SE37, find the function module that performs the configuration table read (for example, FI_OPEN_PERIOD_CHECK for period validation), set an External Breakpoint via menu Breakpoints → Set External Breakpoint. Run your failing transaction from a different session - when the function module is called, the debugger opens right at that point. You are positioned exactly at the configuration lookup you need to inspect.

SE37 → function module → Breakpoints → Set External Breakpoint → run failing transaction from another session

The Four Core Debugger Tools

📋
Variables Tab
F5 / F6

What it shows: The current value of every variable in scope at the current paused line of code.

For config investigation: After a SELECT statement executes, look here immediately. You will see what value SAP read from the config table and whether sy-subrc = 0 (found) or sy-subrc = 4 (not found). This is the single most important tab for finding missing configuration entries.

Pro tip: Double-click any variable name in the Variables tab to see its full structure - even nested structures like ls_tolerance-betrg show all sub-fields.

👁️
Watchpoints
Menu: Breakpoints

What it does: Pauses execution automatically the moment a specific variable changes value - not at a specific line, but at the moment a field is populated.

For config investigation: When you suspect a config value is being read somewhere in a long program but do not know where, set a watchpoint on the key field (e.g., ZTERM, BETRG, KBETR). Execution pauses the moment SAP reads that value from the configuration table.

Pro tip: This eliminates the need to step through hundreds of lines of code manually. Set the watchpoint and press F8 (Continue) - SAP runs at full speed until the field changes.

🗄️
Table View (SE16 in Debug)
Double-click table name

What it does: Opens any SAP table directly inside the debugger - the same as SE16 but without leaving your debug session.

For config investigation: When a SELECT returns sy-subrc=4 (not found), double-click the table name in the code to open it. Filter by the key values the SELECT was using. You will see exactly which entries exist and which are missing. This confirms the gap without any doubt.

Pro tip: This also works for configuration tables you want to check but are not yet in the code - type the table name in the debugger's table viewer input and browse directly.

📚
Call Stack
F7 to step out

What it shows: The complete chain of function calls that led to the current line - from the top-level transaction all the way down to where you are now.

For config investigation: When the debugger pauses at a failed config read, look up the call stack to see WHERE this lookup was triggered from. This tells you which part of the business process owns the missing config - and helps you understand whether fixing one entry might affect other processes.

Pro tip: Click on any frame in the call stack to jump to that level of the code and inspect variables at that level - very useful for understanding the context of a config read.

Understanding sy-subrc - The Most Important Variable in Config Debug

Every time SAP executes a SELECT statement to read a configuration table, it sets the system variable sy-subrc to indicate whether anything was found. This is the variable you look at first in the Variables tab after any SELECT. There are only two values you care about:

sy-subrc = 0

Entry found. The SELECT read the config table and found a matching record. The configuration exists. If you are still getting an error, look at the VALUE that was returned - it might be there but wrong (wrong amount, wrong account, wrong flag).

sy-subrc = 4

Entry NOT found. The SELECT found nothing in the config table for the key values it was searching. The configuration is MISSING. The key values in the WHERE clause tell you exactly what entry needs to be added to what table in SPRO.

⚠️

Never Debug Directly in Production: Always reproduce config issues in QAS first - which works for almost every config gap because the missing setting is missing in QAS too. If you must investigate something production-specific, ask your Basis team to enable a restricted debug session with rollback enabled, or use display-only transactions (FB03, ME23N, VA03) to investigate data. Using /H in production and accidentally pressing F5 (Step Into) on a posting transaction can commit partial data or trigger unintended database changes.

🏭 Real Scenario - Arjun Industries: The Mysterious F5 702 Error

Arjun Industries Ltd in Pune is running SAP ECC 6.0. The accounts payable team reports that invoice postings via MIRO are failing with error: "F5 702 - No amount tolerance group found for company code 1000, tolerance group FIN1." The FI consultant Pooja Mehta opens the SPRO path for tolerance groups and can see that tolerance group FIN1 exists. She checks the company code assignment - also fine. Twenty minutes of SPRO clicking have not found the issue. She activates the debugger.

REAL DEBUG

Arjun Industries - Tracing F5 702 from Error Message to Missing Entry in 8 Minutes

Pooja follows a methodical five-step debug process. This exact process works for virtually any SAP configuration issue across all modules and all error messages.

1
Activate Debug and Reproduce the Error

Pooja types /H in the command field and presses Enter. "Debugging switched on" confirms. She had already noted the error message class and number - F5 and 702 - from the Technical Info button on the error dialog. Before running MIRO, she sets a breakpoint in the debugger on message class F5, message number 702. This means the debugger will pause execution exactly at the line of code that generates this specific error - not at the beginning of MIRO, not somewhere random in the middle. She opens MIRO, enters the invoice for vendor 100456, amount ₹8,50,000, and clicks Simulate.

/H → confirm debug → Breakpoints menu → Set Breakpoint at: Message F5 702 → run MIRO → enter invoice → click Simulate
2
Debugger Pauses - Read the Call Stack

The debugger pauses. Pooja looks at the Call Stack panel on the right. She can see the execution chain: MIRO → SAPLFYTX → function TOLERANCE_CHECK_VENDOR → subroutine FIND_TOLERANCE_GROUP. The program is currently paused inside FIND_TOLERANCE_GROUP - right at the line that generates F5 702. She clicks on that subroutine name in the call stack to see the surrounding code. She can see a SELECT statement a few lines above the current position - that SELECT read a table and returned nothing, which is what triggered the error message she is now paused on.

Call Stack: MIRO → SAPLFYTX → TOLERANCE_CHECK_VENDOR → FIND_TOLERANCE_GROUP · Click to navigate · See SELECT above current line
3
Read the Variables Tab - Find What SAP Was Looking For

Pooja clicks the Variables tab. She can see exactly what the SELECT was looking for before it returned empty. The WHERE clause variables show: lv_bukrs = '1000' (company code), lv_tolerance_grp = 'FIN1' (tolerance group), lv_user = 'PRAMOD MEHTA' (the SAP user posting the invoice). And the critical line: sy-subrc = 4. The SELECT on table T043T found nothing for this combination. Tolerance group FIN1 exists - but it has never been assigned to user PRAMOD MEHTA in company code 1000. That is the missing link.

Variables tab: lv_bukrs = '1000' · lv_tolerance_grp = 'FIN1' · lv_user = 'PRAMOD MEHTA' · sy-subrc = 4 → entry MISSING in T043T
4
Open the Config Table Directly in the Debugger to Confirm

Pooja double-clicks the table name T043T in the code. The table opens inside the debugger - the same as SE16 but without leaving the debug session. She filters by BUKRS = 1000 and BKLAS = FIN1. She can see entries for four users: RRAO_FI, AKHANNA_FI, SGUPTA_FI, VPATEL_FI. User PRAMOD MEHTA is not in the list. This is 100% confirmation: the tolerance group FIN1 is correctly defined, but it was never assigned to Pooja Mehta's user ID. Go to transaction OB57 and add it.

Double-click T043T in code → table opens in debugger → filter BUKRS=1000, BKLAS=FIN1 → PRAMOD MEHTA not in list → config gap confirmed
5
Exit Debug - Fix OB57 - Test - Done

Pooja closes the debugger session (press F12 or close the debug window). She opens transaction OB57 (Assign Tolerance Groups to Users - FI). She adds a new row: Company Code 1000, User Name PRAMOD MEHTA, Tolerance Group FIN1. She saves. She returns to MIRO and posts the same invoice. Document 1900078234 posts successfully. Total time from typing /H to a working posting: 8 minutes. The same issue that 20 minutes of SPRO navigation could not solve was resolved in 8 minutes because the debugger showed the exact table entry that was missing.

Exit debug → OB57 → new entry: BUKRS=1000, USERN=PRAMOD MEHTA, BKLAS=FIN1 → Save → MIRO → post same invoice → Document 1900078234 posted

The Root Cause Pattern - Define Then Assign: The debug session revealed one of the most common SAP FI configuration patterns: the tolerance group itself was correctly defined (OBA0), but the user-to-group assignment was missing (OB57). This two-level structure - define the group, then assign it - appears repeatedly across SAP. Tolerance groups, authorisation groups, document types, posting period variants, payment method assignments - all follow this pattern. When the debugger shows a "not found" SELECT result, always ask yourself: is the issue at the definition level or the assignment level? In this case it was the assignment.

🔁 The Universal 5-Step Debug Method

The approach Pooja used follows a methodology that works for virtually any SAP configuration issue - across all modules, all transaction types, and all error messages. Once you internalise this five-step flow, you will stop spending hours in SPRO hoping to find the right setting and start going straight to the exact missing entry every time.

METHOD

5-Step Debug Process - Works for Any SAP Configuration Issue

1

Capture the Exact Error - Message Class + Number

Before activating the debugger, click the "Technical Info" button (the yellow circle with an i) at the bottom of any SAP error dialog. This shows you the Message Class (e.g., F5, M7, VN) and Message Number (e.g., 702, 022, 121). Write these down. They are what you will set your targeted breakpoint on. They are also what you will search for on the SAP ONE Support Launchpad. A message like "F5 702" is far more useful than "MIRO posting fails" - it is a precise, unique identifier for exactly what went wrong.

2

Set a Targeted Breakpoint on That Specific Message

In the ABAP Debugger, go to the Breakpoints menu and set a breakpoint on the MESSAGE statement filtered to the specific class and number from Step 1. For example: class F5, message 702. Now when you run the failing transaction, the debugger will pause exactly at the line that generates this error - not at the beginning of the program, not somewhere random. You land precisely at the moment SAP decides to throw the error. This is the step most people skip - and it is why their debug sessions take 30 minutes instead of 5.

3

Read the Variables Tab at the Paused Line

When the debugger pauses at the error-generating line, immediately look at the Variables tab. Read every variable in scope. Look specifically for: the key values the SELECT was searching for (company code, user, document type, etc.), and the value of sy-subrc after the SELECT. If sy-subrc = 4, the SELECT found nothing - those key values are what you need to add to the configuration table. Write down all the key field values. These are the exact entries that are missing.

4

Trace the SELECT Statement to Find the Config Table

From the error line, press F7 (Step Out) or scroll back through the code to find the SELECT statement that produced the empty result. Read the table name in the FROM clause - this is your destination in SPRO. T043T → OB57 (user tolerance assignment). T001B → OB52 (posting periods). T156 → OMJJ (movement type). T691 → OVA8 (credit check). Every configuration table maps to a specific SPRO transaction. Once you know the table name, you know exactly where to go.

5

Open the Config Transaction, Add the Missing Entry, Test

With the table name and the exact missing key values from Steps 3 and 4, go directly to the configuration transaction and add the missing entry. You are not guessing - you know the exact table (T043T), the exact key fields (BUKRS=1000, USERN=PRAMOD MEHTA, BKLAS=FIN1), and the exact transaction to use (OB57). Add the entry, save, re-run the failing transaction. If it succeeds - done. If another error appears, repeat the five-step process for the new error. Config issues often have multiple missing entries that appear one by one.

💡

Why Step 2 is the One People Skip: Most consultants activate /H and click F5 (Step Into) from the very beginning of the program, stepping through thousands of lines of SAP standard code before finding the relevant section. Setting a targeted breakpoint on the specific message class and number collapses that 30-minute step-through session to under a minute - you land exactly at the right place in the code from the very start. Do not skip Steps 1 and 2. They are not optional. They are what makes the difference between a 5-minute debug session and a 45-minute one.

🗄️ Common Configuration Table Patterns Revealed by Debug

After running the five-step debug method on dozens of configuration issues, you start to recognise two recurring patterns. Understanding these patterns helps you move faster - when the debugger shows you a particular type of failed lookup, you already know where the config gap is without even navigating to SPRO.

Pattern 1 - The Define-Then-Assign Gap (Most Common)

Over 60% of SAP configuration issues follow this pattern: a setting is defined at one level but not assigned at another. SAP almost always requires two steps - first you define something, then you assign it to the entities that use it. The debug always reveals this when a SELECT returns sy-subrc=4 on an assignment table.

Define-Then-Assign Pattern - Common Examples Across SAP Modules
What Is Not WorkingDefinition T-CodeAssignment T-CodeDebug Shows (sy-subrc=4 on…)
Tolerance group not found for userOBA0 (define group)OB57 (assign user)T043T SELECT - USERN + BUKRS + BKLAS key not in table
Payment method not available in F110FBZP (define method)FK02 (assign to vendor)LFB1 field ZWELS is blank or wrong value
Posting period closed errorOBBO (define variant)OB52 (open the period)T001B SELECT - no open period entry for the combination
Cost centre invalid for profit centreKE51 (define profit centre)KS01/KS02 (assign in cost centre)CEPC assignment SELECT - profit centre field blank or wrong
Number range not foundNR01 (define range)FBN1 (assign to company code)NRIV SELECT - NRRANGENR not found for the combination

Pattern 2 - The Wrong Value (Config Exists But is Incorrect)

The second most common pattern: the configuration entry exists (sy-subrc = 0) but holds the wrong value. The SELECT returns a result, but what comes back is not what it should be. The debugger still helps enormously - once you see the table and field holding the wrong value, you know exactly what to fix.

Wrong Value Pattern - Debug Shows a Result, But the Result is Incorrect
Error SymptomWhat Debug RevealsConfig Table + FieldHow to Fix
Payment terms calculating wrong due dateSELECT on T052 returns ZN45 for vendor 100456 but contract requires ZN30LFB1-ZTERM (vendor master, company code)FK02 → Company Code data → Payment Transactions → change ZTERM
Tax code calculating wrong percentageSELECT on T007S returns 5% condition rate but GST should be 18%T007S-KBETR (tax code percentage)FTXP → select tax code → change condition rate to 18%
Credit check not blocking overdue customerSELECT on T691 returns credit check = D (no check) instead of B (static+dynamic)T691-DKLAG (OVA8 automatic credit control)OVA8 → select risk category and order type → set credit check to B
Wrong G/L account posted automaticallySELECT on T030 returns account 400100 but 400200 expected for this posting keyT030-KONTS (automatic account determination)OBYC or OB40 → find the transaction key → correct the G/L account
Goods receipt movement type blockedSELECT on T156 returns movement indicator X when blank expected for ZAPI material typeT156-BWART (OMJJ movement type config)OMJJ → locate movement type 101 → correct the material type / plant setting
⚠️

The Hardest Pattern - Correct at Header but Wrong at Item Level: Some config issues are tricky because the header-level lookup succeeds (sy-subrc=0) but a subsequent item-level lookup fails. The debugger pauses at the item-level SELECT returning empty - but the header config looks correct. In these cases, navigate UP the call stack to find the header values that were passed down to the item level. Often the issue is that a company code assignment exists at the chart of accounts level but not at the specific company code level. SAP reads the chart of accounts version first (succeeds) then reads the company code version (fails). Both levels need the entry.

💻 What You Are Reading in the Debugger - Three ABAP Patterns

You do not need to be an ABAP developer to use the debugger for configuration investigation. But you do need to recognise three ABAP patterns so you know what you are looking at when the code is paused in front of you. These three patterns appear in almost every configuration-related debug session.

Pattern 1 - The Configuration Table SELECT

This is what a configuration table read looks like in ABAP. When the debugger pauses after this SELECT and sy-subrc = 4, the configuration entry is missing - the key values in the WHERE clause are what need to be added to that table.

ABAP - CONFIG TABLE SELECT PATTERN
"════════════════════════════════════════════════════════
"  Pattern 1 - Reading a configuration table
"  sy-subrc = 0 → config found (check the VALUE returned)
"  sy-subrc = 4 → config MISSING → go add the entry
"════════════════════════════════════════════════════════

"Example: Reading tolerance group assignment for a user (T043T)
SELECT SINGLE *
  INTO ls_tolerance
  FROM t043t                       "← CONFIG TABLE: user tolerance groups
  WHERE bukrs = lv_bukrs            "← company code key (e.g. '1000')
    AND  bklas = lv_tolerance_grp    "← tolerance group key (e.g. 'FIN1')
    AND  usern = lv_user.             "← SAP user key (e.g. 'PRAMOD MEHTA')

"AFTER this SELECT - look at Variables tab immediately:
"  sy-subrc = 0 → entry found. Check ls_tolerance-betrg for the amount.
"  sy-subrc = 4 → entry MISSING. Note all three WHERE values.
"                 Go to OB57. Add row: BUKRS=1000, USERN=PRAMOD MEHTA, BKLAS=FIN1.
"
"Also check ls_tolerance fields even if sy-subrc=0:
"  ls_tolerance-betrg  = maximum posting amount (if 0 → incomplete entry)
"  ls_tolerance-betrg2 = maximum payment difference (if 0 → incomplete)

Pattern 2 - The IF Branch After Config Read

This pattern appears when SAP reads a config value and then checks whether it meets a condition. The debugger shows you which IF branch SAP takes - and that branch tells you what the config value should be changed to.

ABAP - CONDITIONAL CHECK AFTER CONFIG READ
"════════════════════════════════════════════════════════
"  Pattern 2 - Config read followed by IF condition
"  The branch taken tells you exactly what the wrong value is
"════════════════════════════════════════════════════════

"Example: Checking whether posting period is open (T001B)
SELECT SINGLE *
  INTO ls_period
  FROM t001b              "← CONFIG TABLE: posting period variants
  WHERE bukrs  = lv_bukrs
    AND  monat  = lv_period  "← fiscal period (01–12)
    AND  blart  = lv_doctype  "← document type (e.g. 'SA')
    AND  gjahr  = lv_year.

IF sy-subrc <> 0.
  "← DEBUGGER PAUSES HERE: period not open for this doc type
  "   Variables: lv_period=001, lv_doctype='SA', lv_bukrs='1000'
  "   → Go to OB52, open period 001/FY2026 for doc type SA in company 1000
  MESSAGE e001(F5) WITH lv_bukrs lv_period.
ELSE.
  IF ls_period-vudat < sy-datum.
    "← PAUSES HERE: period exists but valid-to date has already passed
    "   Variables: ls_period-vudat shows the expired date
    "   → Go to OB52, extend the valid-to date for this period
  ENDIF.
ENDIF.

"PRO TIP: Set a Watchpoint on ls_period-vudat to pause the moment
"this date field is populated - no need to step through everything manually.

Pattern 3 - The Function Module Config Call

Many SAP configuration reads happen inside function modules called with specific parameters. This is where the SE37 external breakpoint (Method 3 from Section 2) pays off - you jump straight to the relevant function and watch the config lookup from the inside.

ABAP - FUNCTION MODULE CONFIGURATION CALL
"════════════════════════════════════════════════════════
"  Pattern 3 - Configuration read inside a Function Module
"  Set external breakpoint in SE37 on this function first
"════════════════════════════════════════════════════════

"Example: SD pricing determination (reads condition tables A305, A304)
CALL FUNCTION 'PRICING'
  EXPORTING
    komk   = ls_header_conditions  "← header key: BUKRS, VKORG, KUNNR etc.
    komp   = ls_item_conditions    "← item key: MATNR, KPEIN, MAGRP etc.
  IMPORTING
    xkomv  = lt_conditions_result  "← returned condition values (check here!)
  EXCEPTIONS
    others = 1.

"INSIDE the PRICING function (set external breakpoint in SE37 → PRICING):
"
"  Variables to watch after the function executes:
"  KOMV-KBETR → condition value returned
"              If 0 or blank → condition record not found → VK11
"
"  T682I-KSCHL → condition type being searched (e.g. 'PR00' for base price)
"  A305-KBETR  → value in condition table A305 (customer + material pricing)
"              If SELECT on A305 returns sy-subrc=4 → price condition missing
"              → VK11: create condition record PR00 for this combination

You Do Not Need to Understand the Full Program: When using the debugger for config investigation, you only need to understand the 5–10 lines immediately around the SELECT that returned sy-subrc=4. You do not need to read the entire function module or program. Find the failed SELECT, read the WHERE clause for the key values, read sy-subrc after it - that is all the information you need. Everything else in the surrounding code is irrelevant to fixing the configuration gap.

📦 Module-by-Module - What to Debug and Where to Fix

Each SAP module has its own most-common configuration gaps that consultants encounter repeatedly on real projects. The debug approach is the same for all of them - but knowing in advance which tables and transactions are typically involved saves significant time when you are inside the debugger. Here is the reference you need for the most common config issues across all modules.

SAP Module-by-Module - Common Config Issues Found Through Debug (12 Real Examples)
ModuleCommon ErrorWhat Debug ShowsConfig TableFix T-Code
FIF5 702 tolerance group not foundSELECT T043T → sy-subrc=4 for USERN + BUKRS + BKLAST043TOB57
FIF5 354 posting period closedSELECT T001B → empty or vudat date expiredT001BOB52
FINo chart of accounts assignedSELECT T001-KTOPL → blank for company codeT001OBY6
MMM7 022 movement type blockedSELECT T156 → movement indicator X for ZAPI material type + plantT156OMJJ
MMME 083 plant not assigned to purchasing orgSELECT T024E → empty for EKORG + WERKS combinationT024EOX01 / SPRO
MMMIRO GR/IR account determination wrongSELECT T030 → wrong GL account for the posting transaction keyT030OBYC
SDVN 121 pricing condition not foundSELECT A305 or A304 → sy-subrc=4 - condition record missing for PR00A305VK11
SDCredit check not blocking customerSELECT T691 → DKLAG field = D (no check) when B expectedT691OVA8
SDDelivery type not determinedSELECT TVLK → delivery type LF returns empty for sales org 1000TVLKOVLK / SPRO
COCost centre invalid for profit centreSELECT CSKS → KOKRS different from expected controlling areaCSKSKS01 / KS02
HRIT0008 wage type not foundSELECT T510 → empty for MOLGA + TRFAR + TRFGB combinationT510OH11
BasisRFC destination connection failedSELECT RFCDES → empty for the destination name in SM59RFCDESSM59
💡

The SM30 Shortcut - Jump to Any Config Table by Name: Once the debugger tells you the exact configuration table name (T043T, T001B, CSKS, etc.), you can jump directly to it without knowing which SPRO path it lives under. Use transaction SM30, type the table name, and click Maintain. SAP opens the table maintenance view for that exact table - the same screen that SPRO navigation would eventually reach. For tables with custom restrictions, SM30 may ask for an authorisation you do not have - in that case, use SE16 to view the data, then navigate through SPRO using the search function with the table name to find the right maintenance transaction.

🎯 Debug for Config Issues - Interview Questions and Answers

SAP Debug Configuration Issues - Real Interview Questions with Strong Answers
QuestionStrong Answer
How do you use the ABAP Debugger to identify a configuration issue? I activate the debugger with /H, note the error message class and number from the Technical Info button, then set a targeted breakpoint on that specific message before running the transaction. When the debugger pauses at the error, I look at the Variables tab to see what table was being read and what key values the SELECT used. If sy-subrc = 4, the config entry is missing - I know the exact table and key combination to check. I open SM30 or the SPRO transaction for that table, confirm the gap, add the missing entry, and re-test.
What is the difference between debugging a config issue versus an ABAP code issue? For a config issue I am focused on DATA - specifically the values returned by SELECT statements reading configuration tables. A missing config entry shows as sy-subrc=4. A wrong config value shows as an unexpected value in a returned variable. I do not need to understand the logic of the code - I just need to find which table read failed and what key values it was looking for. For an ABAP code issue I focus on the logic itself - which IF branch is taken, whether a calculation produces the right result. Different focus, same tool.
Describe your 5-step debug process for config issues. Step 1 - Capture the exact error message class and number from Technical Info. Step 2 - Set a targeted breakpoint on that specific message in the debugger so I land exactly at the right place in the code. Step 3 - Read the Variables tab at the paused line to see the key values the failed lookup was searching for. Step 4 - Navigate back through the call stack to find the SELECT statement, note the table name and WHERE clause. Step 5 - Open that table in SM30 or the corresponding SPRO transaction, add the missing entry with the exact key values from Step 3, and re-test.
Give a real example of a configuration issue you found using the debugger. At Arjun Industries, the AP team was getting error F5 702 on MIRO postings. Twenty minutes of SPRO navigation had not found the issue. I activated /H, set a breakpoint on message F5 702, and ran MIRO. The debugger paused inside subroutine FIND_TOLERANCE_GROUP with a SELECT on table T043T returning sy-subrc=4 - keys: BUKRS=1000, BKLAS=FIN1, USERN=PRAMOD MEHTA. I opened T043T in the debugger, confirmed entries existed for other users but not PRAMOD MEHTA. Opened OB57, added the user-to-tolerance-group assignment for PRAMOD MEHTA in company code 1000, and the posting worked. Eight minutes from /H to resolved.
What is a Watchpoint and when do you use it for config investigation? A Watchpoint is a special breakpoint that pauses execution the moment a specific variable changes value - not at a specific line, but when the data itself changes. I use it when I suspect a config value is being read somewhere in a long program but I do not know exactly where. I set a watchpoint on the key field (e.g., payment terms ZTERM, tolerance amount BETRG). I press F8 and SAP runs at full speed until that field is populated. I see exactly which SELECT put the value there, which table it came from, and what value was returned. No stepping through hundreds of lines manually.
How do you avoid debugging in production? Almost all config issues can be reproduced in QAS because the missing configuration entry is missing there too - the production system just happens to have a user or document that exposed the gap first. I always reproduce and debug in QAS. If the issue is genuinely production-specific (e.g., a specific vendor or customer that does not exist in QAS), I ask the Basis team to export that specific master data to QAS for debugging. I never use /H directly in production unless there is a genuine emergency with explicit PM sign-off, and even then I use F8 (Continue) only - never F5 (Step Into) which can trigger unintended data changes in an active system.
💡

The Interview Answer That Wins: Most candidates say "I use breakpoints to stop execution and check variables" - that is generic and forgettable. The answer that gets you the job names the specific table (T043T), the specific transaction (OB57), the specific error (F5 702), and the specific resolution time (8 minutes). Real specificity signals real experience. Interviewers who have been on SAP projects will immediately recognise the F5 702 + T043T + OB57 combination as something only someone who has actually debugged an FI config issue would know. Generic answers do not impress. Specific stories do.

📋 Complete Debug and Config Reference

SAP Debug + Config Investigation - All T-Codes, Commands, Tables, and Variables
ItemTypePurposeWhen to Use
/HCommandActivate ABAP Debugger for the next transaction you runFirst step for any config investigation - fastest way to enter debug mode
SE38T-CodeABAP Editor - view programs, set breakpoints at specific linesWhen you know which program contains the failing config read
SE37T-CodeFunction Module Builder - set external breakpoints on function modulesWhen the config read happens inside a function module - most useful for config debug
SE80T-CodeObject Navigator - browse ABAP classes, programs, function groupsComplex investigations involving multiple objects or class-based ABAP
SM30T-CodeTable Maintenance - maintain any config table directly by nameOnce debugger gives you the table name - fastest way to check and fix the entry
SE16 / SE16NT-CodeTable Browser - read-only table data viewVerify config entries exist and have correct values before or after the fix
OB57T-CodeAssign Tolerance Groups to Users in FI company codeT043T SELECT returns sy-subrc=4 - user not assigned to tolerance group
OBA0 / OBA4T-CodeDefine FI Tolerance Groups (define before assigning)If the tolerance group itself does not exist - create it before OB57 assignment
OB52T-CodeOpen and Close Posting Periods - maintain T001BT001B SELECT returns empty or vudat date has passed
OMJJT-CodeCheck Movement Type Configuration - T156 settingsT156 SELECT returns unexpected movement indicator for material type + plant
OVA8T-CodeAutomatic Credit Control - T691 credit check type per risk categoryT691 SELECT shows credit check = D (no check) when B (static+dynamic) expected
VK11T-CodeCreate SD Condition Records - pricing condition tablesA305/A304 SELECT sy-subrc=4 - pricing condition record missing for PR00
FBZPT-CodePayment Program Configuration - T042Z payment method settingsF110 excluding vendor - check payment method minimum amount and currency
T043TConfig TableTolerance group user assignments - BUKRS + USERN + BKLAS keyFI F5 702 error - most common missing assignment seen in FI config debug
T001BConfig TablePosting period variants - BUKRS + document type + period + yearPeriod closed errors - SELECT here shows which periods are open for which doc types
T156Config TableMovement type configuration - BWART + material type + plantM7 022 movement type error - SELECT shows the movement type settings
T691Config TableAutomatic credit control by risk category and order typeCredit check not triggering - SELECT reveals whether check type = D (disabled)
LFB1Config TableVendor master company code data - payment terms, method, blocksF110 not selecting vendor - read LFB1 to check payment method and tolerance fields
RFCDESConfig TableRFC destination definitions - all SM59 connection entriesRFC failing - SELECT here confirms destination name exists in config
sy-subrcABAP System VariableReturn code after any ABAP operation - 0 = success, 4 = not foundCheck this in Variables tab immediately after EVERY SELECT during config debug

📘 Related SAP Tutorials

SAP Basis

SAP Real Scenarios -End-to-End

Complete business process walkthroughs across P2P, O2C, R2R, and PP -with T-codes, tables, and ABAP examples at every step.

Read Tutorial
SAP Notes

SAP Note vs KBA vs HotNews

The real difference between a SAP Note, a KBA, and a HotNews -with real examples, SNOTE walkthrough, and search tips for the Launchpad.

Read Tutorial
SAP ABAP

SAP All Tables List

Complete reference to 100+ SAP database tables across all modules with key fields, descriptions, and primary keys.

Read Tutorial