updated WO_MAT and WM_IN actions to mark cassettes as processed when cassettes have a quantity of zero
This commit is contained in:
parent
8282b5a7d4
commit
19fb71d733
@ -245,7 +245,7 @@ end service
|
|||||||
|
|
||||||
|
|
||||||
Service DeployHGCV()
|
Service DeployHGCV()
|
||||||
debug
|
|
||||||
! Get list of work orders in production today.
|
! Get list of work orders in production today.
|
||||||
SchedEvents = Schedule_Services('GetScheduleEvents', (date() - 7), (date() + 7))
|
SchedEvents = Schedule_Services('GetScheduleEvents', (date() - 7), (date() + 7))
|
||||||
WOList = ''
|
WOList = ''
|
||||||
@ -350,7 +350,7 @@ Service DeployHGCV()
|
|||||||
HgCVList = Database_Services('ReadDataRow', 'SYSLISTS', 'HGCV_UAT')
|
HgCVList = Database_Services('ReadDataRow', 'SYSLISTS', 'HGCV_UAT')
|
||||||
|
|
||||||
For each WoMatQAKey in HgCVList using @VM
|
For each WoMatQAKey in HgCVList using @VM
|
||||||
If WOMatQAKey EQ '167798*67' then debug
|
|
||||||
Database_Services('ActivateRecord', 'WO_MAT_QA', WoMatQAKey)
|
Database_Services('ActivateRecord', 'WO_MAT_QA', WoMatQAKey)
|
||||||
Profiles = {PROFILE}
|
Profiles = {PROFILE}
|
||||||
ThickRecipeFound = False$
|
ThickRecipeFound = False$
|
||||||
@ -586,7 +586,8 @@ Service SetupDevServices()
|
|||||||
|
|
||||||
DevDBServices = 'Update Material Logs':@VM:'Log Transaction Postings':@VM:'Process Wafer Image Queue':@VM
|
DevDBServices = 'Update Material Logs':@VM:'Log Transaction Postings':@VM:'Process Wafer Image Queue':@VM
|
||||||
DevDBServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM
|
DevDBServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM
|
||||||
DevDBServices := 'Process SQL Requests':@VM:'Send Notes':@VM:'Update Notification Groups'
|
DevDBServices := 'Process SQL Requests':@VM:'Send Notes':@VM:'Update Notification Groups':@VM
|
||||||
|
DevDBServices := 'Update Security Groups':@VM:'Auto Scheduler'
|
||||||
|
|
||||||
Query = "SELECT SERVICES"
|
Query = "SELECT SERVICES"
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ EQU COL$TAGS TO 9
|
|||||||
EQU COL$TOOL_ID TO 10
|
EQU COL$TOOL_ID TO 10
|
||||||
|
|
||||||
Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, obj_Tables
|
Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, obj_Tables
|
||||||
Declare function obj_WO_Mat, obj_RDS, Error_Services, MemberOf
|
Declare function obj_WO_Mat, obj_RDS, Error_Services, MemberOf, SRP_Array
|
||||||
Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services
|
Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services
|
||||||
Declare subroutine Logging_Services, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, Schedule_Services, obj_Tables
|
Declare subroutine Logging_Services, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, Schedule_Services, obj_Tables
|
||||||
Declare subroutine obj_RDS, SAP_Services, Pass_To_SQL, NCR_Services
|
Declare subroutine obj_RDS, SAP_Services, Pass_To_SQL, NCR_Services
|
||||||
@ -331,6 +331,7 @@ WRITE_RECORD:
|
|||||||
|
|
||||||
OrigStatus = OrigRecord<NCR_STATUS$>
|
OrigStatus = OrigRecord<NCR_STATUS$>
|
||||||
NewStatus = Record<NCR_STATUS$>
|
NewStatus = Record<NCR_STATUS$>
|
||||||
|
|
||||||
If ( (OrigStatus NE NewStatus) and (NewStatus EQ 'C') ) then
|
If ( (OrigStatus NE NewStatus) and (NewStatus EQ 'C') ) then
|
||||||
|
|
||||||
********************
|
********************
|
||||||
@ -375,6 +376,8 @@ WRITE_RECORD:
|
|||||||
|
|
||||||
If (ReactorType EQ 'EPP') then
|
If (ReactorType EQ 'EPP') then
|
||||||
|
|
||||||
|
InCassNos = {CASS_NO}
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Verify the need to "Auto-Sign" the box after returning from the NCR form *
|
* Verify the need to "Auto-Sign" the box after returning from the NCR form *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
@ -500,11 +503,6 @@ WRITE_RECORD:
|
|||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
***********************************************************
|
|
||||||
* Mark the cassette as "processed" for scheduler purposes *
|
|
||||||
***********************************************************
|
|
||||||
Schedule_Services('MarkCassProcessed', WONo, CassNo, SigDTM)
|
|
||||||
|
|
||||||
***********************************************************************
|
***********************************************************************
|
||||||
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
|
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
|
||||||
***********************************************************************
|
***********************************************************************
|
||||||
@ -653,11 +651,6 @@ WRITE_RECORD:
|
|||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
***********************************************************
|
|
||||||
* Mark the cassette as "processed" for scheduler purposes *
|
|
||||||
***********************************************************
|
|
||||||
Schedule_Services('MarkCassProcessed', WONo, CassNo, SigDTM)
|
|
||||||
|
|
||||||
***********************************************************************
|
***********************************************************************
|
||||||
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
|
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
|
||||||
***********************************************************************
|
***********************************************************************
|
||||||
|
@ -846,7 +846,15 @@ Event PUB_CHANGE_CASS_QTY.CLICK()
|
|||||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
// Set CtrlMap variable to the control(s) that need to be updated
|
// Set CtrlMap variable to the control(s) that need to be updated
|
||||||
CtrlMap = 'EDT_CASS_NO'
|
CtrlMap = ''
|
||||||
|
CtrlMap<1> = @Window:'.EDL_WO_QTY'
|
||||||
|
CtrlMap<2> = @Window:'.EDL_RX_QTY'
|
||||||
|
CtrlMap<3> = @Window:'.EDL_REL_QTY'
|
||||||
|
CtrlMap<4> = @Window:'.EDL_UNREL_QTY'
|
||||||
|
CtrlMap<5> = @Window:'.EDL_SAP_CONFIRM_SCRAP_QTY'
|
||||||
|
CtrlMap<6> = @Window:'.EDL_SAP_YIELD_QTY'
|
||||||
|
CtrlMap<7> = @Window:'.EDL_SHIP_QTY'
|
||||||
|
CtrlMap<8> = @Window:'.EDT_CASS_NO'
|
||||||
GoSub PopulateControls
|
GoSub PopulateControls
|
||||||
|
|
||||||
END
|
END
|
||||||
@ -2155,4 +2163,3 @@ StartStopDate:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -1473,4 +1473,3 @@ CalcThickTarget:
|
|||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,16 +118,16 @@ RETURN Result
|
|||||||
OpenTable:
|
OpenTable:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
|
|
||||||
IF ErrorMsg = '' THEN
|
IF ErrorMsg = '' THEN
|
||||||
OPEN TableName TO TableVar THEN
|
OPEN TableName TO TableVar THEN
|
||||||
Result = TableVar
|
Result = TableVar
|
||||||
Parms = FieldStore(Parms,@RM,3,1,TableVar) ;* Added 1/22/2007 JCH
|
Parms = FieldStore(Parms,@RM,3,1,TableVar) ;* Added 1/22/2007 JCH
|
||||||
END ELSE
|
END ELSE
|
||||||
ErrorMsg = 'Unable to open Table ':QUOTE(TableName)
|
ErrorMsg = 'Unable to open Table ':QUOTE(TableName)
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@ -136,24 +136,24 @@ RETURN
|
|||||||
ReadRec:
|
ReadRec:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
GOSUB LockRec
|
GOSUB LockRec
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
ReadOnlyRec:
|
ReadOnlyRec:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
||||||
IF TableVar = '' THEN
|
IF TableVar = '' THEN
|
||||||
GOSUB OpenTable
|
GOSUB OpenTable
|
||||||
IF ErrorMsg THEN RETURN
|
IF ErrorMsg THEN RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
READ TableRec FROM TableVar,TableKey THEN
|
READ TableRec FROM TableVar,TableKey THEN
|
||||||
Result = TableRec
|
Result = TableRec
|
||||||
END ELSE
|
END ELSE
|
||||||
// Log failure to read
|
// Log failure to read
|
||||||
LogData = ''
|
LogData = ''
|
||||||
LogData<1> = LoggingDTM
|
LogData<1> = LoggingDTM
|
||||||
@ -165,10 +165,10 @@ END ELSE
|
|||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||||
|
|
||||||
IF @FILE_ERROR<1> = 100 THEN
|
IF @FILE_ERROR<1> = 100 THEN
|
||||||
* Record doesn't exist
|
* Record doesn't exist
|
||||||
* 04/20/2021 - DJS - Moved unlock call outside of this specific error condition so that the record is always
|
* 04/20/2021 - DJS - Moved unlock call outside of this specific error condition so that the record is always
|
||||||
* unlocked if the record fails to be read.
|
* unlocked if the record fails to be read.
|
||||||
* GOSUB UnlockRec
|
* GOSUB UnlockRec
|
||||||
Null
|
Null
|
||||||
END ELSE
|
END ELSE
|
||||||
Set_FSError()
|
Set_FSError()
|
||||||
@ -181,7 +181,7 @@ END ELSE
|
|||||||
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
|
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
|
||||||
end
|
end
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -190,13 +190,13 @@ RETURN
|
|||||||
WriteRec:
|
WriteRec:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
||||||
IF TableVar = '' THEN GOSUB OpenTable
|
IF TableVar = '' THEN GOSUB OpenTable
|
||||||
|
|
||||||
IF ErrorMsg THEN RETURN
|
IF ErrorMsg THEN RETURN
|
||||||
|
|
||||||
IF ErrorMsg = '' THEN
|
IF ErrorMsg = '' THEN
|
||||||
|
|
||||||
TestRec = TableRec
|
TestRec = TableRec
|
||||||
|
|
||||||
@ -204,8 +204,8 @@ IF ErrorMsg = '' THEN
|
|||||||
|
|
||||||
IF TestRec = '' THEN
|
IF TestRec = '' THEN
|
||||||
DELETE TableVar,TableKey ELSE Null
|
DELETE TableVar,TableKey ELSE Null
|
||||||
* ErrorMsg = 'Blank table rec with ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'; *added 4/9/21 for debugging
|
* ErrorMsg = 'Blank table rec with ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'; *added 4/9/21 for debugging
|
||||||
* Set_FSError()
|
* Set_FSError()
|
||||||
END ELSE
|
END ELSE
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
rv = Get_Status(errCode)
|
rv = Get_Status(errCode)
|
||||||
@ -222,7 +222,7 @@ IF ErrorMsg = '' THEN
|
|||||||
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
|
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
|
||||||
end
|
end
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -231,13 +231,13 @@ RETURN
|
|||||||
WriteOnlyRec:
|
WriteOnlyRec:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
||||||
IF TableVar = '' THEN GOSUB OpenTable
|
IF TableVar = '' THEN GOSUB OpenTable
|
||||||
|
|
||||||
IF ErrorMsg THEN RETURN
|
IF ErrorMsg THEN RETURN
|
||||||
|
|
||||||
IF ErrorMsg = '' THEN
|
IF ErrorMsg = '' THEN
|
||||||
|
|
||||||
TestRec = TableRec
|
TestRec = TableRec
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ IF ErrorMsg = '' THEN
|
|||||||
ErrorMsg = 'Unable to write ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'
|
ErrorMsg = 'Unable to write ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -259,17 +259,17 @@ RETURN
|
|||||||
DeleteRec:
|
DeleteRec:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
||||||
IF TableVar = '' THEN GOSUB OpenTable
|
IF TableVar = '' THEN GOSUB OpenTable
|
||||||
|
|
||||||
IF ErrorMsg THEN RETURN
|
IF ErrorMsg THEN RETURN
|
||||||
|
|
||||||
IF ErrorMsg = '' THEN
|
IF ErrorMsg = '' THEN
|
||||||
DELETE TableVar,TableKey THEN
|
DELETE TableVar,TableKey THEN
|
||||||
GOSUB UnlockRec
|
GOSUB UnlockRec
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -279,17 +279,17 @@ RETURN
|
|||||||
LockRec:
|
LockRec:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
||||||
IF TableVar = '' THEN GOSUB OpenTable
|
IF TableVar = '' THEN GOSUB OpenTable
|
||||||
|
|
||||||
IF ErrorMsg THEN RETURN
|
IF ErrorMsg THEN RETURN
|
||||||
|
|
||||||
LockData = ''
|
LockData = ''
|
||||||
Locked = FALSE$
|
Locked = FALSE$
|
||||||
RetryCnt = 0
|
RetryCnt = 0
|
||||||
|
|
||||||
LOOP
|
LOOP
|
||||||
|
|
||||||
LOCK TableVar,TableKey THEN
|
LOCK TableVar,TableKey THEN
|
||||||
Locked = TRUE$
|
Locked = TRUE$
|
||||||
@ -311,7 +311,7 @@ LOOP
|
|||||||
RetryCnt += 1
|
RetryCnt += 1
|
||||||
END
|
END
|
||||||
|
|
||||||
UNTIL Locked OR RetryCnt = 10 REPEAT
|
UNTIL Locked OR RetryCnt = 10 REPEAT
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@ -321,8 +321,8 @@ RETURN
|
|||||||
UnlockRec:
|
UnlockRec:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
RecordLocked = Database_Services('IsKeyIDLocked', TableName, TableKey, False$)
|
RecordLocked = Database_Services('IsKeyIDLocked', TableName, TableKey, False$)
|
||||||
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
|
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -331,21 +331,21 @@ RETURN
|
|||||||
LockSet:
|
LockSet:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
||||||
IF TableVar = '' THEN GOSUB OpenTable
|
IF TableVar = '' THEN GOSUB OpenTable
|
||||||
|
|
||||||
TableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey
|
TableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey
|
||||||
|
|
||||||
IF ErrorMsg THEN RETURN
|
IF ErrorMsg THEN RETURN
|
||||||
|
|
||||||
IF TableKeys = '' THEN RETURN
|
IF TableKeys = '' THEN RETURN
|
||||||
|
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
|
|
||||||
LockedTableKeys = ''
|
LockedTableKeys = ''
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(TableKeys,@VM) + (TableKeys NE '')
|
FOR I = 1 TO COUNT(TableKeys,@VM) + (TableKeys NE '')
|
||||||
TableKey = TableKeys<1,I>
|
TableKey = TableKeys<1,I>
|
||||||
GOSUB LockRec
|
GOSUB LockRec
|
||||||
|
|
||||||
@ -358,9 +358,9 @@ FOR I = 1 TO COUNT(TableKeys,@VM) + (TableKeys NE '')
|
|||||||
Next N
|
Next N
|
||||||
End
|
End
|
||||||
|
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
Result = TableVar
|
Result = TableVar
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -369,26 +369,23 @@ RETURN
|
|||||||
UnlockSet:
|
UnlockSet:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
|
||||||
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
|
||||||
IF TableVar = '' THEN ErrorMsg = 'Null parameter "TableVar" passed to subroutine'
|
IF TableVar = '' THEN ErrorMsg = 'Null parameter "TableVar" passed to subroutine'
|
||||||
|
|
||||||
LockedTableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey
|
LockedTableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey
|
||||||
|
|
||||||
IF ErrorMsg THEN RETURN
|
IF ErrorMsg THEN RETURN
|
||||||
|
|
||||||
IF LockedTableKeys = '' THEN RETURN
|
IF LockedTableKeys = '' THEN RETURN
|
||||||
|
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
|
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(LockedTableKeys,@VM) + (LockedTableKeys NE '')
|
FOR I = 1 TO COUNT(LockedTableKeys,@VM) + (LockedTableKeys NE '')
|
||||||
TableKey = LockedTableKeys<1,I>
|
TableKey = LockedTableKeys<1,I>
|
||||||
GOSUB UnlockRec
|
GOSUB UnlockRec
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,29 +80,29 @@ RETURN Result
|
|||||||
Create:
|
Create:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WONo = Parms[1,@RM]
|
WONo = Parms[1,@RM]
|
||||||
WOStep = Parms[COL2()+1,@RM]
|
WOStep = Parms[COL2()+1,@RM]
|
||||||
CassNo = Parms[COL2()+1,@RM]
|
CassNo = Parms[COL2()+1,@RM]
|
||||||
WaferQty = Parms[COL2()+1,@RM]
|
WaferQty = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
|
|
||||||
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
||||||
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
||||||
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
||||||
IF WaferQty = '' THEN ErrorMsg = 'Null Parameter "WaferQty" passed to routine. (':Method:')'
|
IF WaferQty = '' THEN ErrorMsg = 'Null Parameter "WaferQty" passed to routine. (':Method:')'
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
WMInKey = WONo:'*':WOStep:'*':CassNo
|
WMInKey = WONo:'*':WOStep:'*':CassNo
|
||||||
|
|
||||||
WMInRec = ''
|
WMInRec = ''
|
||||||
|
|
||||||
FOR I = 1 TO WaferQty
|
FOR I = 1 TO WaferQty
|
||||||
WMInRec<WM_IN_SLOT_NO$,I> = I
|
WMInRec<WM_IN_SLOT_NO$,I> = I
|
||||||
NEXT I
|
NEXT I
|
||||||
Done = False$
|
Done = False$
|
||||||
NumAttempts = 0
|
NumAttempts = 0
|
||||||
Loop
|
Loop
|
||||||
|
|
||||||
NumAttempts += 1
|
NumAttempts += 1
|
||||||
Database_Services('WriteDataRow', 'WM_IN', WMInKey, WMInRec)
|
Database_Services('WriteDataRow', 'WM_IN', WMInKey, WMInRec)
|
||||||
@ -129,11 +129,11 @@ Loop
|
|||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||||
Done = True$
|
Done = True$
|
||||||
end
|
end
|
||||||
Until ( (NumAttempts EQ 10) or (Done EQ True$) )
|
Until ( (NumAttempts EQ 10) or (Done EQ True$) )
|
||||||
Repeat
|
Repeat
|
||||||
|
|
||||||
WMInRec = Database_Services('ReadDataRow', 'WM_IN', WMInKey)
|
WMInRec = Database_Services('ReadDataRow', 'WM_IN', WMInKey)
|
||||||
If WMInRec EQ '' then
|
If WMInRec EQ '' then
|
||||||
// Record did not write to the database
|
// Record did not write to the database
|
||||||
LogData = ''
|
LogData = ''
|
||||||
LogData<1> = LoggingDTM
|
LogData<1> = LoggingDTM
|
||||||
@ -148,9 +148,9 @@ If WMInRec EQ '' then
|
|||||||
end else
|
end else
|
||||||
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
* obj_Tables('WriteRec','WM_IN':@RM:WMInKey:@RM:@RM:WMInRec)
|
* obj_Tables('WriteRec','WM_IN':@RM:WMInKey:@RM:@RM:WMInRec)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -159,19 +159,19 @@ RETURN
|
|||||||
Delete:
|
Delete:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WMInKeys = Parms[1,@RM]
|
WMInKeys = Parms[1,@RM]
|
||||||
|
|
||||||
IF WMInKeys = '' THEN RETURN
|
IF WMInKeys = '' THEN RETURN
|
||||||
|
|
||||||
NCRs = XLATE('WM_IN',WMInKeys,'NCR_NOS','X')
|
NCRs = XLATE('WM_IN',WMInKeys,'NCR_NOS','X')
|
||||||
|
|
||||||
CONVERT @FM TO @VM IN NCRs
|
CONVERT @FM TO @VM IN NCRs
|
||||||
|
|
||||||
TestString = NCRs
|
TestString = NCRs
|
||||||
|
|
||||||
CONVERT @VM TO '' IN TestString
|
CONVERT @VM TO '' IN TestString
|
||||||
|
|
||||||
IF TestString NE '' THEN
|
IF TestString NE '' THEN
|
||||||
FOR I = 1 TO COUNT(NCRs,@VM) + (NCRs NE '')
|
FOR I = 1 TO COUNT(NCRs,@VM) + (NCRs NE '')
|
||||||
IF NCRs<1,I> NE '' THEN
|
IF NCRs<1,I> NE '' THEN
|
||||||
Result<1,-1> = WMInKeys<1,I> ;* Return list of WMInKeys that have started processing and cannot be deleted
|
Result<1,-1> = WMInKeys<1,I> ;* Return list of WMInKeys that have started processing and cannot be deleted
|
||||||
@ -179,13 +179,13 @@ IF TestString NE '' THEN
|
|||||||
NEXT I
|
NEXT I
|
||||||
ErrorMsg = 'Material has been rejected'
|
ErrorMsg = 'Material has been rejected'
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
WMiParms = 'WM_IN'
|
WMiParms = 'WM_IN'
|
||||||
LockedWMInKeys = ''
|
LockedWMInKeys = ''
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
|
FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
|
||||||
WMInKey = WMInKeys<1,I>
|
WMInKey = WMInKeys<1,I>
|
||||||
WMiParms = FieldStore(WMiParms, @RM, 2, 1, WMInKey)
|
WMiParms = FieldStore(WMiParms, @RM, 2, 1, WMInKey)
|
||||||
obj_Tables('LockRec',WMiParms)
|
obj_Tables('LockRec',WMiParms)
|
||||||
@ -199,16 +199,16 @@ FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
|
|||||||
END ELSE
|
END ELSE
|
||||||
LockedWMInKeys<1,I> = WMInKey
|
LockedWMInKeys<1,I> = WMInKey
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
TableVar = FIELD(WMiParms,@RM,3,1)
|
TableVar = FIELD(WMiParms,@RM,3,1)
|
||||||
|
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
|
FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
|
||||||
WMInKey = WMInKeys<1,I>
|
WMInKey = WMInKeys<1,I>
|
||||||
WMiParms = 'WM_IN':@RM:WMInKey:@RM:TableVar:@RM
|
WMiParms = 'WM_IN':@RM:WMInKey:@RM:TableVar:@RM
|
||||||
obj_Tables('DeleteRec',WMiParms) ;* Deletes and removes the lock
|
obj_Tables('DeleteRec',WMiParms) ;* Deletes and removes the lock
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -217,65 +217,65 @@ RETURN
|
|||||||
CurrStatus:
|
CurrStatus:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WMInKey = Parms[1,@RM]
|
WMInKey = Parms[1,@RM]
|
||||||
WMInRec = Parms[COL2()+1,@RM]
|
WMInRec = Parms[COL2()+1,@RM]
|
||||||
WOMatRec = Parms[COL2()+1,@RM]
|
WOMatRec = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
IF WMInKey = '' THEN RETURN
|
IF WMInKey = '' THEN RETURN
|
||||||
IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X')
|
IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X')
|
||||||
|
|
||||||
*IF WMInRec = '' THEN RETURN
|
*IF WMInRec = '' THEN RETURN
|
||||||
|
|
||||||
|
|
||||||
IF WMInRec<WM_IN_VOID$> = 1 THEN
|
IF WMInRec<WM_IN_VOID$> = 1 THEN
|
||||||
Result = 'VOID'
|
Result = 'VOID'
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
* Check for completion or abnormal condition
|
* Check for completion or abnormal condition
|
||||||
|
|
||||||
IF WOMatRec = '' THEN
|
IF WOMatRec = '' THEN
|
||||||
WONo = WMInKey[1,'*']
|
WONo = WMInKey[1,'*']
|
||||||
CassNo = WMInKey[-1,'B*']
|
CassNo = WMInKey[-1,'B*']
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMatKey = WONo:'*':CassNo
|
||||||
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
IF WOMatRec<WO_MAT_HOLD$> = 1 AND WOMatRec<WO_MAT_HOLD_ENTITY$,1> = 'WM_IN' THEN
|
IF WOMatRec<WO_MAT_HOLD$> = 1 AND WOMatRec<WO_MAT_HOLD_ENTITY$,1> = 'WM_IN' THEN
|
||||||
Result = 'HOLD'
|
Result = 'HOLD'
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
GOSUB NCRNos
|
GOSUB NCRNos
|
||||||
|
|
||||||
NCRNos = Result
|
NCRNos = Result
|
||||||
Result = ''
|
Result = ''
|
||||||
|
|
||||||
NCRStatuses = XLATE('NCR',NCRNos,7,'X')
|
NCRStatuses = XLATE('NCR',NCRNos,7,'X')
|
||||||
|
|
||||||
IF INDEX(NCRStatuses,'O',1) THEN
|
IF INDEX(NCRStatuses,'O',1) THEN
|
||||||
Result = 'NCR' ;* Open NCR associated with box
|
Result = 'NCR' ;* Open NCR associated with box
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
* Check for sequential status points
|
* Check for sequential status points
|
||||||
|
|
||||||
|
|
||||||
RemoveCount = 0
|
RemoveCount = 0
|
||||||
|
|
||||||
SlotCount = COUNT(WMInRec<WM_IN_SLOT_NO$>,@VM) + (WMInRec<WM_IN_SLOT_NO$> NE '')
|
SlotCount = COUNT(WMInRec<WM_IN_SLOT_NO$>,@VM) + (WMInRec<WM_IN_SLOT_NO$> NE '')
|
||||||
FOR I = 1 TO SlotCount
|
FOR I = 1 TO SlotCount
|
||||||
IF (WMInRec<WM_IN_RDS_NO$,I> NE '' OR WMInRec<WM_IN_SLOT_NCR$,I> NE '') THEN RemoveCount += 1
|
IF (WMInRec<WM_IN_RDS_NO$,I> NE '' OR WMInRec<WM_IN_SLOT_NCR$,I> NE '') THEN RemoveCount += 1
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
IF RemoveCount = SlotCount THEN
|
IF RemoveCount = SlotCount THEN
|
||||||
Result = 'MT' ;* Empty
|
Result = 'MT' ;* Empty
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
/*
|
/*
|
||||||
IF RemoveCount = 0 THEN
|
IF RemoveCount = 0 THEN
|
||||||
|
|
||||||
PreClean = XLATE('WM_IN',WMInKey,'PRE_CLEAN','X')
|
PreClean = XLATE('WM_IN',WMInKey,'PRE_CLEAN','X')
|
||||||
IF PreClean[1,2] = 'No' OR PreClean = '' THEN
|
IF PreClean[1,2] = 'No' OR PreClean = '' THEN
|
||||||
@ -284,10 +284,10 @@ IF RemoveCount = 0 THEN
|
|||||||
Result = 'PREC' ;* Post Clean if Required
|
Result = 'PREC' ;* Post Clean if Required
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Result = 'RFW' ;* Changed 10/27/2011
|
Result = 'RFW' ;* Changed 10/27/2011
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -297,24 +297,24 @@ RETURN
|
|||||||
RemainingSlots:
|
RemainingSlots:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WONo = Parms[1,@RM]
|
WONo = Parms[1,@RM]
|
||||||
WOStep = Parms[COL2()+1,@RM]
|
WOStep = Parms[COL2()+1,@RM]
|
||||||
CassNos = Parms[COL2()+1,@RM]
|
CassNos = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
||||||
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
IF CassNos = '' THEN
|
IF CassNos = '' THEN
|
||||||
CassNos = XLATE('WO_LOG',WONo,'WO_MAT_CASS_NO','X')
|
CassNos = XLATE('WO_LOG',WONo,'WO_MAT_CASS_NO','X')
|
||||||
END
|
END
|
||||||
|
|
||||||
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
|
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
|
||||||
|
|
||||||
* Start Counting at the last box and work backward
|
* Start Counting at the last box and work backward
|
||||||
|
|
||||||
FOR I = CassCnt TO 1 STEP -1
|
FOR I = CassCnt TO 1 STEP -1
|
||||||
|
|
||||||
CassNo = CassNos<1,I>
|
CassNo = CassNos<1,I>
|
||||||
|
|
||||||
@ -337,7 +337,7 @@ FOR I = CassCnt TO 1 STEP -1
|
|||||||
NEXT N
|
NEXT N
|
||||||
END
|
END
|
||||||
|
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -346,26 +346,26 @@ RETURN
|
|||||||
RemoveWafer:
|
RemoveWafer:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WONo = Parms[1,@RM]
|
WONo = Parms[1,@RM]
|
||||||
WOStep = Parms[COL2()+1,@RM]
|
WOStep = Parms[COL2()+1,@RM]
|
||||||
CassNo = Parms[COL2()+1,@RM]
|
CassNo = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
SlotNos = Parms[COL2()+1,@RM]
|
SlotNos = Parms[COL2()+1,@RM]
|
||||||
RDSNos = Parms[COL2()+1,@RM]
|
RDSNos = Parms[COL2()+1,@RM]
|
||||||
PocketNos = Parms[COL2()+1,@RM]
|
PocketNos = Parms[COL2()+1,@RM]
|
||||||
Zones = Parms[COL2()+1,@RM]
|
Zones = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
|
|
||||||
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
||||||
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
||||||
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
||||||
IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')'
|
IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')'
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
|
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
|
||||||
|
|
||||||
FOR I = 1 TO SlotCnt
|
FOR I = 1 TO SlotCnt
|
||||||
|
|
||||||
RDSNo = RDSNos<1,I>
|
RDSNo = RDSNos<1,I>
|
||||||
PocketNo = PocketNos<1,I>
|
PocketNo = PocketNos<1,I>
|
||||||
@ -377,25 +377,25 @@ FOR I = 1 TO SlotCnt
|
|||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
|
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
|
||||||
WMInRec = obj_Tables('ReadRec',otParms)
|
WMInRec = obj_Tables('ReadRec',otParms)
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN RETURN
|
IF Get_Status(errCode) THEN RETURN
|
||||||
|
|
||||||
FirstWafer = 0
|
FirstWafer = 0
|
||||||
FirstRDSNo = ''
|
FirstRDSNo = ''
|
||||||
|
|
||||||
LoadDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
LoadDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
||||||
|
|
||||||
WfrIDs = '' ;* Added 9/7/2016 JCH
|
WfrIDs = '' ;* Added 9/7/2016 JCH
|
||||||
RunLocs = '' ;* Added 9/7/2016 JCH
|
RunLocs = '' ;* Added 9/7/2016 JCH
|
||||||
CurrSlotIDs = '' ;* Added 9/7/2016 JCH
|
CurrSlotIDs = '' ;* Added 9/7/2016 JCH
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FOR I = 1 TO SlotCnt
|
FOR I = 1 TO SlotCnt
|
||||||
SlotNo = SlotNos<1,I>
|
SlotNo = SlotNos<1,I>
|
||||||
|
|
||||||
IF SlotNo = 1 THEN
|
IF SlotNo = 1 THEN
|
||||||
@ -437,14 +437,14 @@ FOR I = 1 TO SlotCnt
|
|||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
* * * * * Added 9/7/2016 JCH * * * * * *
|
* * * * * Added 9/7/2016 JCH * * * * * *
|
||||||
|
|
||||||
IF WfrIDs NE '' THEN
|
IF WfrIDs NE '' THEN
|
||||||
|
|
||||||
Parms = WfrIDs:@RM ;* WfrID - mv
|
Parms = WfrIDs:@RM ;* WfrID - mv
|
||||||
Parms := LoadDTM:@RM ;* EventDtm
|
Parms := LoadDTM:@RM ;* EventDtm
|
||||||
@ -464,20 +464,20 @@ IF WfrIDs NE '' THEN
|
|||||||
|
|
||||||
obj_WO_Wfr('AddEvent',Parms)
|
obj_WO_Wfr('AddEvent',Parms)
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
|
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
|
||||||
obj_Tables('WriteRec',otParms)
|
obj_Tables('WriteRec',otParms)
|
||||||
|
|
||||||
* Added 11/8/2012 JCH *
|
* Added 11/8/2012 JCH *
|
||||||
|
|
||||||
WIPStartDTM = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WIP_START_DTM$,'X')
|
WIPStartDTM = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WIP_START_DTM$,'X')
|
||||||
|
|
||||||
DTMSecond = '0.0000115741' ;*********** Constant for 1 Second in DTM internal format
|
DTMSecond = '0.0000115741' ;*********** Constant for 1 Second in DTM internal format
|
||||||
|
|
||||||
IF WIPStartDTM = '' THEN
|
IF WIPStartDTM = '' THEN
|
||||||
|
|
||||||
CurrTime = Time()
|
CurrTime = Time()
|
||||||
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(CurrTime,'MTS')
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(CurrTime,'MTS')
|
||||||
@ -485,16 +485,16 @@ IF WIPStartDTM = '' THEN
|
|||||||
|
|
||||||
obj_Post_Log('Create','WO_MAT':@RM:WONo:'*':CassNo:@RM:WO_MAT_WIP_START_DTM$:@RM:ICONV(CurrDTM,'DT'))
|
obj_Post_Log('Create','WO_MAT':@RM:WONo:'*':CassNo:@RM:WO_MAT_WIP_START_DTM$:@RM:ICONV(CurrDTM,'DT'))
|
||||||
|
|
||||||
END ELSE
|
END ELSE
|
||||||
|
|
||||||
CurrDTM = OCONV(WipStartDTM,'DT4/^S') ;* CurrDTM in OCONV format
|
CurrDTM = OCONV(WipStartDTM,'DT4/^S') ;* CurrDTM in OCONV format
|
||||||
CurrDTM1 = OCONV(WipStartDTM + DTMSecond,'DT4/^S')
|
CurrDTM1 = OCONV(WipStartDTM + DTMSecond,'DT4/^S')
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
* Added 2/4/2013 by JCH
|
* Added 2/4/2013 by JCH
|
||||||
|
|
||||||
IF FirstWafer THEN
|
IF FirstWafer THEN
|
||||||
|
|
||||||
Reactor = XLATE('REACT_RUN',FirstRDSNo,REACT_RUN_REACTOR$ ,'X')
|
Reactor = XLATE('REACT_RUN',FirstRDSNo,REACT_RUN_REACTOR$ ,'X')
|
||||||
|
|
||||||
@ -569,7 +569,7 @@ IF FirstWafer THEN
|
|||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@ -579,32 +579,32 @@ RETURN
|
|||||||
ReplaceWafer:
|
ReplaceWafer:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WONo = Parms[1,@RM]
|
WONo = Parms[1,@RM]
|
||||||
WOStep = Parms[COL2()+1,@RM]
|
WOStep = Parms[COL2()+1,@RM]
|
||||||
CassNo = Parms[COL2()+1,@RM]
|
CassNo = Parms[COL2()+1,@RM]
|
||||||
SlotNos = Parms[COL2()+1,@RM]
|
SlotNos = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
||||||
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
||||||
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
||||||
IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')'
|
IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')'
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
|
|
||||||
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
|
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
|
||||||
WMInRec = obj_Tables('ReadRec',otParms)
|
WMInRec = obj_Tables('ReadRec',otParms)
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN RETURN
|
IF Get_Status(errCode) THEN RETURN
|
||||||
|
|
||||||
ReplaceDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
ReplaceDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
||||||
|
|
||||||
WfrIDs = '' ;* Added 9/7/2016 JCH
|
WfrIDs = '' ;* Added 9/7/2016 JCH
|
||||||
NewSlotIDs = '' ;* Added 9/7/2016 JCH
|
NewSlotIDs = '' ;* Added 9/7/2016 JCH
|
||||||
|
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(SlotNos,@VM) + (SlotNos NE '')
|
FOR I = 1 TO COUNT(SlotNos,@VM) + (SlotNos NE '')
|
||||||
SlotNo = SlotNos<1,I>
|
SlotNo = SlotNos<1,I>
|
||||||
LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN
|
LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN
|
||||||
|
|
||||||
@ -639,11 +639,11 @@ FOR I = 1 TO COUNT(SlotNos,@VM) + (SlotNos NE '')
|
|||||||
obj_WO_Wfr('AddEvent',Parms)
|
obj_WO_Wfr('AddEvent',Parms)
|
||||||
|
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
IF WfrIDs NE '' THEN
|
IF WfrIDs NE '' THEN
|
||||||
|
|
||||||
* * * * Added 9/7/2016 JCH - wafer history * * * *
|
* * * * Added 9/7/2016 JCH - wafer history * * * *
|
||||||
|
|
||||||
@ -664,12 +664,12 @@ IF WfrIDs NE '' THEN
|
|||||||
|
|
||||||
obj_WO_Wfr('AddEvent',Parms)
|
obj_WO_Wfr('AddEvent',Parms)
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
|
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
|
||||||
obj_Tables('WriteRec',otParms)
|
obj_Tables('WriteRec',otParms)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -678,30 +678,30 @@ RETURN
|
|||||||
AddWafer:
|
AddWafer:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WONo = Parms[1,@RM]
|
WONo = Parms[1,@RM]
|
||||||
WOStep = Parms[COL2()+1,@RM]
|
WOStep = Parms[COL2()+1,@RM]
|
||||||
CassNo = Parms[COL2()+1,@RM]
|
CassNo = Parms[COL2()+1,@RM]
|
||||||
SlotNo = Parms[COL2()+1,@RM]
|
SlotNo = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
|
||||||
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
|
||||||
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
|
||||||
IF SlotNo = '' THEN ErrorMsg = 'Null Parameter "SlotNo" passed to routine. (':Method:')'
|
IF SlotNo = '' THEN ErrorMsg = 'Null Parameter "SlotNo" passed to routine. (':Method:')'
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
|
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
|
||||||
WMInRec = obj_Tables('ReadRec',otParms)
|
WMInRec = obj_Tables('ReadRec',otParms)
|
||||||
|
|
||||||
LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN
|
LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN
|
||||||
WMInRec<WM_IN_SLOT_NCR$,Pos> = '' ;* Clears NCR numbers
|
WMInRec<WM_IN_SLOT_NCR$,Pos> = '' ;* Clears NCR numbers
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
*WMInRec<WM_IN_SLOT_NO$,SlotNo> = SlotNo ;* Slot numbers are the same as the position in the list.
|
*WMInRec<WM_IN_SLOT_NO$,SlotNo> = SlotNo ;* Slot numbers are the same as the position in the list.
|
||||||
|
|
||||||
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
|
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
|
||||||
obj_Tables('WriteRec',otParms)
|
obj_Tables('WriteRec',otParms)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -711,25 +711,25 @@ RETURN
|
|||||||
NCRNos:
|
NCRNos:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
IF NOT(ASSIGNED(WMInKey)) THEN
|
IF NOT(ASSIGNED(WMInKey)) THEN
|
||||||
* Called externally
|
* Called externally
|
||||||
WMInKey = Parms[1,@RM]
|
WMInKey = Parms[1,@RM]
|
||||||
WMInRec = Parms[COL2()+1,@RM]
|
WMInRec = Parms[COL2()+1,@RM]
|
||||||
END
|
END
|
||||||
|
|
||||||
IF WMInKey = '' THEN RETURN
|
IF WMInKey = '' THEN RETURN
|
||||||
IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X')
|
IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X')
|
||||||
|
|
||||||
SlotNCRs = WMInRec<WM_IN_SLOT_NCR$>
|
SlotNCRs = WMInRec<WM_IN_SLOT_NCR$>
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(SlotNCRs,@VM) + (SlotNCRs NE '')
|
FOR I = 1 TO COUNT(SlotNCRs,@VM) + (SlotNCRs NE '')
|
||||||
SlotNCR = SlotNCRs<1,I>
|
SlotNCR = SlotNCRs<1,I>
|
||||||
IF SlotNCR NE '' THEN
|
IF SlotNCR NE '' THEN
|
||||||
LOCATE SlotNCR in Result BY 'AR' USING @VM SETTING Pos ELSE
|
LOCATE SlotNCR in Result BY 'AR' USING @VM SETTING Pos ELSE
|
||||||
Result = INSERT(Result,1,Pos,0,SlotNCR)
|
Result = INSERT(Result,1,Pos,0,SlotNCR)
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -738,26 +738,26 @@ RETURN
|
|||||||
RunProdTest:
|
RunProdTest:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WMIKey = Parms[1,@RM]
|
WMIKey = Parms[1,@RM]
|
||||||
WMIRec = Parms[COL2()+1,@RM]
|
WMIRec = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
IF WMIKey = '' THEN RETURN
|
IF WMIKey = '' THEN RETURN
|
||||||
|
|
||||||
IF WMIRec = '' THEN
|
IF WMIRec = '' THEN
|
||||||
WMIRec = XLATE('WM_IN',WMIKey,'','X')
|
WMIRec = XLATE('WM_IN',WMIKey,'','X')
|
||||||
END
|
END
|
||||||
|
|
||||||
IF WMIRec = '' THEN RETURN
|
IF WMIRec = '' THEN RETURN
|
||||||
|
|
||||||
CassNo = FIELD(WMIKey,'*',3)
|
CassNo = FIELD(WMIKey,'*',3)
|
||||||
|
|
||||||
SlotNos = WMIRec<WM_IN_SLOT_NO$>
|
SlotNos = WMIRec<WM_IN_SLOT_NO$>
|
||||||
|
|
||||||
SlotCnt = COUNT(SlotNos,@VM) + ( SlotNos NE '')
|
SlotCnt = COUNT(SlotNos,@VM) + ( SlotNos NE '')
|
||||||
|
|
||||||
Ans = ''
|
Ans = ''
|
||||||
|
|
||||||
FOR I = 1 TO SlotCnt
|
FOR I = 1 TO SlotCnt
|
||||||
|
|
||||||
RDSNo = WMIRec<WM_IN_RDS_NO$,I>
|
RDSNo = WMIRec<WM_IN_RDS_NO$,I>
|
||||||
RDSRec = XLATE('RDS',RDSNo,'','X')
|
RDSRec = XLATE('RDS',RDSNo,'','X')
|
||||||
@ -783,9 +783,9 @@ FOR I = 1 TO SlotCnt
|
|||||||
END ;* End of check for matching Cassette and Slot number in the RDS
|
END ;* End of check for matching Cassette and Slot number in the RDS
|
||||||
NEXT N
|
NEXT N
|
||||||
|
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
Result = Ans
|
Result = Ans
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -796,22 +796,22 @@ RETURN
|
|||||||
RebuildUnload:
|
RebuildUnload:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WMInID = Parms[1,@RM]
|
WMInID = Parms[1,@RM]
|
||||||
|
|
||||||
IF WMInID = '' THEN RETURN
|
IF WMInID = '' THEN RETURN
|
||||||
|
|
||||||
WONo = WMInID[1,'*']
|
WONo = WMInID[1,'*']
|
||||||
ProcStep = WMInID[COL2()+1,'*']
|
ProcStep = WMInID[COL2()+1,'*']
|
||||||
CassNo = WMInID[COL2()+1,'*']
|
CassNo = WMInID[COL2()+1,'*']
|
||||||
|
|
||||||
Update_Index ("RDS", "WO", "")
|
Update_Index ("RDS", "WO", "")
|
||||||
|
|
||||||
Extract_SI_Keys( 'RDS', 'WO', WONo, RDSNos ) ;* Original Code
|
Extract_SI_Keys( 'RDS', 'WO', WONo, RDSNos ) ;* Original Code
|
||||||
|
|
||||||
WOBoxCnt = COUNT( RDSNos, @VM ) + ( RDSNos NE '' )
|
WOBoxCnt = COUNT( RDSNos, @VM ) + ( RDSNos NE '' )
|
||||||
|
|
||||||
|
|
||||||
FOR I = 1 TO WOBoxCnt
|
FOR I = 1 TO WOBoxCnt
|
||||||
RDSNo = RDSNos<1,I>
|
RDSNo = RDSNos<1,I>
|
||||||
RDSRec = XLATE('RDS',RDSNo,'','X')
|
RDSRec = XLATE('RDS',RDSNo,'','X')
|
||||||
|
|
||||||
@ -841,7 +841,7 @@ FOR I = 1 TO WOBoxCnt
|
|||||||
|
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -851,29 +851,29 @@ RemProdTW:
|
|||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
WONo = Parms[1,@RM]
|
WONo = Parms[1,@RM]
|
||||||
WOCassNo = Parms[COL2()+1,@RM]
|
WOCassNo = Parms[COL2()+1,@RM]
|
||||||
MetNo = Parms[COL2()+1,@RM]
|
MetNo = Parms[COL2()+1,@RM]
|
||||||
SlotNos = Parms[COL2()+1,@RM]
|
SlotNos = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')'
|
IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')'
|
||||||
IF WOCassNo = '' THEN ErrorMsg = 'Null Parm "WOCassNo" passed to routine. (':Method:')'
|
IF WOCassNo = '' THEN ErrorMsg = 'Null Parm "WOCassNo" passed to routine. (':Method:')'
|
||||||
IF MetNo = '' THEN ErrorMsg = 'Null Parm "MetNo" passed to routine. (':Method:')'
|
IF MetNo = '' THEN ErrorMsg = 'Null Parm "MetNo" passed to routine. (':Method:')'
|
||||||
IF SlotNos = '' THEN ErrorMsg = 'Null Parm "SlotNos" passed to routine. (':Method:')'
|
IF SlotNos = '' THEN ErrorMsg = 'Null Parm "SlotNos" passed to routine. (':Method:')'
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
StepNo = 1
|
StepNo = 1
|
||||||
|
|
||||||
otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo
|
otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo
|
||||||
|
|
||||||
WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock
|
WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock
|
||||||
|
|
||||||
PulledWaferIDs = ''
|
PulledWaferIDs = ''
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
IF Get_Status(errCode) THEN
|
||||||
NULL
|
NULL
|
||||||
END ELSE
|
END ELSE
|
||||||
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
|
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
|
||||||
PulledWaferIDs = ''
|
PulledWaferIDs = ''
|
||||||
FOR I = 1 TO SlotCnt
|
FOR I = 1 TO SlotCnt
|
||||||
@ -885,9 +885,9 @@ END ELSE
|
|||||||
otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec)
|
otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec)
|
||||||
obj_Tables('WriteRec',otParms)
|
obj_Tables('WriteRec',otParms)
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
Result = PulledWaferIDs
|
Result = PulledWaferIDs
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -896,23 +896,23 @@ RETURN
|
|||||||
RepProdTW:
|
RepProdTW:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WONo = Parms[1,@RM]
|
WONo = Parms[1,@RM]
|
||||||
WOCassNo = Parms[COL2()+1,@RM]
|
WOCassNo = Parms[COL2()+1,@RM]
|
||||||
MetNo = Parms[COL2()+1,@RM]
|
MetNo = Parms[COL2()+1,@RM]
|
||||||
WaferIDs = Parms[COL2()+1,@RM]
|
WaferIDs = Parms[COL2()+1,@RM]
|
||||||
|
|
||||||
IF NOT(ASSIGNED(WONo)) THEN ErrorMsg = 'Unassigned Parm "WONo" passed to routine. (':Method:')'
|
IF NOT(ASSIGNED(WONo)) THEN ErrorMsg = 'Unassigned Parm "WONo" passed to routine. (':Method:')'
|
||||||
IF NOT(ASSIGNED(WOCassNo)) THEN ErrorMsg = 'Unassigned Parm "WOCassNo" passed to routine. (':Method:')'
|
IF NOT(ASSIGNED(WOCassNo)) THEN ErrorMsg = 'Unassigned Parm "WOCassNo" passed to routine. (':Method:')'
|
||||||
IF NOT(ASSIGNED(MetNo)) THEN ErrorMsg = 'Unassigned Parm "MetNo" passed to routine. (':Method:')'
|
IF NOT(ASSIGNED(MetNo)) THEN ErrorMsg = 'Unassigned Parm "MetNo" passed to routine. (':Method:')'
|
||||||
|
|
||||||
IF ErrorMsg NE '' THEN RETURN
|
IF ErrorMsg NE '' THEN RETURN
|
||||||
|
|
||||||
StepNo = 1
|
StepNo = 1
|
||||||
|
|
||||||
otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo
|
otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo
|
||||||
WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock
|
WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock
|
||||||
|
|
||||||
IF WaferIDs = '' THEN
|
IF WaferIDs = '' THEN
|
||||||
MetNos = WMInRec<WM_IN_SLOT_MET_NO$>
|
MetNos = WMInRec<WM_IN_SLOT_MET_NO$>
|
||||||
WaferIDCnt = COUNT(MetNos,@VM) + (MetNos NE '')
|
WaferIDCnt = COUNT(MetNos,@VM) + (MetNos NE '')
|
||||||
|
|
||||||
@ -921,17 +921,17 @@ IF WaferIDs = '' THEN
|
|||||||
WMInRec<WM_IN_SLOT_MET_NO$,I> = ''
|
WMInRec<WM_IN_SLOT_MET_NO$,I> = ''
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
END ELSE
|
END ELSE
|
||||||
WaferIDCnt = COUNT(WaferIDs,',') + (WaferIDs NE '')
|
WaferIDCnt = COUNT(WaferIDs,',') + (WaferIDs NE '')
|
||||||
FOR I = 1 TO WaferIDCnt
|
FOR I = 1 TO WaferIDCnt
|
||||||
WaferID = FIELD(WaferIDs,',',I)
|
WaferID = FIELD(WaferIDs,',',I)
|
||||||
SlotNo = WaferID[-1,'B.']
|
SlotNo = WaferID[-1,'B.']
|
||||||
WMInRec<WM_IN_SLOT_MET_NO$,SlotNo> = ''
|
WMInRec<WM_IN_SLOT_MET_NO$,SlotNo> = ''
|
||||||
NEXT I
|
NEXT I
|
||||||
END
|
END
|
||||||
|
|
||||||
otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec)
|
otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec)
|
||||||
obj_Tables('WriteRec',otParms)
|
obj_Tables('WriteRec',otParms)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4266,6 +4266,9 @@ SetWfrQty:
|
|||||||
CurrWfrQty = WOMatRec<WO_MAT_WAFER_QTY$>
|
CurrWfrQty = WOMatRec<WO_MAT_WAFER_QTY$>
|
||||||
CurrSlots = WOMatRec<WO_MAT_SLOT_NO$>
|
CurrSlots = WOMatRec<WO_MAT_SLOT_NO$>
|
||||||
|
|
||||||
|
ReactorType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE', 'X')
|
||||||
|
EpiPro = ( (ReactorType EQ 'EPP') or (ReactorType EQ 'EpiPro') )
|
||||||
|
|
||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
|
|
||||||
CASE WfrQty > CurrWfrQty
|
CASE WfrQty > CurrWfrQty
|
||||||
@ -4282,6 +4285,7 @@ SetWfrQty:
|
|||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
CASE WfrQty < CurrWfrQty
|
CASE WfrQty < CurrWfrQty
|
||||||
|
|
||||||
// Removing wafers
|
// Removing wafers
|
||||||
EligibleWfrList = ''
|
EligibleWfrList = ''
|
||||||
|
|
||||||
@ -4295,7 +4299,10 @@ SetWfrQty:
|
|||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
NumEligibleWfrs = DCount(EligibleWfrList, @FM)
|
NumEligibleWfrs = DCount(EligibleWfrList, @FM)
|
||||||
If NumEligibleWfrs GE WfrQty then
|
|
||||||
|
DiffQty = CurrWfrQty - WfrQty
|
||||||
|
|
||||||
|
If NumEligibleWfrs GE DiffQty then
|
||||||
// We have enough wafers, so remove enough to make cassette quantity equal the desired quantity
|
// We have enough wafers, so remove enough to make cassette quantity equal the desired quantity
|
||||||
|
|
||||||
Loop
|
Loop
|
||||||
@ -4306,16 +4313,32 @@ SetWfrQty:
|
|||||||
CurrWfrQty -= 1
|
CurrWfrQty -= 1
|
||||||
NumEligibleWfrs -= 1
|
NumEligibleWfrs -= 1
|
||||||
Repeat
|
Repeat
|
||||||
end
|
|
||||||
|
|
||||||
WOMatRec<WO_MAT_WAFER_QTY$> = WfrQty ;* Update Wafer Qty
|
WOMatRec<WO_MAT_WAFER_QTY$> = WfrQty ;* Update Wafer Qty
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'This cassette cannot be reduced to ':WfrQty:' wafers because only ':NumEligibleWfrs:' are eligible to be removed. '
|
||||||
|
end
|
||||||
|
|
||||||
END CASE
|
END CASE
|
||||||
|
|
||||||
otParms = FIELDSTORE(otParms,@RM,4,0,WOMatRec)
|
If ErrorMsg EQ '' then
|
||||||
obj_Tables('WriteRec',otParms)
|
If EpiPro then
|
||||||
|
WMIKey = WOMatRec<WO_MAT_WMI_KEY$>
|
||||||
|
If WMIKey NE '' then
|
||||||
|
WMIRec = Database_Services('ReadDataRow', 'WM_IN', WMIKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
WMIRec<WM_IN_SLOT_NO$> = WOMatRec<WO_MAT_SLOT_NO$>
|
||||||
|
Database_Services('WriteDataRow', 'WM_IN', WMIKey, WMIRec, True$, False$, True$)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
otParms = FIELDSTORE(otParms,@RM,4,0,WOMatRec)
|
||||||
|
obj_Tables('WriteRec',otParms) ; // This will release the lock
|
||||||
Result = CurrWfrQty
|
Result = CurrWfrQty
|
||||||
|
end else
|
||||||
|
RecordLocked = Database_Services('IsKeyIDLocked', 'WO_MAT', WOMatKey, False$)
|
||||||
|
If RecordLocked then Database_Services('ReleaseKeyIDLock', 'WO_MAT', WOMatKey)
|
||||||
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
@ -950,7 +950,8 @@ WRITE_RECORD:
|
|||||||
|
|
||||||
OrigDateOut = OrigRecord<RDS_DATE_OUT$>
|
OrigDateOut = OrigRecord<RDS_DATE_OUT$>
|
||||||
NewDateOut = Record<RDS_DATE_OUT$>
|
NewDateOut = Record<RDS_DATE_OUT$>
|
||||||
If ( (OrigDateOut EQ '') and (NewDateOut NE '') ) then
|
|
||||||
|
If ( ( (OrigDateOut EQ '') and (NewDateOut NE '') ) ) then
|
||||||
// Mark this cassette as processed in the schedule event record
|
// Mark this cassette as processed in the schedule event record
|
||||||
DatetimeOut = {DATETIME_OUT}
|
DatetimeOut = {DATETIME_OUT}
|
||||||
If EpiPro then
|
If EpiPro then
|
||||||
|
@ -3002,6 +3002,9 @@ Service MarkCassProcessed(WONo, CassNo, ProcessedDTM)
|
|||||||
CassComp = False$
|
CassComp = False$
|
||||||
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
||||||
If ReactType EQ 'EPP' then
|
If ReactType EQ 'EPP' then
|
||||||
|
// Since EpiPro splits WM_IN cassettes out into RDS runs, we need to determine if the
|
||||||
|
// cassette has been emptied out or if enough wafers have been consumed such that
|
||||||
|
// the wafer count equals the split work order event quantity.
|
||||||
StopDtm = SchedDetNGRec<SCHED_DET_NG.STOP_DTM$>
|
StopDtm = SchedDetNGRec<SCHED_DET_NG.STOP_DTM$>
|
||||||
SchedWfrQty = Schedule_Services('GetScheduledWfrQty', WONo, StopDtm)
|
SchedWfrQty = Schedule_Services('GetScheduledWfrQty', WONo, StopDtm)
|
||||||
// Determine the cassette and slot this event should end on. This will be used to identify
|
// Determine the cassette and slot this event should end on. This will be used to identify
|
||||||
@ -3025,7 +3028,10 @@ Service MarkCassProcessed(WONo, CassNo, ProcessedDTM)
|
|||||||
NumUnloadedWfrs += (UnloadDtm NE '')
|
NumUnloadedWfrs += (UnloadDtm NE '')
|
||||||
Next UnloadDtm
|
Next UnloadDtm
|
||||||
end
|
end
|
||||||
If ( (NumUnloadedWfrs EQ 25) or ( (CassNo EQ EndCassNo) and (NumUnloadedWfrs GE EndSlotNo) ) ) then CassComp = True$
|
CassRemWfrs = Xlate('WM_IN', WMIKey, 'REM_WFRS', 'X')
|
||||||
|
If ( (NumUnloadedWfrs EQ 25) or ( (CassNo EQ EndCassNo) and (NumUnloadedWfrs GE EndSlotNo) ) or (CassRemWfrs EQ 0) ) then
|
||||||
|
CassComp = True$
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
CassComp = True$
|
CassComp = True$
|
||||||
end
|
end
|
||||||
@ -3041,17 +3047,6 @@ Service MarkCassProcessed(WONo, CassNo, ProcessedDTM)
|
|||||||
Done = True$
|
Done = True$
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
// Mark previous cassette processed if it isn't already. This covers situations where users fail to
|
|
||||||
// sign the unload stage for a cassette.
|
|
||||||
PrevCassNo = CassNo - 1
|
|
||||||
Locate PrevCassNo in UnprocessedCassettes using @VM setting vPos then
|
|
||||||
UnprocessedCassettes = Delete(UnprocessedCassettes, 0, vPos, 0)
|
|
||||||
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
|
|
||||||
ProcessedCassettes<0, -1> = PrevCassNo
|
|
||||||
SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$> = UnprocessedCassettes
|
|
||||||
SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$> = ProcessedCassettes
|
|
||||||
Database_Services('WriteDataRow', 'SCHED_DET_NG', SchedDetNGKey, SchedDetNGRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
Until Done EQ True$
|
Until Done EQ True$
|
||||||
Repeat
|
Repeat
|
||||||
end
|
end
|
||||||
@ -3424,4 +3419,3 @@ CreateScheduleChangeNotification:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ Equ Comma$ to ','
|
|||||||
|
|
||||||
Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, Datetime
|
Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, Datetime
|
||||||
Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services
|
Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services
|
||||||
Declare subroutine Logging_Services, obj_Notes
|
Declare subroutine Logging_Services, obj_Notes, Schedule_Services
|
||||||
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WM_IN'
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WM_IN'
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
@ -160,48 +160,8 @@ WRITE_RECORD:
|
|||||||
WONo = Field(Name, '*', 1)
|
WONo = Field(Name, '*', 1)
|
||||||
CassNo = Field(Name, '*', 3)
|
CassNo = Field(Name, '*', 3)
|
||||||
ProcessedDTM = Datetime()
|
ProcessedDTM = Datetime()
|
||||||
// Find the SCHED_DET_NG event record that contains the cassette number.
|
// This service will determine if the cassette needs to be marked as complete.
|
||||||
Query = 'SELECT SCHED_DET_NG WITH WO_NO EQ ':WONo:' AND WITH UNPROCESSED_CASS CONTAINING ':CassNo
|
Schedule_Services('MarkCassProcessed', WONo, CassNo, ProcessedDtm)
|
||||||
GoSub ClearCursors
|
|
||||||
RList(Query, TARGET_ACTIVELIST$, '', '', '')
|
|
||||||
EOF = False$
|
|
||||||
Done = False$
|
|
||||||
Loop
|
|
||||||
Readnext SchedDetNGKey else EOF = True$
|
|
||||||
Until EOF = True$
|
|
||||||
SchedDetNGRec = Database_Services('ReadDataRow', 'SCHED_DET_NG', SchedDetNGKey)
|
|
||||||
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
|
|
||||||
ProcessedWfrQty = DCount(ProcessedCassettes, @VM) * 25
|
|
||||||
TotalWfrs = SchedDetNGRec<SCHED_DET_NG.EVENT_TOTAL_WFRS$>
|
|
||||||
CassRemWfrs = Xlate('WM_IN', Name, 'REM_WFRS', 'X')
|
|
||||||
ProcessedCassQty = 25 - CassRemWfrs
|
|
||||||
If (ProcessedWfrQty + ProcessedCassQty ) EQ TotalWfrs then
|
|
||||||
// Mark cassette complete.
|
|
||||||
UnprocessedCassettes = SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$>
|
|
||||||
Locate CassNo in UnprocessedCassettes using @VM setting vPos then
|
|
||||||
UnprocessedCassettes = Delete(UnprocessedCassettes, 0, vPos, 0)
|
|
||||||
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
|
|
||||||
ProcessedCassettes<0, -1> = CassNo
|
|
||||||
SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$> = UnprocessedCassettes
|
|
||||||
SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$> = ProcessedCassettes
|
|
||||||
Database_Services('WriteDataRow', 'SCHED_DET_NG', SchedDetNGKey, SchedDetNGRec, True$, False$, True$)
|
|
||||||
Done = True$
|
|
||||||
end
|
|
||||||
// Mark previous cassette processed if it isn't already. This covers situations where users fail to
|
|
||||||
// sign the unload stage for a cassette.
|
|
||||||
PrevCassNo = CassNo - 1
|
|
||||||
Locate PrevCassNo in UnprocessedCassettes using @VM setting vPos then
|
|
||||||
UnprocessedCassettes = Delete(UnprocessedCassettes, 0, vPos, 0)
|
|
||||||
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
|
|
||||||
ProcessedCassettes<0, -1> = PrevCassNo
|
|
||||||
SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$> = UnprocessedCassettes
|
|
||||||
SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$> = ProcessedCassettes
|
|
||||||
Database_Services('WriteDataRow', 'SCHED_DET_NG', SchedDetNGKey, SchedDetNGRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Until Done EQ True$
|
|
||||||
Repeat
|
|
||||||
|
|
||||||
WfrCount = DCount(Record<WM_IN_SLOT_NO$>, @VM)
|
WfrCount = DCount(Record<WM_IN_SLOT_NO$>, @VM)
|
||||||
If WfrCount LT 25 then
|
If WfrCount LT 25 then
|
||||||
@ -301,4 +261,3 @@ Restore_System_Variables:
|
|||||||
@FILE.ERROR = OrigFileError
|
@FILE.ERROR = OrigFileError
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -1055,7 +1055,3 @@ ClearCursors:
|
|||||||
Next counter
|
Next counter
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,9 +56,9 @@ $insert RLIST_EQUATES
|
|||||||
Equ Comma$ to ','
|
Equ Comma$ to ','
|
||||||
|
|
||||||
Declare function Error_Services, Database_Services, Environment_Services, Logging_Services, obj_WO_Mat, Max
|
Declare function Error_Services, Database_Services, Environment_Services, Logging_Services, obj_WO_Mat, Max
|
||||||
Declare function GaN_Services, Signature_Services, obj_WO_LOG, SRP_Array, MemberOf
|
Declare function GaN_Services, Signature_Services, obj_WO_LOG, SRP_Array, MemberOf, Datetime
|
||||||
Declare subroutine Error_Services, Database_Services, Environment_Services, Logging_Services, Obj_SAP, obj_Notes
|
Declare subroutine Error_Services, Database_Services, Environment_Services, Logging_Services, Obj_SAP, obj_Notes
|
||||||
Declare subroutine SAP_Services, Work_Order_Services, Material_Services, RList
|
Declare subroutine SAP_Services, Work_Order_Services, Material_Services, RList, Schedule_Services
|
||||||
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_Mat'
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_Mat'
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
@ -690,7 +690,7 @@ WRITE_RECORD:
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
//Original MU wafer transaction
|
// Original MU wafer transaction
|
||||||
IF OrigSAPBatchNo EQ '' AND NewSAPBatchNo NE '' then
|
IF OrigSAPBatchNo EQ '' AND NewSAPBatchNo NE '' then
|
||||||
MULotFlag = False$
|
MULotFlag = False$
|
||||||
If {REACTOR_TYPE} NE 'EPP' then
|
If {REACTOR_TYPE} NE 'EPP' then
|
||||||
@ -825,6 +825,12 @@ WRITE_RECORD:
|
|||||||
Work_Order_Services('UpdateReleasedQty', WONo)
|
Work_Order_Services('UpdateReleasedQty', WONo)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
|
||||||
|
If CurrWaferCount EQ 0 then
|
||||||
|
// This should catch cases where the entire cassette is "peeled off", NCR'ed, or used for destructive testing.
|
||||||
|
Schedule_Services('MarkCassProcessed', WONo, CassNo, Datetime())
|
||||||
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
DELETE_RECORD_PRE:
|
DELETE_RECORD_PRE:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user