272 lines
6.1 KiB
Plaintext
272 lines
6.1 KiB
Plaintext
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<WM_IN_SLOT_NO$>
|
|
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
|
|
|
|
FOR I = 1 TO SlotCnt
|
|
WaferID = WONo:'.':CassNo:'.':SlotNos<1,I>
|
|
RunDest = WMIRec<WM_IN_RDS_NO$,I>:'.'
|
|
RunDest := WMIRec<WM_IN_POCKET_NO$,I>:'.'
|
|
RunDest := WMIRec<WM_IN_ZONE$,I>
|
|
|
|
IF WMIRec<WM_IN_SLOT_NCR$,I> NE '' THEN
|
|
WaferDest = 'NCR ':WMIRec<WM_IN_SLOT_NCR$,I>
|
|
END ELSE
|
|
WaferDest = RunDest
|
|
END
|
|
WaferArray<WAFER_ID$,-1> = WaferID
|
|
WaferArray<LOT_NO$,-1> = LotNo
|
|
WaferArray<LOADED_INTO$,-1> = 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<REACT_RUN_WO_NO$>
|
|
InCassNos = RRRec<REACT_RUN_IN_CASS_NO$>
|
|
InSlotNos = RRRec<REACT_RUN_IN_SLOT_NO$>
|
|
|
|
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<REACT_RUN_POCKET$,I>:'.':RRRec<REACT_RUN_ZONE$,I>
|
|
UnloadID = WONo:'.':RRRec<REACT_RUN_OUT_CASS_NO$,I>:'.':RRRec<REACT_RUN_OUT_SLOT_NO$,I>
|
|
|
|
LOCATE WaferID IN WaferArray<WAFER_ID$> USING @VM SETTING Pos THEN
|
|
IF WaferArray<LOADED_INTO$,Pos> = RDSPosID THEN
|
|
WaferArray<RAN_IN$,Pos> = RDSPosID
|
|
END ELSE
|
|
WaferArray<RAN_IN$,Pos> = '*':RDSPosID:'*'
|
|
END
|
|
PocketChar = RRRec<REACT_RUN_POCKET_CHAR$,I>
|
|
|
|
WaferArray<POCKET_CHAR$,Pos> = PocketChar
|
|
IF PocketChar = '' THEN
|
|
WaferArray<UNLOADED_INTO$,Pos> = 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<WM_OUT_SLOT_NO$>
|
|
|
|
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
|
|
|
|
FOR I = 1 TO SlotCnt
|
|
RDSNo = WMORec<WM_OUT_RDS$,I>
|
|
PktNo = WMORec<WM_OUT_POCKET$,I>
|
|
Zone = WMORec<WM_OUT_ZONE$,I>
|
|
InCassNo = WMORec<WM_OUT_IN_CASS_NO$,I>
|
|
InSlotNo = WMORec<WM_OUT_IN_SLOT_NO$,I>
|
|
NCR = WMORec<WM_OUT_SLOT_NCR$,I>
|
|
UMWCass = WMORec<WM_OUT_UMW_CASS_ID$,I>
|
|
UMWSlot = WMORec<WM_OUT_UMW_SLOT_NO$,I>
|
|
MWBox = WMORec<WM_OUT_MAKEUP_BOX$>
|
|
|
|
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<UNLOADED_INTO$> USING @VM SETTING Pos THEN
|
|
IF WaferArray<WAFER_DISP$,Pos> NE '' THEN
|
|
WaferArray<WAFER_DISP$,Pos> = WaferArray<WAFER_DISP$,Pos>:'***':Disposition
|
|
END ELSE
|
|
WaferArray<WAFER_DISP$,Pos> = 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<pDISPLAY$> = ErrorLog
|
|
dummy = Popup(@WINDOW,TypeOver,'EPI_WO_RECON_ERRORS')
|
|
END
|
|
|
|
Display = ''
|
|
WACnt = COUNT(WaferArray<WAFER_ID$>,@VM) + (WaferArray<WAFER_ID$> NE '')
|
|
|
|
|
|
|
|
IF ReturnArray = 1 THEN
|
|
|
|
Result = WaferArray
|
|
|
|
END ELSE
|
|
|
|
FOR I = 1 TO WACnt
|
|
|
|
LineOut = WaferArray<WAFER_ID$,I>:@SVM
|
|
LineOut := WaferArray<LOT_NO$,I>:@SVM
|
|
LineOut := WaferArray<LOADED_INTO$,I>:@SVM
|
|
LineOut := WaferArray<RAN_IN$,I>:@SVM
|
|
LineOut := WaferArray<POCKET_CHAR$,I>:@SVM
|
|
LineOut := WaferArray<UNLOADED_INTO$,I>:@SVM
|
|
LineOut := WaferArray<WAFER_DISP$,I>
|
|
|
|
Display<1,I> = LineOut
|
|
|
|
NEXT I
|
|
|
|
TypeOver = ''
|
|
TypeOver<PDISPLAY$> = Display
|
|
|
|
void = Popup(@WINDOW,TypeOver,'EPI_WO_RECONCILE')
|
|
|
|
IF Get_Status(errCode) THEN DEBUG
|
|
END
|
|
|
|
|
|
* * * * * * *
|
|
Bail:
|
|
* * * * * * *
|
|
|
|
RETURN Result
|
|
|
|
|
|
|