DDS5 ;SFISC/MKO-MULTS,NEXT/PREV PAGE,NEXT BLOCK ;9:53 AM 1 Oct 1999
;;22.2;VA FileMan;;Jan 05, 2016;Build 42
;;Per VA Directive 6402, this routine should not be modified.
;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
;;Licensed under the terms of the Apache License, Version 2.0.
;
I X="" D:DDSOLD="" NF^DDS01 D:DDSOLD]"" DM^DDS6 Q
I DIR0N,$D(DUZ)#2 S ^DISV(DUZ,$E(DDSGL,1,28))=$E(DDSGL,29,999)_X
I $G(@DDSREFS@("ASUB",DDSPG,DDSBK,DDO))]"" S DDS5PG=^(DDO)
E I $P($G(DDSO(7)),U,2)="" D:X=DDSOLD NF^DDS01 Q
D MULT,R^DDSR
;
K DDSSTACK
X:$G(^DIST(.404,DDSBK,40,DDO,10))'?."^" ^(10)
I $D(DDSSTACK) D ^DDSSTK,R^DDS3 K DDSBR
D:$D(DDSBR)#2 BR^DDS2
Q
MULT ;
N DIE,DDO,DDSBK,DDSDN,DDSNP,DDSOPB,DDSPG,DDSPTB,DDSREP,DDSTP
;
I $G(DDS5PG) S DDSPG=DDS5PG K DDS5PG
E D
. S DDSPG(1)=$P($G(DDSO(7)),U,2) Q:DDSPG(1)=""
. S DDSPG=$O(^DIST(.403,+DDS,40,"B",DDSPG(1),"")) Q:DDSPG=""
Q:$D(^DIST(.403,+DDS,40,+$G(DDSPG),0))[0
N:'$P(^(0),U,6) DDSSC
;
D DDA(Y,.DA,.DDSDL)
I Y'=-1 D
. N DDP,DDSDA,DDSFLD,DDSDLORG,DDSDAORG,DDSFLORG
. S DIE=U_$P(DDSU("M"),U,2),DDP=$P(DDSU("M"),U,3)
. S DDSDLORG=DDSDL,DDSDAORG=DA,DDSDA=DA_","
. F DDSI=1:1:DDSDL S DDSDAORG(DDSI)=DA(DDSI),DDSDA=DDSDA_DA(DDSI)_","
. K DDSI
. S DDSSTK=1
. D PROC^DDS
D LST(.DA,.DDSDL,DDP,DDSDA,DDSFLD)
D UDA(.DA,.DDSDL)
Q
;
LST(DA,DDSDL,DDP,DDSDA,DDSFLD) ;Save last edited subrecord
;In: DA array, DDSDL at subfile level
; DDP, DDSDA, DDSFLD at file level
N DDSDIE,Y
S DDSDIE=U_$P(@DDSREFT@("F"_DDP,DDSDA,DDSFLD,"M"),U,2)
I $D(@(DDSDIE_"+$G(DA),0)"))[0 D
. S DA=$S($D(@(DDSDIE_"0)"))#2:$P(^(0),U,3),1:$O(^(0)))
. I DA>0 D
.. N C
.. S Y=$P(@(DDSDIE_DA_",0)"),U)
.. S C=$P(^DD(+$P(^DD(DDP,DDSFLD,0),U,2),.01,0),U,2)
.. D Y^DIQ
. E S (DA,Y)=""
E S (DA,Y)=""
I DA>0,$D(DUZ)#2 S ^DISV(DUZ,$E(DDSDIE,1,28))=$E(DDSDIE,29,999)_DA
;
S @DDSREFT@("F"_DDP,DDSDA,DDSFLD,"X")=Y,^("D")=DA,DDACT="N"
Q
;
SEL ;Issue the read at the Select mult prompt
S DIR(0)="PO"_DDSGL_":QEMZ"_$E("L",'$D(DDSTP)&'$P($G(DDSO(4)),U,5))_$E("V",$P($G(DDSO(4)),U,6))
I $D(@(DDSGL_"0)"))[0 S ^(0)=U_$P($G(DDSU("DD")),U,2)_U_U
E I $P(@(DDSGL_"0)"),U,2)'=$P($G(DDSU("DD")),U,2) S $P(^(0),U,2)=$P($G(DDSU("DD")),U,2)
D DDA(0,.DA,.DDSDL) S DDSDA="0,"_DDSDA
D ^DIR K DIR,DUOUT,DIRUT,DIROUT
D UDA(.DA,.DDSDL) S DDSDA=$P(DDSDA,",",2,999)
Q:DDACT'="N"
;
I DIR0N S (X,Y)=DDSOLD Q
I $P(Y,U,3)=1 S ^("ADD")=$G(@DDSREFT@("ADD"))+1,^("ADD",^("ADD"))=+Y_","_DDSDA_DDSGL
E S DIR0N=1
S Y=$P(Y,U)
S:X="" Y=""
Q
;
DDA(Y,DA,DL) ;Push Y onto DA array
N I
F I=DL:-1:1 S DA(I+1)=DA(I)
S DA(1)=DA,DL=DL+1
S (DA,@("D"_DL))=$S(+$P($G(Y),"E"):+$P(Y,"E"),1:0)
Q
;
UDA(DA,DL) ;Pop DA array
N I
S DA=DA(1)
F I=2:1:DL S DA(I-1)=DA(I)
K DA(DL),@("D"_DL)
S DL=DL-1
Q
NP(Y) ;Returns: Next page
; (Y=1 if found, 0 if not found)
N P,P1
S Y=0,P1=$P($G(^DIST(.403,+DDS,40,DDSPG,0)),U,4)
I P1]"" D
. S P=$O(^DIST(.403,+DDS,40,"B",P1,""))
. I P,P'=DDSPG,$D(^DIST(.403,+DDS,40,P,0))#2 S Y=1
Q $S(Y=1:P,1:DDSPG)
PP(Y) ;
N P,P1
S Y=0,P1=$P($G(^DIST(.403,+DDS,40,DDSPG,0)),U,5)
I P1]"" D
. S P=$O(^DIST(.403,+DDS,40,"B",P1,""))
. I P,P'=DDSPG,$D(^DIST(.403,+DDS,40,P,0))#2 S Y=1
Q $S(Y=1:P,1:DDSPG)
NB(Y) ;
N B,BO,X
S (B,Y)=0,BO=$P($G(^DIST(.403,+DDS,40,DDSPG,40,DDSBK,0)),U,2)
I BO F D Q:B=DDSBK!Y
. S BO=$O(^DIST(.403,+DDS,40,DDSPG,40,"AC",BO)) S:'BO BO=$O(^("")) S B=$O(^(BO,""))
. S X=$G(@DDSREFS@(DDSPG,B))
. I $P(X,U)]"",$P(X,U,5)'="h",$P(X,U,9),B'=DDSBK S Y=1
Q B
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDDS5 3656 printed Oct 16, 2024@18:43:41 Page 2
DDS5 ;SFISC/MKO-MULTS,NEXT/PREV PAGE,NEXT BLOCK ;9:53 AM 1 Oct 1999
+1 ;;22.2;VA FileMan;;Jan 05, 2016;Build 42
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
+4 ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
+5 ;;Licensed under the terms of the Apache License, Version 2.0.
+6 ;
+7 IF X=""
if DDSOLD=""
DO NF^DDS01
if DDSOLD]""
DO DM^DDS6
QUIT
+8 IF DIR0N
IF $DATA(DUZ)#2
SET ^DISV(DUZ,$EXTRACT(DDSGL,1,28))=$EXTRACT(DDSGL,29,999)_X
+9 IF $GET(@DDSREFS@("ASUB",DDSPG,DDSBK,DDO))]""
SET DDS5PG=^(DDO)
+10 IF '$TEST
IF $PIECE($GET(DDSO(7)),U,2)=""
if X=DDSOLD
DO NF^DDS01
QUIT
+11 DO MULT
DO R^DDSR
+12 ;
+13 KILL DDSSTACK
+14 if $GET(^DIST(.404,DDSBK,40,DDO,10))'?."^"
XECUTE ^(10)
+15 IF $DATA(DDSSTACK)
DO ^DDSSTK
DO R^DDS3
KILL DDSBR
+16 if $DATA(DDSBR)#2
DO BR^DDS2
+17 QUIT
MULT ;
+1 NEW DIE,DDO,DDSBK,DDSDN,DDSNP,DDSOPB,DDSPG,DDSPTB,DDSREP,DDSTP
+2 ;
+3 IF $GET(DDS5PG)
SET DDSPG=DDS5PG
KILL DDS5PG
+4 IF '$TEST
Begin DoDot:1
+5 SET DDSPG(1)=$PIECE($GET(DDSO(7)),U,2)
if DDSPG(1)=""
QUIT
+6 SET DDSPG=$ORDER(^DIST(.403,+DDS,40,"B",DDSPG(1),""))
if DDSPG=""
QUIT
End DoDot:1
+7 if $DATA(^DIST(.403,+DDS,40,+$GET(DDSPG),0))[0
QUIT
+8 if '$PIECE(^(0),U,6)
NEW DDSSC
+9 ;
+10 DO DDA(Y,.DA,.DDSDL)
+11 IF Y'=-1
Begin DoDot:1
+12 NEW DDP,DDSDA,DDSFLD,DDSDLORG,DDSDAORG,DDSFLORG
+13 SET DIE=U_$PIECE(DDSU("M"),U,2)
SET DDP=$PIECE(DDSU("M"),U,3)
+14 SET DDSDLORG=DDSDL
SET DDSDAORG=DA
SET DDSDA=DA_","
+15 FOR DDSI=1:1:DDSDL
SET DDSDAORG(DDSI)=DA(DDSI)
SET DDSDA=DDSDA_DA(DDSI)_","
+16 KILL DDSI
+17 SET DDSSTK=1
+18 DO PROC^DDS
End DoDot:1
+19 DO LST(.DA,.DDSDL,DDP,DDSDA,DDSFLD)
+20 DO UDA(.DA,.DDSDL)
+21 QUIT
+22 ;
LST(DA,DDSDL,DDP,DDSDA,DDSFLD) ;Save last edited subrecord
+1 ;In: DA array, DDSDL at subfile level
+2 ; DDP, DDSDA, DDSFLD at file level
+3 NEW DDSDIE,Y
+4 SET DDSDIE=U_$PIECE(@DDSREFT@("F"_DDP,DDSDA,DDSFLD,"M"),U,2)
+5 IF $DATA(@(DDSDIE_"+$G(DA),0)"))[0
Begin DoDot:1
+6 SET DA=$SELECT($DATA(@(DDSDIE_"0)"))#2:$PIECE(^(0),U,3),1:$ORDER(^(0)))
+7 IF DA>0
Begin DoDot:2
+8 NEW C
+9 SET Y=$PIECE(@(DDSDIE_DA_",0)"),U)
+10 SET C=$PIECE(^DD(+$PIECE(^DD(DDP,DDSFLD,0),U,2),.01,0),U,2)
+11 DO Y^DIQ
End DoDot:2
+12 IF '$TEST
SET (DA,Y)=""
End DoDot:1
+13 IF '$TEST
SET (DA,Y)=""
+14 IF DA>0
IF $DATA(DUZ)#2
SET ^DISV(DUZ,$EXTRACT(DDSDIE,1,28))=$EXTRACT(DDSDIE,29,999)_DA
+15 ;
+16 SET @DDSREFT@("F"_DDP,DDSDA,DDSFLD,"X")=Y
SET ^("D")=DA
SET DDACT="N"
+17 QUIT
+18 ;
SEL ;Issue the read at the Select mult prompt
+1 SET DIR(0)="PO"_DDSGL_":QEMZ"_$EXTRACT("L",'$DATA(DDSTP)&'$PIECE($GET(DDSO(4)),U,5))_$EXTRACT("V",$PIECE($GET(DDSO(4)),U,6))
+2 IF $DATA(@(DDSGL_"0)"))[0
SET ^(0)=U_$PIECE($GET(DDSU("DD")),U,2)_U_U
+3 IF '$TEST
IF $PIECE(@(DDSGL_"0)"),U,2)'=$PIECE($GET(DDSU("DD")),U,2)
SET $PIECE(^(0),U,2)=$PIECE($GET(DDSU("DD")),U,2)
+4 DO DDA(0,.DA,.DDSDL)
SET DDSDA="0,"_DDSDA
+5 DO ^DIR
KILL DIR,DUOUT,DIRUT,DIROUT
+6 DO UDA(.DA,.DDSDL)
SET DDSDA=$PIECE(DDSDA,",",2,999)
+7 if DDACT'="N"
QUIT
+8 ;
+9 IF DIR0N
SET (X,Y)=DDSOLD
QUIT
+10 IF $PIECE(Y,U,3)=1
SET ^("ADD")=$GET(@DDSREFT@("ADD"))+1
SET ^("ADD",^("ADD"))=+Y_","_DDSDA_DDSGL
+11 IF '$TEST
SET DIR0N=1
+12 SET Y=$PIECE(Y,U)
+13 if X=""
SET Y=""
+14 QUIT
+15 ;
DDA(Y,DA,DL) ;Push Y onto DA array
+1 NEW I
+2 FOR I=DL:-1:1
SET DA(I+1)=DA(I)
+3 SET DA(1)=DA
SET DL=DL+1
+4 SET (DA,@("D"_DL))=$SELECT(+$PIECE($GET(Y),"E"):+$PIECE(Y,"E"),1:0)
+5 QUIT
+6 ;
UDA(DA,DL) ;Pop DA array
+1 NEW I
+2 SET DA=DA(1)
+3 FOR I=2:1:DL
SET DA(I-1)=DA(I)
+4 KILL DA(DL),@("D"_DL)
+5 SET DL=DL-1
+6 QUIT
NP(Y) ;Returns: Next page
+1 ; (Y=1 if found, 0 if not found)
+2 NEW P,P1
+3 SET Y=0
SET P1=$PIECE($GET(^DIST(.403,+DDS,40,DDSPG,0)),U,4)
+4 IF P1]""
Begin DoDot:1
+5 SET P=$ORDER(^DIST(.403,+DDS,40,"B",P1,""))
+6 IF P
IF P'=DDSPG
IF $DATA(^DIST(.403,+DDS,40,P,0))#2
SET Y=1
End DoDot:1
+7 QUIT $SELECT(Y=1:P,1:DDSPG)
PP(Y) ;
+1 NEW P,P1
+2 SET Y=0
SET P1=$PIECE($GET(^DIST(.403,+DDS,40,DDSPG,0)),U,5)
+3 IF P1]""
Begin DoDot:1
+4 SET P=$ORDER(^DIST(.403,+DDS,40,"B",P1,""))
+5 IF P
IF P'=DDSPG
IF $DATA(^DIST(.403,+DDS,40,P,0))#2
SET Y=1
End DoDot:1
+6 QUIT $SELECT(Y=1:P,1:DDSPG)
NB(Y) ;
+1 NEW B,BO,X
+2 SET (B,Y)=0
SET BO=$PIECE($GET(^DIST(.403,+DDS,40,DDSPG,40,DDSBK,0)),U,2)
+3 IF BO
FOR
Begin DoDot:1
+4 SET BO=$ORDER(^DIST(.403,+DDS,40,DDSPG,40,"AC",BO))
if 'BO
SET BO=$ORDER(^(""))
SET B=$ORDER(^(BO,""))
+5 SET X=$GET(@DDSREFS@(DDSPG,B))
+6 IF $PIECE(X,U)]""
IF $PIECE(X,U,5)'="h"
IF $PIECE(X,U,9)
IF B'=DDSBK
SET Y=1
End DoDot:1
if B=DDSBK!Y
QUIT
+7 QUIT B