535 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			535 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| COMPILE SUBROUTINE Print_Demand(ReportParm)
 | |
| #pragma precomp SRP_PreCompiler
 | |
| 
 | |
| /*
 | |
| 	Print Material Demand Report
 | |
| 	10/27/2016 - John C Henry, J.C. Henry & Co., Inc. - Initial Coding
 | |
| 	10/05/2017 - Donald Bakke - No longer select SCHED_DET rows with an end date specified.
 | |
| 	10/24/2018 - Daniel Stieber - Patch added to resolve scheduling conflicts on the same day
 | |
| */
 | |
| 
 | |
| DECLARE SUBROUTINE Utility, ErrMsg, Set_Status, Set_Printer, RList, SRP_Stopwatch
 | |
| DECLARE FUNCTION Set_Printer, Get_Printer, Msg, Get_Status, Printer_Select, obj_Install, Dialog_Box, obj_Location
 | |
| DECLARE FUNCTION Schedule_Services
 | |
| 
 | |
| $INSERT OIPRINT_EQUATES
 | |
| $INSERT SCHED_DET_EQUATES
 | |
| $INSERT WO_LOG_EQUATES
 | |
| $INSERT APPCOLORS
 | |
| $INSERT MSG_EQUATES
 | |
| $INSERT LOGICAL
 | |
| $INSERT SCHEDULE_EQU
 | |
| 
 | |
| EQU TAB$				TO \09\
 | |
| EQU TARGET_ACTIVELIST$	TO 5
 | |
| 
 | |
| ErrorTitle  =  'Error in stored procedure Print_Demand'
 | |
| ErrCode		= ''
 | |
| ErrorMsg	= ''
 | |
| SRP_Stopwatch('Reset')
 | |
| SRP_Stopwatch('Start', 'Initializing')
 | |
| OPEN 'SCHED_DET' TO SchedDetTable ELSE
 | |
| 	ErrorMsg  =  'Unable to open "SCHED_DET" table.'
 | |
| 	ErrMsg(ErrorTitle:@SVM:ErrorMsg)
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| OPEN 'DICT.SCHED_DET' TO @DICT ELSE
 | |
| 	ErrorMsg = 'Unable to open "SCHED_DET" table.'
 | |
| 	ErrMsg(ErrorTitle:@SVM:ErrorMsg)
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| // Two full week
 | |
| Today = OCONV(Date(),'D4/')
 | |
| EndDate	= OCONV(Date()+13,'D4/')
 | |
| 
 | |
| ReactList 		= ''
 | |
| WOList			= ''
 | |
| SchedDetKeys	= ''
 | |
| 
 | |
| * SelectSent  = 'SELECT SCHED_DET WITH SCHED_DT GE ':QUOTE(Today):' AND WITH SCHED_DT LE ':QUOTE(EndDate):' BY REACT_NO'
 | |
| SelectSent  = 'SELECT SCHED_DET WITH SCHED_DT GE ':QUOTE(Today):' BY REACT_NO'
 | |
| 
 | |
| SRP_Stopwatch('Stop', 'Initializing')
 | |
| SRP_Stopwatch('Start', 'Data Select')
 | |
| RList(SelectSent,TARGET_ACTIVELIST$,'','','')
 | |
| IF Get_Status(errCode) THEN
 | |
| 	ErrMsg(errCode)
 | |
| 	RETURN
 | |
| END
 | |
| SRP_Stopwatch('Stop', 'Data Select')
 | |
| SRP_Stopwatch('Start', 'Build Key List')
 | |
| Done = 0
 | |
| 
 | |
| LOOP
 | |
| 	READNEXT @ID ELSE Done = 1
 | |
| UNTIL Done
 | |
| 	ReactNo = @ID[1,'*']
 | |
| 	SchedDt	= @ID[COL2()+1,'*']
 | |
| 	SeqNo	= @ID[COL2()+1,'*']
 | |
| * 	If @User4 EQ 'FRANCOIS_R' and ReactNo EQ '77' then debug
 | |
| 	READ SchedDetRec FROM SchedDetTable,@ID THEN
 | |
| 	
 | |
| 		WONo = SchedDetRec<SCHED_DET_WO_NO$>
 | |
| 	
 | |
| 		LOCATE ReactNo IN ReactList BY 'AR' USING @FM  SETTING Pos ELSE
 | |
| 			ReactList = INSERT(ReactList,Pos,0,0,ReactNo)
 | |
| 		END
 | |
| 		
 | |
| 		LOCATE WONo IN WOList<Pos> USING @VM SETTING WPos ELSE
 | |
|             WOList 			= INSERT(WOList,Pos,-1,0,WONo)
 | |
|             // Patch added on 10/24/18 to resolve scheduling conflicts on the same day for
 | |
|             // the material track report. - djs
 | |
|             PrevSchedDetKey = SchedDetKeys[-1, 'B':@FM]
 | |
|             PrevReactNo = Field(PrevSchedDetKey, '*', 1)
 | |
|             PrevSchedDt = Field(PrevSchedDetKey, '*', 2)               
 | |
|             If (PrevReactNo EQ ReactNo) and (PrevSchedDt EQ SchedDt) then
 | |
|                 PrevSeqNo   = Field(PrevSchedDetKey, '*', 3)
 | |
|                 NumWO       = DCount(WOList<Pos>, @VM)
 | |
|                 PrevWONo    = WOList<Pos, NumWO - 1>
 | |
|                 SchedEvents = Schedule_Services('GetScheduleEventSummary', ReactNo, WONo, SchedDt, SeqNo, True$)
 | |
|                 StartDt     = IConv(SchedEvents<SCHEDULE_ENTRY_DATE$>, 'D')
 | |
|                 PrevSchedEvents = Schedule_Services('GetScheduleEventSummary', ReactNo, PrevWONo, PrevSchedDt, PrevSeqNo, True$)
 | |
|                 PrevStartDt = IConv(PrevSchedEvents<SCHEDULE_ENTRY_DATE$>, 'D')
 | |
|                 If StartDt GT PrevStartDt then
 | |
|                     // This is the common case
 | |
|                     SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
 | |
|                 end else
 | |
|                     // Scheduling irregularity - Insert this key in the second to last position.
 | |
|                     NumKeys      = DCount(SchedDetKeys, @FM)
 | |
|                     InsertPos    = NumKeys
 | |
|                     SchedDetKeys = INSERT(SchedDetKeys,InsertPos,0,0,@ID)
 | |
|                 end
 | |
|             end else
 | |
|                 SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
 | |
|             end
 | |
| 		END
 | |
| 	END
 | |
| 	
 | |
| REPEAT
 | |
| 
 | |
| CALL Make.List(0,SchedDetKeys,SchedDetTable,@DICT)
 | |
| SRP_Stopwatch('Stop', 'Build Key List')	
 | |
| SRP_Stopwatch('Start', 'Build Report')
 | |
| IF ReportParm = 'T' THEN
 | |
| 
 | |
| 	* Tracking Report
 | |
| 	
 | |
| 	Header		= "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Tracking by Reactor':@VM:"Page  'P'"
 | |
| 	MinDemand	= 0
 | |
| 	
 | |
| END
 | |
| 
 | |
| IF ReportParm = 'D' THEN
 | |
| 
 | |
| 	* Demand Report
 | |
| 	
 | |
| 	MinDemand	= Msg(@WINDOW,'','MIN_DEMAND_QTY')
 | |
| 	Header		= "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Demand with Reactor Queue < ':MinDemand:' Cassettes':@VM:"Page  'P'"
 | |
| 	
 | |
| END
 | |
| 
 | |
| Set_Status(0)
 | |
| 
 | |
| /*
 | |
| 	Today		= OCONV(Date(),'D4/')
 | |
| 	Tomorrow	= OCONV(Date()+1,'D4/')
 | |
| 
 | |
| 	SelectSent  = 'SELECT SCHED_DET WITH SCHED_DT = ':QUOTE(Today):' BY REACT_NO'
 | |
| 
 | |
| 	RList(SelectSent,TARGET_ACTIVELIST$,'','','')
 | |
| 	IF Get_Status(errCode) THEN
 | |
| 		ErrMsg(errCode)
 | |
| 		RETURN
 | |
| 	END
 | |
| */
 | |
| 
 | |
| * Start of printing process
 | |
| 
 | |
| FileName		= 'Print Material Demand'
 | |
| Title			= 'Printing Material Demand'
 | |
| 
 | |
| TopMargin		= 1.0
 | |
| BottomMargin	= 0.75
 | |
| LeftMargin		= 0.25
 | |
| RightMargin		= 0.25
 | |
| 
 | |
| Margins = LeftMargin:@FM:TopMargin:@FM:RightMargin:@FM:BottomMargin
 | |
| 
 | |
| PageSetup	= '1'		;* LandScape
 | |
| PrintSetup	= '2'		;* Preview Normal
 | |
| PrintSetup<1,2> = '0'	;* All buttons
 | |
| PrintSetup<1,5> = '1'	;* Page Range
 | |
| PrintSetup<1,6> = 7		;* full mouse and keyboard support
 | |
| 
 | |
| If @UserName EQ 'MESCATXMUSER' then
 | |
|     PageSetup	= '1' 							;* Landscape
 | |
|     PrintSetup  = '0'							;* Print to specific location
 | |
|     PrintPath	= Printer_Select(PrinterID)		;* Select printer - Displays popup if PrinterPort not found
 | |
| end else
 | |
|     * PrintPath = Printer_Select('',1)		;* Get Default printer path
 | |
|     PrintPath = ''
 | |
| end
 | |
| stat = Set_Printer('INIT',FileName,Title,Margins,PageSetup,PrintSetup,PrintPath)
 | |
| 
 | |
| IF stat < 0 THEN
 | |
| 	ErrorMsg	= 'Stat = ' : Stat : ', PrintPath = ' : PrintPath
 | |
| 	GOTO OIPrintErr
 | |
| end
 | |
| DateRange = 'Effective ':OCONV(Date(),'D4')
 | |
| 
 | |
| 
 | |
| *Header = "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Tracking by Reactor':@VM:"Page  'P'"
 | |
| Header<-1> = "'T'"
 | |
| Header<-1> = ''																;* Blank line following heading
 | |
| 
 | |
| font	= 'Arial'
 | |
| font<2>	= '10'
 | |
| font<4>	= '0'		;* Bold
 | |
| 
 | |
| stat = Set_Printer('FONTHEADFOOT',font)	; IF stat < 0 THEN GOTO OIPrintErr
 | |
| stat = Set_Printer('HEADER',Header)		; IF stat < 0 THEN GOTO OIPrintErr
 | |
| 
 | |
| Footer = " 'D' 'T'":@VM:@VM:"Page:  'P'"
 | |
| stat = Set_Printer('FOOTER',Footer)		; IF stat < 0 THEN GOTO OIPrintErr
 | |
| 
 | |
| * 
 | |
| @RECCOUNT	= 0
 | |
| FirstPass	= 1
 | |
| LastRecord	= 0
 | |
| FirstLine 	= 1
 | |
| fontSpacing	= 100
 | |
| 
 | |
| * Make Column Heading
 | |
| 
 | |
| ColHead = ''										; ColFmt = ''
 | |
| ColHead<1,1>	= 'React No'						; ColFmt<1,1>	= '+^720'
 | |
| ColHead<1,2>	= 'WO No'							; ColFmt<1,2>	= '+^1260'
 | |
| ColHead<1,3>	= 'Sub Part No'						; ColFmt<1,3>	= '+<1800'
 | |
| ColHead<1,4>	= 'Epi Part No'						; ColFmt<1,4>	= '+<1800'
 | |
| ColHead<1,5>	= 'WO Qty'							; ColFmt<1,5>	= '+>720'
 | |
| ColHead<1,6>	= 'RX Qty'							; ColFmt<1,6> 	= '+>720'
 | |
| ColHead<1,7>	= 'UnRel Qty'						; ColFmt<1,7> 	= '+>720'
 | |
| ColHead<1,8>	= 'Kit Location'					; ColFmt<1,8>	= '+^1260'
 | |
| ColHead<1,9>	= 'Kit Qty'							; ColFmt<1,9> 	= '+^1260'
 | |
| ColHead<1,10>	= '1K Stage Location'				; ColFmt<1,10>	= '+^1260'
 | |
| ColHead<1,11>	= 'Stage Qty'						; ColFmt<1,11>	= '+^1260'
 | |
| ColHead<1,12>	= 'PTI Location'					; ColFmt<1,12>	= '+^1260'
 | |
| ColHead<1,13>	= 'PTI RO'							; ColFmt<1,13>	= '+^1260'
 | |
| 
 | |
| 
 | |
| * Zero Accumulators For Each Break
 | |
| 
 | |
| Prev.ReactNo	 	= ''
 | |
| Last.ReactNo.Break	= 1
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| ReadRecord:
 | |
| * * * * * * *
 | |
| 
 | |
| * Zero Break Flags To False
 | |
| 
 | |
| ReactNo.Break=0
 | |
| 
 | |
| 
 | |
| READNEXT @ID, Which.Value ELSE
 | |
| 	LastRecord		= 1
 | |
| 	ReactNo.Break	= 1
 | |
| 	ReactNo			= Prev.ReactNo
 | |
| END
 | |
| 
 | |
| S.ATID = @ID
 | |
| 
 | |
| IF FirstPass AND LastRecord THEN
 | |
| 	GOTO Bail
 | |
| END
 | |
|  
 | |
| IF LastRecord THEN GOTO BREAKS
 | |
| 
 | |
| 
 | |
| READO @RECORD FROM SchedDetTable,@ID ELSE
 | |
| 	GOTO ReadRecord
 | |
| END
 | |
| 
 | |
| @RECCOUNT += 1
 | |
|  
 | |
| * Calculate Value(s) For Column(s)
 | |
| 
 | |
| S.ATID			= {@ID}
 | |
| I.ATID			= S.ATID
 | |
| S.ReactNo		= {REACT_NO}
 | |
| I.ReactNo		= S.ReactNo
 | |
| S.WoNo			= {WO_NO}
 | |
| I.WoNo			= S.WoNo
 | |
| S.SubPartNo		= XLATE('WO_LOG',S.WoNo,'ORD_SUB_PART_NO','X')
 | |
| I.SubPartNo		= S.SubPartNo
 | |
| S.EpiPartNo		= XLATE('WO_LOG',S.WoNo,WO_LOG_EPI_PART_NO$,'X')
 | |
| I.EpiPartNo		= S.EpiPartNo
 | |
| S.WO_Qty		= {WO_QTY}
 | |
| I.WO_Qty		= S.WO_Qty
 | |
| S.WO_RX_Qty 	= {WO_RX_QTY}
 | |
| I.WO_RX_Qty 	= S.WO_RX_Qty
 | |
| S.WO_UnRel_QTY	= {WO_UNREL_QTY}
 | |
| I.WO_UnRel_QTY	= S.WO_UnRel_QTY
 | |
| S.Sched_DT		= {SCHED_DT}
 | |
| I.Sched_DT		= S.Sched_DT
 | |
| 
 | |
| KitData = obj_Location('KitLocations',S.WONo)
 | |
| 
 | |
| SWAP CRLF$ WITH @VM IN KitData
 | |
| 
 | |
| S.KitLocation	= KitData<1>
 | |
| I.KitLocation	= S.KitLocation
 | |
| 
 | |
| S.KitQty		= OCONV(SUM(KitData<2>) * 25,'MD0,Z')
 | |
| I.KitQty		= S.KitQty
 | |
| 
 | |
| S.KitCassCnt	= COUNT(KitData<3>,',') + (KitData<3> NE '')
 | |
| I.KitCassCnt	= S.KitCassCnt
 | |
| 
 | |
| StageData		= obj_Location('StageLocations',S.WONo)
 | |
| 
 | |
| SWAP CRLF$ WITH @VM IN StageData
 | |
| 
 | |
| S.StageLocation	= StageData<1>
 | |
| I.StageLocation	= S.StageLocation
 | |
| 
 | |
| S.StageQty		= StageData<3>
 | |
| I.StageQty		= S.StageQty
 | |
| 
 | |
| S.StageCassCnt	= COUNT(S.StageQty,',') + (S.StageQty NE '')
 | |
| I.StageCassCnt	= S.StageCassCnt
 | |
| 
 | |
| PTIData		= obj_Location('PTILocations',S.WONo)
 | |
| 
 | |
| SWAP CRLF$ WITH @VM IN PTIData
 | |
| 
 | |
| S.PTILocation	= PTIData<1>
 | |
| I.PTILocation	= S.PTILocation
 | |
| 
 | |
| S.PTIQty		= PTIData<3>
 | |
| I.PTIQty		= S.PTIQty
 | |
| 
 | |
| S.PTICassCnt 	= COUNT(S.PTIQty,',') + (S.PTIQty NE '')
 | |
| I.PTICassCnt	= S.PTICassCnt
 | |
| 
 | |
| 
 | |
| CassQueueCnt = I.KitCassCnt + I.StageCassCnt + I.PTICassCnt
 | |
| 
 | |
| 
 | |
| * TEST FOR CONTROL BREAK(S)
 | |
|  
 | |
|  
 | |
| IF (S.ReactNo NE Prev.ReactNo) OR ReactNo.Break THEN
 | |
| 	ReactNo			= Prev.ReactNo
 | |
| 	Prev.ReactNo	= S.ReactNo
 | |
| 	ReactNo.Break  += 1
 | |
| END
 | |
| 
 | |
| IF FirstPass THEN
 | |
| 	FirstPass=0
 | |
| 	GOTO DETAIL
 | |
| END
 | |
| 
 | |
| * * * * * * *
 | |
| BREAKS:
 | |
| * * * * * * *
 | |
| 
 | |
| * Print Break Total(s) And Accumulate Total(s)
 | |
| 
 | |
| IF ReactNo.Break THEN
 | |
| 	
 | |
| 	IF ReportParm = 'D' ELSE
 | |
| 		stat = Set_Printer('TEXT')
 | |
| 	END
 | |
| 
 | |
| /*
 | |
| 	ColData = ''
 | |
| 	ColData<1,1> = ''
 | |
| 	ColData<1,2> = ''
 | |
| 	ColData<1,3> = ''
 | |
| 	ColData<1,4> = ''
 | |
| 	ColData<1,5> = ''
 | |
| 	ColData<1,6> = ''
 | |
| 	ColData<1,7> = ''
 | |
| 	ColData<1,8> = ''
 | |
| 	ColData<1,9> = ''
 | |
| 	ColData<1,10> = ''
 | |
| 	
 | |
| 	GOSUB PrintTable
 | |
| */	
 | |
| 	
 | |
| 
 | |
| END
 | |
| 
 | |
| 
 | |
| * Perform Last Record Output If Done
 | |
| 
 | |
| IF LastRecord THEN
 | |
| 	
 | |
| 	colData = ''
 | |
| 	
 | |
| 	
 | |
| 	GOTO Bail
 | |
| 	
 | |
| END
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| DETAIL:
 | |
| * * * * * * *
 | |
| 
 | |
| * Do Conversion If Any
 | |
| 
 | |
| 
 | |
| IF ReportParm = 'T' OR CassQueueCnt < MinDemand THEN
 | |
| 	  
 | |
| 	IF S.REACTNO NE "" 		THEN S.REACTNO		= OCONV(S.REACTNO,"MD0,")
 | |
| 	IF S.WONO NE "" 		THEN S.WONO			= OCONV(S.WONO,"MD0")
 | |
| 	IF S.WO_QTY NE "" 		THEN S.WO_QTY		= OCONV(S.WO_QTY,"MD0,")
 | |
| 	IF S.WO_RX_QTY NE ""	THEN S.WO_RX_QTY	= OCONV(S.WO_RX_QTY,"MD0,")
 | |
| 	IF S.WO_UNREL_QTY NE "" THEN S.WO_UNREL_QTY	= OCONV(S.WO_UNREL_QTY,"MD0,")
 | |
| 	IF S.SCHED_DT NE "" 	THEN S.SCHED_DT		= OCONV(S.SCHED_DT,"D4/")
 | |
| 
 | |
| 	* PRINT DETAIL LINE
 | |
| 	
 | |
| * 	If @User4 EQ 'FRANCOIS_R' then
 | |
| 	    
 | |
| 	    COLDATA = ''
 | |
| 	    RowNumber        = 0
 | |
| 	    For each Location in S.PTILocation using @VM setting fPos
 | |
| 	        LocationCassNos  = S.PTIQty<0, fPos>
 | |
| 	        FilteredCassList = ''
 | |
| 	        
 | |
| 	        For each CassNo in LocationCassNos using ','
 | |
| 	            WOMatKey = S.WoNo:'*':CassNo
 | |
| 	            InvActions = Xlate('WO_MAT', WOMatKey, 'INV_ACTION', 'X')
 | |
| 	            NumActions = DCount(InvActions, @VM)
 | |
| 	            CurrAction = InvActions<0, NumActions>
 | |
| 	            If CurrAction EQ 'PLACE' then	                
 | |
| 	                FilteredCassList<0, -1> = CassNo	                
 | |
| 	            end
 | |
| 	        Next CassNo
 | |
| 	        If ( (FilteredCassList NE '') and (Location NE '') ) or ( (FilteredCassList EQ '') and (Location EQ '') ) then
 | |
|  
 | |
| 	            RowNumber += 1      
 | |
| 	            Convert @VM to ',' in FilteredCassList
 | |
|                 COLDATA<RowNumber,1>  = S.ReactNo
 | |
|                 COLDATA<RowNumber,2>  = S.WoNo
 | |
|                 COLDATA<RowNumber,3>  = S.SubPartNo
 | |
|                 ColData<RowNumber,4>  = S.EpiPartNo
 | |
|                 COLDATA<RowNumber,5>  = S.WO_Qty
 | |
|                 COLDATA<RowNumber,6>  = S.WO_RX_Qty
 | |
|                 COLDATA<RowNumber,7>  = S.WO_UnRel_Qty
 | |
|                 COLDATA<RowNumber,8>  = S.KitLocation
 | |
|                 COLDATA<RowNumber,9>  = S.KitQty				; *ColFmt<1,9>	= '_<1260'
 | |
|                 COLDATA<RowNumber,10> = S.StageLocation
 | |
|                 COLDATA<RowNumber,11> = S.StageQty				; *ColFmt<1,11>	= '_<1260'
 | |
|                 COLDATA<RowNumber,12> = S.PTILocation<0, fPos>
 | |
|     *            COLDATA<fPos,13>  = S.PTIQty<0, fPos>				; *ColFmt<1,13>	= '_<1260'
 | |
|                 COLDATA<RowNumber,13> = FilteredCassList
 | |
| 	        end
 | |
| 	    Next Location
 | |
| * 	end else
 | |
| * 
 | |
| *        COLDATA = ''
 | |
| *        COLDATA<1,1>  = S.ReactNo
 | |
| *        COLDATA<1,2>  = S.WoNo
 | |
| *        COLDATA<1,3>  = S.SubPartNo
 | |
| *        ColData<1,4>  = S.EpiPartNo
 | |
| *        COLDATA<1,5>  = S.WO_Qty
 | |
| *        COLDATA<1,6>  = S.WO_RX_Qty
 | |
| *        COLDATA<1,7>  = S.WO_UnRel_Qty
 | |
| *        COLDATA<1,8>  = S.KitLocation
 | |
| *        COLDATA<1,9>  = S.KitQty				; *ColFmt<1,9>	= '_<1260'
 | |
| *        COLDATA<1,10>  = S.StageLocation
 | |
| *        COLDATA<1,11>  = S.StageQty				; *ColFmt<1,11>	= '_<1260'
 | |
| *        COLDATA<1,12>  = S.PTILocation
 | |
| *        COLDATA<1,13>  = S.PTIQty				; *ColFmt<1,13>	= '_<1260'
 | |
| *    end
 | |
|     
 | |
| *    If @User4 EQ 'FRANCOIS_R' then
 | |
|         If COLDATA NE '' then GoSub PrintTable
 | |
| *    end else
 | |
| *	    GOSUB PrintTable
 | |
| *    end
 | |
|     
 | |
| END
 | |
| 
 | |
| 
 | |
| GOTO ReadRecord
 | |
|  
 | |
| 
 | |
| * * * * * * *
 | |
| Bail:
 | |
| * * * * * * *
 | |
| 
 | |
| stat = Set_Printer('TERM',1)
 | |
| SRP_Stopwatch('Stop', 'Build Report')
 | |
| * If @UserName EQ 'FRANCOIS_R' then SRP_Stopwatch('ShowAll')
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| OIPrintErr:
 | |
| * * * * * * *
 | |
| 
 | |
| ErrMsg(ErrorTitle:@SVM:ErrorMsg)
 | |
| ErrMsg(ErrorTitle:@SVM:'Set_Printer returned errorcode ':stat)
 | |
| stat = Set_Printer('TERM',1)
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * *
 | |
| PrintTable:
 | |
| * * * * * * 
 | |
| 
 | |
| PageHeight			= Get_Printer('PAGESIZE')<2>
 | |
| PrintableHeight		= PageHeight - TopMargin - BottomMargin
 | |
| PrinterHeight		= Get_Printer('POS')<2>
 | |
| 
 | |
| stat			= Set_Printer('CALCTABLE',ColFmt:@FM:ColData)
 | |
| TableSize		= Get_Printer('CALCTABLE')
 | |
| 
 | |
| 
 | |
| TableHeight		= TableSize<2>
 | |
| 
 | |
| fontSpacing			= 120
 | |
| 
 | |
| IF ( TableHeight + PrinterHeight >= PrintableHeight ) OR FirstLine THEN
 | |
| 	IF NOT(FirstLine) THEN
 | |
| 		stat = Set_Printer('PAGEBREAK')
 | |
| 	END
 | |
| 	FirstLine = 0
 | |
| 	font<2> = 10
 | |
| 	font<4> = 1		;* Bold
 | |
| 	stat = Set_Printer('FONT',font,'100')
 | |
| 
 | |
| 	stat = Set_Printer('ADDTABLE',colFmt,colHead,'',LTGREY$,'',0,TB_ALL)
 | |
| 	
 | |
| 	
 | |
| 	font<4> = 0
 | |
| 	stat = Set_Printer('FONT',font,fontSpacing)
 | |
| 	
 | |
| 	stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',0,7)
 | |
| 	
 | |
| END ELSE
 | |
| 	font<2> = 10
 | |
| 	font<4> = 0
 | |
| 	stat = Set_Printer('FONT',font,fontSpacing)
 | |
| 	stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',1,TB_ALL)
 | |
| 
 | |
| END
 | |
| 	
 | |
| 							
 | |
| RETURN	 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |