PRCPLO ;WOIFO/RLL/VAC/DAP-days of stock on hand report ; 2/26/07 1:53pm
;;5.1;IFCAP;**83,98**;Oct 20, 2000;Build 37
;Per VHA Directive 2004-038, this routine should not be modified.
; Note: This routine was copied from PRCPRSOH
;*98 Code modification made to handle STD and ODI breakouts
;
Q
ENT ; Entry Point to run Program
L +^PRCP(446.7,"STATUS"):3 I $T=0 S PRCPMSG(1)="Error encountered when attempting to run CLO GIP Reports due to other CLRS extracts in progress, please try again later." D MAIL^PRCPLO3 Q
N TOSTDCNT,TOODICNT,TOALLCNT,TOTCNT,VALUES
D PRCPRINV ; Run the logic from PRCPRSOH, get params
D BLDFIL ; Build the output data
D GETVAL ; Set the ^DIE Entries in 446.7
L -^PRCP(446.7,"STATUS")
;
K ^TMP($J,"PRCPSOH") ;kill off tmp data
K ^TMP($J,"PRCPLO") ;kill off tmp data
K ^TMP($J,"PRCPSOH2") ; kill off ODI tmp data
K ^TMP($J,"PRCPLO2") ;kill off ODI tmp data
Q
;
;
PRCPRINV ; run INV Point
N CLRSFLAG
S CLRSFLAG="SOH"
D GETIPT^PRCPLO1
Q
EN1 ; Added return from PRCPLO1
; Q
N DATEEND,DATEENDD,DATESTRD,DATESTRT,DAYSLEFT,DIR,GROUPALL,PRCPDAYS,PRCPEND,PRCPSTRT,PRCPTYPE,TOTALDAY,X,X1,X2,Y,MNT,TODAY
N ODICNT,ODIDOL,ODIFLAG,ODIFLG,STDCNT,STDDOL
;
; *83 The following was edited to always enter the LAST DAY
; of the previous month as the end date. End date for Oct 31, 2005
; in FM 3051031, can also use 3051100 equivalent for date sort
; this way, you do not have to handle months w/ 28, 29, 30 or 31 days
D NOW^%DTC S TODAY=X,Y=$E(X,1,3),MNT=$E(X,4,5)
S MNT=+(MNT)
S MNT=MNT-1
I MNT=0 S MNT=12,Y=Y-1
I $L(MNT)=1 S MNT=0_MNT
;
; *83 Added day logic to handle month/leap year, etc.
N DAYS,CKF
S DAYS=$P("31^28^31^30^31^30^31^31^30^31^30^31",U,+(MNT))
S DATEEND=Y_MNT_DAYS
I DAYS=28 D
. S CKF=(17+$E(DATEEND))_$E(DATEEND,2,3)
. S DAYS=$S(CKF#400=0:29,(CKF#4=0&(CKF#100'=0)):29,1:28)
. S DATEEND=Y_MNT_DAYS
. Q
; S DATEEND=Y_MNT_"00"
; *83 The following was edited to always enter a 90 day previous
; to current date of report run (check param file, could change)
; for the DATESTRT. Once DATEEND and DATESTRT are determined, we
; can use the existing code to set the other variables
S X1=TODAY
; *83 Report range supplied by site parameter and defaulted to 180
S X2=$$GET^XPAR("SYS","PRCPLO REPORT RANGE",1,"Q")
I X2="" S X2=180
S X2=(X2*-1)
D C^%DTC S DATESTRT=$E(X,1,5)_"01"
; DATEEND and DATESTRT are set above, pass them to existing
; logic below to set remaining variables
S X1=DATEEND,X2=DATESTRT D ^%DTC S TOTALDAY=X+1
S Y=DATEEND D DD^%DT S DATEENDD=Y,Y=DATESTRT D DD^%DT S DATESTRD=Y
;
;*83 Set PRCPTYPE=2 (always GREATER)
S PRCPTYPE=2
;
;*83 PRCPDAYS is set based on value of CLRS GREATER THAN RANGE parameter
;if no value is presented in the parameter, it will default to 90
;
S PRCPDAYS=$$GET^XPAR("SYS","PRCPLO GREATER THAN RANGE",1,"Q")
I PRCPDAYS="" S PRCPDAYS=90
;
;*83 Return PRCPSTRT="" and PRCPEND=""
I PRCP("DPTYPE")="W" D
. S PRCPSTRT="",PRCPEND=""
;
;*83 RETURN GROUPALL=1 to select all groups
I PRCP("DPTYPE")'="W" D
. S GROUPALL=1
. ; finished adding variables
;
DQ ; queue starts here
N AVERAGE,DATE,GROUP,GROUPNM,ITEMDA,ITEMDATA,NSN,ONHAND,TOTAL,X,Y
K ^TMP($J,"PRCPRSOH")
S ITEMDA=0 F S ITEMDA=$O(^PRCP(445,PRCP("I"),1,ITEMDA)) Q:'ITEMDA S ITEMDATA=$G(^(ITEMDA,0)) I ITEMDATA'="" D
. S ODIFLG=1 S ODIFLAG=$$ODITEM^PRCPUX2(PRCP("I"),ITEMDA)
. I ODIFLAG="Y" S ODIFLG=2
. S TOTCNT(PRCP("I"),ODIFLG)=+$G(TOTCNT(PRCP("I"),ODIFLG))+1
. I $$REUSABLE^PRCPU441(ITEMDA) Q
. ; calculate total usage between dates
. S DATE=$E(DATESTRT,1,5)-.01,TOTAL=0 F S DATE=$O(^PRCP(445,PRCP("I"),1,ITEMDA,2,DATE)) Q:'DATE!(DATE>$E(DATEEND,1,5)) S TOTAL=TOTAL+$P($G(^(DATE,0)),"^",2)
. S AVERAGE=$J(TOTAL/TOTALDAY,0,2),ONHAND=$P(ITEMDATA,"^",7)+$P(ITEMDATA,"^",19)
. S DAYSLEFT=$S('AVERAGE&(ONHAND):9999999,'AVERAGE:0,1:ONHAND/AVERAGE\1)
. I PRCPTYPE=1,DAYSLEFT'<PRCPDAYS Q
. I PRCPTYPE=2,DAYSLEFT'>PRCPDAYS Q
. ; sort for whse
. I PRCP("DPTYPE")="W" D Q
. . S NSN=$$NSN^PRCPUX1(ITEMDA) S:NSN="" NSN=" "
. . I $E(NSN,1,$L(PRCPSTRT))'=PRCPSTRT,$E(NSN,1,$L(PRCPEND))'=PRCPEND I NSN']PRCPSTRT!(PRCPEND']NSN) Q
. . ; S ^TMP($J,"PRCPRSOH",NSN,ITEMDA)=TOTAL_"^"_AVERAGE_"^"_ONHAND_"^"_$P(DAYSLEFT,".")_"^"_$P(ITEMDATA,"^",27)
. . N ITMCHK
. . S ITMCHK=0,ITMCHK=$O(^PRCP(445,PRCP("I"),1,ITMCHK))
. . Q:ITMCHK=""!(+(ITMCHK)<1)
. . Q:+(ITMCHK)<1 ; made it to x-ref
. . D BLDTMP
. ;98* Accumulate count information
. S VALUES(PRCP("I"),ODIFLG)=+$G(VALUES(PRCP("I"),ODIFLG))+1
. ; sort for primary and secondary
. S GROUP=+$P(ITEMDATA,"^",21)
. I 'GROUP,'$G(GROUPALL) Q
. I $G(GROUPALL),$D(^TMP($J,"PRCPURS1","NO",GROUP)) Q
. I '$G(GROUPALL),'$D(^TMP($J,"PRCPURS1","YES",GROUP)) Q
. S GROUPNM=$$GROUPNM^PRCPEGRP(GROUP)
. I GROUPNM'="" S GROUPNM=$E(GROUPNM,1,20)_" (#"_GROUP_")"
. S:GROUPNM="" GROUPNM=" "
. ;*83, Create TMP structure for Report
. N ITMCHK
. S ITMCHK=0,ITMCHK=$O(^PRCP(445,PRCP("I"),1,ITMCHK))
. Q:ITMCHK=""!(+(ITMCHK)<1)
. Q:ITMCHK<1 ; made it to x-ref
. D BLDTMP
. Q
Q
;
BLDTMP ;*83 Build ^TMP Structure for Report Server
;
N INVTYPE,ITEMDESC,CSTCTR,INDAT,NUMLNIT,DATRN,DATRN1,INVPTID
N CSTC1,CSTC2,CSTC3,CSCE1,CSCE2,V4TR,V4TR1
;
S DATRN=$$FMTE^XLFDT(+DATEEND)
S DATRN1=$P(DATRN," ",1)_","_$P(DATRN," ",3)
S ITEMDESC=$E($$DESCR^PRCPUX1(PRCP("I"),ITEMDA),1,15) ; item Desc
I ITEMDESC="" S ITEMDESC="No Item Desc"
Q:ITEMDA=""!(+(ITEMDA)<1)
;
S NUMLNIT=1 ; set to 1 for each line item.
S INVTYPE=PRCP("DPTYPE")
I INVTYPE="" S INVTYPE="No Inv Type"
S INDAT=$G(PRCP("PAR"))
S INVPTID=PRCP("I") ; inv point id #
; Cost Center logic
; Get ^PRCP(445,INVPTID,0) 7th piece (int. Cost Center #)
; Get ^PRCD(420.1,IntCstCtr,0) 1st piece (external format)
S CSTC1=$G(^PRCP(445,INVPTID,0)),CSTC2=$P(CSTC1,"^",7),CSTC3=$P(CSTC1,"^",3)
S V4TR=$P(CSTC1,"^",1),V4TR1=$P(V4TR,"-",2,99) ; *83 look up name
S V4TR1=$TR(V4TR1,"*","|") ; $TR name to replace "*"'s with "|"'s
I CSTC2'="" S CSCE1=$G(^PRCD(420.1,CSTC2,0)),CSCE2=$P(CSCE1,"^",1)
I CSTC2="" S CSCE2="No Cost Center"
; *83, Set 5th Node from ITEMDESC to ITEMDA
S ^TMP($J,"PRCPLO",V3,INVPTID,ITEMDA)=V3_"*"_DATRN1_"*"_INVPTID_"*"_V4TR1_"*"_NUMLNIT_"*"_$P(ITEMDATA,"^",27)_"*"_CSCE2_"*"_INVTYPE
; *98 Split information for ODI and Standard
S ^TMP($J,"PRCPLO2",V3,INVPTID,ITEMDA,ODIFLG)=+$G(^TMP($J,"PRCPLO2",V3,INVPTID,ITEMDA,ODIFLG))+$P(ITEMDATA,"^",27)
Q
BLDFIL ; Build output file
N IN1,IN2,IN3,IN4,IN5,OLPV,NWPV,INDDAT,TOTDOL,LNDOL,CSTCTR,LNCT,PRCPDX,INPTVAL,POINT,STID,DTTM,INVVTYP,INVPTLN
S IN1=0,IN2=0,IN3=0,IN4=0,IN5="INVPT",INDDAT=0,OLPV=0,NWPV=0,LNCT=0,CSTCTR=0,TOTDOL=0,LNDOL=0,INVPTLN=0
S STDCNT=0,ODICNT=0
S (STDDOL,ODIDOL)=0
F S IN1=$O(^TMP($J,"PRCPLO",IN1)) Q:IN1="" D
. ;S (STDDOL,ODIDOL)=0
. F S IN2=$O(^TMP($J,"PRCPLO",IN1,IN2)) Q:IN2="" D
. . I IN5'="INVPT" D ; init for first time through
. . . S INVPTLN=+$P($G(^PRCP(445,+INPTVAL,1,0)),"^",4)
. . . S TOSTDCNT=+$G(TOTCNT(IN2,1)),TOODICNT=+$G(TOTCNT(IN2,2)),TOALLCNT=TOSTDCNT+TOODICNT
. . . S PRCPDX=STID_"*"_DTTM_"*"_INPTVAL_"*"_POINT_"*"_INVVTYP_"*"_TOTDOL_"*"_IN4_"*"_INVPTLN_"*"_CSTCTR
. . . ; set up new ^TMP($J NODE to store totals for ^DIE set
. . . S ^TMP($J,"PRCPSOH",+(STID_INPTVAL))=PRCPDX
. . . S STDCNT=+$G(VALUES(INPTVAL,1)),ODICNT=+$G(VALUES(INPTVAL,2))
. . . S TOSTDCNT=+$G(TOTCNT(INPTVAL,1)),TOODICNT=+$G(TOTCNT(INPTVAL,2))
. . . S TOALLCNT=TOSTDCNT+TOODICNT
. . . S ^TMP($J,"PRCPSOH2",+(STID_INPTVAL))=STDDOL_"*"_ODIDOL_"*"_(STDDOL+ODIDOL)_"*"_STDCNT_"*"_ODICNT_"*"_(STDCNT+ODICNT)_"*"_TOSTDCNT_"*"_TOODICNT_"*"_TOALLCNT
. . . S IN4=0 ; reset to 0, begin counting Line items for INVPT
. . . S TOTDOL=0
. . . S LNDOL=0
. . . S PRCPDX=""
. . . S CSTCTR=""
. . . S (STDDOL,ODIDOL)=0
. . F S IN3=$O(^TMP($J,"PRCPLO",IN1,IN2,IN3)) Q:IN3="" D
. . . S INDDAT=$G(^TMP($J,"PRCPLO",IN1,IN2,IN3))
. . . S STID=$P(INDDAT,"*",1)
. . . S DTTM=$P(INDDAT,"*",2)
. . . S POINT=$P(INDDAT,"*",4)
. . . S INPTVAL=$P(INDDAT,"*",3) ; Inv Point ID# for DIE Set
. . . S CSTCTR=$P(INDDAT,"*",7)
. . . S LNDOL=$P(INDDAT,"*",6)
. . . S INVVTYP=$P(INDDAT,"*",8)
. . . S TOTDOL=TOTDOL+LNDOL
. . . S IN4=IN4+1 ; Count # of line items in Inv Pt
. . . S IN5=IN2 ; Invt. Point
. . . S STDDOL=STDDOL+$G(^TMP($J,"PRCPLO2",IN1,IN2,IN3,1))
. . . S ODIDOL=ODIDOL+$G(^TMP($J,"PRCPLO2",IN1,IN2,IN3,2))
. . . Q
. . Q
. Q
Q
GETVAL ; Get values from ^TMP($J,"PRCPSOH"
N LP1,SOHIEN,PRCPDX
S LP1=0
F S LP1=$O(^TMP($J,"PRCPSOH",LP1)) Q:LP1="" D
. S PRCPDX=$G(^TMP($J,"PRCPSOH",LP1))
. S SOHIEN=+LP1
. S DR="1///"_PRCPDX
. D SETREC
. S PRCPDX=$G(^TMP($J,"PRCPSOH2",LP1))
. S DR="2///"_PRCPDX
. D SETREC
. Q
Q
SETREC ; Set record using DIE in 446.7
;
N PRCPDR,PRCPST,PRCPSNM,PRCPDA,PRCPDX,PRCPST,X,Y
S PRCPDR=DR
S DIC="^PRCP(446.7,",DIC(0)="L",DLAYGO=446.7,X=SOHIEN D ^DIC K DIC,DLAYGO
S PRCPDA=Y+0
S PRCPST=$P(^TMP($J,"PRCPSOH",LP1),"*",1)
S PRCPSNM=$$GET1^DIQ(4,PRCPST_",",.01)
;*98 Send enhanced mail message if exception occurs during FileMan set
I Y=-1 N PRCPMSG D Q
. S PRCPMSG(1)="Error saving to File #446.7 for Days of Stock on Hand Report, related data: "
. S PRCPMSG(2)="",PRCPMSG(3)="Station: "_PRCPST_" "_PRCPSNM
. S PRCPMSG(4)="Inventory Point: "_$P(^TMP($J,"PRCPSOH",LP1),"*",3)_" "_$P(^TMP($J,"PRCPSOH",LP1),"*",4)
. S PRCPMSG(5)="File #446.7 Field Set Attempted: "_PRCPDR
. D MAIL^PRCPLO3 Q
;
S DIE="^PRCP(446.7,",DA=PRCPDA D ^DIE K DIE,DR,DA
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRCPLO 9741 printed Oct 16, 2024@18:14:48 Page 2
PRCPLO ;WOIFO/RLL/VAC/DAP-days of stock on hand report ; 2/26/07 1:53pm
+1 ;;5.1;IFCAP;**83,98**;Oct 20, 2000;Build 37
+2 ;Per VHA Directive 2004-038, this routine should not be modified.
+3 ; Note: This routine was copied from PRCPRSOH
+4 ;*98 Code modification made to handle STD and ODI breakouts
+5 ;
+6 QUIT
ENT ; Entry Point to run Program
+1 LOCK +^PRCP(446.7,"STATUS"):3
IF $TEST=0
SET PRCPMSG(1)="Error encountered when attempting to run CLO GIP Reports due to other CLRS extracts in progress, please try again later."
DO MAIL^PRCPLO3
QUIT
+2 NEW TOSTDCNT,TOODICNT,TOALLCNT,TOTCNT,VALUES
+3 ; Run the logic from PRCPRSOH, get params
DO PRCPRINV
+4 ; Build the output data
DO BLDFIL
+5 ; Set the ^DIE Entries in 446.7
DO GETVAL
+6 LOCK -^PRCP(446.7,"STATUS")
+7 ;
+8 ;kill off tmp data
KILL ^TMP($JOB,"PRCPSOH")
+9 ;kill off tmp data
KILL ^TMP($JOB,"PRCPLO")
+10 ; kill off ODI tmp data
KILL ^TMP($JOB,"PRCPSOH2")
+11 ;kill off ODI tmp data
KILL ^TMP($JOB,"PRCPLO2")
+12 QUIT
+13 ;
+14 ;
PRCPRINV ; run INV Point
+1 NEW CLRSFLAG
+2 SET CLRSFLAG="SOH"
+3 DO GETIPT^PRCPLO1
+4 QUIT
EN1 ; Added return from PRCPLO1
+1 ; Q
+2 NEW DATEEND,DATEENDD,DATESTRD,DATESTRT,DAYSLEFT,DIR,GROUPALL,PRCPDAYS,PRCPEND,PRCPSTRT,PRCPTYPE,TOTALDAY,X,X1,X2,Y,MNT,TODAY
+3 NEW ODICNT,ODIDOL,ODIFLAG,ODIFLG,STDCNT,STDDOL
+4 ;
+5 ; *83 The following was edited to always enter the LAST DAY
+6 ; of the previous month as the end date. End date for Oct 31, 2005
+7 ; in FM 3051031, can also use 3051100 equivalent for date sort
+8 ; this way, you do not have to handle months w/ 28, 29, 30 or 31 days
+9 DO NOW^%DTC
SET TODAY=X
SET Y=$EXTRACT(X,1,3)
SET MNT=$EXTRACT(X,4,5)
+10 SET MNT=+(MNT)
+11 SET MNT=MNT-1
+12 IF MNT=0
SET MNT=12
SET Y=Y-1
+13 IF $LENGTH(MNT)=1
SET MNT=0_MNT
+14 ;
+15 ; *83 Added day logic to handle month/leap year, etc.
+16 NEW DAYS,CKF
+17 SET DAYS=$PIECE("31^28^31^30^31^30^31^31^30^31^30^31",U,+(MNT))
+18 SET DATEEND=Y_MNT_DAYS
+19 IF DAYS=28
Begin DoDot:1
+20 SET CKF=(17+$EXTRACT(DATEEND))_$EXTRACT(DATEEND,2,3)
+21 SET DAYS=$SELECT(CKF#400=0:29,(CKF#4=0&(CKF#100'=0)):29,1:28)
+22 SET DATEEND=Y_MNT_DAYS
+23 QUIT
End DoDot:1
+24 ; S DATEEND=Y_MNT_"00"
+25 ; *83 The following was edited to always enter a 90 day previous
+26 ; to current date of report run (check param file, could change)
+27 ; for the DATESTRT. Once DATEEND and DATESTRT are determined, we
+28 ; can use the existing code to set the other variables
+29 SET X1=TODAY
+30 ; *83 Report range supplied by site parameter and defaulted to 180
+31 SET X2=$$GET^XPAR("SYS","PRCPLO REPORT RANGE",1,"Q")
+32 IF X2=""
SET X2=180
+33 SET X2=(X2*-1)
+34 DO C^%DTC
SET DATESTRT=$EXTRACT(X,1,5)_"01"
+35 ; DATEEND and DATESTRT are set above, pass them to existing
+36 ; logic below to set remaining variables
+37 SET X1=DATEEND
SET X2=DATESTRT
DO ^%DTC
SET TOTALDAY=X+1
+38 SET Y=DATEEND
DO DD^%DT
SET DATEENDD=Y
SET Y=DATESTRT
DO DD^%DT
SET DATESTRD=Y
+39 ;
+40 ;*83 Set PRCPTYPE=2 (always GREATER)
+41 SET PRCPTYPE=2
+42 ;
+43 ;*83 PRCPDAYS is set based on value of CLRS GREATER THAN RANGE parameter
+44 ;if no value is presented in the parameter, it will default to 90
+45 ;
+46 SET PRCPDAYS=$$GET^XPAR("SYS","PRCPLO GREATER THAN RANGE",1,"Q")
+47 IF PRCPDAYS=""
SET PRCPDAYS=90
+48 ;
+49 ;*83 Return PRCPSTRT="" and PRCPEND=""
+50 IF PRCP("DPTYPE")="W"
Begin DoDot:1
+51 SET PRCPSTRT=""
SET PRCPEND=""
End DoDot:1
+52 ;
+53 ;*83 RETURN GROUPALL=1 to select all groups
+54 IF PRCP("DPTYPE")'="W"
Begin DoDot:1
+55 SET GROUPALL=1
+56 ; finished adding variables
End DoDot:1
+57 ;
DQ ; queue starts here
+1 NEW AVERAGE,DATE,GROUP,GROUPNM,ITEMDA,ITEMDATA,NSN,ONHAND,TOTAL,X,Y
+2 KILL ^TMP($JOB,"PRCPRSOH")
+3 SET ITEMDA=0
FOR
SET ITEMDA=$ORDER(^PRCP(445,PRCP("I"),1,ITEMDA))
if 'ITEMDA
QUIT
SET ITEMDATA=$GET(^(ITEMDA,0))
IF ITEMDATA'=""
Begin DoDot:1
+4 SET ODIFLG=1
SET ODIFLAG=$$ODITEM^PRCPUX2(PRCP("I"),ITEMDA)
+5 IF ODIFLAG="Y"
SET ODIFLG=2
+6 SET TOTCNT(PRCP("I"),ODIFLG)=+$GET(TOTCNT(PRCP("I"),ODIFLG))+1
+7 IF $$REUSABLE^PRCPU441(ITEMDA)
QUIT
+8 ; calculate total usage between dates
+9 SET DATE=$EXTRACT(DATESTRT,1,5)-.01
SET TOTAL=0
FOR
SET DATE=$ORDER(^PRCP(445,PRCP("I"),1,ITEMDA,2,DATE))
if 'DATE!(DATE>$EXTRACT(DATEEND,1,5))
QUIT
SET TOTAL=TOTAL+$PIECE($GET(^(DATE,0)),"^",2)
+10 SET AVERAGE=$JUSTIFY(TOTAL/TOTALDAY,0,2)
SET ONHAND=$PIECE(ITEMDATA,"^",7)+$PIECE(ITEMDATA,"^",19)
+11 SET DAYSLEFT=$SELECT('AVERAGE&(ONHAND):9999999,'AVERAGE:0,1:ONHAND/AVERAGE\1)
+12 IF PRCPTYPE=1
IF DAYSLEFT'<PRCPDAYS
QUIT
+13 IF PRCPTYPE=2
IF DAYSLEFT'>PRCPDAYS
QUIT
+14 ; sort for whse
+15 IF PRCP("DPTYPE")="W"
Begin DoDot:2
+16 SET NSN=$$NSN^PRCPUX1(ITEMDA)
if NSN=""
SET NSN=" "
+17 IF $EXTRACT(NSN,1,$LENGTH(PRCPSTRT))'=PRCPSTRT
IF $EXTRACT(NSN,1,$LENGTH(PRCPEND))'=PRCPEND
IF NSN']PRCPSTRT!(PRCPEND']NSN)
QUIT
+18 ; S ^TMP($J,"PRCPRSOH",NSN,ITEMDA)=TOTAL_"^"_AVERAGE_"^"_ONHAND_"^"_$P(DAYSLEFT,".")_"^"_$P(ITEMDATA,"^",27)
+19 NEW ITMCHK
+20 SET ITMCHK=0
SET ITMCHK=$ORDER(^PRCP(445,PRCP("I"),1,ITMCHK))
+21 if ITMCHK=""!(+(ITMCHK)<1)
QUIT
+22 ; made it to x-ref
if +(ITMCHK)<1
QUIT
+23 DO BLDTMP
End DoDot:2
QUIT
+24 ;98* Accumulate count information
+25 SET VALUES(PRCP("I"),ODIFLG)=+$GET(VALUES(PRCP("I"),ODIFLG))+1
+26 ; sort for primary and secondary
+27 SET GROUP=+$PIECE(ITEMDATA,"^",21)
+28 IF 'GROUP
IF '$GET(GROUPALL)
QUIT
+29 IF $GET(GROUPALL)
IF $DATA(^TMP($JOB,"PRCPURS1","NO",GROUP))
QUIT
+30 IF '$GET(GROUPALL)
IF '$DATA(^TMP($JOB,"PRCPURS1","YES",GROUP))
QUIT
+31 SET GROUPNM=$$GROUPNM^PRCPEGRP(GROUP)
+32 IF GROUPNM'=""
SET GROUPNM=$EXTRACT(GROUPNM,1,20)_" (#"_GROUP_")"
+33 if GROUPNM=""
SET GROUPNM=" "
+34 ;*83, Create TMP structure for Report
+35 NEW ITMCHK
+36 SET ITMCHK=0
SET ITMCHK=$ORDER(^PRCP(445,PRCP("I"),1,ITMCHK))
+37 if ITMCHK=""!(+(ITMCHK)<1)
QUIT
+38 ; made it to x-ref
if ITMCHK<1
QUIT
+39 DO BLDTMP
+40 QUIT
End DoDot:1
+41 QUIT
+42 ;
BLDTMP ;*83 Build ^TMP Structure for Report Server
+1 ;
+2 NEW INVTYPE,ITEMDESC,CSTCTR,INDAT,NUMLNIT,DATRN,DATRN1,INVPTID
+3 NEW CSTC1,CSTC2,CSTC3,CSCE1,CSCE2,V4TR,V4TR1
+4 ;
+5 SET DATRN=$$FMTE^XLFDT(+DATEEND)
+6 SET DATRN1=$PIECE(DATRN," ",1)_","_$PIECE(DATRN," ",3)
+7 ; item Desc
SET ITEMDESC=$EXTRACT($$DESCR^PRCPUX1(PRCP("I"),ITEMDA),1,15)
+8 IF ITEMDESC=""
SET ITEMDESC="No Item Desc"
+9 if ITEMDA=""!(+(ITEMDA)<1)
QUIT
+10 ;
+11 ; set to 1 for each line item.
SET NUMLNIT=1
+12 SET INVTYPE=PRCP("DPTYPE")
+13 IF INVTYPE=""
SET INVTYPE="No Inv Type"
+14 SET INDAT=$GET(PRCP("PAR"))
+15 ; inv point id #
SET INVPTID=PRCP("I")
+16 ; Cost Center logic
+17 ; Get ^PRCP(445,INVPTID,0) 7th piece (int. Cost Center #)
+18 ; Get ^PRCD(420.1,IntCstCtr,0) 1st piece (external format)
+19 SET CSTC1=$GET(^PRCP(445,INVPTID,0))
SET CSTC2=$PIECE(CSTC1,"^",7)
SET CSTC3=$PIECE(CSTC1,"^",3)
+20 ; *83 look up name
SET V4TR=$PIECE(CSTC1,"^",1)
SET V4TR1=$PIECE(V4TR,"-",2,99)
+21 ; $TR name to replace "*"'s with "|"'s
SET V4TR1=$TRANSLATE(V4TR1,"*","|")
+22 IF CSTC2'=""
SET CSCE1=$GET(^PRCD(420.1,CSTC2,0))
SET CSCE2=$PIECE(CSCE1,"^",1)
+23 IF CSTC2=""
SET CSCE2="No Cost Center"
+24 ; *83, Set 5th Node from ITEMDESC to ITEMDA
+25 SET ^TMP($JOB,"PRCPLO",V3,INVPTID,ITEMDA)=V3_"*"_DATRN1_"*"_INVPTID_"*"_V4TR1_"*"_NUMLNIT_"*"_$PIECE(ITEMDATA,"^",27)_"*"_CSCE2_"*"_INVTYPE
+26 ; *98 Split information for ODI and Standard
+27 SET ^TMP($JOB,"PRCPLO2",V3,INVPTID,ITEMDA,ODIFLG)=+$GET(^TMP($JOB,"PRCPLO2",V3,INVPTID,ITEMDA,ODIFLG))+$PIECE(ITEMDATA,"^",27)
+28 QUIT
BLDFIL ; Build output file
+1 NEW IN1,IN2,IN3,IN4,IN5,OLPV,NWPV,INDDAT,TOTDOL,LNDOL,CSTCTR,LNCT,PRCPDX,INPTVAL,POINT,STID,DTTM,INVVTYP,INVPTLN
+2 SET IN1=0
SET IN2=0
SET IN3=0
SET IN4=0
SET IN5="INVPT"
SET INDDAT=0
SET OLPV=0
SET NWPV=0
SET LNCT=0
SET CSTCTR=0
SET TOTDOL=0
SET LNDOL=0
SET INVPTLN=0
+3 SET STDCNT=0
SET ODICNT=0
+4 SET (STDDOL,ODIDOL)=0
+5 FOR
SET IN1=$ORDER(^TMP($JOB,"PRCPLO",IN1))
if IN1=""
QUIT
Begin DoDot:1
+6 ;S (STDDOL,ODIDOL)=0
+7 FOR
SET IN2=$ORDER(^TMP($JOB,"PRCPLO",IN1,IN2))
if IN2=""
QUIT
Begin DoDot:2
+8 ; init for first time through
IF IN5'="INVPT"
Begin DoDot:3
+9 SET INVPTLN=+$PIECE($GET(^PRCP(445,+INPTVAL,1,0)),"^",4)
+10 SET TOSTDCNT=+$GET(TOTCNT(IN2,1))
SET TOODICNT=+$GET(TOTCNT(IN2,2))
SET TOALLCNT=TOSTDCNT+TOODICNT
+11 SET PRCPDX=STID_"*"_DTTM_"*"_INPTVAL_"*"_POINT_"*"_INVVTYP_"*"_TOTDOL_"*"_IN4_"*"_INVPTLN_"*"_CSTCTR
+12 ; set up new ^TMP($J NODE to store totals for ^DIE set
+13 SET ^TMP($JOB,"PRCPSOH",+(STID_INPTVAL))=PRCPDX
+14 SET STDCNT=+$GET(VALUES(INPTVAL,1))
SET ODICNT=+$GET(VALUES(INPTVAL,2))
+15 SET TOSTDCNT=+$GET(TOTCNT(INPTVAL,1))
SET TOODICNT=+$GET(TOTCNT(INPTVAL,2))
+16 SET TOALLCNT=TOSTDCNT+TOODICNT
+17 SET ^TMP($JOB,"PRCPSOH2",+(STID_INPTVAL))=STDDOL_"*"_ODIDOL_"*"_(STDDOL+ODIDOL)_"*"_STDCNT_"*"_ODICNT_"*"_(STDCNT+ODICNT)_"*"_TOSTDCNT_"*"_TOODICNT_"*"_TOALLCNT
+18 ; reset to 0, begin counting Line items for INVPT
SET IN4=0
+19 SET TOTDOL=0
+20 SET LNDOL=0
+21 SET PRCPDX=""
+22 SET CSTCTR=""
+23 SET (STDDOL,ODIDOL)=0
End DoDot:3
+24 FOR
SET IN3=$ORDER(^TMP($JOB,"PRCPLO",IN1,IN2,IN3))
if IN3=""
QUIT
Begin DoDot:3
+25 SET INDDAT=$GET(^TMP($JOB,"PRCPLO",IN1,IN2,IN3))
+26 SET STID=$PIECE(INDDAT,"*",1)
+27 SET DTTM=$PIECE(INDDAT,"*",2)
+28 SET POINT=$PIECE(INDDAT,"*",4)
+29 ; Inv Point ID# for DIE Set
SET INPTVAL=$PIECE(INDDAT,"*",3)
+30 SET CSTCTR=$PIECE(INDDAT,"*",7)
+31 SET LNDOL=$PIECE(INDDAT,"*",6)
+32 SET INVVTYP=$PIECE(INDDAT,"*",8)
+33 SET TOTDOL=TOTDOL+LNDOL
+34 ; Count # of line items in Inv Pt
SET IN4=IN4+1
+35 ; Invt. Point
SET IN5=IN2
+36 SET STDDOL=STDDOL+$GET(^TMP($JOB,"PRCPLO2",IN1,IN2,IN3,1))
+37 SET ODIDOL=ODIDOL+$GET(^TMP($JOB,"PRCPLO2",IN1,IN2,IN3,2))
+38 QUIT
End DoDot:3
+39 QUIT
End DoDot:2
+40 QUIT
End DoDot:1
+41 QUIT
GETVAL ; Get values from ^TMP($J,"PRCPSOH"
+1 NEW LP1,SOHIEN,PRCPDX
+2 SET LP1=0
+3 FOR
SET LP1=$ORDER(^TMP($JOB,"PRCPSOH",LP1))
if LP1=""
QUIT
Begin DoDot:1
+4 SET PRCPDX=$GET(^TMP($JOB,"PRCPSOH",LP1))
+5 SET SOHIEN=+LP1
+6 SET DR="1///"_PRCPDX
+7 DO SETREC
+8 SET PRCPDX=$GET(^TMP($JOB,"PRCPSOH2",LP1))
+9 SET DR="2///"_PRCPDX
+10 DO SETREC
+11 QUIT
End DoDot:1
+12 QUIT
SETREC ; Set record using DIE in 446.7
+1 ;
+2 NEW PRCPDR,PRCPST,PRCPSNM,PRCPDA,PRCPDX,PRCPST,X,Y
+3 SET PRCPDR=DR
+4 SET DIC="^PRCP(446.7,"
SET DIC(0)="L"
SET DLAYGO=446.7
SET X=SOHIEN
DO ^DIC
KILL DIC,DLAYGO
+5 SET PRCPDA=Y+0
+6 SET PRCPST=$PIECE(^TMP($JOB,"PRCPSOH",LP1),"*",1)
+7 SET PRCPSNM=$$GET1^DIQ(4,PRCPST_",",.01)
+8 ;*98 Send enhanced mail message if exception occurs during FileMan set
+9 IF Y=-1
NEW PRCPMSG
Begin DoDot:1
+10 SET PRCPMSG(1)="Error saving to File #446.7 for Days of Stock on Hand Report, related data: "
+11 SET PRCPMSG(2)=""
SET PRCPMSG(3)="Station: "_PRCPST_" "_PRCPSNM
+12 SET PRCPMSG(4)="Inventory Point: "_$PIECE(^TMP($JOB,"PRCPSOH",LP1),"*",3)_" "_$PIECE(^TMP($JOB,"PRCPSOH",LP1),"*",4)
+13 SET PRCPMSG(5)="File #446.7 Field Set Attempted: "_PRCPDR
+14 DO MAIL^PRCPLO3
QUIT
End DoDot:1
QUIT
+15 ;
+16 SET DIE="^PRCP(446.7,"
SET DA=PRCPDA
DO ^DIE
KILL DIE,DR,DA
+17 QUIT