Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LRJSAU2

LRJSAU2.m

Go to the documentation of this file.
  1. LRJSAU2 ;ALB/GTS/DK/TMK - Lab Vista Audit Utilities;08/16/2010 15:53:28
  1. ;;5.2;LAB SERVICE;**425**;Sep 27, 1994;Build 30
  1. ;
  1. ;
  1. KILL ;Kill off build data
  1. K ^TMP("LRJ SYS MAP AUD MSG",$J)
  1. K ^TMP("LRJ SYS MAP AUD MANAGER",$J)
  1. Q
  1. ;
  1. LISTHLMM(LRHLARY) ; Store audit information in the display array
  1. ; INPUT -
  1. ; LRHLARY - Array of raw extract data
  1. ;
  1. N LRREF,LRFROM,LRTO
  1. ;get top level with date information
  1. S LRREF=$P(LRHLARY,")")_",1)"
  1. S LRFROM=$P($G(@LRREF),"^")
  1. S LRTO=$P($G(@LRREF),"^",2)
  1. D KILL
  1. D KILL^VALM10()
  1. D CRTRPTAR(LRHLARY,LRFROM,LRTO,"DISPLAY","")
  1. Q
  1. ;
  1. CRTRPTAR(LRHLARY,LRFROM,LRTO,LROUTPT,LRMMARY) ; Store info in the display array
  1. ; INPUT -
  1. ; LRHLARY - Array of raw extract data
  1. ; LRFROM - Start date for report
  1. ; LRTO - End date for report
  1. ; LROUTPT - "DISPLAY" for Listman; "MAIL" for mail message
  1. ; LRMMARY - Mail message output array
  1. ;
  1. N X,XN,XP,NODE,X1,X2,X3
  1. N LRFSTLNE,LRPARAM,LRLNCTN,LRLNCNT,LRVALST
  1. S VALM("TITLE")=AUDES_" Audit Message"
  1. S:$G(LRMMARY)="" LRMMARY=""
  1. S:$G(LROUTPT)="" LROUTPT="DISPLAY"
  1. S LRFSTLNE=0
  1. S X=AUDES_$S($D(LRFROM):" from "_$$FMTE^XLFDT(LRFROM),1:"")_$S($D(LRTO):" to "_$$FMTE^XLFDT(LRTO),1:"")
  1. I LROUTPT="MAIL" D
  1. .S LRLNCNT=0
  1. .D LRADDNOD^LRJSAU3(.LRLNCNT,X,"",LROUTPT,LRMMARY)
  1. Q
  1. ;
  1. ;THE FOLLOWING API is to be called from a Taskman
  1. ;scheduled job LRJ SYS MAP [autyp] TASKMAN RPT where autyp=audit type
  1. ;;;TASKMAN should call D TSKMMARY^LRJSAU2(AUTYP,AUDES,"^TMP(""LRJ SYS F60 AUD MANAGER"",$J)","^TMP(""LRJ SYS F60 AUD MANAGER"",$J)")
  1. TSKMMARY(AUTYP,AUDES,AUFMT) ;TASKMAN API for Mail Message array
  1. ;
  1. ;INPUT (Roots for arrays to be created)
  1. ;AUTYP=Audit Type (AUF60 = File 60, AUF60XT = File 60 extract delimited file
  1. ;AUDES=Description (File 60 Audit, New Person Audit)
  1. ; LRHLARY - Array of Raw Data
  1. ; LRMMARY - Mail Message array to send in message
  1. ;AUFMT=format (Readable Display=DISPLAY; Delimited file =FILE)
  1. ;
  1. ;
  1. N $ESTACK,$ETRAP S $ETRAP="D TSKERR^LRJSAU2"
  1. N LRFROM,LRTO,LRTOMM,LRMSUBJ,XQSND,ERR,LRTOVA,LRTASKVA,LRINSTVA,AUSUB,TSKCALL,ZTIO
  1. ;
  1. ;;TO DO: GIVE INSTRUCTIONS FOR SCHEDULING THE FREQUENCY OF TASK JOB VIA TASKMAN
  1. ;;
  1. D NOW^%DTC
  1. S LRTO=$E(%,1,12) ;NOW is end date/time
  1. K %,X,%H,%I(1),%I(2),%I(3)
  1. S LRFROM=$$GET^XPAR("SYS","LRJ LSRP "_AUTYP_" LAST END DATE",1,"Q")
  1. ;
  1. ;If report hasn't been run before, generate for previous 7 days
  1. I LRFROM="" D
  1. .S X1=LRTO
  1. .S X2=-7
  1. .D C^%DTC
  1. .S LRFROM=X
  1. .K X,%H
  1. ;
  1. D EN^XPAR("SYS","LRJ LSRP "_AUTYP_" LAST END DATE",,LRTO,.ERR)
  1. D EN^XPAR("SYS","LRJ LSRP "_AUTYP_" LAST START DATE",,LRFROM,.ERR)
  1. ;
  1. S TSKCALL=1,ZTIO=""
  1. I AUTYP["AUF60" D AUDISP^LRJSAU60
  1. I AUTYP'["AUF60" Q
  1. S AUSUB=$S(AUTYP["AUF60":"F60",1:"")
  1. S (LRHLARY,LRMMARY)="^TMP(""LRJ SYS ""_AUSUB_"" AUD MANAGER"",$J)"
  1. I AUTYP["XT" S (LRHLARY,LRMMARY)="^TMP(""LRJ SYS ""_AUSUB_"" AUD MANAGER"",$J,""EXTRACT"")"
  1. ;
  1. I $D(@LRHLARY) D
  1. . S LRLPCNT=1
  1. . S @LRMMARY@(LRLPCNT)=AUDES_$S($D(LRFROM):" from "_$$FMTE^XLFDT(LRFROM),1:"")_$S($D(LRTO):" to "_$$FMTE^XLFDT(LRTO),1:"")
  1. . I AUFMT="DISPLAY" D
  1. . . F XCAT="NEW","OLD" D
  1. . . . S (LRNODE,LRSUB)=0
  1. . . . I '$D(@LRHLARY@(XCAT)) D Q
  1. . . . . S LRLPCNT=LRLPCNT+1
  1. . . . . S @LRMMARY@(LRLPCNT)=" No "_$S(XCAT="NEW":"new",1:"modified")_" entries"
  1. . . . S LRLPCNT=LRLPCNT+1
  1. . . . S @LRMMARY@(LRLPCNT)=""
  1. . . . S LRLPCNT=LRLPCNT+1
  1. . . . S @LRMMARY@(LRLPCNT)=$S(XCAT="NEW":"New",1:"Modified")_" entries"
  1. . . . S LRLPCNT=LRLPCNT+1
  1. . . . S @LRMMARY@(LRLPCNT)=""
  1. . . . F S LRNODE=$O(@LRHLARY@(XCAT,LRNODE)) Q:LRNODE="" D
  1. . . . . F S LRSUB=$O(@LRHLARY@(XCAT,LRNODE,LRSUB)) Q:LRSUB="" D
  1. . . . . . S LRLPCNT=LRLPCNT+1
  1. . . . . . S @LRMMARY@(LRLPCNT)=$G(@LRHLARY@(XCAT,LRNODE,LRSUB))
  1. . . S LRMSUBJ=AUDES_$S($D(LRFROM):" from "_$$FMTE^XLFDT(LRFROM),1:"")_$S($D(LRTO):" to "_$$FMTE^XLFDT(LRTO),1:"")
  1. . . S LRTOMM("G.LRJ "_AUTYP_" AUDIT TASK REPORT")=""
  1. . . S XQSND=DUZ
  1. . . D SNDMSG(LRMSUBJ,XQSND,LRMMARY,.LRTOMM,1) ;"1" = created by Taskman; send to Mailgroup
  1. . ;Send Extract message with attachments
  1. . Q:AUFMT="DISPLAY"
  1. . S LRMSUBJ=AUDES_$S($D(LRFROM):" from "_$$FMTE^XLFDT(LRFROM),1:"")_$S($D(LRTO):" to "_$$FMTE^XLFDT(LRTO),1:"")
  1. . ;
  1. . ;Check for Network addresses and mail attachment
  1. . S LRINSTVA("ADDR FLAGS")="R" ;Do not Restrict Message addressing
  1. . S LRINSTVA("FROM")="LSRP_"_AUTYP_" USER_ACTION"
  1. . S XQSND=DUZ
  1. . S LRTOVA(XQSND)=""
  1. . ;Array of raw extract, Array of message text for networkd address, Message subject
  1. . ;
  1. . S LRTOMM("G.LRJ "_AUTYP_" AUDIT TASK REPORT")=""
  1. . D OUTLKARY(LRHLARY,"^TMP($J,""LRNETMSG"")",LRMSUBJ)
  1. . D SNDMSG(LRMSUBJ,XQSND,"^TMP($J,""LRNETMSG"")",.LRTOMM,1)
  1. . ;
  1. K @LRHLARY,@LRMMARY,^TMP($J,"LRNETMSG")
  1. Q
  1. ;
  1. TSKERR ; Error trap to send bulletin if queued report encounters a system error
  1. N XMTEXT,XMY,XMSUB,XQSND
  1. S XMY("G.LRJ "_AUTYP_" AUDIT TASK REPORT")=""
  1. S XMSUB=AUDES_" AUTOMATED REPORT ERROR"
  1. S XMTEXT(1)="This message is to inform you that the "_AUDES_" automated report"
  1. S XMTEXT(2)="has encountered an error and did not complete. Please contact your"
  1. S XMTEXT(3)="system manager for further details."
  1. S XMTEXT(4)=" "
  1. S XMTEXT(5)="ERROR OCCURRED: "_$$FMTE^XLFDT($$NOW^XLFDT,"2")
  1. S XMTEXT(6)="ERROR MESSAGE : "_$$EC^%ZOSV
  1. S XQSND=DUZ
  1. D SNDMSG(XMSUB,XQSND,"XMTEXT",.XMY,1)
  1. ;
  1. ; log error in standard error trap
  1. D ^%ZTER
  1. D UNWIND^%ZTER
  1. Q
  1. ;
  1. CRTMMARY(LRHLARY,AUTYP,AUDES,AURTN,LRMMARY) ;Load Mail Message array
  1. ;INPUT
  1. ; LRHLARY - Array of Raw Data
  1. ;AUTYP = audit type (ex: AUF60 for File 60 audit
  1. ;AUDES = audit description (ex. File 60, New Person)
  1. ;AURTN = audit specific utility routine (ex. LRJSAU60 for file 60)
  1. ; LRMMARY - Mail Message array to send in message
  1. ;
  1. N LRMSUBJ,XQSND,LRFROM,LRTO,XQSND,LRNODE,LRSAVE,LRLPCNT,XCAT,LRSUB,LRREF,LRTOMM
  1. ;
  1. D LISTHLMM(LRHLARY)
  1. ;get top level with date information
  1. ;may seem like duplicate work since LISTHLMM has the same logic
  1. ;but LISTHLMM also called from other routine(s)
  1. ;may be safer to keep this logic here
  1. S LRREF=$P(LRHLARY,")")_",1)"
  1. S LRFROM=$P($G(@LRREF),"^")
  1. S LRTO=$P($G(@LRREF),"^",2)
  1. I LRFROM="" D Q
  1. . W !,?10,"First invoke ""DF"" option"
  1. . D PAUSE^VALM1
  1. . I AUTYP["F60" D F60^LRJSAU
  1. ;
  1. S LRMSUBJ=AUDES_$S($D(LRFROM):" from "_$$FMTE^XLFDT(LRFROM),1:"")_$S($D(LRTO):" to "_$$FMTE^XLFDT(LRTO),1:"")
  1. S XQSND=DUZ,LRLPCNT=1
  1. I '$G(LRMMARY) S LRMMARY="^TMP(""LRJ SYS "_$E(AUTYP,3,99)_" AUD MANAGER"",$J)"
  1. S @LRMMARY@(LRLPCNT)=LRMSUBJ
  1. F XCAT="NEW","OLD" D
  1. . S (LRNODE,LRSUB)=0
  1. . I '$D(@VALMAR@(XCAT)) D Q
  1. . . S LRLPCNT=LRLPCNT+1
  1. . . S @LRMMARY@(LRLPCNT)=" No "_$S(XCAT="NEW":"new",1:"modified")_" entries"
  1. . S LRLPCNT=LRLPCNT+1
  1. . S @LRMMARY@(LRLPCNT)=$S(XCAT="NEW":"New",1:"Modified")_" entries"
  1. D SNDMSG(LRMSUBJ,XQSND,LRMMARY,.LRTOMM,0)
  1. S @LRREF=LRFROM_"^"_LRTO
  1. ;I $O(@VALMAR@(0))="" K @LRMMARY@(1),@LRMMARY@(2),@LRMMARY@(3)
  1. Q
  1. ;
  1. SNDMSG(LRMSUBJ,XQSND,LRMSGARY,LRTOMM,LRTASK) ;Send message to requestor
  1. ;INPUT:
  1. ; LRMSUBJ - Subject of message being generated
  1. ; XQSND - User's DUZ, Group Name, or S.server name
  1. ; LRMSGARY - Array containing message text
  1. ; LRTOMM - Array containing users, groups, etc who should receive the message
  1. ; LRTASK - If defined, indicates this is called from TASKMAN job
  1. ;
  1. N LRINSTMM,LRTASKMM,XMERR,XMZ,LRLPCNT,LRTYPE
  1. ;
  1. S:'$D(LRTASK) LRTASK=0
  1. I 'LRTASK D
  1. . K XMERR
  1. . S LRINSTMM("ADDR FLAGS")="R" ;Do not Restrict Message addressing
  1. . S LRTYPE="S"
  1. . D TOWHOM^XMXAPIU(DUZ,,LRTYPE,.LRINSTMM)
  1. . S LRLPCNT=""
  1. . F S LRLPCNT=$O(^TMP("XMY",$J,LRLPCNT)) Q:LRLPCNT="" S LRTOMM(LRLPCNT)=""
  1. ;
  1. I +$G(XMERR)'>0 DO
  1. . ;no need to set additional VistA recipients - added LRTOMM as parameter
  1. . S LRINSTMM("FROM")="LSRP_"_AUTYP_"_USER_ACTION"
  1. . S LRMSUBJ=$E(LRMSUBJ,1,65)
  1. . D SENDMSG^XMXAPI(XQSND,LRMSUBJ,LRMSGARY,.LRTOMM,.LRINSTMM,.LRTASKMM)
  1. ;
  1. ;K @LRMSGARY,^TMP("XMY",$J),^TMP("XMY0",$J),^TMP($J,"LRNETMSG")
  1. Q
  1. ;
  1. ;Following Protocol invokes this API: LRJ SYS MAP AUF60 SEND EXT
  1. CRTXTMM(LRHLARY,AUTYP,AUDES,AURTN) ;Load Mail Message array
  1. ;INPUT
  1. ; LRHLARY - Array of Raw Data [^TMP($J,"LRJ SYS") when called by LRJ SYS MAP HL SEND MSG]
  1. ;
  1. N LRMSUBJ,XQSND
  1. S LRREF=$P(LRHLARY,"""EXTRACT""")_"1,0)"
  1. S LRMSUBJ=$G(@LRREF)
  1. I LRMSUBJ="" D Q
  1. . W !,?10,"First invoke ""DF"" option"
  1. . D PAUSE^VALM1
  1. . I AUTYP["F60" D F60^LRJSAU
  1. ;
  1. S XQSND=DUZ
  1. D SNDEXT(LRMSUBJ,XQSND,LRHLARY)
  1. Q
  1. ;
  1. SNDEXT(LRMSUBJ,XQSND,LREXTARY) ;Send extract to requestor
  1. ;INPUT:
  1. ; LRMSUBJ - Subject of message being generated
  1. ; XQSND - User's DUZ, Group Name, or S.server name
  1. ; LREXTARY - Array containing message text.
  1. ;
  1. N LRINSTMM,LRINSTVA,LRTASKMM,LRTASKVA,LRTOMM,LRTOVA,XMERR,XMZ,LRLPCNT,LRTYPE
  1. ;
  1. S LRINSTMM("ADDR FLAGS")="R" ;Do not Restrict Message addressing
  1. S LRTYPE="S"
  1. K XMERR
  1. D TOWHOM^XMXAPIU(DUZ,,LRTYPE,.LRINSTMM)
  1. ;
  1. ;Check for Network addresses and mail attachment
  1. S LRINSTVA("ADDR FLAGS")="R" ;Do not Restrict Message addressing
  1. S LRINSTVA("FROM")="LSRP_"_AUTYP_"_USER_ACTION"
  1. S LRMSUBJ=$E(LRMSUBJ,1,65)
  1. S LRLPCNT=""
  1. F S LRLPCNT=$O(^TMP("XMY",$J,LRLPCNT)) Q:LRLPCNT="" S LRTOVA(LRLPCNT)=""
  1. I +$G(XMERR)'>0 DO
  1. .D OUTLKARY(LREXTARY,"^TMP($J,""LRNETMSG"")",LRMSUBJ)
  1. .D SENDMSG^XMXAPI(XQSND,LRMSUBJ,"^TMP($J,""LRNETMSG"")",.LRTOVA,.LRINSTVA,.LRTASKVA)
  1. ;
  1. K ^TMP("XMY",$J),^TMP("XMY0",$J),^TMP($J,"LRNETMSG")
  1. Q
  1. ;
  1. OUTLKARY(LRHLARY,LRHLOTLK,LRMSUBJ) ;Create array of attachments
  1. ;INPUT:
  1. ; LRHLARY - Array containing message text
  1. ; LRHLOTLK - Array containing message text for network addresses
  1. ; LRMSUBJ - Subject of message
  1. ;
  1. N LRFILNM,LRFILNM1,LRFILNM2,LRDTTM,LRCRLF,LRSTR,LRNODE,LROUTNOD,LRNODATA,XSUB
  1. S LRSTR=""
  1. S LRNODATA=0
  1. S LRCRLF=$C(13,10)
  1. K @LRHLOTLK
  1. S @LRHLOTLK@(1)="Extract Generated......: "_$$FMTE^XLFDT($$NOW^XLFDT)_LRCRLF
  1. S @LRHLOTLK@(2)=" "
  1. S @LRHLOTLK@(3)="Extract Requested......: "_LRMSUBJ_LRCRLF
  1. S @LRHLOTLK@(4)=" "
  1. ;
  1. S LRDTTM=$$NOW^XLFDT
  1. S LRFILNM1=AUTYP_"_EXT_NEW_"_$P(LRDTTM,".",1)_"_"_$P(LRDTTM,".",2)_".csv"
  1. S LRFILNM2=AUTYP_"_EXT_MOD_"_$P(LRDTTM,".",1)_"_"_$P(LRDTTM,".",2)_".csv"
  1. S @LRHLOTLK@(5)=$S($D(@LRHLARY@("NEW")):"Attached LMOF",1:"No")_" NEW "_AUDES_" Entries"_$S($D(@LRHLARY@("NEW")):": "_LRFILNM1,1:"")_LRCRLF
  1. S @LRHLOTLK@(6)=" "
  1. S @LRHLOTLK@(7)=$S($D(@LRHLARY@("OLD")):"Attached LMOF",1:"No")_" MODIFIED "_AUDES_" Entries"_$S($D(@LRHLARY@("OLD")):": "_LRFILNM2,1:"")_LRCRLF
  1. S:($O(@LRHLARY@(0))="") LRNODATA=1
  1. S @LRHLOTLK@(8)=" "
  1. S:(LRNODATA=0) @LRHLOTLK@(9)=" "
  1. S:(LRNODATA=1) @LRHLOTLK@(9)="No data was extracted for date range!!"
  1. ;
  1. ;Begin output of "NEW" entries
  1. F XSUB="NEW","OLD" D
  1. . S LRNODE=0,LRSTR="",LROUTNOD=$S(XSUB="NEW":10,XSUB="OLD"&($D(@LRHLARY@("NEW"))):LROUTNOD+4,1:10)
  1. . I $D(@LRHLARY@(XSUB)) D
  1. . . S LRFILNM=$S(XSUB="NEW":LRFILNM1,1:LRFILNM2)
  1. . . S @LRHLOTLK@(LROUTNOD)=$$UUBEGFN(LRFILNM)
  1. . . F S LRNODE=$O(@LRHLARY@(XSUB,LRNODE)) Q:(LRNODE)="" D
  1. . . . S LRSTR=LRSTR_@LRHLARY@(XSUB,LRNODE)_LRCRLF
  1. . . . D ENCODE(.LRSTR,.LROUTNOD,LRHLOTLK)
  1. . . S:(LRSTR'="") @LRHLOTLK@(LROUTNOD+1)=$$UUEN(LRSTR)
  1. . . S @LRHLOTLK@(LROUTNOD+2)=" "
  1. . . S @LRHLOTLK@(LROUTNOD+3)="end"
  1. Q
  1. ;
  1. UUBEGFN(LRFILENM) ; Construct uuencode "begin" coding
  1. ; Call with LRFILENM = name of uuencoded file attachment
  1. ;
  1. ; Returns LRX = string with "begin..."_file name
  1. ;
  1. N LRX
  1. S LRX="begin 644 "_LRFILENM
  1. Q LRX
  1. ;
  1. ENCODE(LRSTR,LRDTANOD,LRHLOTLK) ;Encode a string, keep remainder for next line
  1. ;INPUT:
  1. ; LRSTR - String to send in message; call by reference, Remainder returned in LRSTR
  1. ; LRDTANOD - Number of next Node to store message line in array
  1. ; LRHLOTLK - Array containing message text for network addresses
  1. ;
  1. N LRQUIT,LRLEN,LRX
  1. S LRQUIT=0,LRLEN=$L(LRSTR)
  1. F D Q:LRQUIT
  1. . I $L(LRSTR)<45 S LRQUIT=1 Q
  1. . S LRX=$E(LRSTR,1,45)
  1. . S LRDTANOD=LRDTANOD+1,@LRHLOTLK@(LRDTANOD)=$$UUEN(LRX)
  1. . S LRSTR=$E(LRSTR,46,LRLEN)
  1. Q
  1. ;
  1. UUEN(STR) ; Uuencode string passed in.
  1. N J,K,LEN,LRI,LRX,S,TMP,X,Y
  1. S TMP="",LEN=$L(STR)
  1. F LRI=1:3:LEN D
  1. . S LRX=$E(STR,LRI,LRI+2)
  1. . I $L(LRX)<3 S LRX=LRX_$E(" ",1,3-$L(LRX))
  1. . S S=$A(LRX,1)*256+$A(LRX,2)*256+$A(LRX,3),Y=""
  1. . F K=0:1:23 S Y=(S\(2**K)#2)_Y
  1. . F K=1:6:24 D
  1. . . S J=$$DEC^XLFUTL($E(Y,K,K+5),2)
  1. . . S TMP=TMP_$C(J+32)
  1. S TMP=$C(LEN+32)_TMP
  1. Q TMP
  1. ;
  1. ;
  1. PARAMED(AUTYP,AUDES) ;Edit the Dates referenced by tasked Option "LRJ SYS MAP [autyp] TASKMAN RPT"
  1. ;where AUTYP=audit type (ex. AUF60 for File 60 audit
  1. ; This API invokes the Edit Instance and Value of a Parameter API to edit the following
  1. ; Parameters:
  1. ; LRJ LSRP [autyp] LAST START DATE
  1. ; LRJ LSRP [autyp] LAST END DATE
  1. ;
  1. ; These parameters control the period that the Audit file extract is performed via the
  1. ; TaskMan scheduled job for the "LRJ SYS MAP [autyp] TASKMAN RPT" option
  1. ;
  1. W !!,"Lab "_AUDES_" Audit extract dates record the report dates"
  1. W !," for the last extract created by the LRJ SYS MAP "_AUTYP_" TASKMAN RPT option."
  1. W !," The LRJ LSRP "_AUTYP_" LAST END DATE is the start date used by the next execution"
  1. W !," of the LRJ SYS MAP "_AUTYP_" TASKMAN RPT option.",!
  1. W !!,"WARNING: Editing the LRJ LSRP "_AUTYP_" LAST END DATE will affect the information"
  1. W !," reported by the LRJ SYS MAP "_AUTYP_" TASKMAN RPT option. This option makes"
  1. W !," assumptions about data previously reported based upon this date."
  1. W !!,"A USER CHANGING THE 'LRJ LSRP "_AUTYP_" LAST END DATE' MUST UNDERSTAND THE RESULT"
  1. W !," OF THE CHANGE MADE AND RECONCILE THE REPORTS CREATED AGAINST THE PREVIOUS"
  1. W !," REPORT CREATED!",!!
  1. ;
  1. D EDITPAR^XPAREDIT("LRJ LSRP "_AUTYP_" LAST START "_$S(AUTYP["XT":"DT",1:"DATE"))
  1. W !!,"-------------------------------------------------------------------------------"
  1. D EDITPAR^XPAREDIT("LRJ LSRP "_AUTYP_" LAST END DATE")
  1. ;;D EN^XPAREDIT ;;IA #2336
  1. Q