SE93 — Maintain Transaction Codes
SE93 creates and maintains transaction code definitions, mapping a typed tcode string to a program and screen, a report, a BOR object method, or another transaction with fixed parameters. It is the object where authorization object defaults, skip-screen behaviour, and SET/GET parameter values for a transaction are configured, independent of the ABAP program logic itself.
This page covers what SE93 actually stores and why a tcode is a pointer rather than code, when consultants use it versus SE80 or a Fiori app, and the failure patterns around missing tcodes, parameter transaction misconfiguration, and authorization object drift. It also covers where to verify the mapping directly in the underlying tables.
Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,130 words
Purpose
SE93 defines and edits the entry that lets someone type a short string into the command field and land on a specific screen. The tcode itself contains no logic; it is a row pointing to a program and screen number, a report program, a BOR object method, or to another transaction with fixed parameter values layered on top (a parameter transaction or a variant transaction). The structural fact that causes most confusion: one program can be reached by several different tcodes, each with different default values, different skipped initial screens, or different attached authorization objects. Two people debugging the 'same' tcode can be looking at different behaviour entirely because the tcode, not the program, carries the authorization object and the parameter defaults.
When it is used
Used whenever a custom report or dialog program needs a callable entry point, and whenever someone needs to find out what a tcode actually executes before touching the underlying program. Common uses: creating a tcode for a new Z-report, creating a parameter transaction that opens an existing transaction with a screen skipped and a value defaulted, checking which authorization object a standard or custom tcode carries by default, and comparing a customer-copied tcode against the SAP original to see what was changed. Consultants reach for SE93 specifically to inspect or build the tcode object; for editing the program behind it they go to SE38 or SE80, and for a Fiori-based process there is usually no tcode involved at all on the front end.
How to use it in practice
- Call SE93 and enter the tcode name
- Choose Display to inspect an existing entry or Change/Create for a new one
- Select the type: program and screen (dialog transaction), report transaction, transaction with parameters, transaction with variant, or method of a business object type
- For a parameter transaction, enter the target transaction, the SET/GET parameter values, and whether the initial screen is skipped
- Set the authorization object on the relevant tab if the transaction needs one beyond the target's default
- Save and assign to a package and transport request
Key data objects
- TSTC - the core mapping: transaction code, program name, screen number, transaction type
- TSTCT - the short text description of the transaction code by language
- TSTCP - parameter values for parameter and variant transactions, including SET/GET parameter IDs and skip-screen indicators
- TSTCA - the authorization object assigned to the transaction and the check flag
- TADIR - the object directory entry (object type TRAN) used for transport and package assignment
How to prove it in the data
In SE16 on TSTC, filter on TCODE to confirm PGMNA (program) and DYPNO (screen) match what is expected; a blank or unexpected program name confirms a mapping problem rather than a program bug. Check TSTCT for the same TCODE to confirm the description matches what users see. If the symptom involves a wrong default value or a skipped screen, check TSTCP for that TCODE and read the parameter ID and value fields. Cross-reference TADIR with PGMID equal to R3TR and OBJECT equal to TRAN, OBJ_NAME equal to the tcode, to confirm it exists in a transportable package rather than sitting locally.
ECC vs S/4HANA
SE93 is unchanged on S/4HANA and continues to govern classic dialog and report transactions, including wrapper transactions built for compatibility or batch input use. Fiori apps are not tcodes and are not maintained here; the mapping from a launchpad tile to its backend service lives in the Fiori Launchpad configuration, separate from anything SE93 controls, even when a Fiori app internally still calls a classic transaction.
Common pitfalls and how to diagnose them
- Tcode not found: confirm the entry exists in TSTC before assuming a program error; check for a typo, a deleted entry, or a transport that failed to bring the object across environments
- Tcode locked: SE93 shows the definition but not lock status; a tcode that exists but cannot be started is a lock check in the transaction lock table, not an SE93 problem, so do not edit the definition trying to fix a lock
- Wrong target silently reached: parameter and variant transactions redirect to another tcode with preset values; when someone changes the underlying target transaction without updating the parameter defaults, users land on the right screen with the wrong data preselected, which looks like a data bug but is a configuration bug in the tcode
- Authorization object drift: the auth object attached in SE93 seeds role authorization checks; changing it after go-live does not retroactively update existing roles, so users start failing authorization checks that worked yesterday, and the fix is in role maintenance, not in SE93 again
- Shared parameter ID collisions: two unrelated transactions using the same SET/GET parameter ID will bleed default values into each other; a field defaults to a value the user never entered because a different transaction set that parameter earlier in the session
- Transport gaps: a tcode created and saved with no explicit package assignment can end up in $TMP or in a request that never releases, so it exists and works in the creating system but is missing everywhere downstream
- Reflex fix to avoid: deleting and recreating the tcode instead of correcting the single wrong field breaks any role or transport request that references the object by its existing key
Whose problem this is
Development team problem: the developer creating the report or dialog program owns the SE93 entry for it. Basis owns transport movement and transaction locking. Functional consultants care about the authorization object assigned, since it drives role design. A clean handover states the tcode name, its type, the transport request it travelled in, and the authorization object attached, if any.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tcodes/se93ERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.