- XUTMHR ;ISF/RWF - Taskman Hourly checkup routine. ;10/20/10 17:13
- ;;8.0;KERNEL;**446,534,554**;Jul 10, 1995;Build 7
- ;Per VHA Directive 2004-038, this routine should not be modified.
- Q
- ;
- HOUR ;Work to do each hour
- D SCAN ;Look for scheduled task that have dropped there schedule.
- D DEVREJ() ;Check for tasks re-scheduled for unavailable device.
- Q
- ;
- SCAN ;Scan the Scheduled Tasks file. Merge with XUTMCS sometime.
- N D0,OLD,NOW,X,X1,X2,Z0,Z4,Z5,TK
- ;Make NOW 10 minute in the past
- S U="^",D0=0,NOW=$$HTFM^XLFDT($$HADD^XLFDT($H,,,-10)),OLD=$$HTFM^XLFDT($H-1)
- F S D0=$O(^DIC(19.2,D0)) Q:'D0 D L -^DIC(19.2,D0)
- . L +^DIC(19.2,D0):2 I '$T Q
- . S X=$G(^DIC(19.2,D0,0)),X1=+$G(^(1)) ;X1 is the task #.
- . ;Check that the Option still exists.
- . I '($D(^DIC(19,+X,0))#2) D REMOVE(D0) Q
- . I $P(X,U,2)="" Q ;No Scheduled time.
- . ;Lock the Task
- . L +^%ZTSK(X1):5 I $T D L -^%ZTSK(X1)
- . . ;I $P(X,U,9)["S" Q ;Start-up.
- . . I $P(X,U,2)>NOW,$D(^%ZTSK(X1)) Q ;Scheduled for future
- . . ;ToDo Check if Device OK.
- . . I X1,'$D(^%ZTSK(X1)) D FIX(D0,X) Q ;%ZTSK entry missing
- . . S TK=$G(^%ZTSK(X1,0))
- . . I $P(X,U,2)>OLD,$L($P(X,U,6)) D FIX(D0,X,$P(TK,U,3)) Q ;
- . . Q
- . Q
- S ZTREQ="@"
- Q
- ;
- FIX(DA,X,USER) ;Reschedule
- N FDA,IEN,Y,DUZ
- S Y=$$APFIND^XUSAP("TASKMAN,PROXY USER")
- S DUZ=$S($G(USER):USER,Y>0:Y,1:.5)
- S Y=$$SCH^XLFDT($P(X,U,6),$P(X,U,2),1),IEN=DA_"," Q:'Y
- S FDA(19.2,IEN,2)=Y
- D FILE^DIE("K","FDA")
- Q
- ;
- REMOVE(DA) ;Remove if pointed to option is missing
- N DIK
- S DIK="^DIC(19.2," D ^DIK
- Q
- ;
- DEVREJ(SKIP) ;Rejected Device cleanup
- N ZTSK,ZTDTH,CNT,VOL,Y,TRY,X,Z,XMB,XMY
- D GETENV^%ZOSV S VOL=$P(Y,U,2),Y=$O(^%ZIS(14.5,"B",VOL,0)) Q:'Y
- S TRY=$P(^%ZIS(14.5,Y,0),U,12),SKIP=$G(SKIP) Q:'TRY
- S ZTDTH=0
- F S ZTDTH=$O(^%ZTSCH(ZTDTH)),ZTSK=0 Q:'ZTDTH F S ZTSK=$O(^%ZTSCH(ZTDTH,ZTSK)) Q:'ZTSK D
- . L +^%ZTSK(ZTSK):5 Q:'$T D ;Catch next time. p554
- . . Q:'$D(^%ZTSK(ZTSK,0))
- . . S Z=^%ZTSK(ZTSK,0),Y=$G(^%ZTSK(ZTSK,.2)),X=$P(Y,U,8)
- . . I X>TRY D UNSCH(ZTSK,$P(Z,U,3),$S($L($P(Y,U,6)):$P(Y,U,6),1:$P(Y,U)),SKIP)
- . . Q
- . L -^%ZTSK(ZTSK)
- . Q
- Q
- ;
- UNSCH(ZTSK,DZ,DEV,SKIP) ;Unschedule Task and send alert
- N XQA,XQAMSG,XQADATA,XQAROU
- D DQ^%ZTLOAD
- S XQA(DZ)="",XQAMSG="Your task #"_ZTSK_" was unscheduled, because it could not get device "_DEV,XQADATA=ZTSK,XQAROU="XQA^XUTMUTL"
- I 'SKIP D SETUP^XQALERT Q
- W !,XQAMSG
- Q
- ;
- EN(ZTQPARAM) ;So can job it to run.
- ;
- SNAP ;Snapshot ZTMON data into the TASKMAN SNAPSHOT file.
- S U="^"
- N %,FDA,I2,I3,IEN,NOWH3,R2,R3,SI,X,ZT1,ZT2,ZT3,ZT4,ZT5,ZTC,ZTC2,ZTQ1,ZTQ2
- S ZTQPARAM=$G(ZTQPARAM,"60,60") ;Default run for 60 minutes, snap every minute
- S ZTQ1=+ZTQPARAM*60 ;Convert minutes to seconds.
- S:ZTQ1>480 ZTQ1=480 ;Max 8 hours
- S ZTQ2=+$P(ZTQPARAM,",",2)
- S ZTQ2=$S(ZTQ2<2:2,ZTQ2>ZTQ1:ZTQ1,1:ZTQ2) ;See in bounds
- ;
- F D SN2 S ZTQ1=ZTQ1-ZTQ2 Q:'ZTQ1 H ZTQ2
- Q
- ;
- SN2 ;Do the snapshot
- K IEN,FDA,%,R2,R3,SI,I2,I3
- S IEN="+1,",NOWH3=$$H3^%ZTM($H)
- S FDA(14.72,IEN,.01)=$$NOW^XLFDT
- S FDA(14.72,IEN,2)=$$TM^ZTLOAD
- S ZT1="",ZT2=0,SI=101,R2=14.72101
- ;Get the Manager status data
- F S ZT1=$O(^%ZTSCH("STATUS",ZT1)) Q:ZT1="" S X=^(ZT1) D
- . S ZT2=ZT2+1,I2="+"_SI_","_IEN,SI=SI+1
- . S FDA(R2,I2,.01)=ZT1,FDA(R2,I2,2)=$P(X,U),FDA(R2,I2,3)=$P(X,U,2)
- . S FDA(R2,I2,4)=$P(X,U,3),FDA(R2,I2,5)=$P(X,U,4)
- . Q
- S FDA(14.72,IEN,3)=ZT2
- ;Check and get the LOAD Balance data
- S %=$G(^%ZTSCH("LOAD")),FDA(14.72,IEN,4)=$P(%,U),FDA(14.72,IEN,5)=$P(%,U,2)
- ;S ZT1=$O(^%ZTSCH(1)),FDA(14.72,IEN,8)=$$LATE(ZT1,NOWH3)
- S ZT1=1,ZT2=0,ZT3=0,ZTC=0,ZTC2=0,ZT5=0
- ;Look at the task schedule list
- ;ZT3 late amount, ZT5 is current time late, ZTC2 is count of late tasks.
- F S ZT1=$O(^%ZTSCH(ZT1)),ZT2=0 Q:'ZT1 S ZT5=$$LATE(ZT1,NOWH3) S:'ZT3 ZT3=ZT5 D
- . F S ZT2=$O(^%ZTSCH(ZT1,ZT2)) Q:'ZT2 S ZTC=ZTC+1 S:ZT5 ZTC2=ZTC2+1
- S FDA(14.72,IEN,7)=ZTC,FDA(14.72,IEN,8)=ZT3,FDA(14.72,IEN,9)=ZTC2
- ;Look at the IO list
- S ZT1="",ZTC=0
- F S ZT1=$O(^%ZTSCH("IO",ZT1)) Q:ZT1="" S:$O(^%ZTSCH("IO",ZT1,0)) ZTC=ZTC+1
- S FDA(14.72,IEN,10)=ZTC
- S ZT1="",ZT2=0,ZT3=0,ZT4=0,ZTC=0
- F S ZT1=$O(^%ZTSCH("IO",ZT1)),ZT2=0 Q:'ZT1 F S ZT2=$O(^%ZTSCH("IO",ZT1,ZT2)),ZT3=0 Q:'ZT2 S:'ZT4 ZT4=ZT2 F S ZT3=$O(^%ZTSCH("IO",ZT1,ZT2,ZT3)) Q:ZT3="" S ZTC=ZTC+1
- S FDA(14.72,IEN,11)=ZTC,FDA(14.72,IEN,12)=ZT4
- ;Look at the JOB list
- S ZT1=0,ZT2=0,ZT3=0,ZTC=0
- F S ZT1=$O(^%ZTSCH("JOB",ZT1)),ZT2=0 Q:'ZT1 F S ZT2=$O(^%ZTSCH("JOB",ZT1,ZT2)) Q:'ZT2 S ZTC=ZTC+1
- ;Look at the C list
- S ZT1="",ZT2=0,ZT3=0
- F S ZT1=$O(^%ZTSCH("C",ZT1)),ZT2=0 Q:ZT1="" F S ZT2=$O(^%ZTSCH("C",ZT1,ZT2)),ZT3=0 Q:ZT2="" F S ZT3=$O(^%ZTSCH("C",ZT1,ZT2,ZT3)) Q:ZT3="" S ZTC=ZTC+1
- S FDA(14.72,IEN,15)=ZTC
- S FDA(14.72,IEN,16)=$$LATE($O(^%ZTSCH("JOB",1)),NOWH3)
- ;Look at the running Task list
- S ZT1=0,ZT2=0,ZT3=0,ZTC=0
- F S ZT1=$O(^%ZTSCH("TASK",ZT1)) Q:'ZT1 S ZTC=ZTC+1
- S FDA(14.72,IEN,20)=ZTC
- ;Look at the SUB-Managers
- S ZT1=0,ZT2=0,ZT3=0,ZTC=0,R3=14.72201,SI=201
- F S ZT1=$O(^%ZTSCH("SUB",ZT1)),ZT2=0 Q:'$L(ZT1) F S ZT2=$O(^%ZTSCH("SUB",ZT1,ZT2)) Q:'ZT2 S X=^(ZT2) D
- . S ZTC=ZTC+1,I3="+"_SI_","_IEN,SI=SI+1
- . S FDA(R3,I3,.01)=ZT2,FDA(R3,I3,2)=$P(X,U),FDA(R3,I3,3)=$P(X,U,2),FDA(R3,I3,4)=$P(X,U,3),FDA(R3,I3,5)=ZT1
- . Q
- S FDA(14.72,IEN,19)=ZTC
- S FDA(14.72,IEN,22)=$$ACTJ^%ZOSV() ;Total jobs
- ;Now save the data.
- L +^%ZIS(14.72,0):10 D UPDATE^DIE("S","FDA") L -^%ZIS(14.72,0)
- I $D(^TMP("DIERR",$J)) D ^%ZTER
- Q
- ;
- LATE(T1,NOW) ;Return if a H3 time is Late
- S:T1["," T1=$$H3^%ZTM(T1)
- Q $S(T1<1:0,T1<NOW:NOW-T1,1:0)
- XUTMHR ;ISF/RWF - Taskman Hourly checkup routine. ;10/20/10 17:13
- +1 ;;8.0;KERNEL;**446,534,554**;Jul 10, 1995;Build 7
- +2 ;Per VHA Directive 2004-038, this routine should not be modified.
- +3 QUIT
- +4 ;
- HOUR ;Work to do each hour
- +1 ;Look for scheduled task that have dropped there schedule.
- DO SCAN
- +2 ;Check for tasks re-scheduled for unavailable device.
- DO DEVREJ()
- +3 QUIT
- +4 ;
- SCAN ;Scan the Scheduled Tasks file. Merge with XUTMCS sometime.
- +1 NEW D0,OLD,NOW,X,X1,X2,Z0,Z4,Z5,TK
- +2 ;Make NOW 10 minute in the past
- +3 SET U="^"
- SET D0=0
- SET NOW=$$HTFM^XLFDT($$HADD^XLFDT($HOROLOG,,,-10))
- SET OLD=$$HTFM^XLFDT($HOROLOG-1)
- +4 FOR
- SET D0=$ORDER(^DIC(19.2,D0))
- IF 'D0
- QUIT
- Begin DoDot:1
- +5 LOCK +^DIC(19.2,D0):2
- IF '$TEST
- QUIT
- +6 ;X1 is the task #.
- SET X=$GET(^DIC(19.2,D0,0))
- SET X1=+$GET(^(1))
- +7 ;Check that the Option still exists.
- +8 IF '($DATA(^DIC(19,+X,0))#2)
- DO REMOVE(D0)
- QUIT
- +9 ;No Scheduled time.
- IF $PIECE(X,U,2)=""
- QUIT
- +10 ;Lock the Task
- +11 LOCK +^%ZTSK(X1):5
- IF $TEST
- Begin DoDot:2
- +12 ;I $P(X,U,9)["S" Q ;Start-up.
- +13 ;Scheduled for future
- IF $PIECE(X,U,2)>NOW
- IF $DATA(^%ZTSK(X1))
- QUIT
- +14 ;ToDo Check if Device OK.
- +15 ;%ZTSK entry missing
- IF X1
- IF '$DATA(^%ZTSK(X1))
- DO FIX(D0,X)
- QUIT
- +16 SET TK=$GET(^%ZTSK(X1,0))
- +17 ;
- IF $PIECE(X,U,2)>OLD
- IF $LENGTH($PIECE(X,U,6))
- DO FIX(D0,X,$PIECE(TK,U,3))
- QUIT
- +18 QUIT
- End DoDot:2
- LOCK -^%ZTSK(X1)
- +19 QUIT
- End DoDot:1
- LOCK -^DIC(19.2,D0)
- +20 SET ZTREQ="@"
- +21 QUIT
- +22 ;
- FIX(DA,X,USER) ;Reschedule
- +1 NEW FDA,IEN,Y,DUZ
- +2 SET Y=$$APFIND^XUSAP("TASKMAN,PROXY USER")
- +3 SET DUZ=$SELECT($GET(USER):USER,Y>0:Y,1:.5)
- +4 SET Y=$$SCH^XLFDT($PIECE(X,U,6),$PIECE(X,U,2),1)
- SET IEN=DA_","
- IF 'Y
- QUIT
- +5 SET FDA(19.2,IEN,2)=Y
- +6 DO FILE^DIE("K","FDA")
- +7 QUIT
- +8 ;
- REMOVE(DA) ;Remove if pointed to option is missing
- +1 NEW DIK
- +2 SET DIK="^DIC(19.2,"
- DO ^DIK
- +3 QUIT
- +4 ;
- DEVREJ(SKIP) ;Rejected Device cleanup
- +1 NEW ZTSK,ZTDTH,CNT,VOL,Y,TRY,X,Z,XMB,XMY
- +2 DO GETENV^%ZOSV
- SET VOL=$PIECE(Y,U,2)
- SET Y=$ORDER(^%ZIS(14.5,"B",VOL,0))
- IF 'Y
- QUIT
- +3 SET TRY=$PIECE(^%ZIS(14.5,Y,0),U,12)
- SET SKIP=$GET(SKIP)
- IF 'TRY
- QUIT
- +4 SET ZTDTH=0
- +5 FOR
- SET ZTDTH=$ORDER(^%ZTSCH(ZTDTH))
- SET ZTSK=0
- IF 'ZTDTH
- QUIT
- FOR
- SET ZTSK=$ORDER(^%ZTSCH(ZTDTH,ZTSK))
- IF 'ZTSK
- QUIT
- Begin DoDot:1
- +6 ;Catch next time. p554
- LOCK +^%ZTSK(ZTSK):5
- IF '$TEST
- QUIT
- Begin DoDot:2
- +7 IF '$DATA(^%ZTSK(ZTSK,0))
- QUIT
- +8 SET Z=^%ZTSK(ZTSK,0)
- SET Y=$GET(^%ZTSK(ZTSK,.2))
- SET X=$PIECE(Y,U,8)
- +9 IF X>TRY
- DO UNSCH(ZTSK,$PIECE(Z,U,3),$SELECT($LENGTH($PIECE(Y,U,6)):$PIECE(Y,U,6),1:$PIECE(Y,U)),SKIP)
- +10 QUIT
- End DoDot:2
- +11 LOCK -^%ZTSK(ZTSK)
- +12 QUIT
- End DoDot:1
- +13 QUIT
- +14 ;
- UNSCH(ZTSK,DZ,DEV,SKIP) ;Unschedule Task and send alert
- +1 NEW XQA,XQAMSG,XQADATA,XQAROU
- +2 DO DQ^%ZTLOAD
- +3 SET XQA(DZ)=""
- SET XQAMSG="Your task #"_ZTSK_" was unscheduled, because it could not get device "_DEV
- SET XQADATA=ZTSK
- SET XQAROU="XQA^XUTMUTL"
- +4 IF 'SKIP
- DO SETUP^XQALERT
- QUIT
- +5 WRITE !,XQAMSG
- +6 QUIT
- +7 ;
- EN(ZTQPARAM) ;So can job it to run.
- +1 ;
- SNAP ;Snapshot ZTMON data into the TASKMAN SNAPSHOT file.
- +1 SET U="^"
- +2 NEW %,FDA,I2,I3,IEN,NOWH3,R2,R3,SI,X,ZT1,ZT2,ZT3,ZT4,ZT5,ZTC,ZTC2,ZTQ1,ZTQ2
- +3 ;Default run for 60 minutes, snap every minute
- SET ZTQPARAM=$GET(ZTQPARAM,"60,60")
- +4 ;Convert minutes to seconds.
- SET ZTQ1=+ZTQPARAM*60
- +5 ;Max 8 hours
- IF ZTQ1>480
- SET ZTQ1=480
- +6 SET ZTQ2=+$PIECE(ZTQPARAM,",",2)
- +7 ;See in bounds
- SET ZTQ2=$SELECT(ZTQ2<2:2,ZTQ2>ZTQ1:ZTQ1,1:ZTQ2)
- +8 ;
- +9 FOR
- DO SN2
- SET ZTQ1=ZTQ1-ZTQ2
- IF 'ZTQ1
- QUIT
- HANG ZTQ2
- +10 QUIT
- +11 ;
- SN2 ;Do the snapshot
- +1 KILL IEN,FDA,%,R2,R3,SI,I2,I3
- +2 SET IEN="+1,"
- SET NOWH3=$$H3^%ZTM($HOROLOG)
- +3 SET FDA(14.72,IEN,.01)=$$NOW^XLFDT
- +4 SET FDA(14.72,IEN,2)=$$TM^ZTLOAD
- +5 SET ZT1=""
- SET ZT2=0
- SET SI=101
- SET R2=14.72101
- +6 ;Get the Manager status data
- +7 FOR
- SET ZT1=$ORDER(^%ZTSCH("STATUS",ZT1))
- IF ZT1=""
- QUIT
- SET X=^(ZT1)
- Begin DoDot:1
- +8 SET ZT2=ZT2+1
- SET I2="+"_SI_","_IEN
- SET SI=SI+1
- +9 SET FDA(R2,I2,.01)=ZT1
- SET FDA(R2,I2,2)=$PIECE(X,U)
- SET FDA(R2,I2,3)=$PIECE(X,U,2)
- +10 SET FDA(R2,I2,4)=$PIECE(X,U,3)
- SET FDA(R2,I2,5)=$PIECE(X,U,4)
- +11 QUIT
- End DoDot:1
- +12 SET FDA(14.72,IEN,3)=ZT2
- +13 ;Check and get the LOAD Balance data
- +14 SET %=$GET(^%ZTSCH("LOAD"))
- SET FDA(14.72,IEN,4)=$PIECE(%,U)
- SET FDA(14.72,IEN,5)=$PIECE(%,U,2)
- +15 ;S ZT1=$O(^%ZTSCH(1)),FDA(14.72,IEN,8)=$$LATE(ZT1,NOWH3)
- +16 SET ZT1=1
- SET ZT2=0
- SET ZT3=0
- SET ZTC=0
- SET ZTC2=0
- SET ZT5=0
- +17 ;Look at the task schedule list
- +18 ;ZT3 late amount, ZT5 is current time late, ZTC2 is count of late tasks.
- +19 FOR
- SET ZT1=$ORDER(^%ZTSCH(ZT1))
- SET ZT2=0
- IF 'ZT1
- QUIT
- SET ZT5=$$LATE(ZT1,NOWH3)
- IF 'ZT3
- SET ZT3=ZT5
- Begin DoDot:1
- +20 FOR
- SET ZT2=$ORDER(^%ZTSCH(ZT1,ZT2))
- IF 'ZT2
- QUIT
- SET ZTC=ZTC+1
- IF ZT5
- SET ZTC2=ZTC2+1
- End DoDot:1
- +21 SET FDA(14.72,IEN,7)=ZTC
- SET FDA(14.72,IEN,8)=ZT3
- SET FDA(14.72,IEN,9)=ZTC2
- +22 ;Look at the IO list
- +23 SET ZT1=""
- SET ZTC=0
- +24 FOR
- SET ZT1=$ORDER(^%ZTSCH("IO",ZT1))
- IF ZT1=""
- QUIT
- IF $ORDER(^%ZTSCH("IO",ZT1,0))
- SET ZTC=ZTC+1
- +25 SET FDA(14.72,IEN,10)=ZTC
- +26 SET ZT1=""
- SET ZT2=0
- SET ZT3=0
- SET ZT4=0
- SET ZTC=0
- +27 FOR
- SET ZT1=$ORDER(^%ZTSCH("IO",ZT1))
- SET ZT2=0
- IF 'ZT1
- QUIT
- FOR
- SET ZT2=$ORDER(^%ZTSCH("IO",ZT1,ZT2))
- SET ZT3=0
- IF 'ZT2
- QUIT
- IF 'ZT4
- SET ZT4=ZT2
- FOR
- SET ZT3=$ORDER(^%ZTSCH("IO",ZT1,ZT2,ZT3))
- IF ZT3=""
- QUIT
- SET ZTC=ZTC+1
- +28 SET FDA(14.72,IEN,11)=ZTC
- SET FDA(14.72,IEN,12)=ZT4
- +29 ;Look at the JOB list
- +30 SET ZT1=0
- SET ZT2=0
- SET ZT3=0
- SET ZTC=0
- +31 FOR
- SET ZT1=$ORDER(^%ZTSCH("JOB",ZT1))
- SET ZT2=0
- IF 'ZT1
- QUIT
- FOR
- SET ZT2=$ORDER(^%ZTSCH("JOB",ZT1,ZT2))
- IF 'ZT2
- QUIT
- SET ZTC=ZTC+1
- +32 ;Look at the C list
- +33 SET ZT1=""
- SET ZT2=0
- SET ZT3=0
- +34 FOR
- SET ZT1=$ORDER(^%ZTSCH("C",ZT1))
- SET ZT2=0
- IF ZT1=""
- QUIT
- FOR
- SET ZT2=$ORDER(^%ZTSCH("C",ZT1,ZT2))
- SET ZT3=0
- IF ZT2=""
- QUIT
- FOR
- SET ZT3=$ORDER(^%ZTSCH("C",ZT1,ZT2,ZT3))
- IF ZT3=""
- QUIT
- SET ZTC=ZTC+1
- +35 SET FDA(14.72,IEN,15)=ZTC
- +36 SET FDA(14.72,IEN,16)=$$LATE($ORDER(^%ZTSCH("JOB",1)),NOWH3)
- +37 ;Look at the running Task list
- +38 SET ZT1=0
- SET ZT2=0
- SET ZT3=0
- SET ZTC=0
- +39 FOR
- SET ZT1=$ORDER(^%ZTSCH("TASK",ZT1))
- IF 'ZT1
- QUIT
- SET ZTC=ZTC+1
- +40 SET FDA(14.72,IEN,20)=ZTC
- +41 ;Look at the SUB-Managers
- +42 SET ZT1=0
- SET ZT2=0
- SET ZT3=0
- SET ZTC=0
- SET R3=14.72201
- SET SI=201
- +43 FOR
- SET ZT1=$ORDER(^%ZTSCH("SUB",ZT1))
- SET ZT2=0
- IF '$LENGTH(ZT1)
- QUIT
- FOR
- SET ZT2=$ORDER(^%ZTSCH("SUB",ZT1,ZT2))
- IF 'ZT2
- QUIT
- SET X=^(ZT2)
- Begin DoDot:1
- +44 SET ZTC=ZTC+1
- SET I3="+"_SI_","_IEN
- SET SI=SI+1
- +45 SET FDA(R3,I3,.01)=ZT2
- SET FDA(R3,I3,2)=$PIECE(X,U)
- SET FDA(R3,I3,3)=$PIECE(X,U,2)
- SET FDA(R3,I3,4)=$PIECE(X,U,3)
- SET FDA(R3,I3,5)=ZT1
- +46 QUIT
- End DoDot:1
- +47 SET FDA(14.72,IEN,19)=ZTC
- +48 ;Total jobs
- SET FDA(14.72,IEN,22)=$$ACTJ^%ZOSV()
- +49 ;Now save the data.
- +50 LOCK +^%ZIS(14.72,0):10
- DO UPDATE^DIE("S","FDA")
- LOCK -^%ZIS(14.72,0)
- +51 IF $DATA(^TMP("DIERR",$JOB))
- DO ^%ZTER
- +52 QUIT
- +53 ;
- LATE(T1,NOW) ;Return if a H3 time is Late
- +1 IF T1[","
- SET T1=$$H3^%ZTM(T1)
- +2 QUIT $SELECT(T1<1:0,T1<NOW:NOW-T1,1:0)