| 1 | DDS41 ;SFISC/MKO-VERIFY DATA ;21SEP2006
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**8,151**;Mar 30, 1999;Build 10
 | 
|---|
| 3 |  ;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  N DDO,DIERR
 | 
|---|
| 5 |  N DDS4B,DDS4DA,DDS4DONE,DDS4ERR,DDS4FLD,DDS4OUT,DDS4PG,DDS4PG1,DDS4TP
 | 
|---|
| 6 |  N DDSCAP,DDSERROR,DDSFDA,DDSI,DDSKEY,DDSPID,DDSREQ
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  S DDS4OUT=$NA(@DDSREFT@("VALMSG"))
 | 
|---|
| 9 |  S DDS4PG=DDSPG
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  K @DDS4OUT,@DDSREFT@("MSG"),@DDSREFT@("KMSG")
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  I $G(DDSPTB)_$G(DDSREP)]"" N DIE,DDP,DDSDA,DA,DDSDL D
 | 
|---|
| 14 |  . S DA=DDSDAORG,DDSDL=DDSDLORG,DDSDA=DA_","
 | 
|---|
| 15 |  . F DDSI=1:1:DDSDL S DA(DDSI)=DDSDAORG(DDSI),DDSDA=DDSDA_DA(DDSI)_","
 | 
|---|
| 16 |  . S DDP=$P($G(DDSFLORG),U),DIE=U_$P($G(DDSFLORG),U,2) S:DIE=U DIE=""
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  D LDALL
 | 
|---|
| 19 |  I $G(DIERR) D  G END
 | 
|---|
| 20 |  . N P
 | 
|---|
| 21 |  . S P(1)=$P($G(^DIST(.403,+DDS,40,DDSPG,0)),U),P(2)=$P($G(^(1)),U)
 | 
|---|
| 22 |  . S:P(2)="" P(2)="unnamed"
 | 
|---|
| 23 |  . D BLD^DIALOG(3041,.P),ERR^DDSMSG ;PAGE COULD NOT BE LOADED
 | 
|---|
| 24 |  . S DDS4ERR=1
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  D LP
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ;Validate keys
 | 
|---|
| 29 |  S DDSKEY=1
 | 
|---|
| 30 |  I $D(DDSFDA) D
 | 
|---|
| 31 |  . S DDSKEY=$$KEYVAL^DIE("","DDSFDA",$NA(@DDSREFT@("KMSG")))
 | 
|---|
| 32 |  . I 'DDSKEY,$D(DDS4ERR)[0 S DDS4ERR=1 D BLD^DIALOG(3091,"","",DDS4OUT,"S")
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  S DDSPG=DDS4PG
 | 
|---|
| 35 |  I '$G(DDS4ERR),$G(^DIST(.403,+DDS,20))'?."^" X ^(20)
 | 
|---|
| 36 |  I $G(@DDSREFT@("MSG"))>0!$G(DDS4ERR)!'DDSKEY D PRNT
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | END S Y='$D(DDSERROR)&'$G(DDS4ERR)&$G(DDSKEY)
 | 
|---|
| 39 |  K @DDS4OUT,@DDSREFT@("MSG"),@DDSREFT@("KMSG")
 | 
|---|
| 40 |  Q
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | LDALL ;Load all pages
 | 
|---|
| 43 |  S DX=0,DY=IOSL-1 X IOXY
 | 
|---|
| 44 |  W "Please wait.  Loading all pages ..."_$P(DDGLCLR,DDGLDEL)
 | 
|---|
| 45 |  S (DDSPG,DDS4PG1)=$O(^DIST(.403,+DDS,40,"B",$S($G(DDSPAGE)]"":DDSPAGE,1:1),""))
 | 
|---|
| 46 |  S Y=1
 | 
|---|
| 47 |  F  D ^DDS1(DDSPG) Q:$G(DIERR)  S DDSPG=$$NP^DDS5(.Y) Q:DDSPG=DDS4PG1!'Y
 | 
|---|
| 48 |  Q
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | LP ;Loop through all pages/blocks
 | 
|---|
| 51 |  N DDP
 | 
|---|
| 52 |  S DX=0,DY=IOSL-1 X IOXY
 | 
|---|
| 53 |  W "Verifying ..."_$P(DDGLCLR,DDGLDEL)
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  S DDSPG=0 F  S DDSPG=$O(@DDSREFT@(DDSPG)) Q:'DDSPG  D
 | 
|---|
| 56 |  . S DDS4B=0 F  S DDS4B=$O(@DDSREFT@(DDSPG,DDS4B)) Q:'DDS4B  D
 | 
|---|
| 57 |  .. Q:$D(DDS4DONE(DDS4B))  Q:$P(@DDSREFS@(DDSPG,DDS4B),U,5)'="e"
 | 
|---|
| 58 |  .. S DDSPID=$S($P($G(^DIST(.403,+DDS,40,DDSPG,1)),U)]"":$P(^(1),U),1:"Page "_$P(^(0),U))
 | 
|---|
| 59 |  .. S DDS4DONE(DDS4B)="",DDP=$P(^DIST(.404,DDS4B,0),U,2)
 | 
|---|
| 60 |  .. S DDO=0 F  S DDO=$O(^DIST(.404,DDS4B,40,DDO)) Q:'DDO  D VF
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | VF ;Check required and key fields
 | 
|---|
| 64 |  Q:$D(^DIST(.404,DDS4B,40,DDO,0))[0  S DDS4TP=$P(^(0),U,3)
 | 
|---|
| 65 |  Q:DDS4TP=1  Q:DDS4TP=4
 | 
|---|
| 66 |  S DDSCAP=$P(^DIST(.404,DDS4B,40,DDO,0),U,2)_$S($P(^(0),U,4)]"":" ("_$P(^(0),U,4)_")",1:"")
 | 
|---|
| 67 |  S DDSREQ=$P($G(^DIST(.404,DDS4B,40,DDO,4)),U)
 | 
|---|
| 68 |  S DDSKEY=0
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  I DDS4TP=2 N DDP D
 | 
|---|
| 71 |  . S DDP=0,DDS4FLD=DDO_","_DDS4B
 | 
|---|
| 72 |  . S:DDSCAP="" DDSCAP=$P(^DIST(.404,DDS4B,40,DDO,0),U,5)
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  E  D  Q:DDS4FLD'=+$P(DDS4FLD,"E")
 | 
|---|
| 75 |  . S DDS4FLD=$G(^DIST(.404,DDS4B,40,DDO,1))
 | 
|---|
| 76 |  . I $G(^DD(DDP,DDS4FLD,0))?."^" S DDS4FLD="" Q
 | 
|---|
| 77 |  . S:DDSCAP="" DDSCAP=$S($G(^DD(DDP,DDS4FLD,.1))]"":^(.1),1:$P(^(0),U))
 | 
|---|
| 78 |  . S:DDSREQ="" DDSREQ=$P(^DD(DDP,DDS4FLD,0),U,2)["R"
 | 
|---|
| 79 |  . S DDSKEY=$D(^DD("KEY","F",DDP,DDS4FLD))>0
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  S DDS4DA=" "
 | 
|---|
| 82 |  F  S DDS4DA=$O(@DDSREFT@(DDSPG,DDS4B,DDS4DA)) Q:DDS4DA=""  D
 | 
|---|
| 83 |  . I $P(@DDSREFT@(DDSPG,DDS4B,DDS4DA),U,6)<2 D VR Q
 | 
|---|
| 84 |  . ;
 | 
|---|
| 85 |  . N DDS4PDA S DDS4PDA=DDS4DA N DDS4DA
 | 
|---|
| 86 |  . S DDS4DA=""
 | 
|---|
| 87 |  . F  S DDS4DA=$O(@DDSREFT@(DDSPG,DDS4B,DDS4PDA,"B",DDS4DA)) Q:'DDS4DA  D VR
 | 
|---|
| 88 |  Q
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 | VR ;Check individual records
 | 
|---|
| 91 |  I $P($G(@DDSREFT@("F"_DDP,DDS4DA,DDS4FLD,"A")),U)]"" N DDSREQ S DDSREQ=$P(^("A"),U)
 | 
|---|
| 92 |  I 'DDSREQ,'DDSKEY Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ;Required WP fields (quit if mult)
 | 
|---|
| 95 |  I DDP,$D(@DDSREFT@("F"_DDP,DDS4DA,DDS4FLD,"M")) D:'^("M")  Q
 | 
|---|
| 96 |  . N DDS4I,DDS4REF,DDS4VAL
 | 
|---|
| 97 |  . I $G(@DDSREFT@("F"_DDP,DDS4DA,DDS4FLD,"F")) S DDS4REF=$NA(^("D"))
 | 
|---|
| 98 |  . E  S DDS4REF=$P(@DDSREFT@("F"_DDP,DDS4DA,DDS4FLD,"M"),U,2),DDS4REF=U_$E(DDS4REF,1,$L(DDS4REF)-1)_")"
 | 
|---|
| 99 |  . S (DDS4VAL,DDS4I)=0
 | 
|---|
| 100 |  . F  S DDS4I=$O(@DDS4REF@(DDS4I)) Q:'DDS4I  I $G(@DDS4REF@(DDS4I,0))'?." " S DDS4VAL=1 Q
 | 
|---|
| 101 |  . D:'DDS4VAL LDERR
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  I $G(@DDSREFT@("F"_DDP,DDS4DA,DDS4FLD,"D"))="" D LDERR Q
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  I DDSKEY,$D(@DDSREFT@("F"_DDP,DDS4DA,DDS4FLD,"F")) S DDSFDA(DDP,DDS4DA,DDS4FLD)=$G(^("D"))
 | 
|---|
| 106 |  Q
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | LDERR ;Call ^DIALOG to load error
 | 
|---|
| 109 |  N P
 | 
|---|
| 110 |  I $D(DDS4ERR)[0 S DDS4ERR=1 D BLD^DIALOG(3091,"","",DDS4OUT,"S")
 | 
|---|
| 111 |  S P(1)=DDSPID,P(2)=DDSCAP,P(3)=""
 | 
|---|
| 112 |  I $L(DDS4DA,",")>2 D
 | 
|---|
| 113 |  . N Y,C
 | 
|---|
| 114 |  . S P(3)=$P(@(@DDSREFT@(DDSPG,DDS4B,$G(DDS4PDA,DDS4DA),"GL")_+DDS4DA_",0)"),U)
 | 
|---|
| 115 |  . Q:P(3)=""
 | 
|---|
| 116 |  . S Y=P(3),C=$P(^DD(DDP,.01,0),U,2) D Y^DIQ S P(3)=Y
 | 
|---|
| 117 |  . S P(3)="(Subrecord: "_P(3)_")"
 | 
|---|
| 118 |  D BLD^DIALOG(3092,.P,"",DDS4OUT,"S")
 | 
|---|
| 119 |  Q
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 | PRNT ;Print messages
 | 
|---|
| 122 |  N DDSABT
 | 
|---|
| 123 |  S (DDSABT,DX,DY)=0 X IOXY
 | 
|---|
| 124 |  W $P(DDGLCLR,DDGLDEL,2)
 | 
|---|
| 125 |  S $X=0,$Y=0
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  ;Print required field messages
 | 
|---|
| 128 |  I $G(DDS4ERR) S DDSI=0 F  S DDSI=$O(@DDS4OUT@(DDSI)) Q:'DDSI  D  Q:DDSABT
 | 
|---|
| 129 |  . D:$G(@DDS4OUT@(DDSI))]"" WLIN(^(DDSI))
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  ;Print duplicate key messages
 | 
|---|
| 132 |  S DDSI=0 F  S DDSI=$O(@DDSREFT@("KMSG","DIERR",DDSI)) Q:'DDSI  D  Q:DDSABT
 | 
|---|
| 133 |  . D WLIN(" "),WLIN(@DDSREFT@("KMSG","DIERR",DDSI,"TEXT",1))
 | 
|---|
| 134 |  . Q:@DDSREFT@("KMSG","DIERR",DDSI)'=740
 | 
|---|
| 135 |  . ;
 | 
|---|
| 136 |  . N DA,FIL,FILE,FLD,FLDS,FNAME,IENS,J,KEY,LEV,RNAME
 | 
|---|
| 137 |  . S FILE=@DDSREFT@("KMSG","DIERR",DDSI,"PARAM","FILE"),IENS=$G(^("IENS")),KEY=$G(^("KEY"))
 | 
|---|
| 138 |  . D FRNAME^DIKCU1(FILE,IENS,.FNAME,.RNAME,.LEV)
 | 
|---|
| 139 |  . ;
 | 
|---|
| 140 |  . I LEV D
 | 
|---|
| 141 |  .. S FNAME=$J("",7)_"Subfile: "_FNAME D WLIN(.FNAME,16)
 | 
|---|
| 142 |  .. S RNAME=$J("",8)_"Record: "_RNAME D WLIN(.RNAME,16)
 | 
|---|
| 143 |  . ;
 | 
|---|
| 144 |  . S FLDS="",J=0 F  S J=$O(^DD("KEY",KEY,2,J)) Q:'J  D
 | 
|---|
| 145 |  .. Q:'$D(^DD("KEY",KEY,2,J,0))  S FLD=$P(^(0),U),FIL=$P(^(0),U,2)
 | 
|---|
| 146 |  .. Q:'$D(^DD(FIL,FLD,0))  S FLDS=FLDS_$P(^(0),U)_" (#"_FLD_"), "
 | 
|---|
| 147 |  . D:FLDS]"" WLIN("  Key Field(s): "_$E(FLDS,1,$L(FLDS)-2),16)
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  ;Print developer messages
 | 
|---|
| 150 |  S DDSI=0 F  S DDSI=$O(@DDSREFT@("MSG",DDSI)) Q:'DDSI  D  Q:DDSABT
 | 
|---|
| 151 |  . D:@DDSREFT@("MSG",DDSI)]"" WLIN(^(DDSI))
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  D EOP
 | 
|---|
| 154 |  Q
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 | WLIN(DDSX,DDSINDNT) ;Write a single line, wrap at word boundaries
 | 
|---|
| 157 |  N I
 | 
|---|
| 158 |  D WRAP^DIKCU2(.DDSX,IOM-1-$G(DDSINDNT),IOM-1)
 | 
|---|
| 159 |  S DDSX(0)=DDSX
 | 
|---|
| 160 |  F I=0:1 Q:'$D(DDSX(I))  D  Q:DDSABT
 | 
|---|
| 161 |  . I $Y+4>IOSL D EOP I 'Y S DDSABT=1 Q
 | 
|---|
| 162 |  . W !,$J("",$S(I:$G(DDSINDNT),1:0))_DDSX(I)
 | 
|---|
| 163 |  Q
 | 
|---|
| 164 | EOP ;Issue EOP prompt
 | 
|---|
| 165 |  N X
 | 
|---|
| 166 |  S DX=0,DY=IOSL-1 X IOXY
 | 
|---|
| 167 |  R "Press RETURN to continue: ",X:DTIME
 | 
|---|
| 168 |  S Y=X'[U&$T
 | 
|---|
| 169 |  I Y S (DX,DY)=0 X IOXY W $P(DDGLCLR,DDGLDEL,2) S $X=0,$Y=0
 | 
|---|
| 170 |  Q
 | 
|---|