| 1 | ENEQRP6 ;WIRMFO/SAB-PARENT SYSTEM/COMPONENT HIERARCHY REPORT ;6/4/97
 | 
|---|
| 2 |  ;;7.0;ENGINEERING;**35,42**;AUG 17, 1993
 | 
|---|
| 3 | EN ; main entry point
 | 
|---|
| 4 | ASKSYS ; ask system
 | 
|---|
| 5 |  S DIR(0)="Y",DIR("A")="Do you want a report for ALL systems"
 | 
|---|
| 6 |  S DIR("B")="NO"
 | 
|---|
| 7 |  S DIR("?",1)="Enter YES to generate a report for all systems."
 | 
|---|
| 8 |  S DIR("?",2)="The computer will identify all the topmost parent systems"
 | 
|---|
| 9 |  S DIR("?",3)="by looping through the entire equipment file. A complete"
 | 
|---|
| 10 |  S DIR("?",4)="system hierarchy will be printed for each of the topmost"
 | 
|---|
| 11 |  S DIR("?",5)="parent systems which includes all of their components."
 | 
|---|
| 12 |  S DIR("?",6)="It may take awhile to search the entire equipment file."
 | 
|---|
| 13 |  S DIR("?",7)=""
 | 
|---|
| 14 |  S DIR("?",8)="Enter NO to generate a report for just one system."
 | 
|---|
| 15 |  S DIR("?",9)=""
 | 
|---|
| 16 |  S DIR("?")="Enter YES or NO"
 | 
|---|
| 17 |  D ^DIR K DIR G:$D(DIRUT) EXIT
 | 
|---|
| 18 |  S EN("ALL")=Y
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  I 'EN("ALL") F  D  G:ENDAP="^" EXIT Q:ENDAP]""
 | 
|---|
| 21 |  . S ENDAP=""
 | 
|---|
| 22 |  . D GETEQ^ENUTL I $D(DTOUT)!$D(DUOUT)!(Y'>0) S ENDAP="^" Q
 | 
|---|
| 23 |  . S ENDAP=+Y
 | 
|---|
| 24 |  . ; if entry is a component then offer to start with it's parent
 | 
|---|
| 25 |  . I $P($G(^ENG(6914,ENDAP,0)),U,3)]"" D  Q:'ENDAP
 | 
|---|
| 26 |  . . S ENDA=ENDAP,I=0
 | 
|---|
| 27 |  . . F  S X=$P($G(^ENG(6914,ENDA,0)),U,3) Q:X=""!(I>50)  S ENDA=X,I=I+1
 | 
|---|
| 28 |  . . W:I>50 $C(7),!!,"Can't determine topmost parent system (>50 deep)."
 | 
|---|
| 29 |  . . I ENDAP'=ENDA D  Q:ENDAP="^"
 | 
|---|
| 30 |  . . . W !!,"Equipment Entry #",ENDAP," ",$$GET1^DIQ(6914,ENDAP,6)
 | 
|---|
| 31 |  . . . W !,"is a component of Entry #",ENDA," ",$$GET1^DIQ(6914,ENDA,6)
 | 
|---|
| 32 |  . . . S DIR(0)="Y",DIR("B")="YES"
 | 
|---|
| 33 |  . . . S DIR("A")="Would you prefer to report on the parent system"
 | 
|---|
| 34 |  . . . S DIR("?")="Answer YES to start with the topmost parent system (includes components)."
 | 
|---|
| 35 |  . . . D ^DIR K DIR I $D(DIRUT) S ENDAP="^" Q
 | 
|---|
| 36 |  . . . I Y S ENDAP=ENDA
 | 
|---|
| 37 |  . ; make sure that selected system has components
 | 
|---|
| 38 |  . I '$O(^ENG(6914,"AE",ENDAP,0)) D  Q:'ENDAP
 | 
|---|
| 39 |  . . W $C(7),!!,"Equipment Entry #",ENDAP," does not have any components"
 | 
|---|
| 40 |  . . S ENDAP=""
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | ASKFLD ; ask fields to print
 | 
|---|
| 43 |  K ENFLD F I=1:1:2 S ENFLD(I)=""
 | 
|---|
| 44 |  W !!,"Select the 1st field (required) to print for each equipment item."
 | 
|---|
| 45 |  K DIC S DIC="^DD(6914,",DIC(0)="AQEM",DIC("B")="EQUIPMENT CATEGORY"
 | 
|---|
| 46 |  S DIC("S")="I ($P(^(0),U,2)'[""W"")&($P(^(0),U,2)'>0)"
 | 
|---|
| 47 |  D ^DIC K DIC I $D(DTOUT)!$D(DUOUT) G EXIT
 | 
|---|
| 48 |  I Y'>0 D  G ASKFLD
 | 
|---|
| 49 |  . W $C(7),!!,"Select a field or enter '^' to quit."
 | 
|---|
| 50 |  S ENFLD(1)=+Y
 | 
|---|
| 51 |  S ENFLD(1,"L")=$$GET1^DID(6914,ENFLD(1),"","FIELD LENGTH")
 | 
|---|
| 52 |  S ENFLD(1,"N")=$$GET1^DID(6914,ENFLD(1),"","LABEL")
 | 
|---|
| 53 |  I ENFLD(1,"L")>20 D  G:$D(DIRUT) EXIT
 | 
|---|
| 54 |  . W !!,"Field ",ENFLD(1,"N")," can be ",ENFLD(1,"L")," characters long."
 | 
|---|
| 55 |  . W !,"You may want to just print a portion of this field."
 | 
|---|
| 56 |  . S DIR(0)="N^1:"_ENFLD(1,"L")
 | 
|---|
| 57 |  . S DIR("A")="Number of characters to print",DIR("B")=20
 | 
|---|
| 58 |  . D ^DIR K DIR Q:$D(DIRUT)
 | 
|---|
| 59 |  . S ENFLD(1,"L")=Y
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  W !!,"Select the 2nd field (optional) to print for each equipment item."
 | 
|---|
| 62 |  K DIC S DIC="^DD(6914,",DIC(0)="AQEM"
 | 
|---|
| 63 |  S DIC("S")="I ($P(^(0),U,2)'[""W"")&($P(^(0),U,2)'>0)"
 | 
|---|
| 64 |  D ^DIC K DIC I $D(DTOUT)!$D(DUOUT) G EXIT
 | 
|---|
| 65 |  I Y>0 D  G:$D(DIRUT) EXIT
 | 
|---|
| 66 |  . S ENFLD(2)=+Y
 | 
|---|
| 67 |  . S ENFLD(2,"L")=$$GET1^DID(6914,ENFLD(2),"","FIELD LENGTH")
 | 
|---|
| 68 |  . S ENFLD(2,"N")=$$GET1^DID(6914,ENFLD(2),"","LABEL")
 | 
|---|
| 69 |  . I ENFLD(2,"L")>20 D  Q:$D(DIRUT)
 | 
|---|
| 70 |  . . W !!,"Field ",ENFLD(2,"N")," can be ",ENFLD(2,"L")," characters long."
 | 
|---|
| 71 |  . . W !,"You may want to just print a portion of this field."
 | 
|---|
| 72 |  . . S DIR(0)="N^1:"_ENFLD(2,"L")
 | 
|---|
| 73 |  . . S DIR("A")="Number of characters to print",DIR("B")=20
 | 
|---|
| 74 |  . . D ^DIR K DIR Q:$D(DIRUT)
 | 
|---|
| 75 |  . . S ENFLD(2,"L")=Y
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | ASKDEV ; ask device
 | 
|---|
| 78 |  S %ZIS="QM" D ^%ZIS G:POP EXIT
 | 
|---|
| 79 |  I $D(IO("Q")) D  G EXIT
 | 
|---|
| 80 |  . S ZTRTN="QEN^ENEQRP6",ZTDESC="Parent System/Component Hierarchy Rpt"
 | 
|---|
| 81 |  . S ZTSAVE("ENDAP")="",ZTSAVE("ENFLD(")="",ZTSAVE("EN(")=""
 | 
|---|
| 82 |  . D ^%ZTLOAD,HOME^%ZIS K ZTSK
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | QEN ; queued entry point
 | 
|---|
| 85 |  U IO
 | 
|---|
| 86 |  S (END,ENPG)=0 D NOW^%DTC S Y=% D DD^%DT S ENDT=Y
 | 
|---|
| 87 |  I 'EN("ALL") S ENDAP("CAT")=$$GET1^DIQ(6914,ENDAP,6)
 | 
|---|
| 88 |  K ENDL S $P(ENDL,"-",IOM+1)=""
 | 
|---|
| 89 |  K ENBL S $P(ENBL," ",IOM+1)=""
 | 
|---|
| 90 |  D HD
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 | BLDHI ; build hierarchy
 | 
|---|
| 93 |  K ^TMP($J)
 | 
|---|
| 94 |  S ENRT="^TMP("_$J_","
 | 
|---|
| 95 |  S ENMD=1
 | 
|---|
| 96 |  I 'EN("ALL") D GETC(ENDAP,"",ENRT) S ENT=1
 | 
|---|
| 97 |  I EN("ALL") D  G:END WRAPUP
 | 
|---|
| 98 |  . ; loop thru equipment, identify topmost parents, determine hierarchy
 | 
|---|
| 99 |  . S ENC=0,ENT=0,ENDA=0
 | 
|---|
| 100 |  . F  S ENDA=$O(^ENG(6914,ENDA)) Q:'ENDA  D  Q:END
 | 
|---|
| 101 |  . . S ENC=ENC+1
 | 
|---|
| 102 |  . . I '(ENC#1000) W:IO=IO(0) "." I $D(ZTQUEUED),$$S^%ZTLOAD S (ZTSTOP,END)=1 Q
 | 
|---|
| 103 |  . . Q:'$O(^ENG(6914,"AE",ENDA,0))  ; not a parent system
 | 
|---|
| 104 |  . . Q:$P($G(^ENG(6914,ENDA,0)),U,3)'=""  ; not the topmost parent system
 | 
|---|
| 105 |  . . D GETC(ENDA,"",ENRT) S ENT=ENT+1
 | 
|---|
| 106 |  ; save total number of topmost parents processed
 | 
|---|
| 107 |  S @(ENRT_0_")")="SYSTEM/COMPONENT LIST"_U_DT_U_ENT
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 | PRTHI ; print hierarchy
 | 
|---|
| 110 |  ; compute indent to use for component levels
 | 
|---|
| 111 |  S Y=10+2+ENFLD(1,"L") ; ien and spaces and 1st field
 | 
|---|
| 112 |  S:ENFLD(2) Y=Y+3+ENFLD(2,"L") ; spaces and 2nd field
 | 
|---|
| 113 |  S ENIND=(IOM-Y)\ENMD
 | 
|---|
| 114 |  I ENIND>12 S ENIND=12
 | 
|---|
| 115 |  I ENIND<2 S ENIND=2
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  S ENNODE=ENRT_0_")"
 | 
|---|
| 118 |  F  S ENNODE=$Q(@ENNODE) Q:ENNODE=""  Q:$QS(ENNODE,1)'=$J  D  Q:END
 | 
|---|
| 119 |  . S ENLVL=$QL(ENNODE),ENDA=$QS(ENNODE,ENLVL),ENC=+$G(@ENNODE)
 | 
|---|
| 120 |  . S ENCOL=ENIND*(ENLVL-2)
 | 
|---|
| 121 |  . I $Y+5>IOSL D HD Q:END  D HDSYS
 | 
|---|
| 122 |  . S ENV(1)=$E($$GET1^DIQ(6914,ENDA,ENFLD(1)),1,ENFLD(1,"L"))
 | 
|---|
| 123 |  . S:ENFLD(2) ENV(2)=$E($$GET1^DIQ(6914,ENDA,ENFLD(2)),1,ENFLD(2,"L"))
 | 
|---|
| 124 |  . W !,?ENCOL,ENDA,?ENCOL+ENIND,ENV(1)
 | 
|---|
| 125 |  . W:ENFLD(2) $E(ENBL,1,ENFLD(1,"L")-$L(ENV(1))),"   ",ENV(2)
 | 
|---|
| 126 |  . I ENC W "  (",ENC," comp.)"
 | 
|---|
| 127 | WRAPUP ;
 | 
|---|
| 128 |  I END W !!,"REPORT STOPPED BY USER REQUEST"
 | 
|---|
| 129 |  E  D
 | 
|---|
| 130 |  . W !!,"END OF REPORT"
 | 
|---|
| 131 |  . I $E(IOST,1,2)="C-" S DIR(0)="E" D ^DIR K DIR
 | 
|---|
| 132 |  D ^%ZISC
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 | EXIT ;
 | 
|---|
| 135 |  I $D(ZTQUEUED) S ZTREQ="Q"
 | 
|---|
| 136 |  K ^TMP($J)
 | 
|---|
| 137 |  K DIC,DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 138 |  K EN,ENC,ENCOL,ENDA,ENDAP,ENFLD,ENIND,ENLVL,ENMD,ENNODE,ENRT,ENT,ENV
 | 
|---|
| 139 |  K ENBL,END,ENDL,ENDT,ENPG
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 | HD ; header
 | 
|---|
| 142 |  I $D(ZTQUEUED),$$S^%ZTLOAD S (ZTSTOP,END)=1 Q
 | 
|---|
| 143 |  I $E(IOST,1,2)="C-",ENPG S DIR(0)="E" D ^DIR K DIR I 'Y S END=1 Q
 | 
|---|
| 144 |  I $E(IOST,1,2)="C-"!ENPG W @IOF
 | 
|---|
| 145 |  S ENPG=ENPG+1
 | 
|---|
| 146 |  W !,"PARENT SYSTEM/COMPONENT HIERARCHY",?48,ENDT,?72,"page ",ENPG
 | 
|---|
| 147 |  W !,"for "
 | 
|---|
| 148 |  I EN("ALL") W "ALL SYSTEMS"
 | 
|---|
| 149 |  E  W "SYSTEM with ENTRY #",ENDAP,"  ",ENDAP("CAT")
 | 
|---|
| 150 |  W !," print field(s): ",ENFLD(1,"N")
 | 
|---|
| 151 |  W:ENFLD(2) " and ",ENFLD(2,"N")
 | 
|---|
| 152 |  W !,ENDL
 | 
|---|
| 153 |  Q
 | 
|---|
| 154 | HDSYS ; header for continued system
 | 
|---|
| 155 |  F I=2:1:ENLVL-1 W !,?(ENIND*(I-2)),$QS(ENNODE,I),"  (continued)"
 | 
|---|
| 156 |  Q
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 | GETC(ENDAP,ENPL,ENRT) ; Get All Components Under a Parent System
 | 
|---|
| 159 |  ; Input
 | 
|---|
| 160 |  ;   ENDAP - ien of parent system (e.g. 1024)
 | 
|---|
| 161 |  ;   ENPL  - ien list of parent systems above ENDAP (e.g. 150,7019,10,)
 | 
|---|
| 162 |  ;   ENRT  - root of array to store hierarchy in (e.g. X( or ^TMP($J,)
 | 
|---|
| 163 |  ;   ENMD  - maximum depth reached
 | 
|---|
| 164 |  ; Output
 | 
|---|
| 165 |  ;   ENMD  - maximum depth reached
 | 
|---|
| 166 |  ;   ^TMP($J,parent ien)=# of components
 | 
|---|
| 167 |  ;   ^TMP($J,parent ien,component ien)=""
 | 
|---|
| 168 |  N ENDAC,ENC,Y
 | 
|---|
| 169 |  ; init component counter
 | 
|---|
| 170 |  S ENC=0
 | 
|---|
| 171 |  ; loop thru components of parent system ENDAP
 | 
|---|
| 172 |  S ENDAC=0 F  S ENDAC=$O(^ENG(6914,"AE",ENDAP,ENDAC)) Q:'ENDAC  D
 | 
|---|
| 173 |  . ; check for endless loop
 | 
|---|
| 174 |  . I ","_ENPL_ENDAP_","[(","_ENDAC_",") D  Q
 | 
|---|
| 175 |  . . W !,"ERROR - ENDLESS LOOP DETECTED - SKIPPING ENTRY"
 | 
|---|
| 176 |  . . W !,"  Entry #",ENDAC," already is a parent in ",ENPL_ENDAP_","
 | 
|---|
| 177 |  . ; save component
 | 
|---|
| 178 |  . S @(ENRT_ENPL_ENDAP_","_ENDAC_")")="",ENC=ENC+1
 | 
|---|
| 179 |  . ; see if previous maximum depth exceeded
 | 
|---|
| 180 |  . S Y=$L(ENPL_ENDAP_","_ENDAC,",") I Y>ENMD S ENMD=Y
 | 
|---|
| 181 |  . ; if component has components then get them also
 | 
|---|
| 182 |  . I $O(^ENG(6914,"AE",ENDAC,0)) D GETC(ENDAC,ENPL_ENDAP_",",ENRT)
 | 
|---|
| 183 |  ; save parent system component count
 | 
|---|
| 184 |  S @(ENRT_ENPL_ENDAP_")")=ENC
 | 
|---|
| 185 |  Q
 | 
|---|
| 186 |  ;ENEQRP6
 | 
|---|