DVBAUDUU1 ;ALB/CP - Audited Option User Utilization Build ; 3/28/18 9:16am
;;2.7;AMIE;**256**;;Build 19
; Per VHA Directive 6402 this routine should not be modified
; GET1^DIQ ; IA #2056
; $$ACTIVE^XUSER ; IA #2343
; ^DIC(19,"B", ; IA #2509
;
Q
;
BUILD ; Driver for building sorted ^TMP global
;
;
N DVBBUILD
; ZEXCEPT: DVBRPT
;
S DVBBUILD="BUILD"_DVBRPT ; becomes BUILD1, BUILD2, or BUILD3
D @DVBBUILD
;
EXIT ; Exit BUILD^DVBAUDUU1
Q ; Quit BUILD^DVBAUDUU
;
BUILD1 ; User selected specific audited OPTIONs found in DVBOPT(array).
;
N DIERR,DVBIEN19,DVBIEN200,DVBOPTNAME,DVBIEN19,DVBQUIT
; ZEXCEPT: DVBOPT
;
S DVBQUIT=0
S DVBIEN19=0 ; Loop thru user's selected Options
F S DVBIEN19=$O(DVBOPT(DVBIEN19)) Q:'DVBIEN19!DVBQUIT D ;
. ;
. S DVBIEN200=0 ; IEN to top level of IVV OPTION AUDITOR-USER #396.9992
. F S DVBIEN200=$O(^DVB(396.9992,"OPTION",DVBIEN19,DVBIEN200)) Q:'DVBIEN200!DVBQUIT D
.. S DVBOPTNAME=$$GET1^DIQ(19,DVBIEN19,.01,"E","","DVBERRMSG")
.. D DIERR^DVBAUDDILG1(40,5,"","DVBERRMSG","BUILD1^"_$T(+0)) Q:DVBQUIT
.. D CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200)
;
Q ; Quit BUILD1
;
BUILD2 ; User selected specific free text range found in DVBFTBEG & DVBFTEND
;
N DVBIEN19,DVBOPTNAME
; ZEXCEPT: DVBFTBEG,DVBFTEND
;
S DVBOPTNAME=DVBFTBEG ; Loop thru Options names w/free text from-to range
F S DVBOPTNAME=$O(^DIC(19,"B",DVBOPTNAME)) Q:DVBOPTNAME=""!(DVBOPTNAME]DVBFTEND) S DVBIEN19="" D
. F S DVBIEN19=$O(^DIC(19,"B",DVBOPTNAME,DVBIEN19)) Q:'DVBIEN19 D ;
.. Q:'$D(^DVB(396.9992,"OPTION",DVBIEN19)) ; Option not audited
.. N DVBIEN200
.. S DVBIEN200=0
.. F S DVBIEN200=$O(^DVB(396.9992,"OPTION",DVBIEN19,DVBIEN200)) Q:'DVBIEN200 D
... D CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200)
;
Q ; Quit BUILD2
;
BUILD3 ; User selected package namespace found in DVBPKG
;
N DVBIEN19,DVBIEN200,DVBOPTNAME
; ZEXCEPT: DVBPKG
;
S DVBOPTNAME=DVBPKG ; Loop thru Option names using the package namespace
F S DVBOPTNAME=$O(^DIC(19,"B",DVBOPTNAME)) Q:DVBOPTNAME=""!($E(DVBOPTNAME,1,$L(DVBPKG))'=DVBPKG) D
. S DVBIEN19=0
. F S DVBIEN19=$O(^DIC(19,"B",DVBOPTNAME,DVBIEN19)) Q:'DVBIEN19 D ;
.. Q:'$D(^DVB(396.9992,"OPTION",DVBIEN19)) ; Option not audited
.. N DVBIEN200
.. S DVBIEN200=0
.. F S DVBIEN200=$O(^DVB(396.9992,"OPTION",DVBIEN19,DVBIEN200)) Q:'DVBIEN200 D ;
... D CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200)
;
Q ; Quit BUILD3
;
CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200) ; Audited Option User Utilization Build
N DVBACTUSER,DIERR,DVBIENS,DVBNEWPERS,DVBOPTION,DVBPARSVC
N DVBSKIP,DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBSORTBY
N DVBSVC,DVBSVCI,DVBTITLE,DVBTITLEI,DVBUOPTION,DVBUSAGE,DVBUSER
; ZEXCEPT: DVBASKDT,DVBDTBEG,DVBDTEND,DVBLEGEND,DVBQUIT,DVBSORT,DVBULIMIT,U
;
; Retrieve data related to the top level of file #396.9992
;
S DVBACTUSER=$P($$ACTIVE^XUSER(DVBIEN200),U,1)
I DVBULIMIT=2,DVBACTUSER=0 Q
I DVBULIMIT=3,DVBACTUSER=1 Q
D NEWPERS^DVBAUDDIQ(DVBIEN200) Q:DVBQUIT
D PARSVC^DVBAUDDIQ(+DVBNEWPERS("SVCI"))
I DVBPARSVC("IEN49")=0 D ;
. S DVBPARSVC("IEN49")=+DVBNEWPERS("SVCI")
. S DVBPARSVC("NAME")=DVBNEWPERS("SVC")
. I DVBPARSVC("IEN49")=0 D ;
. . S DVBPARSVC("NAME")="<NoParentService>"
. . S DVBPARSVC="<NoParentService>"
;
; Prefix inactive usernames with an '*'
;
S DVBNEWPERS("USERNAME")=$S(DVBACTUSER=0:"*",1:"")_DVBNEWPERS("USERNAME")
; Retrieve data related to the DVBOPTION (multiple) of file #396.9992
D UOPTION^DVBAUDDIQ(DVBIEN200,DVBIEN19) Q:DVBQUIT ; Returns DVBUOPTION(array)
S DVBSKIP=0 D SCREEN Q:DVBSKIP
I $E(DVBACTUSER)=0 S DVBLEGEND=1 ; Inactive user, display legend at end of rpt
;
; Setup various sort variables and set the ^TMP global
;
S DVBSORTBY="SORT"_DVBSORT D @DVBSORTBY
D SETTMP(DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBIEN200)
;
Q ; Quit subroutine CONTINUE
;
SCREEN ; Screen the record
; Output:
; DVBSKIP ; 0 ; All screens have passed, allow record to be utilized
; 1 ; One or more screens failed, so skip the record
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBASKDT,DVBDTBEG,DVBDTEND,DVBSKIP,DVBUOPTION
;
; Skip the record if no DVBOPTION (multiple) is defined for the user
I '$D(^DVB(396.9992,DVBIEN200,"OPTION",DVBIEN19,0)) S DVBSKIP=1 Q
;
I DVBASKDT="YES" D Q:DVBSKIP ; Check for optional data ranage
. I $P(DVBUOPTION("DTLASTI"),".")<DVB2DTBEG("I") S DVBSKIP=1 Q
. I $P(DVBUOPTION("DTLASTI"),".")>DVB2DTEND("I") S DVBSKIP=1 Q
;
;
Q ; Quit subroutine SCREEN
;
SETTMP(DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBIEN200) ; Set the ^TMP global data
;
N DVBRPTDATA,DVB2OPTION
; ZEXCEPT: DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC,DVB2OPTION,DVBUSAGE,DVBUSAGE,DVBUOPTION
;
S DVBRPTDATA=DVBOPTNAME_"^"
S DVBRPTDATA=DVBRPTDATA_DVBIEN200_"^"
S DVBRPTDATA=DVBRPTDATA_DVBNEWPERS("USERNAME")_"^"
S DVBRPTDATA=DVBRPTDATA_DVBPARSVC("NAME")_"^"
S DVBRPTDATA=DVBRPTDATA_DVBUOPTION("DT1ST")_"^"
S DVBRPTDATA=DVBRPTDATA_DVBUOPTION("DTLAST")_"^"
S DVBRPTDATA=DVBRPTDATA_DVBUOPTION("COUNTER")
;
S DVB2OPTION=$P($G(XQY0),U,2)
S ^TMP("AMIE",$J,DVB2OPTION,DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6)=DVBRPTDATA
;
Q ; Quit SETTMP
;
SORT1 ; Sort by OPTION & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6
;
S DVBSORT1=DVBOPTNAME
S DVBSORT2=DVBIEN19
S DVBSORT3="<Sort3>"
S DVBSORT4="<Sort4>"
S DVBSORT5=DVBNEWPERS("USERNAME")
S DVBSORT6=DVBIEN200
;
Q ; Quit SORT1
;
SORT2 ; Sort by OPTION, PARENT SERVICE & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBPARSVC,DVBOPTNAME
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6
;
S DVBSORT1=DVBOPTNAME
S DVBSORT2=DVBIEN19
S DVBSORT3=DVBPARSVC("NAME")
S DVBSORT4=DVBPARSVC("IEN49")
S DVBSORT5=DVBNEWPERS("USERNAME")
S DVBSORT6=DVBIEN200
;
Q ; Quit SORT2
;
;------------------------------------------------------------------
SORT3 ; Sort by OPTION, DATE LAST USED & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBIENS,DVBNEWPERS,DVBOPTION,DVBOPTNAME,DVBUOPTION
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6
;
S DVBSORT1=DVBOPTNAME
S DVBSORT2=DVBIEN19
S DVBSORT3=-DVBUOPTION("DTLASTI") ; dt last used (reverse order)
S DVBSORT4="<Sort4>"
S DVBSORT5=DVBNEWPERS("USERNAME")
S DVBSORT6=DVBIEN200
;
Q ; Quit SORT3
;
SORT4 ; Sort by OPTION, DVBUSAGE COUNT & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=DVBOPTNAME
S DVBSORT2=DVBIEN19
S DVBSORT3=-DVBUOPTION("COUNTER") ; Puts DVBUSAGE in reverse order
S DVBSORT4="<Sort4>"
S DVBSORT5=DVBNEWPERS("USERNAME")
S DVBSORT6=DVBIEN200
;
Q ; Quit SORT4
;
;------------------------------------------------------------------
SORT5 ; Sort by DVBUSAGE COUNT, OPTION & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=-DVBUOPTION("COUNTER") ; Puts DVBUSAGE in reverse order
S DVBSORT2="<Sort2>"
S DVBSORT3=DVBOPTNAME
S DVBSORT4=DVBIEN19
S DVBSORT5=DVBNEWPERS("USERNAME")
S DVBSORT6=DVBIEN200
;
Q ; Quit SORT5
;
SORT6 ; Sort by DVBUSAGE COUNT, PARENT SERVICE & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=-DVBUOPTION("COUNTER") ; Puts DVBUSAGE in reverse order
S DVBSORT2=DVBPARSVC("NAME")
S DVBSORT3=DVBPARSVC("IEN49")
S DVBSORT4=DVBNEWPERS("USERNAME")
S DVBSORT5=DVBIEN200
S DVBSORT6=DVBIEN19 ; Needed so no sub-file entry is dropped
;
Q ; Quit SORT6
;
SORT7 ; Sort by PARENT SERVICE, OPTION & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=DVBPARSVC("NAME")
S DVBSORT2=DVBPARSVC("IEN49")
S DVBSORT3=DVBOPTNAME
S DVBSORT4=DVBIEN19
S DVBSORT5=DVBNEWPERS("USERNAME")
S DVBSORT6=DVBIEN200
;
Q ; Quit SORT7
;
SORT8 ; Sort by PARENT SERVICE, USER, & OPTION
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=DVBPARSVC("NAME")
S DVBSORT2=DVBPARSVC("IEN49")
S DVBSORT3=DVBNEWPERS("USERNAME")
S DVBSORT4=DVBIEN200
S DVBSORT5=DVBOPTNAME
S DVBSORT6=DVBIEN19
;
Q ; Quit SORT8
;
SORT9 ; Sort by PARENT SERVICE, DATE LAST USED & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=DVBPARSVC("NAME")
S DVBSORT2=DVBPARSVC("IEN49")
S DVBSORT3=-DVBUOPTION("DTLASTI") ; dt last used (reverse order)
S DVBSORT4=DVBNEWPERS("USERNAME")
S DVBSORT5=DVBIEN200
S DVBSORT6=DVBIEN19 ; Added to make sure records were not dropped
;
Q ; Quit SORT9
;
SORT10 ; Sort by PARENT SERVICE, DATE LAST USED & OPTION
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=DVBPARSVC("NAME")
S DVBSORT2=DVBPARSVC("IEN49")
S DVBSORT3=-DVBUOPTION("DTLASTI") ; dt last used (reverse order)
S DVBSORT4=DVBOPTNAME
S DVBSORT5=DVBIEN19
S DVBSORT6=DVBIEN200 ; Added to make sure records were not dropped
;
Q ; Quit SORT10
;
SORT11 ; Sort by DATE LAST USED, OPTION, & USER
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=-DVBUOPTION("DTLASTI") ; dt last used (reverse orderer)
S DVBSORT2="<Sort2>"
S DVBSORT3=DVBOPTNAME
S DVBSORT4=DVBIEN19
S DVBSORT5=DVBNEWPERS("USERNAME")
S DVBSORT6=DVBIEN200
;
Q ; Quit SORT11
;
SORT12 ; Sort by DATE LAST USED, USER & OPTION
;
; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
;
S DVBSORT1=-DVBUOPTION("DTLASTI") ; dt last used (reverse orderer)
S DVBSORT2="<Sort2>"
S DVBSORT3=DVBNEWPERS("USERNAME")
S DVBSORT4=DVBIEN200
S DVBSORT5=DVBOPTNAME
S DVBSORT6=DVBIEN19
;
Q ; Quit SORT12
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDVBAUDUU1 10492 printed Sep 17, 2026@20:27:37 Page 2
DVBAUDUU1 ;ALB/CP - Audited Option User Utilization Build ; 3/28/18 9:16am
+1 ;;2.7;AMIE;**256**;;Build 19
+2 ; Per VHA Directive 6402 this routine should not be modified
+3 ; GET1^DIQ ; IA #2056
+4 ; $$ACTIVE^XUSER ; IA #2343
+5 ; ^DIC(19,"B", ; IA #2509
+6 ;
+7 QUIT
+8 ;
BUILD ; Driver for building sorted ^TMP global
+1 ;
+2 ;
+3 NEW DVBBUILD
+4 ; ZEXCEPT: DVBRPT
+5 ;
+6 ; becomes BUILD1, BUILD2, or BUILD3
SET DVBBUILD="BUILD"_DVBRPT
+7 DO @DVBBUILD
+8 ;
EXIT ; Exit BUILD^DVBAUDUU1
+1 ; Quit BUILD^DVBAUDUU
QUIT
+2 ;
BUILD1 ; User selected specific audited OPTIONs found in DVBOPT(array).
+1 ;
+2 NEW DIERR,DVBIEN19,DVBIEN200,DVBOPTNAME,DVBIEN19,DVBQUIT
+3 ; ZEXCEPT: DVBOPT
+4 ;
+5 SET DVBQUIT=0
+6 ; Loop thru user's selected Options
SET DVBIEN19=0
+7 ;
FOR
SET DVBIEN19=$ORDER(DVBOPT(DVBIEN19))
if 'DVBIEN19!DVBQUIT
QUIT
Begin DoDot:1
+8 ;
+9 ; IEN to top level of IVV OPTION AUDITOR-USER #396.9992
SET DVBIEN200=0
+10 FOR
SET DVBIEN200=$ORDER(^DVB(396.9992,"OPTION",DVBIEN19,DVBIEN200))
if 'DVBIEN200!DVBQUIT
QUIT
Begin DoDot:2
+11 SET DVBOPTNAME=$$GET1^DIQ(19,DVBIEN19,.01,"E","","DVBERRMSG")
+12 DO DIERR^DVBAUDDILG1(40,5,"","DVBERRMSG","BUILD1^"_$TEXT(+0))
if DVBQUIT
QUIT
+13 DO CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200)
End DoDot:2
End DoDot:1
+14 ;
+15 ; Quit BUILD1
QUIT
+16 ;
BUILD2 ; User selected specific free text range found in DVBFTBEG & DVBFTEND
+1 ;
+2 NEW DVBIEN19,DVBOPTNAME
+3 ; ZEXCEPT: DVBFTBEG,DVBFTEND
+4 ;
+5 ; Loop thru Options names w/free text from-to range
SET DVBOPTNAME=DVBFTBEG
+6 FOR
SET DVBOPTNAME=$ORDER(^DIC(19,"B",DVBOPTNAME))
if DVBOPTNAME=""!(DVBOPTNAME]DVBFTEND)
QUIT
SET DVBIEN19=""
Begin DoDot:1
+7 ;
FOR
SET DVBIEN19=$ORDER(^DIC(19,"B",DVBOPTNAME,DVBIEN19))
if 'DVBIEN19
QUIT
Begin DoDot:2
+8 ; Option not audited
if '$DATA(^DVB(396.9992,"OPTION",DVBIEN19))
QUIT
+9 NEW DVBIEN200
+10 SET DVBIEN200=0
+11 FOR
SET DVBIEN200=$ORDER(^DVB(396.9992,"OPTION",DVBIEN19,DVBIEN200))
if 'DVBIEN200
QUIT
Begin DoDot:3
+12 DO CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200)
End DoDot:3
End DoDot:2
End DoDot:1
+13 ;
+14 ; Quit BUILD2
QUIT
+15 ;
BUILD3 ; User selected package namespace found in DVBPKG
+1 ;
+2 NEW DVBIEN19,DVBIEN200,DVBOPTNAME
+3 ; ZEXCEPT: DVBPKG
+4 ;
+5 ; Loop thru Option names using the package namespace
SET DVBOPTNAME=DVBPKG
+6 FOR
SET DVBOPTNAME=$ORDER(^DIC(19,"B",DVBOPTNAME))
if DVBOPTNAME=""!($EXTRACT(DVBOPTNAME,1,$LENGTH(DVBPKG))'=DVBPKG)
QUIT
Begin DoDot:1
+7 SET DVBIEN19=0
+8 ;
FOR
SET DVBIEN19=$ORDER(^DIC(19,"B",DVBOPTNAME,DVBIEN19))
if 'DVBIEN19
QUIT
Begin DoDot:2
+9 ; Option not audited
if '$DATA(^DVB(396.9992,"OPTION",DVBIEN19))
QUIT
+10 NEW DVBIEN200
+11 SET DVBIEN200=0
+12 ;
FOR
SET DVBIEN200=$ORDER(^DVB(396.9992,"OPTION",DVBIEN19,DVBIEN200))
if 'DVBIEN200
QUIT
Begin DoDot:3
+13 DO CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200)
End DoDot:3
End DoDot:2
End DoDot:1
+14 ;
+15 ; Quit BUILD3
QUIT
+16 ;
CONTINUE(DVBIEN19,DVBOPTNAME,DVBIEN200) ; Audited Option User Utilization Build
+1 NEW DVBACTUSER,DIERR,DVBIENS,DVBNEWPERS,DVBOPTION,DVBPARSVC
+2 NEW DVBSKIP,DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBSORTBY
+3 NEW DVBSVC,DVBSVCI,DVBTITLE,DVBTITLEI,DVBUOPTION,DVBUSAGE,DVBUSER
+4 ; ZEXCEPT: DVBASKDT,DVBDTBEG,DVBDTEND,DVBLEGEND,DVBQUIT,DVBSORT,DVBULIMIT,U
+5 ;
+6 ; Retrieve data related to the top level of file #396.9992
+7 ;
+8 SET DVBACTUSER=$PIECE($$ACTIVE^XUSER(DVBIEN200),U,1)
+9 IF DVBULIMIT=2
IF DVBACTUSER=0
QUIT
+10 IF DVBULIMIT=3
IF DVBACTUSER=1
QUIT
+11 DO NEWPERS^DVBAUDDIQ(DVBIEN200)
if DVBQUIT
QUIT
+12 DO PARSVC^DVBAUDDIQ(+DVBNEWPERS("SVCI"))
+13 ;
IF DVBPARSVC("IEN49")=0
Begin DoDot:1
+14 SET DVBPARSVC("IEN49")=+DVBNEWPERS("SVCI")
+15 SET DVBPARSVC("NAME")=DVBNEWPERS("SVC")
+16 ;
IF DVBPARSVC("IEN49")=0
Begin DoDot:2
+17 SET DVBPARSVC("NAME")="<NoParentService>"
+18 SET DVBPARSVC="<NoParentService>"
End DoDot:2
End DoDot:1
+19 ;
+20 ; Prefix inactive usernames with an '*'
+21 ;
+22 SET DVBNEWPERS("USERNAME")=$SELECT(DVBACTUSER=0:"*",1:"")_DVBNEWPERS("USERNAME")
+23 ; Retrieve data related to the DVBOPTION (multiple) of file #396.9992
+24 ; Returns DVBUOPTION(array)
DO UOPTION^DVBAUDDIQ(DVBIEN200,DVBIEN19)
if DVBQUIT
QUIT
+25 SET DVBSKIP=0
DO SCREEN
if DVBSKIP
QUIT
+26 ; Inactive user, display legend at end of rpt
IF $EXTRACT(DVBACTUSER)=0
SET DVBLEGEND=1
+27 ;
+28 ; Setup various sort variables and set the ^TMP global
+29 ;
+30 SET DVBSORTBY="SORT"_DVBSORT
DO @DVBSORTBY
+31 DO SETTMP(DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBIEN200)
+32 ;
+33 ; Quit subroutine CONTINUE
QUIT
+34 ;
SCREEN ; Screen the record
+1 ; Output:
+2 ; DVBSKIP ; 0 ; All screens have passed, allow record to be utilized
+3 ; 1 ; One or more screens failed, so skip the record
+4 ;
+5 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBASKDT,DVBDTBEG,DVBDTEND,DVBSKIP,DVBUOPTION
+6 ;
+7 ; Skip the record if no DVBOPTION (multiple) is defined for the user
+8 IF '$DATA(^DVB(396.9992,DVBIEN200,"OPTION",DVBIEN19,0))
SET DVBSKIP=1
QUIT
+9 ;
+10 ; Check for optional data ranage
IF DVBASKDT="YES"
Begin DoDot:1
+11 IF $PIECE(DVBUOPTION("DTLASTI"),".")<DVB2DTBEG("I")
SET DVBSKIP=1
QUIT
+12 IF $PIECE(DVBUOPTION("DTLASTI"),".")>DVB2DTEND("I")
SET DVBSKIP=1
QUIT
End DoDot:1
if DVBSKIP
QUIT
+13 ;
+14 ;
+15 ; Quit subroutine SCREEN
QUIT
+16 ;
SETTMP(DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBIEN200) ; Set the ^TMP global data
+1 ;
+2 NEW DVBRPTDATA,DVB2OPTION
+3 ; ZEXCEPT: DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC,DVB2OPTION,DVBUSAGE,DVBUSAGE,DVBUOPTION
+4 ;
+5 SET DVBRPTDATA=DVBOPTNAME_"^"
+6 SET DVBRPTDATA=DVBRPTDATA_DVBIEN200_"^"
+7 SET DVBRPTDATA=DVBRPTDATA_DVBNEWPERS("USERNAME")_"^"
+8 SET DVBRPTDATA=DVBRPTDATA_DVBPARSVC("NAME")_"^"
+9 SET DVBRPTDATA=DVBRPTDATA_DVBUOPTION("DT1ST")_"^"
+10 SET DVBRPTDATA=DVBRPTDATA_DVBUOPTION("DTLAST")_"^"
+11 SET DVBRPTDATA=DVBRPTDATA_DVBUOPTION("COUNTER")
+12 ;
+13 SET DVB2OPTION=$PIECE($GET(XQY0),U,2)
+14 SET ^TMP("AMIE",$JOB,DVB2OPTION,DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6)=DVBRPTDATA
+15 ;
+16 ; Quit SETTMP
QUIT
+17 ;
SORT1 ; Sort by OPTION & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6
+4 ;
+5 SET DVBSORT1=DVBOPTNAME
+6 SET DVBSORT2=DVBIEN19
+7 SET DVBSORT3="<Sort3>"
+8 SET DVBSORT4="<Sort4>"
+9 SET DVBSORT5=DVBNEWPERS("USERNAME")
+10 SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT1
QUIT
+13 ;
SORT2 ; Sort by OPTION, PARENT SERVICE & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBPARSVC,DVBOPTNAME
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6
+4 ;
+5 SET DVBSORT1=DVBOPTNAME
+6 SET DVBSORT2=DVBIEN19
+7 SET DVBSORT3=DVBPARSVC("NAME")
+8 SET DVBSORT4=DVBPARSVC("IEN49")
+9 SET DVBSORT5=DVBNEWPERS("USERNAME")
+10 SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT2
QUIT
+13 ;
+14 ;------------------------------------------------------------------
SORT3 ; Sort by OPTION, DATE LAST USED & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBIENS,DVBNEWPERS,DVBOPTION,DVBOPTNAME,DVBUOPTION
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6
+4 ;
+5 SET DVBSORT1=DVBOPTNAME
+6 SET DVBSORT2=DVBIEN19
+7 ; dt last used (reverse order)
SET DVBSORT3=-DVBUOPTION("DTLASTI")
+8 SET DVBSORT4="<Sort4>"
+9 SET DVBSORT5=DVBNEWPERS("USERNAME")
+10 SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT3
QUIT
+13 ;
SORT4 ; Sort by OPTION, DVBUSAGE COUNT & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 SET DVBSORT1=DVBOPTNAME
+6 SET DVBSORT2=DVBIEN19
+7 ; Puts DVBUSAGE in reverse order
SET DVBSORT3=-DVBUOPTION("COUNTER")
+8 SET DVBSORT4="<Sort4>"
+9 SET DVBSORT5=DVBNEWPERS("USERNAME")
+10 SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT4
QUIT
+13 ;
+14 ;------------------------------------------------------------------
SORT5 ; Sort by DVBUSAGE COUNT, OPTION & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 ; Puts DVBUSAGE in reverse order
SET DVBSORT1=-DVBUOPTION("COUNTER")
+6 SET DVBSORT2="<Sort2>"
+7 SET DVBSORT3=DVBOPTNAME
+8 SET DVBSORT4=DVBIEN19
+9 SET DVBSORT5=DVBNEWPERS("USERNAME")
+10 SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT5
QUIT
+13 ;
SORT6 ; Sort by DVBUSAGE COUNT, PARENT SERVICE & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 ; Puts DVBUSAGE in reverse order
SET DVBSORT1=-DVBUOPTION("COUNTER")
+6 SET DVBSORT2=DVBPARSVC("NAME")
+7 SET DVBSORT3=DVBPARSVC("IEN49")
+8 SET DVBSORT4=DVBNEWPERS("USERNAME")
+9 SET DVBSORT5=DVBIEN200
+10 ; Needed so no sub-file entry is dropped
SET DVBSORT6=DVBIEN19
+11 ;
+12 ; Quit SORT6
QUIT
+13 ;
SORT7 ; Sort by PARENT SERVICE, OPTION & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 SET DVBSORT1=DVBPARSVC("NAME")
+6 SET DVBSORT2=DVBPARSVC("IEN49")
+7 SET DVBSORT3=DVBOPTNAME
+8 SET DVBSORT4=DVBIEN19
+9 SET DVBSORT5=DVBNEWPERS("USERNAME")
+10 SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT7
QUIT
+13 ;
SORT8 ; Sort by PARENT SERVICE, USER, & OPTION
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 SET DVBSORT1=DVBPARSVC("NAME")
+6 SET DVBSORT2=DVBPARSVC("IEN49")
+7 SET DVBSORT3=DVBNEWPERS("USERNAME")
+8 SET DVBSORT4=DVBIEN200
+9 SET DVBSORT5=DVBOPTNAME
+10 SET DVBSORT6=DVBIEN19
+11 ;
+12 ; Quit SORT8
QUIT
+13 ;
SORT9 ; Sort by PARENT SERVICE, DATE LAST USED & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 SET DVBSORT1=DVBPARSVC("NAME")
+6 SET DVBSORT2=DVBPARSVC("IEN49")
+7 ; dt last used (reverse order)
SET DVBSORT3=-DVBUOPTION("DTLASTI")
+8 SET DVBSORT4=DVBNEWPERS("USERNAME")
+9 SET DVBSORT5=DVBIEN200
+10 ; Added to make sure records were not dropped
SET DVBSORT6=DVBIEN19
+11 ;
+12 ; Quit SORT9
QUIT
+13 ;
SORT10 ; Sort by PARENT SERVICE, DATE LAST USED & OPTION
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME,DVBPARSVC
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 SET DVBSORT1=DVBPARSVC("NAME")
+6 SET DVBSORT2=DVBPARSVC("IEN49")
+7 ; dt last used (reverse order)
SET DVBSORT3=-DVBUOPTION("DTLASTI")
+8 SET DVBSORT4=DVBOPTNAME
+9 SET DVBSORT5=DVBIEN19
+10 ; Added to make sure records were not dropped
SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT10
QUIT
+13 ;
SORT11 ; Sort by DATE LAST USED, OPTION, & USER
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 ; dt last used (reverse orderer)
SET DVBSORT1=-DVBUOPTION("DTLASTI")
+6 SET DVBSORT2="<Sort2>"
+7 SET DVBSORT3=DVBOPTNAME
+8 SET DVBSORT4=DVBIEN19
+9 SET DVBSORT5=DVBNEWPERS("USERNAME")
+10 SET DVBSORT6=DVBIEN200
+11 ;
+12 ; Quit SORT11
QUIT
+13 ;
SORT12 ; Sort by DATE LAST USED, USER & OPTION
+1 ;
+2 ; ZEXCEPT: DVBIEN19,DVBIEN200,DVBNEWPERS,DVBOPTNAME
+3 ; ZEXCEPT: DVBSORT1,DVBSORT2,DVBSORT3,DVBSORT4,DVBSORT5,DVBSORT6,DVBUOPTION
+4 ;
+5 ; dt last used (reverse orderer)
SET DVBSORT1=-DVBUOPTION("DTLASTI")
+6 SET DVBSORT2="<Sort2>"
+7 SET DVBSORT3=DVBNEWPERS("USERNAME")
+8 SET DVBSORT4=DVBIEN200
+9 SET DVBSORT5=DVBOPTNAME
+10 SET DVBSORT6=DVBIEN19
+11 ;
+12 ; Quit SORT12
QUIT