| 1 | DDSM1 ;SFISC/MKO-MULTILINE, LOAD AND DELETE ;9:49 AM  20 Apr 1999
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**8**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | LOAD(DDSIEN) ;Load subentries
 | 
|---|
| 6 | MLOAD ;Entry point from MLOAD^DDSUTL
 | 
|---|
| 7 |  ;@DDSIEN is an array of record numbers
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  Q:$D(DDSIEN)[0
 | 
|---|
| 10 |  Q:$D(@DDSIEN)<9
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  N DDSI,DDSPDA,DDSRN,DDSSN
 | 
|---|
| 13 |  S DDSPDA=$P(DDSREP,U)
 | 
|---|
| 14 |  S DDSSN=$O(@DDSREFT@(DDSPG,DDSBK,DDSPDA," "),-1)
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;Add records to internal ^TMP array
 | 
|---|
| 17 |  ;Load data for each record
 | 
|---|
| 18 |  S DDSI="" F  S DDSI=$O(@DDSIEN@(DDSI)) Q:DDSI=""  D
 | 
|---|
| 19 |  . S DDSRN=@DDSIEN@(DDSI) Q:'DDSRN
 | 
|---|
| 20 |  . S DA=+DDSRN,$P(DDSDA,",")=DA,@("D"_DDSDL)=DA
 | 
|---|
| 21 |  . I $D(@DDSREFT@(DDSPG,DDSBK,DDSPDA,"B",DDSDA))[0 D
 | 
|---|
| 22 |  .. S DDSSN=DDSSN+1
 | 
|---|
| 23 |  .. S @DDSREFT@(DDSPG,DDSBK,DDSPDA,"B",DDSDA)=DDSSN
 | 
|---|
| 24 |  .. S @DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSSN)=DDSDA
 | 
|---|
| 25 |  .. S ^("ADD")=$G(@DDSREFT@("ADD"))+1,^("ADD",^("ADD"))=DDSDA_DIE
 | 
|---|
| 26 |  . D ^DDS11(DDSBK)
 | 
|---|
| 27 |  . S DDSCHG=1
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ;Position the cursor on blank (Select) line
 | 
|---|
| 30 |  ;Repaint all lines in the repeating block
 | 
|---|
| 31 |  D POSSN^DDSM(999999999999)
 | 
|---|
| 32 |  D DMULTN^DDSR(DDSPG,DDSBK,DDSPDA,$P(DDSREP,U,5),1)
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ;Update DIR0
 | 
|---|
| 35 |  S DIR0=$P(@DDSREFS@(DDSPG,DDSBK,DDO,"D"),U,1,3)
 | 
|---|
| 36 |  S:$P($G(DDSREP),U,3)>1 $P(DIR0,U)=$P(DIR0,U)+$P(DDSREP,U,3)-1
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | DEL(DDSIEN) ;Delete subentries
 | 
|---|
| 40 | MDEL ;Entry point from MDEL^DDSUTL
 | 
|---|
| 41 |  ;In:
 | 
|---|
| 42 |  ; If DDSIEN contains a record number, delete that one (G MDELONE)
 | 
|---|
| 43 |  ; If DDSIEN contains a closed root, @DDSIEN is an array
 | 
|---|
| 44 |  ;  of record numbers to delete
 | 
|---|
| 45 |  ; DIE   = global root
 | 
|---|
| 46 |  ; DDSDA = current IENS
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  Q:$D(DDSIEN)[0
 | 
|---|
| 49 |  G:+$P(DDSIEN,"E") MDELONE
 | 
|---|
| 50 |  Q:$D(@DDSIEN)<9
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  N DDSI,DDSPDA,DDSRN,DDSSN
 | 
|---|
| 53 |  S DDSPDA=$P(DDSREP,U)
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  ;Loop through passed array and delete subentries
 | 
|---|
| 56 |  S DDSI="" F  S DDSI=$O(@DDSIEN@(DDSI)) Q:DDSI=""  D
 | 
|---|
| 57 |  . ;S DDSRN=@DDSIEN@(DDSI) Q:'DDSRN
 | 
|---|
| 58 |  . ;S DDSIENS=DDSDA,$P(DDSIENS,",")=+DDSRN
 | 
|---|
| 59 |  . ;D K^DDS6(DDSIENS,DIE)
 | 
|---|
| 60 |  . ;Q
 | 
|---|
| 61 |  . ;
 | 
|---|
| 62 |  . S DDSRN=@DDSIEN@(DDSI) Q:'DDSRN
 | 
|---|
| 63 |  . S DA=+DDSRN,$P(DDSDA,",")=DA
 | 
|---|
| 64 |  . S DDSSN=$G(@DDSREFT@(DDSPG,DDSBK,DDSPDA,"B",DDSDA)) Q:'DDSSN
 | 
|---|
| 65 |  . K @DDSREFT@(DDSPG,DDSBK,DDSPDA,"B",DDSDA)
 | 
|---|
| 66 |  . K @DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSSN)
 | 
|---|
| 67 |  . K @DDSREFT@("F"_DDP,DDSDA)
 | 
|---|
| 68 |  . K @DDSREFT@("F0",DDSDA)
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ;Close up gaps in ^TMP array
 | 
|---|
| 71 |  S (DDSI,DDSSN)=0
 | 
|---|
| 72 |  F  S DDSI=$O(@DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSI)) Q:'DDSI  D
 | 
|---|
| 73 |  . S DDSSN=DDSSN+1 Q:DDSI=DDSSN
 | 
|---|
| 74 |  . S DDSRN=@DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSI)
 | 
|---|
| 75 |  . S @DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSSN)=DDSRN
 | 
|---|
| 76 |  . S @DDSREFT@(DDSPG,DDSBK,DDSPDA,"B",DDSRN)=DDSSN
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  F  S DDSSN=$O(@DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSSN)) Q:'DDSSN  D
 | 
|---|
| 79 |  . K @DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSSN)
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  ;Position cursor on "Select" line
 | 
|---|
| 82 |  ;Repaint all lines in repeating block
 | 
|---|
| 83 |  D POSSN^DDSM(999999999999,1)
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  ;Update DIR0
 | 
|---|
| 86 |  S DIR0=$P(@DDSREFS@(DDSPG,DDSBK,DDO,"D"),U,1,3)
 | 
|---|
| 87 |  S:$P($G(DDSREP),U,3)>1 $P(DIR0,U)=$P(DIR0,U)+$P(DDSREP,U,3)-1
 | 
|---|
| 88 |  Q
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 | MDELONE ;Delete one subentry in the current repeating block
 | 
|---|
| 91 |  ;In:  DDSIEN = IENS of record to be deleted
 | 
|---|
| 92 |  ;     DDSREP = data for repeating blocks
 | 
|---|
| 93 |  ;     DDSDA  = current IENS
 | 
|---|
| 94 |  ;     DIE    = current global root
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  N DDSPDA,DDSRN,DDSSN
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ;Get parent IENS
 | 
|---|
| 99 |  S DDSPDA=$P(DDSREP,U)
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  ;Kill all data pertaining to current (sub)record
 | 
|---|
| 102 |  D K^DDS6(DDSIEN,DIE)
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ;Repaint lines and reposition cursor
 | 
|---|
| 105 |  I DDSDA=DDSIEN D
 | 
|---|
| 106 |  . D DMULTN^DDSR(DDSPG,DDSBK,DDSPDA,$P(DDSREP,U,5),$P(DDSREP,U,3))
 | 
|---|
| 107 |  . S DDSSN=$P(DDSREP,U,4)
 | 
|---|
| 108 |  . I $D(@DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSSN))[0 D
 | 
|---|
| 109 |  .. S DDSSN=$O(@DDSREFT@(DDSPG,DDSBK,DDSPDA,DDSSN),-1)
 | 
|---|
| 110 |  . D POSSN^DDSM(DDSSN)
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  E  D POSSN^DDSM(999999999999,1)
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  ;Update DIR0
 | 
|---|
| 115 |  S DIR0=$P(@DDSREFS@(DDSPG,DDSBK,DDO,"D"),U,1,3)
 | 
|---|
| 116 |  S:$P($G(DDSREP),U,3)>1 $P(DIR0,U)=$P(DIR0,U)+$P(DDSREP,U,3)-1
 | 
|---|
| 117 |  Q
 | 
|---|