| 1 | MCDUP1 ;WASH/DCB-Repoints the pointed to file and removes the dup ;11/8/95  10:50
 | 
|---|
| 2 |  ;;2.3;Medicine;;09/13/1996
 | 
|---|
| 3 | COMPILE(FILE) ;
 | 
|---|
| 4 |  ; This routine requires ^TMP($J,"DUP",FILE
 | 
|---|
| 5 |  N POINT,TEMP,POINTER,NFILE
 | 
|---|
| 6 |  W !,?10,"CHECKING FILES FOR POINTERS TO DUPLICATE ENTRIES:"
 | 
|---|
| 7 |  S NFILE=+$P(FILE,"(",2)
 | 
|---|
| 8 |  Q:'$D(^TMP($J,"DUP","RT",NFILE))  ;The global that holds the repointing table
 | 
|---|
| 9 |  S ^TMP($J,"DUP","RT",NFILE,0)=0 ;For null input
 | 
|---|
| 10 |  D POINTER^MCDUPM(FILE,.POINT) ;get THE POINTERS
 | 
|---|
| 11 |  ;Loop through the pointers file and repoint the records
 | 
|---|
| 12 |  S TEMP="" F  S TEMP=$O(POINT(TEMP)) Q:TEMP=""  D REPOINT(FILE,TEMP,.POINT)
 | 
|---|
| 13 |  Q
 | 
|---|
| 14 | REPOINT(FILE,POINTER,POINT) ;Repoints the records
 | 
|---|
| 15 |  N MFILE,FIELD,PFILE
 | 
|---|
| 16 |  S MFILE=+$P(FILE,"(",2),PFILE=POINT(POINTER,"FILE"),FIELD=POINT(POINTER,"FIELD")
 | 
|---|
| 17 |  W !,?20,PFILE," "
 | 
|---|
| 18 |  ;Determine if its a subfile or a mainfile.
 | 
|---|
| 19 |  I $P(^DD(PFILE,0),U)="FIELD" D
 | 
|---|
| 20 |  . D MAINFILE(PFILE,MFILE,FIELD)
 | 
|---|
| 21 |  . Q
 | 
|---|
| 22 |  E  D
 | 
|---|
| 23 |  . D SUBFILE(PFILE,MFILE,FIELD)
 | 
|---|
| 24 |  . Q
 | 
|---|
| 25 |  Q
 | 
|---|
| 26 | MAINFILE(PFILE,FILE,FIELD) ;Repoints records within the main file
 | 
|---|
| 27 |  N REC,TEMP,NODE,PIECE,CFILE,DA,DR
 | 
|---|
| 28 |  ;get the node and piece
 | 
|---|
| 29 |  S TEMP=$$GET1^DID(PFILE,FIELD,"","GLOBAL SUBSCRIPT LOCATION")
 | 
|---|
| 30 |  S NODE=$P(TEMP,";"),PIECE=$P(TEMP,";",2)
 | 
|---|
| 31 |  S CFILE=$$GET1^DID(PFILE,"","","GLOBAL NAME") ; get the global location
 | 
|---|
| 32 |  S REC=0 F  S REC=+$O(@(CFILE_"REC)")) Q:REC=0  D  ;Go through the file
 | 
|---|
| 33 |  .; Get the old and new pointers.
 | 
|---|
| 34 |  .S OLDREC=+$P($G(@(CFILE_"REC,NODE)")),U,PIECE)
 | 
|---|
| 35 |  .S NEWREC=$P(^TMP($J,"DUP","RT",FILE,OLDREC),U),$P(^TMP($J,"DUP","RT",FILE,OLDREC),U,2)=+$P(^TMP($J,"DUP","RT",FILE,OLDREC),U,2)+1
 | 
|---|
| 36 |  .; If old and new don't match then repoint the record to the new pointer
 | 
|---|
| 37 |  .I OLDREC'=NEWREC D
 | 
|---|
| 38 |  ..S TEMP="$P("_CFILE_REC_","_NODE_"),U,"_PIECE_")"
 | 
|---|
| 39 |  ..S TEMP2="M"_U_PFILE_U_REC_U_FIELD_U_NODE_U_PIECE
 | 
|---|
| 40 |  ..D JOURNAL(.VAL,FILE,TEMP,TEMP2,OLDREC,NEWREC)
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 | SUBFILE(SUBFILE,FILE,SFIELD) ;Repoint records within the Subfile.
 | 
|---|
| 43 |  N SNODE,SPIECE,FIELD,DIE,DR,DA,TEMP,MFILE,CFILE,MREC,SREC,NAME,MNODE,MPIECE
 | 
|---|
| 44 |  S MAINFILE=^DD(SUBFILE,0,"UP") ;Get the main file
 | 
|---|
| 45 |  S NAME=$P(^DD(SUBFILE,0)," SUB-FIELD^",1) ;Get the field name
 | 
|---|
| 46 |  S TEMP=$$GET1^DID(SUBFILE,SFIELD,"","GLOBAL SUBSCRIPT LOCATION")
 | 
|---|
| 47 |  S SNODE=$P(TEMP,";"),SPIECE=$P(TEMP,";",2) ;Get the node of piece of the subfile
 | 
|---|
| 48 |  S FIELD=$O(^DD(MAINFILE,"B",NAME,"")) ;Get the field number in the main file
 | 
|---|
| 49 |  S TEMP=$$GET1^DID(MAINFILE,FIELD,"","GLOBAL SUBSCRIPT LOCATION")
 | 
|---|
| 50 |  S MNODE=$P(TEMP,";"),MPIECE=$P(TEMP,";",2) ; Get the main node and piece of the file
 | 
|---|
| 51 |  I ^DD(MAINFILE,0)["SUB-FIELD" D SUBF(SUBFILE,FILE,SFIELD,MAINFILE,SNODE,FIELD,MNODE,MPIECE) Q
 | 
|---|
| 52 |  S CFILE=$$GET1^DID(MAINFILE,"","","GLOBAL NAME") ; Get global location
 | 
|---|
| 53 |  S MREC=0 F  S MREC=+$O(@(CFILE_"MREC)")) Q:MREC=0  D  ;Loop through Main file
 | 
|---|
| 54 |  .S SREC=0 F  S SREC=+$O(@(CFILE_"MREC,MNODE,SREC)")) Q:SREC=0  D  ;Loop through the subfile within the main file.
 | 
|---|
| 55 |  ..; Get the old and new pointer
 | 
|---|
| 56 |  ..S OLDREC=+$P($G(@(CFILE_"MREC,MNODE,SREC,SNODE)")),U,SPIECE)
 | 
|---|
| 57 |  ..Q:'$D(^MCAR(FILE,OLDREC,0))
 | 
|---|
| 58 |  ..S NEWREC=$P(^TMP($J,"DUP","RT",FILE,OLDREC),U),$P(^TMP($J,"DUP","RT",FILE,OLDREC),U,2)=+$P(^TMP($J,"DUP","RT",FILE,OLDREC),U,2)+1
 | 
|---|
| 59 |  ..;if old and new pointers don't match then repoint the subfile to the new pointer.
 | 
|---|
| 60 |  ..I OLDREC'=NEWREC D
 | 
|---|
| 61 |  ...S TEMP="$P("_CFILE_MREC_","_MNODE_","_SREC_","_SNODE_"),U,"_SPIECE_")"
 | 
|---|
| 62 |  ...S TEMP2="S"_U_MAINFILE_U_MREC_U_FIELD_U_MNODE_U_SUBFILE_U_SREC_U_SFIELD_U_SNODE_U_SPIECE
 | 
|---|
| 63 |  ...D JOURNAL(.VAL,FILE,TEMP,TEMP2,OLDREC,NEWREC)
 | 
|---|
| 64 |  Q
 | 
|---|
| 65 | SUBF(SUBFILE,FILE,SFIELD1,SFILE1,SNODE1,SFIELD,SNODE,SPIECE) ;
 | 
|---|
| 66 |  ;Repoints subfile within a subfile
 | 
|---|
| 67 |  N MFIELD,MFN,MNODE,MAINFILE,REC,SREC,SREC1
 | 
|---|
| 68 |  S MAINFILE=^DD(SFILE1,0,"UP"),CFILE=$$GET1^DID(MAINFILE,"","","GLOBAL NAME")
 | 
|---|
| 69 |  S MFN=""
 | 
|---|
| 70 |  F  S MFN=$O(^DD(SFILE1,0,"NM",MFN)) Q:MFN=""  D
 | 
|---|
| 71 |  . S MFIELD=0
 | 
|---|
| 72 |  . F  S MFIELD=$O(^DD(MAINFILE,"B",MFN,MFIELD)) Q:MFIELD'>0  D
 | 
|---|
| 73 |  .. I $G(^DD(MAINFILE,MFIELD,0))]"" D SUBF0
 | 
|---|
| 74 |  .. Q
 | 
|---|
| 75 |  . Q
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 | SUBF0 ;
 | 
|---|
| 78 |  S TEMP=$$GET1^DID(MAINFILE,MFIELD,"","GLOBAL SUBSCRIPT LOCATION")
 | 
|---|
| 79 |  S MNODE=$P(TEMP,";")
 | 
|---|
| 80 |  S TEMP=$$GET1^DID(SUBFILE,SFIELD1,"","GLOBAL SUBSCRIPT LOCATION")
 | 
|---|
| 81 |  S SNODE1=$P(TEMP,";")
 | 
|---|
| 82 |  S SPIECE=$P(TEMP,";",2)
 | 
|---|
| 83 |  S REC=0 F  S REC=+$O(@(CFILE_"REC)")) Q:REC=0  D
 | 
|---|
| 84 |  .S SREC=0 F  S SREC=+$O(@(CFILE_"REC,MNODE,SREC)")) Q:SREC=0  D
 | 
|---|
| 85 |  ..S SREC1=0 F  S SREC1=+$O(@(CFILE_"REC,MNODE,SREC,SNODE,SREC1)")) Q:SREC1=0  D
 | 
|---|
| 86 |  ...S OLDREC=+$P($G(@(CFILE_"REC,MNODE,SREC,SNODE,SREC1,SNODE1)")),U,SPIECE)
 | 
|---|
| 87 |  ...Q:'$D(^TMP($J,"DUP","RT",FILE,OLDREC))
 | 
|---|
| 88 |  ...S NEWREC=$P(^TMP($J,"DUP","RT",FILE,OLDREC),U),$P(^TMP($J,"DUP","RT",FILE,OLDREC),U,2)=+$P(^TMP($J,"DUP","RT",FILE,OLDREC),U,2)+1
 | 
|---|
| 89 |  ...I OLDREC'=NEWREC D
 | 
|---|
| 90 |  ....S TEMP="$P("_CFILE_REC_","_MNODE_","_SREC_","_SNODE_","_SREC1_","_SNODE1_"),U,"_SPIECE_")"
 | 
|---|
| 91 |  ....S TEMP2="SS"_U_MAINFILE_U_REC_U_FIELD_U_MNODE_U_SUBFILE_U_SREC_U_SFIELD_U_SNODE_U_SFILE1_U_SREC1_U_SFIELD1_U_SNODE1_U_SPIECE
 | 
|---|
| 92 |  ....D JOURNAL(.VAL,FILE,TEMP,TEMP2,OLDREC,NEWREC)
 | 
|---|
| 93 |  Q
 | 
|---|
| 94 | JOURNAL(VAL,FILE,TEMP,TEMP2,OLDREC,NEWREC) ;Stores the changes that was made
 | 
|---|
| 95 |  S VAL=$G(VAL)+1
 | 
|---|
| 96 |  S ^TMP($J,"DUP","J",FILE,VAL,0)=TEMP
 | 
|---|
| 97 |  S ^TMP($J,"DUP","J",FILE,VAL,1)=TEMP2
 | 
|---|
| 98 |  S ^TMP($J,"DUP","J",FILE,VAL,"OLD")=OLDREC
 | 
|---|
| 99 |  S ^TMP($J,"DUP","J",FILE,VAL,"NEW")=NEWREC
 | 
|---|
| 100 |  Q
 | 
|---|