COMPILE SUBROUTINE Print_Manifest(WONo, CassNo) #pragma precomp SRP_PreCompiler /* Print Manifest Report 08/27/2021 - Daniel Stieber - Adapted from PRINT_DEMAND subroutine. */ 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 $INSERT OIPRINT_EQUATES $INSERT WO_LOG_EQUATES $INSERT APPCOLORS $INSERT MSG_EQUATES $INSERT LOGICAL $INSERT SCHEDULE_EQU $INSERT WO_WFR_EQUATES EQU TAB$ TO \09\ EQU TARGET_ACTIVELIST$ TO 5 Main: ErrorTitle = 'Error in stored procedure Print_Manifest' ErrCode = '' ErrorMsg = '' OPEN 'WO_WFR' TO WOWfrTable ELSE ErrorMsg = 'Unable to open "SCHED_DET" table.' ErrMsg(ErrorTitle:@SVM:ErrorMsg) RETURN END OPEN 'DICT.WO_WFR' TO @DICT ELSE ErrorMsg = 'Unable to open "DICT.WO_WFR" table.' ErrMsg(ErrorTitle:@SVM:ErrorMsg) RETURN END TotalWafers = Xlate('WO_MAT_WFR', WONo:'*':CassNo, 'OUT_WFR_QTY', 'X') WOWfrKeys = Xlate('WO_MAT_WFR', WONo:'*':CassNo, 'OUT_WFR_ID', 'X') Swap @VM with @FM in WOWfrKeys CALL Make.List(0, WOWfrKeys, WOWfrTable, @DICT) CustNo = Xlate('WO_LOG', WONo, 'CUST_NO', 'X') CustName = Xlate('COMPANY', CustNo, 'CO_NAME', 'X') PartNo = Xlate('WO_LOG', WONo, 'EPI_PART_NO', 'X') PONo = Xlate('WO_LOG', WONo, 'PROD_ORD_NO', 'X') Header = '' Header<1> = 'Work Order # ':WONo:@VM:'Shipping Destination: ':CustName:' - Box ':CassNo:@VM Header<2> = @VM:'Part # ':PartNo:@VM Header<3> = 'Total Wafers = ':TotalWafers:@VM:'PO # ':PONo:@VM Set_Status(0) * Start of printing process FileName = 'Print Manifest' Title = 'Printing Manifest' TopMargin = 1.5 BottomMargin = 1.0 LeftMargin = 1.0 RightMargin = 1.0 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 PrintPath = '' 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<-1> = '' font = 'Arial' font<2> = '14' font<4> = '1' ;* Bold stat = Set_Printer('FONTHEADFOOT',font) ; IF stat < 0 THEN GOTO OIPrintErr stat = Set_Printer('HEADER',Header) ; IF stat < 0 THEN GOTO OIPrintErr @RECCOUNT = 0 FirstPass = 1 LastRecord = 0 FirstLine = 1 fontSpacing = 100 * Make Column Heading ColHead = '' ; ColFmt = '' ColHead<1,1> = 'Wafer ID' ; ColFmt<1,1> = '+^2500' ColHead<1,2> = 'Scribe' ; ColFmt<1,2> = '+^2500' ColHead<1,3> = 'Epi Structure' ; ColFmt<1,3> = '+^2500' ColHead<1,4> = 'Grade' ; ColFmt<1,4> = '+^2500' ColHead<1,5> = 'WaferThickness (um)' ; ColFmt<1,5> = '+^2500' ColHead<1,6> = 'Slot' ; ColFmt<1,6> = '+^700' * Zero Accumulators For Each Break Last.Break = 1 * * * * * * * ReadRecord: * * * * * * * * Zero Break Flags To False Break = 0 READNEXT @ID, Which.Value ELSE LastRecord = 1 IF FirstPass AND LastRecord THEN GOTO Bail END IF LastRecord THEN GOTO BREAKS READO @RECORD FROM WOWfrTable,@ID ELSE GOTO ReadRecord END @RECCOUNT += 1 * Calculate Value(s) For Column(s) WaferID = {GAN_WFR_ID} Scribe = {SCRIBE} EpiStruct = {EPI_STRUCTURE} Grade = {GRADE} WfrThick = {SUB_THICK} Slot = {SHIP_SLOT} IF FirstPass THEN FirstPass = 0 GOTO DETAIL END * * * * * * * BREAKS: * * * * * * * * Perform Last Record Output If Done IF LastRecord THEN colData = '' GOTO Bail END * * * * * * * DETAIL: * * * * * * * * PRINT DETAIL LINE COLDATA = '' RowNumber = 1 COLDATA = WaferID COLDATA = Scribe COLDATA = EpiStruct COLDATA = Grade COLDATA = WfrThick COLDATA = Slot If COLDATA NE '' then GoSub PrintTable GOTO ReadRecord * * * * * * * Bail: * * * * * * * stat = Set_Printer('TERM',1) 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 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ClearCursors: For counter = 0 to 8 ClearSelect counter Next counter return