Back to Main Index

REPORT ZRS_CHECK_HOUSEKEEPING.

*---------------------------------------------------------------------*
* > Checks if all housekeeping jobs are scheduled correctly *
* >> Suited for all R/3 systems > 40A releases *
*---------------------------------------------------------------------*

TABLES: TBTCP, TBTCO, T000, VARID.

DATA: FOUND(1) VALUE SPACE,
STATEMENT(120),
VALUE(20),
ULOCK,
UEXIST,
DAYS TYPE I.

DATA: BEGIN OF I_REPS OCCURS 4,
NAME LIKE TBTCP-PROGNAME,
DESC(60),
END OF I_REPS.

DATA: VVAL LIKE RSPARAMS OCCURS 4 WITH HEADER LINE.
DATA: VTXT LIKE RSVSELTEXT OCCURS 4 WITH HEADER LINE.

DATA: numb TYPE I VALUE 0.
DATA: RCODE LIKE SY-SUBRC.

DATA: BEGIN OF I_JOBS OCCURS 4,
NAME LIKE TBTCO-JOBNAME,
REPO LIKE TBTCP-PROGNAME,
DATE LIKE TBTCO-STRTDATE,
TIME LIKE TBTCO-STRTTIME,
MINS LIKE TBTCO-PRDMINS,
HOUR LIKE TBTCO-PRDHOURS,
DAYS LIKE TBTCO-PRDDAYS,
WEEK LIKE TBTCO-PRDWEEKS,
MONT LIKE TBTCO-PRDMONTHS,
PERI LIKE TBTCO-PERIODIC,
VARI LIKE TBTCP-VARIANT,
USER LIKE TBTCP-AUTHCKNAM,
MAND LIKE TBTCO-AUTHCKMAN,
END OF I_JOBS.

DATA: I_JOBS_WA LIKE I_JOBS.

*------ Required jobs ------------------------------------------

I_REPS-DESC = 'Delete old spool requests (old) OSS 48400, 16083'.
I_REPS-NAME = 'RSPO0041'. APPEND I_REPS.
I_REPS-DESC = 'Deletes old job logs'.
I_REPS-NAME = 'RSBTCDEL'.APPEND I_REPS.
I_REPS-DESC = 'Delete old spool requests (new) OSS 48400, 130978'.
I_REPS-NAME = 'RSPO1041'. APPEND I_REPS.
I_REPS-DESC = 'Spool consistency check display (old) OSS 48400'.
I_REPS-NAME = 'RSPO0043'. APPEND I_REPS.
I_REPS-DESC = 'Spool consistency check (new) OSS 48400'.
I_REPS-NAME = 'RSPO1043'. APPEND I_REPS.
I_REPS-DESC = 'Reorganize batch input logs OSS 16083, 147354'.
I_REPS-NAME = 'RSBDCREO'. APPEND I_REPS.
I_REPS-DESC = 'Delete old ABAP shortdumps OSS 16803, 126974'.
I_REPS-NAME = 'RSSNAPDL'. APPEND I_REPS.
I_REPS-DESC = 'Delete old Job statistics OSS 16803'.
I_REPS-NAME = 'RSBPSTDE'. APPEND I_REPS.
I_REPS-DESC = 'Collector for performance monitor OSS 127642'.
I_REPS-NAME = 'RSCOLL00'. APPEND I_REPS.
I_REPS-DESC = 'Collector for Job-statistics OSS 16083'.
I_REPS-NAME = 'RSBPCOLL'. APPEND I_REPS.
I_REPS-DESC = 'Generates or updates WBO indices OSS 18023'.
I_REPS-NAME = 'SAPRSEUT'. APPEND I_REPS.
I_REPS-DESC = 'Reorganizes WBO indices OSS 18023'.
I_REPS-NAME = 'SAPRSLOG'. APPEND I_REPS.
I_REPS-DESC = 'Deletes outdated print parameters OSS 307970 16083'.
I_REPS-NAME = 'RSBTCPRIDEL'. APPEND I_REPS.
I_REPS-DESC = 'Reorganizes table TXMILOGRAW OSS 16083, 182963'.
I_REPS-NAME = 'RSXMILOGREORG'. APPEND I_REPS.
I_REPS-DESC = 'Needed to start tools & methods Alert Mon. OSS 16083'.
I_REPS-NAME = 'RSAL_BATCH_TOOL_DISPATCHING'. APPEND I_REPS.
I_REPS-DESC = 'Reorganizes update records OSS 16083, 67014'.
I_REPS-NAME = 'RSM13002'. APPEND I_REPS.

*---- Select last runs ----------------------------------------

LOOP AT I_REPS.
EXEC SQL PERFORMING APPEND_JOBS.
SELECT A.JOBNAME
, B.PROGNAME
, A.STRTDATE
, A.STRTTIME
, A.PRDMINS
, A.PRDHOURS
, A.PRDDAYS
, A.PRDWEEKS
, A.PRDMONTHS
, A.PERIODIC
, B.VARIANT
, B.AUTHCKNAM
, A.AUTHCKMAN
INTO :I_JOBS_WA
FROM TBTCO A
, TBTCP B
WHERE A.JOBNAME = B.JOBNAME
AND A.JOBCOUNT = B.JOBCOUNT
AND B.PROGNAME = :I_REPS-NAME
AND A.STRTDATE = (
SELECT MAX(A_INNER.STRTDATE)
FROM TBTCO A_INNER
, TBTCP B_INNER
WHERE A_INNER.JOBNAME = B_INNER.JOBNAME
AND A_INNER.JOBCOUNT = B_INNER.JOBCOUNT
AND B_INNER.PROGNAME = :I_REPS-NAME
AND A_INNER.JOBNAME = A.JOBNAME
)
ENDEXEC.
ENDLOOP.

SORT I_JOBS BY NAME REPO DATE TIME DESCENDING.
DELETE ADJACENT DUPLICATES FROM I_JOBS COMPARING NAME REPO DATE.
SORT I_JOBS BY REPO DATE.
SORT I_REPS BY NAME.

*----- Display -------------------------------------------------
LOOP AT I_REPS.
ADD 1 TO numb.
FOUND = SPACE.
WRITE:/ '========================================================='.
WRITE:/ numb, ' Program : ', I_REPS-NAME.
WRITE:/ '========================================================='.
LOOP AT I_JOBS.
IF I_JOBS-REPO = I_REPS-NAME.
FOUND = 'X'.
WRITE:/ '---------------------------------------------------------'.
WRITE:/ 'Jobname :', I_JOBS-NAME.
WRITE:/ 'Description :', I_REPS-DESC.
WRITE:/ 'Last run :'.

days = sy-datum - i_jobs-date.
IF days > 31.
WRITE: 'No last run info found for this job'.
ELSE.
WRITE: I_JOBS-DATE.
ENDIF.
 

WRITE:/ 'at :', I_JOBS-TIME.
WRITE:/ 'User :', I_JOBS-USER.

CALL FUNCTION 'USER_EXISTS'
EXPORTING
BNAME = I_JOBS-USER
CLIENT = I_JOBS-MAND
IMPORTING
LOCKED = ULOCK
EXCEPTIONS
USER_DONT_EXIST = 1
USER_EXISTS = 2
OTHERS = 3
.
IF SY-SUBRC <> 2.
WRITE: '( does not exist !! )'.
UEXIST = 'X'.
ENDIF.
IF ULOCK NE SPACE.
WRITE: '( is locked !! )'.
ENDIF.
WRITE:/ 'Type :'.
CASE I_JOBS-REPO.
WHEN 'RSBTCDEL'.
WRITE: 'Client-independent (if',i_jobs-user.
WRITE: 'has S_BTCH_ADM=Y)'.
WHEN 'RSPO1041' OR 'RSPO0041'.
WRITE: 'Client-independent (if client = "*" in variant)'.
WHEN 'RSPO1043' OR 'RSPO1043'.
WRITE: 'Client-dependent due to bug, OSS Note 375964.'.
WHEN 'RSBDCREO'. WRITE: 'Client-dependent'.
WHEN 'RSSNAPDL'. WRITE: 'Client-independent'.
WHEN 'RSBPSTDE'. WRITE: 'Client-independent'.
WHEN 'RSCOLL00'. WRITE: 'Client-independent'.
WHEN 'RSBPCOLL'. WRITE: 'Client-independent'.
WHEN 'SAPRSEUT'. WRITE: 'Client-independent'.
WHEN 'SAPRSLOG'. WRITE: 'Client-independent'.
WHEN 'RSBTCPRIDEL'. WRITE: 'Client-independent'.
WHEN 'RSXMILOGREORG'. WRITE: 'Client-independent'.
WHEN 'RSAL_BATCH_TOOL_DISPATCHING'. WRITE: 'Client-independent'.
WHEN 'RSM13002'. WRITE: 'Client-independent'.
ENDCASE.
WRITE:/ 'Client :', I_JOBS-MAND.
Select * from T000 where mandt = i_jobs-mand.
ENDSELECT.
if sy-subrc <> 0.
WRITE: '( Client does not exist)'.
ENDIF.
WRITE:/ 'Period :'.
IF I_JOBS-PERI NE SPACE.
IF I_JOBS-MINS NE 0.
WRITE: I_JOBS-MINS, 'minutes'.
ENDIF.
IF I_JOBS-HOUR NE 0.
WRITE: I_JOBS-HOur, 'hours'.
ENDIF.
IF I_JOBS-DAYS NE 0.
WRITE: I_JOBS-DAYS, 'days'.
ENDIF.
IF I_JOBS-WEEK NE 0.
WRITE: I_JOBS-WEEK, 'weeks'.
ENDIF.
IF I_JOBS-MONT NE 0.
WRITE: I_JOBS-MONT, 'months'.
ENDIF.
ENDIF.
WRITE:/ 'Variant :'.
IF I_JOBS-VARI EQ SPACE.
WRITE: 'Not applicable'.
ELSE.
WRITE: I_JOBS-VARI.
ENDIF.
WRITE:/ '---------------------------------------------------------'.
IF I_JOBS-VARI NE SPACE.

SELECT * from varid client specified
where mandt = i_jobs-mand
and REPORT = I_JOBS-REPO
and VARIANT = I_JOBS-VARI.
ENDSELECT.

IF RCODE NE 0.
WRITE:/ 'Variant', I_JOBS-VARI, ' does not exist !!'.
IF I_JOBS-MAND = SY-MANDT.

CALL FUNCTION 'RS_VARIANT_VALUES_TECH_DATA'
EXPORTING
REPORT = I_JOBS-REPO
VARIANT = I_JOBS-VARI
SEL_TEXT = 'X'
MOVE_OR_WRITE = 'W'
TABLES
VARIANT_VALUES = VVAL
VARIANT_TEXT = VTXT.
ENDIF.

ELSE.
LOOP AT VTXT.
WRITE:/5 VTXT-TEXT.
READ TABLE VVAL INDEX SY-TABIX.
IF VVAL-KIND EQ 'P'.
WRITE: VVAL-LOW.
ELSEIF VVAL-KIND = 'S'.
WRITE: VVAL-LOW, VVAL-HIGH.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF FOUND EQ SPACE.
IF I_REPS-NAME EQ 'RSM13002'.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'rdisp/vb_delete_after_execution'
ID 'VALUE' FIELD VALUE.
IF VALUE NE '1'.
WRITE:/ 'Since automatic deletion of update records is '.
WRITE:/ 'disabled, RSM13002 should be scheduled.'.
ELSE.
WRITE:/ 'Jobs is not neccesary since automatic deletion'.
WRITE:/ 'of update records is enabled.'.
ENDIF.
ELSeIF I_reps-name eq 'RSBTCPRIDEL'.
IF sy-saprl < '46A'.
WRITE:/ 'Job is not neccesary since R/3 release is '.
WRITE:/ 'lower than 46A.'.
ELSE.
WRITE:/ 'Job is neccesary since R/3 release is '.
WRITE:/ 'higher than 46A.'.
ENDIF.
ELSeIF I_reps-name eq 'RSXMILOGREORG'.
IF sy-saprl < '46A'.
WRITE:/ 'Job is not neccesary since R/3 release is '.
WRITE:/ 'lower than 46A.'.
ELSE.
WRITE:/ 'Job is neccesary since R/3 release is '.
WRITE:/ 'higher than 46A.'.
ENDIF.
ELSeIF I_reps-name eq 'RSAL_BATCH_TOOL_DISPATCHING'.
IF sy-saprl < '46A'.
WRITE:/ 'Job is not neccesary since R/3 release is '.
WRITE:/ 'lower than 46A.'.
ELSE.
WRITE:/ 'Job is neccesary since R/3 relaese is '.
WRITE:/ 'higher than 46A.'.
ENDIF.
ELSEIF I_reps-name eq 'RSPO0043' OR
I_reps-name eq 'RSPO1043'.
CONCATENATE 'Program' I_REPS-NAME 'not found in any job.' INTO
STATEMENT SEPARATED BY SPACE.
WRITE:/ STATEMENT.
WRITE:/ 'Schedule RSPO0043 OR preferably RSPO1043'.
WRITE:/ 'according to OSS Notes 16083 and 98065'.
WRITE:/ 'Note that these ABAPs are CLIENT-DEPENDENT due'.
WRITE:/ 'to a bug; see OSS Note 375964.'.
ELSEIF I_reps-name eq 'RSPO0041' OR
I_reps-name eq 'RSPO1041'.
CONCATENATE 'Program' I_REPS-NAME 'not found in any job.' INTO
STATEMENT SEPARATED BY SPACE.
WRITE:/ STATEMENT.
WRITE:/ 'Schedule RSPO0041 OR preferably RSPO1041'.
WRITE:/ 'according to : OSS Notes 16083 and 130978'.
ELSE.
CONCATENATE 'Program' I_REPS-NAME 'not found in any job.' INTO
STATEMENT SEPARATED BY SPACE.
WRITE:/ STATEMENT.
CONCATENATE 'Schedule' I_REPS-NAME 'according to OSS Note 16083.'
INTO STATEMENT SEPARATED BY SPACE.
WRITE:/ STATEMENT.
ENDIF.
ENDIF.
ENDLOOP.

*---------------------------------------------------------------------*
* FORM APPEND_JOBS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM APPEND_JOBS.
APPEND I_JOBS_WA TO I_JOBS.
ENDFORM.