So verhinderst du Jobstarts zur falschen Zeit

Kennst du das? Du willst in SAP einen Job nur zu bestimmten Zeiten laufen lassen. Zum Beispiel nachts zwischen 22:00 und 6:00 Uhr oder nur an Werktagen. Klingt simpel, ist aber in der Praxis gar nicht so trivial.
Das ursprüngliche Problem
Wenn du in einem Report einfach eine Fehlermeldung wirfst, wenn der Job in einem „verbotenen“ Zeitraum läuft, dann zeigt dir die SM37 den Job rot an, also als abgebrochen.
Die Basis sieht das und denkt sofort: „Fehler, wir müssen eingreifen.“ Dabei war es ja eigentlich nur eine gewollte Sperre, damit der Job nicht zur falschen Zeit läuft.

Früher hatte ich es so gelöst, dass ich einen zweiten Job gestartet habe, den Status nachträglich auf „erfolgreich beendet“ gesetzt und damit den roten Eintrag wieder glattgebügelt habe. Funktioniert, ist aber unnötig komplex.
Die einfache Lösung
Der Trick: Du setzt den Job direkt im laufenden Programm auf Status „F“ (finished), bevor du die Fehlermeldung wirfst.
SAP macht dann folgendes:
- es schreibt eine A-Meldung ins Joblog, die sauber erklärt, warum der Job nicht lief
- versucht anschließend den Status auf „abgebrochen“ zu setzen – merkt aber: der Job steht schon auf „F“
- Ergebnis: In der SM37 sieht der Job so aus, als wäre er erfolgreich beendet. Kein rotes Kreuz, kein Alarm bei der Basis.
Gleichzeitig steht im Joblog der Grund, warum er nicht ausgeführt wurde. Genau das, was du willst.
Proof of Concept – der ABAP Report
Hier der Report, der das Ganze zeigt. In der Variante unten prüft er nur auf Uhrzeiten, du kannst das aber easy erweitern (z. B. Wochentage, Feiertage, etc.):
REPORT zdemo_job_execution_control NO STANDARD PAGE HEADING. SELECT-OPTIONS: s_uzeit FOR sy-uzeit. GET TIME. IF sy-uzeit NOT IN s_uzeit. DATA eventid TYPE tbtcm-eventid. DATA eventparm TYPE tbtcm-eventparm. DATA external_program_active TYPE tbtcm-xpgactive. DATA jobcount TYPE tbtcm-jobcount. DATA jobname TYPE tbtcm-jobname. DATA stepcount TYPE tbtcm-stepcount. CALL FUNCTION 'GET_JOB_RUNTIME_INFO' IMPORTING eventid = eventid eventparm = eventparm external_program_active = external_program_active jobcount = jobcount jobname = jobname stepcount = stepcount EXCEPTIONS no_runtime_info = 1 OTHERS = 2. IF jobname IS NOT INITIAL AND jobcount IS NOT INITIAL. UPDATE tbtco SET status = 'F' " Finished WHERE jobname = @jobname AND jobcount = @jobcount. MESSAGE e398(00) WITH 'Jobausführung nicht in erlaubtem Zeitraum'. ENDIF. ENDIF.
Fazit
Manchmal ist die beste Lösung die einfachste: Statt umständlich mit zusätzlichen Jobs herumzutricksen, kannst du das Problem direkt im Report selbst lösen.
So bleibt die Jobübersicht sauber, die Basis bleibt entspannt und du hast trotzdem volle Kontrolle über die Laufzeiten deiner Jobs.
Danke an Stefan!
- So verhinderst du Jobstarts zur falschen Zeit - 15. September 2025
- [apple] iCloud-Photos herunterladen - 21. Juli 2025
- Transportaufträge zur Importqueue hinzufügen - 9. Juli 2025