SM35 — Batch Input Session Monitor
SM35 monitors and processes batch input sessions, which are queues of recorded screen-level transaction data used by classic mass upload interfaces such as LSMW recordings or legacy RFBIBL-style loads. A session showing status processed only confirms the queue ran to completion, not that every transaction inside it posted without error; individual transactions can still fail while the overall session closes as processed.
This page covers SM35, the transaction used to run and monitor batch input sessions created by classic data upload programs. It focuses on the gap between session status and actual document posting success, the stuck-lock and duplicate-reprocessing failures that recur in production, and how ownership splits between functional and technical teams during a load.
Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,181 words
Purpose
SM35 manages batch input sessions, which are queues of recorded screen-navigation data (dynpro id, field name, field value) generated by programs that simulate a user typing through a transaction screen by screen. Interfaces such as LSMW using the batch input recording method, or older custom programs calling the batch input function modules, write these queues instead of posting directly. SM35 is where those queues get processed, either in the foreground with the consultant clicking through each screen, or in the background as a scheduled job. The structural fact that causes most confusion is that SM35 operates at the queue level. A session can complete and disappear from the worklist as processed while several transactions inside it ended in error status, because the session engine keeps moving to the next transaction record after a failure unless told otherwise.
When it is used
SM35 is reached for during data migration cutover when legacy interfaces still use classic batch input rather than BAPIs or IDocs, during recurring load jobs such as bank statement uploads or bulk HR changes built on old recording-based programs, and when troubleshooting a queue that appears stuck or partially failed. It is not the tool for BAPI-based or IDoc-based interfaces, which post directly or land in IDoc monitoring instead of a batch input queue. On newer implementations the Migration Cockpit and its Fiori-based load apps replace batch input entirely for cutover, but SM35 remains relevant wherever a legacy program or third-party middleware still generates classic sessions, and it stays the correct place to check when someone reports that a nightly interface run left a queue open overnight.
How to use it in practice
- Call SM35 and review the session list, filtering by session name, creation date, or status to find the relevant queue
- Select the session and choose the processing mode: display errors only, process in foreground, or process in background
- For foreground processing, step through each screen the queue replays, resolving any field that the recorded data no longer matches
- For a session already in error, open the analysis or log view to identify which transaction number and which screen field caused the failure
- Reprocess only the failed transactions where the tool allows partial reprocessing, and decide whether to delete or keep the session once resolved
Key data objects
- APQI - session header: session name, creating user, creation date and time, lock status, keep flag, and overall processing status
- APQD - the recorded queue data itself: one set of records per transaction in the session, holding the dynpro screen id and the field values to be entered
- BDCMSGCOLL - error and information messages collected during processing, tied back to a specific transaction number and screen within the session
- TBTCO - if the session is run as a background job rather than in dialog, the job itself is tracked here alongside the normal job monitoring tables
How to prove it in the data
Query APQI on the session name and creation date range to get the session's overall status code and lock state. Take the session's internal identifier from that record and query BDCMSGCOLL filtering on the same session, then look at the message type per transaction number: any entry with message type E or A inside an otherwise processed session proves that individual transactions failed even though the session itself closed. Cross-check the transaction number against the business document that was supposed to be created to confirm it is genuinely missing rather than just delayed.
ECC vs S/4HANA
SM35 exists and behaves the same way on S/4HANA; the underlying batch input engine and session tables are unchanged. What has changed is which interfaces still generate sessions: current cutover projects are pushed toward the Migration Cockpit and its BAPI or OData based load approach, which does not create batch input queues at all. Custom programs and older LSMW recordings that still call the classic batch input function modules continue to run and land in SM35 exactly as before, so the transaction has not been deprecated, only sidelined for new migration work.
Common pitfalls and how to diagnose them
- Stuck in being processed: the session shows a locked, in-process status but nothing is moving. Check SM50 or SM66 for the work process or background job that owns the session; if it crashed without releasing the lock, the session needs its lock cleared manually rather than being reprocessed blind, which would create duplicates once the original job's partial postings are found.
- Processed but documents missing: the session status reads processed, but the expected material document, invoice, or master record does not exist. This means one or more individual transactions inside the queue errored while the session kept running. Always open the error analysis per transaction rather than trusting the header status.
- Authorization failures hidden in the queue: a batch input session posts using the authorization of whichever user is running the processing step, foreground or background, not necessarily the user who created the recording. A queue built and tested by one user can fail in production when scheduled under a service or batch user missing a required authorization object.
- Screen mismatch after a transport: batch input recordings are tied to a specific screen sequence and dynpro layout. A transport that changes screen variants, adds a mandatory field, or alters a tab sequence in the target transaction breaks the recording, producing a generic screen-does-not-match error that has nothing to do with the data values themselves.
- Duplicate postings from reprocessing: reprocessing a session that already succeeded, or one left with the keep flag set after a partial run, re-executes transactions that already posted. Confirm via BDCMSGCOLL and the target document tables which transactions actually completed before rerunning anything.
Whose problem this is
Functional consultants own the content of the session, the correctness of field values, and confirming that documents actually posted. Basis or the interface development team owns stuck locks, background job scheduling for large sessions, and authorization setup for the processing user. A clean handover includes the session name, the transaction number that failed, the exact error message from the analysis log, and the screen field it points to.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tcodes/sm35ERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.