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
|
---|