[613] | 1 | IBDF2B ;ALB/CJM - ENCOUNTER FORM - (prints data field);12/15/92
|
---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;;APR 24, 1997
|
---|
| 3 | DATAFLD(FIELD) ;for printing data fields to the encounter form
|
---|
| 4 | ;IBPRINT("WITH_DATA") means to complete the form with data
|
---|
| 5 | ;RTNLIST is used to keep a list of package interface routines called - it should not be newed
|
---|
| 6 | ;IBPRINT("ENTIRE")=0 means just fill in the data
|
---|
| 7 | ;
|
---|
| 8 | N LASTITEM,RTN,MAXX,MAXY,LABEL,XLAB,YLAB,XIO,YIO,WIO,HIO,BLK,ITEM,PIECE,SPACING,DISPLAY,LAST,VALUE,FLDNAME
|
---|
| 9 | ;LAST - the last subfield read
|
---|
| 10 | Q:'$$FLDDESCR^IBDFU1A(FIELD) ;get the 0 node of the field description
|
---|
| 11 | Q:BLK='IBBLK ;check that the field really belongs to correct block
|
---|
| 12 | D RTNDSCR^IBDFU1B(.RTN) ;get the rtn used by the field
|
---|
| 13 | ;if this is not the first time this form is being printed, and the data does not change, quit
|
---|
| 14 | I 'IBPRINT("ENTIRE"),'RTN("CHANGES") Q
|
---|
| 15 | I $G(IBDEVICE("LISTMAN")) D RANGE
|
---|
| 16 | I IBPRINT("WITH_DATA")!('RTN("CHANGES")) D RTN
|
---|
| 17 | I RTN("DATATYPE")=5 D TXTPRINT^IBDF2B1 Q ;wordprocessing fields treated differently
|
---|
| 18 | ;now do other than wordprocessing
|
---|
| 19 | ;process each subfield
|
---|
| 20 | S LAST=$$SFLDDSCR^IBDFU1A(FIELD,0) Q:'LAST
|
---|
| 21 | F D S LAST=$$SFLDDSCR^IBDFU1A(FIELD,LAST) Q:'LAST
|
---|
| 22 | .;print labels unless it's a batch job and the form has already been computed
|
---|
| 23 | .I IBPRINT("ENTIRE"),(LABEL'=""),DISPLAY'["I" D
|
---|
| 24 | ..D DRWSTR^IBDFU(YLAB,XLAB,LABEL,DISPLAY)
|
---|
| 25 | ..I IBDEVICE("LISTMAN"),((XLAB+($L(LABEL)-1))>MAXX)!(YLAB>MAXY) D WARNING
|
---|
| 26 | .D PRNTDATA
|
---|
| 27 | Q
|
---|
| 28 | RANGE ;sets MAXX and MAXY to the maximum values allowed for the X,Y coordinates
|
---|
| 29 | N BOX
|
---|
| 30 | S BOX=$S(IBBLK("BOX")'=2:1,1:0)
|
---|
| 31 | S MAXY=IBBLK("H")-(1+BOX)
|
---|
| 32 | S MAXX=IBBLK("W")-(1+BOX)
|
---|
| 33 | Q
|
---|
| 34 | PRNTDATA ;displays the correct data to the subfield
|
---|
| 35 | N PVALUE,NODE
|
---|
| 36 | I RTN("DATATYPE")=1!(RTN("DATATYPE")=3) S PIECE=1
|
---|
| 37 | Q:'PIECE
|
---|
| 38 | S NODE=$$DATANODE^IBDFU1B(RTN,PIECE)
|
---|
| 39 | S PVALUE=$P($S(NODE'="":$G(VALUE(NODE)),1:$G(VALUE)),"^",PIECE)
|
---|
| 40 | I WIO,PVALUE="" D
|
---|
| 41 | .;print the underscore only if the data is not variable
|
---|
| 42 | .I IBDEVICE("LISTMAN") S PVALUE=$S(IBPRINT("WITH_DATA")&RTN("CHANGES"):$J("",WIO),1:$$HLINE^IBDFU(WIO)) Q
|
---|
| 43 | .I 'RTN("CHANGES") S PVALUE=$$HLINE^IBDFU(WIO)
|
---|
| 44 | I PVALUE'="" D
|
---|
| 45 | .I ('IBDEVICE("LISTMAN")),($L(PVALUE)>WIO),RTN("FULL") D OVERFLOW("CURRENT")
|
---|
| 46 | .I 'IBDEVICE("LISTMAN"),((RTN("DATATYPE")=3)!(RTN("DATATYPE")=4)),LASTITEM,$O(@RTN("DATA_LOCATION")@(ITEM)),RTN("FULL") D OVERFLOW("NEXT")
|
---|
| 47 | .D DRWSTR^IBDFU(YIO,XIO,$$PADRIGHT^IBDFU(PVALUE,WIO))
|
---|
| 48 | .I IBDEVICE("LISTMAN"),((XIO+WIO-1)>MAXX)!(YIO>MAXY) D WARNING
|
---|
| 49 | Q
|
---|
| 50 | RTN ;calls the rtn specified by the pkg interface if ok
|
---|
| 51 | Q:RTN("ACTION")'=2
|
---|
| 52 | Q:RTN("NAME")=""
|
---|
| 53 | ;quit if its not the first time this form has been printed and the data is not changeable
|
---|
| 54 | Q:(('IBPRINT("ENTIRE"))&('RTN("CHANGES")))
|
---|
| 55 | ;
|
---|
| 56 | N NODE S NODE=""
|
---|
| 57 | ;call the interface routine if it has not already been called
|
---|
| 58 | I '$D(RTNLIST(RTN("RTN"))) Q:'$$DORTN^IBDFU1B(.RTN)
|
---|
| 59 | ;
|
---|
| 60 | ;keep a list of rtns called because some routines return multiple data elements
|
---|
| 61 | S:'IBDEVICE("LISTMAN") RTNLIST(RTN("RTN"))=""
|
---|
| 62 | ;
|
---|
| 63 | ;now fetch the value, unless it's wordprocessing field
|
---|
| 64 | I (RTN("DATATYPE")=1)!(RTN("DATATYPE")=2) S VALUE=$G(@RTN("DATA_LOCATION")) F S NODE=$O(@RTN("DATA_LOCATION")@(NODE)) Q:NODE="" S VALUE(NODE)=$G(@RTN("DATA_LOCATION")@(NODE)) Q
|
---|
| 65 | I (RTN("DATATYPE")=3)!(RTN("DATATYPE")=4),ITEM S VALUE=$G(@RTN("DATA_LOCATION")@(ITEM)) F S NODE=$O(@RTN("DATA_LOCATION")@(ITEM,NODE)) Q:NODE="" S VALUE(NODE)=$G(@RTN("DATA_LOCATION")@(ITEM,NODE))
|
---|
| 66 | Q
|
---|
| 67 | ;
|
---|
| 68 | ADDLINES ;if there are unused lines writes blank lines to the form
|
---|
| 69 | ;LNSUSED is the number of lines used already,HIO is the total number of lines allowed
|
---|
| 70 | N I,LSPACING,NUMLEFT
|
---|
| 71 | Q:HIO'>0
|
---|
| 72 | I LNSUSED'<HIO Q
|
---|
| 73 | S LSPACING=1
|
---|
| 74 | I (SPACING=2)!(SPACING=3) S LSPACING=2
|
---|
| 75 | S NUMLEFT=HIO-LNSUSED
|
---|
| 76 | S NUMLEFT=NUMLEFT\LSPACING
|
---|
| 77 | I IBDEVICE("LISTMAN") D
|
---|
| 78 | .I ((XIO+WIO-1)>MAXX)!((YIO+(NUMLEFT*LSPACING)-1)>MAXY) D WARNING
|
---|
| 79 | F I=1:1:NUMLEFT D DRWSTR^IBDFU(YIO+LNSUSED+(I*LSPACING)-1,XIO,$$HLINE^IBDFU(WIO))
|
---|
| 80 | Q
|
---|
| 81 | WARNING ; prints a warning that data field prints outside of block - meant only for display while editing a form description
|
---|
| 82 | Q:IBWARN
|
---|
| 83 | W !,"Data Field="_FLDNAME_" in Block="_IBBLK("NAME")_" is printing",!,"outside of the block!"
|
---|
| 84 | D PAUSE^IBDFU5
|
---|
| 85 | S IBWARN=1
|
---|
| 86 | Q
|
---|
| 87 | OVERFLOW(TYPE) ;keeps track of data that does not fit on the form
|
---|
| 88 | ;TYPE=="CURRENT" if other than a WP field will not fit
|
---|
| 89 | ; ="NEXT" if the data is from a list and the last item indicator is set
|
---|
| 90 | S @IBARRAY("OVERFLOW")@(IBBLK,FIELD,TYPE)=$G(ITEM)
|
---|
| 91 | Q
|
---|