COMPILE FUNCTION Reconcile_EPI_WO(WONo,ReturnArray) DECLARE SUBROUTINE ErrMsg, RList, Set_Status DECLARE FUNCTION Set_Status, Popup $INSERT WO_MAT_EQUATES $INSERT WM_OUT_EQUATES $INSERT WM_IN_EQUATES $INSERT REACT_RUN_EQUATES $INSERT RLIST_EQUATES $INSERT POPUP_EQUATES $INSERT LOGICAL IF NOT(Assigned(ReturnArray)) THEN ReturnArray = '' ErrorMsg = '' Result = '' IF NOT(ASSIGNED(WONo)) THEN ErrorMsg = 'Null parameter passed to routine.' IF WONo = '' THEN ErrorMsg = 'Null WONo passed to routine.' WORec = XLATE('WO_LOG',WONo,'','X') IF WORec = '' THEN ErrorMsg = 'WONo ':QUOTE(WOno):' is not on file!' IF ErrorMsg NE '' THEN ErrMsg(ErrorMsg) GOTO Bail END OPEN 'WM_IN' TO WMITable ELSE ErrMsg('Unable to open WM_IN table.') GOTO Bail END OPEN 'WM_OUT' TO WMOTable ELSE ErrMsg('Unable to open WM_OUT table.') GOTO Bail END OPEN 'REACT_RUN' TO RRTable ELSE ErrMsg('Unable to open REACT_RUN table.') GOTO Bail END SelectSent = 'SELECT WM_IN WITH WO_NO = ':QUOTE(WONo):' BY IN_CASS_NO' Set_Status(0) RList(SelectSent,TARGET_ACTIVELIST$,'','','') IF Get_Status(errCode) THEN ErrMsg(errCode) GOTO Bail END EQU WAFER_ID$ TO 1 EQU LOT_NO$ TO 2 EQU LOADED_INTO$ TO 3 EQU RAN_IN$ TO 4 EQU POCKET_CHAR$ TO 5 EQU UNLOADED_INTO$ TO 6 EQU WAFER_DISP$ TO 7 WaferArray = '' Done = 0 LOOP READNEXT WMInKey ELSE Done = 1 UNTIL Done READ WMIRec FROM WMITable,WMInKey THEN WONo = WMInKey[1,'*'] Step = WMInKey[COL2()+1,'*'] CassNo = WMInKey[COL2()+1,'*'] LotNo = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_LOT_NO$,'X') SlotNos = WMIRec SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '') FOR I = 1 TO SlotCnt WaferID = WONo:'.':CassNo:'.':SlotNos<1,I> RunDest = WMIRec:'.' RunDest := WMIRec:'.' RunDest := WMIRec IF WMIRec NE '' THEN WaferDest = 'NCR ':WMIRec END ELSE WaferDest = RunDest END WaferArray = WaferID WaferArray = LotNo WaferArray = WaferDest NEXT I END ;* End of WMIRec read REPEAT SelectSent = 'SELECT REACT_RUN WITH WO_NO = ':QUOTE(WONo) Set_Status(0) RList(SelectSent,TARGET_ACTIVELIST$,'','','') IF Get_Status(errCode) THEN ErrMsg(errCode) GOTO Bail END Done = 0 LOOP READNEXT RDSNo ELSE Done = 1 UNTIL Done READ RRRec FROM RRTable,RDSNo THEN WONo = RRRec InCassNos = RRRec InSlotNos = RRRec SlotCnt = COUNT(InCassNos,@VM) + (InCassNos NE '') FOR I = 1 TO SlotCnt CassNo = InCassNos<1,I> SlotNo = InSlotNos<1,I> IF CassNo NE '' AND SlotNo NE '' THEN WaferID = WONo:'.':CassNo:'.':SlotNo RDSPosID = RDSNo:'.':RRRec:'.':RRRec UnloadID = WONo:'.':RRRec:'.':RRRec LOCATE WaferID IN WaferArray USING @VM SETTING Pos THEN IF WaferArray = RDSPosID THEN WaferArray = RDSPosID END ELSE WaferArray = '*':RDSPosID:'*' END PocketChar = RRRec WaferArray = PocketChar IF PocketChar = '' THEN WaferArray = UnloadID END END END NEXT I END ;* End of WMIRec read REPEAT SelectSent = 'SELECT WM_OUT WITH WO_NO = ':QUOTE(WONo) Set_Status(0) RList(SelectSent,TARGET_ACTIVELIST$,'','','') IF Get_Status(errCode) THEN ErrMsg(errCode) GOTO Bail END ErrorLog = '' Done = 0 LOOP READNEXT WMOKey ELSE Done = 1 UNTIL Done READ WMORec FROM WMOTable,WMOKey THEN WONo = WMOKey[1,'*'] StepNo = WMOKey[COL2()+1,'*'] CassNo = WMOKey[COL2()+1,'*'] SlotNos = WMORec SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '') FOR I = 1 TO SlotCnt RDSNo = WMORec PktNo = WMORec Zone = WMORec InCassNo = WMORec InSlotNo = WMORec NCR = WMORec UMWCass = WMORec UMWSlot = WMORec MWBox = WMORec DefWfrID = WONo:'.':CassNo:'.':I UMWWaferID = UMWCass[1,'.']:'.':UMWCass[-1,'B.']:'.':UMWSlot RDSPosID = RDSNo:'.':PktNo:'.':Zone BEGIN CASE CASE NCR NE '' Disposition = 'NCR - ':NCR CASE UMWCass NE '' Disposition = 'UMW - ':UMWWaferID CASE 1 IF MWBox THEN Disposition = 'M/U - ':DefWfrID END ELSE Disposition = 'PROD - ':DefWfrID END END CASE LOCATE DefWfrID IN WaferArray USING @VM SETTING Pos THEN IF WaferArray NE '' THEN WaferArray = WaferArray:'***':Disposition END ELSE WaferArray = Disposition END END ELSE IF RDSNo NE '' THEN ErrorLog<1,-1> = DefWfrID:' in WMO but not in RDS records. RDS.Pkt.Zone: ':RDSNo:'.':PktNo:'.':Zone' unload errors' END END NEXT I END ;* End of WMIRec read REPEAT IF ErrorLog NE '' THEN TypeOver = '' TypeOver = ErrorLog dummy = Popup(@WINDOW,TypeOver,'EPI_WO_RECON_ERRORS') END Display = '' WACnt = COUNT(WaferArray,@VM) + (WaferArray NE '') IF ReturnArray = 1 THEN Result = WaferArray END ELSE FOR I = 1 TO WACnt LineOut = WaferArray:@SVM LineOut := WaferArray:@SVM LineOut := WaferArray:@SVM LineOut := WaferArray:@SVM LineOut := WaferArray:@SVM LineOut := WaferArray:@SVM LineOut := WaferArray Display<1,I> = LineOut NEXT I TypeOver = '' TypeOver = Display void = Popup(@WINDOW,TypeOver,'EPI_WO_RECONCILE') IF Get_Status(errCode) THEN DEBUG END * * * * * * * Bail: * * * * * * * RETURN Result