Есть работающий пример. Делал первый раз.
Ниже часть программы ZBHR_AUTO_HIRE_JOB, которая планирует в фоновом режиме запуск программы ZBHR_AUTO_HIRE
concatenate 'Z8_' p_refnr '_' p_count into lv_jobname.
call function 'JOB_OPEN'
exporting
delanfrep = ' '
jobgroup = ' '
jobname = lv_jobname
sdlstrtdt = sy-datum
sdlstrttm = sy-uzeit
importing
jobcount = lv_jobcount
exceptions
cant_create_job = 01
invalid_job_data = 02
jobname_missing = 03.
if sy-subrc ne 0.
"error processing
endif.
SUBMIT ZBHR_AUTO_HIRE
WITH p_begda = p_begda
WITH p_refnr = p_refnr
WITH p_werks = p_werks
WITH p_btrtl = ls_btrtl
WITH p_persg = p_persg
WITH p_persk = p_persk
with p_reason = p_reason
with p_count = p_count
"WITH p_orgeh = PSPAR-orgeh
"VIA SELECTION-SCREEN
VIA JOB lv_jobname
NUMBER lv_jobcount
AND RETURN.
starttime-sdlstrtdt = sy-datum .
starttime-sdlstrttm = sy-UZEIT + 150.
call function 'JOB_CLOSE'
exporting
" event_id = starttime-eventid
" event_param = starttime-eventparm
" event_periodic = starttime-periodic
jobcount = lv_jobcount
jobname = lv_jobname
" laststrtdt = starttime-laststrtdt
" laststrttm = starttime-laststrttm
" prddays = 1
" prdhours = 0
" prdmins = 0
" prdmonths = 0
" prdweeks = 0
sdlstrtdt = starttime-sdlstrtdt
sdlstrttm = starttime-sdlstrttm
" strtimmed = starttimeimmediate
" targetsystem = host
exceptions
cant_start_immediate = 01
invalid_startdate = 02
jobname_missing = 03
job_close_failed = 04
job_nosteps = 05
job_notex = 06
lock_failed = 07
others = 99.
В самой программе ZBHR_AUTO_HIRE происходят проверки. В моем случае , если объект был заблокирован, программа в фоне опять "планирует" себя через 5 минут. На всякий случай сделал так, чтобы после 10 попыток программа успокоилась
IF ls_bret-type = 'E'.
WRITE / 'Автоматический прием пенсионера не произошел'.
WRITE: / ls_bret-ID, ls_bret-number,ls_bret-message,ls_bret-message_v1,ls_bret-message_v2,ls_bret-message_v3,ls_bret-message_v4.
IF p_count <= 9.
p_count = p_count + 1.
SUBMIT ZBHR_AUTO_HIRE_JOB
WITH p_begda = p_begda
WITH p_refnr = p_refnr
WITH p_werks = p_werks
"WITH p_btrtl = ls_btrtl
WITH p_persg = p_persg
WITH p_persk = p_persk
WITH p_count = p_count
"WITH p_plans = lv_plans
WITH p_reason = p_reason
"VIA SELECTION-SCREEN
"VIA JOB 'z8'
"NUMBER lv_jobcount
AND RETURN.
ELSE.
WRITE / 'Было выполнено 10 попыток приема. Попробуйте сделать вручную через транзакцию PA40'.
ENDIF.
EXIT.
ENDIF.
P.S. Прочитал внимательней вопрос, обнаружил, что на него не ответил
А зачем удалять старое выполненное задание? Вдруг кто-то лог захочет почитать...
Скорее всего программа в фоне не может удалить задание, которое ее же и запустило. Оно должно выполнится, а потом уже удалять.