Added calls to verify indexes and update indexes right after receiving and releasing material. Refactored codebase to adjust work order quantities instead of recalculate quantities.
Removing reliance on transaction queue for receive and releaase Added unlock call in case write fails
This commit is contained in:
@ -23,7 +23,7 @@ DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg,
|
||||
DECLARE SUBROUTINE obj_Order_Change, obj_Vision, obj_Notes, obj_WM_In, obj_WM_Out, Msg, obj_WO_Mat, obj_Reprocess
|
||||
DECLARE SUBROUTINE obj_WO_Wfr, obj_WO_Step, Send_Info, obj_RDS2, obj_RDS, obj_Post_Log, obj_WO_Mat_Log, Sleepery
|
||||
DECLARE SUBROUTINE Environment_Services, Logging_Services, Error_Services, Database_Services, Update_Index
|
||||
DECLARE SUBROUTINE Work_Order_Services, Delay, Transaction_Services
|
||||
DECLARE SUBROUTINE Work_Order_Services, Delay, Transaction_Services, RDS_Services, WM_In_Services, WM_Out_Services
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT ORDER_EQU
|
||||
@ -53,7 +53,7 @@ $INSERT LOGICAL
|
||||
$INSERT APPCOLORS
|
||||
$INSERT WM_IN_EQUATES
|
||||
|
||||
EQU NUM_RETRIES$ TO 50
|
||||
EQU NUM_RETRIES$ TO 60
|
||||
|
||||
EQU CRLF$ TO \0D0A\
|
||||
EQU COMMA$ TO ','
|
||||
@ -103,7 +103,7 @@ BEGIN CASE
|
||||
CASE Method = 'OpenWONos' ; GOSUB OpenWONos
|
||||
CASE Method = 'ShipWONos' ; GOSUB ShipWONos
|
||||
CASE Method = 'WOStepStatus' ; GOSUB WOStepStatus
|
||||
CASE Method = 'ReleaseCassettes' ; GOSUB ReleaseCassettes
|
||||
CASE Method = 'ReleaseCassette' ; GOSUB ReleaseCassette
|
||||
CASE Method = 'RecallWO' ; GOSUB RecallWO
|
||||
CASE Method = 'ChangeLotNo' ; GOSUB ChangeLotNo
|
||||
CASE Method = 'ChangeCassQty' ; GOSUB ChangeCassQty
|
||||
@ -967,11 +967,11 @@ RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
ReleaseCassettes:
|
||||
ReleaseCassette:
|
||||
* * * * * * *
|
||||
|
||||
WONo = Parms[1,@RM]
|
||||
CassNos = Parms[COL2()+1,@RM]
|
||||
CassNo = Parms[COL2()+1,@RM]
|
||||
ReleaseUser = Parms[COL2()+1,@RM]
|
||||
RelDtm = Parms[COL2()+1,@RM]
|
||||
|
||||
@ -979,7 +979,7 @@ ReleaseCassettes:
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<2> = ReleaseUser
|
||||
LogData<3> = WONo
|
||||
LogData<4> = 'WONo: ':WONo:' CassNos: ':CassNos:' ReleaseUser: ':ReleaseUser:' ||| Beginning ReleaseCassettes routine.'
|
||||
LogData<4> = 'WONo: ':WONo:' CassNo: ':CassNo:' ReleaseUser: ':ReleaseUser:' ||| Beginning ReleaseCassette routine.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').'
|
||||
@ -1050,12 +1050,7 @@ ReleaseCassettes:
|
||||
|
||||
OrdSummary = '' ;* Holds Order Detail Lot Numbers and Associated Order Item Numbers
|
||||
|
||||
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
|
||||
|
||||
WOMKeys = ''
|
||||
FOR K = 1 TO CassCnt
|
||||
WOMKeys<1,K> = WONo:'*':CassNos<1,K>
|
||||
NEXT K
|
||||
WOMKey = WONo:'*':CassNo
|
||||
|
||||
WOMTableVar = Database_Services('GetTableHandle', 'WO_MAT')
|
||||
|
||||
@ -1065,7 +1060,7 @@ ReleaseCassettes:
|
||||
END
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' CassNos:':CassNos:' ||| Trace 1'
|
||||
LogData<4> = 'WONo:':WONo:' CassNo:':CassNo:' ||| Trace 1'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
EpiPN = WORec<WO_LOG_EPI_PART_NO$>
|
||||
@ -1093,149 +1088,138 @@ ReleaseCassettes:
|
||||
|
||||
// Log variables before obj_WM_Out('Create')
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' WMOLoadQty:':WMOLoadQty
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
IF ReactorType = 'EPP' THEN
|
||||
Send_Info('Creating WM_OUT records for WOStep ':WOStep:'...')
|
||||
OutOnlyCassIDS = obj_WM_Out('Create',WONO:@RM:WOStep:@RM:CassNos:@RM:WMOLoadQty)
|
||||
OutOnlyCassIDs = obj_WM_Out('Create',WONO:@RM:WOStep:@RM:CassNo:@RM:WMOLoadQty)
|
||||
END ELSE
|
||||
OutOnlyCassIDs = ''
|
||||
END
|
||||
|
||||
StepRDSNos = ''
|
||||
|
||||
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
|
||||
|
||||
// Log variables after obj_WM_Out('Create')
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2'
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
FOR N = 1 TO CassCnt
|
||||
IF ReactorType EQ 'EPP' THEN
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
CassWaferQty = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WAFER_QTY$,'X')
|
||||
WMIKey = WONo:'*':WOStep:'*':CassNo
|
||||
obj_WM_IN('Create',WONo:@RM:WOStep:@RM:CassNo:@RM:CassWaferQty)
|
||||
|
||||
CassNo = CassNos<1,N>
|
||||
END ELSE
|
||||
|
||||
IF ReactorType EQ 'EPP' THEN
|
||||
WOMatRec = XLATE('WO_MAT',WoNo:'*':CassNo,'','X')
|
||||
RDSNoCheck = WOMatRec<WO_MAT_RDS_NO$>
|
||||
If RDSNoCheck EQ '' then
|
||||
|
||||
CassWaferQty = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WAFER_QTY$,'X')
|
||||
WMIKey = WONo:'*':WOStep:'*':CassNo
|
||||
obj_WM_IN('Create',WONo:@RM:WOStep:@RM:CassNo:@RM:CassWaferQty)
|
||||
CassLotNo = WOMatRec<WO_MAT_LOT_NO$>
|
||||
CassWaferQty = WOMatRec<WO_MAT_WAFER_QTY$>
|
||||
CassCustPartNo = WOMatRec<WO_MAT_CUST_PART_NO$>
|
||||
CassSubPartNo = WOMatRec<WO_MAT_SUB_PART_NO$>
|
||||
CassSubInvID = ''
|
||||
CassOrderItem = WOMatRec<WO_MAT_ORDER_ITEM$>
|
||||
ReprocessedMat = WOMatRec<WO_MAT_REPROCESSED_MAT$>
|
||||
CassSubVendCd = WOMatRec<WO_MAT_SUB_VEND_CD$>
|
||||
|
||||
END ELSE
|
||||
IF OrderNo = '' THEN
|
||||
QuoteNo = ''
|
||||
END ELSE
|
||||
QuoteNo = XLATE('ORDER_DET',OrderNo:'*':CassOrderItem,ORDER_DET_QUOTE_NO$,'X')
|
||||
END
|
||||
|
||||
WOMatRec = XLATE('WO_MAT',WoNo:'*':CassNo,'','X')
|
||||
RDSNoCheck = WOMatRec<WO_MAT_RDS_NO$>
|
||||
If RDSNoCheck EQ '' then
|
||||
Parms = WONo:@RM
|
||||
Parms := WOStep:@RM
|
||||
Parms := LastStep:@RM
|
||||
Parms := CassNo:@RM
|
||||
Parms := QuoteNo:@RM
|
||||
Parms := OrderNo:@RM
|
||||
Parms := CassOrderItem:@RM
|
||||
Parms := CustNo:@RM
|
||||
Parms := PONo:@RM
|
||||
Parms := ProcPSN:@RM
|
||||
Parms := SubSupplyBy:@RM
|
||||
Parms := SubPreClean:@RM
|
||||
Parms := SubPostClean:@RM
|
||||
Parms := PromiseDt:@RM
|
||||
Parms := CassLotNo:@RM
|
||||
Parms := CassCustPartNo:@RM
|
||||
Parms := CassWaferQty:@RM
|
||||
Parms := CassSubPartNo:@RM
|
||||
Parms := '':@RM ;* QXJ Flag
|
||||
Parms := CassSubVendCd
|
||||
|
||||
IF ReactorType NE 'GAN' then
|
||||
|
||||
CassLotNo = WOMatRec<WO_MAT_LOT_NO$>
|
||||
CassWaferQty = WOMatRec<WO_MAT_WAFER_QTY$>
|
||||
CassCustPartNo = WOMatRec<WO_MAT_CUST_PART_NO$>
|
||||
CassSubPartNo = WOMatRec<WO_MAT_SUB_PART_NO$>
|
||||
CassSubInvID = ''
|
||||
CassOrderItem = WOMatRec<WO_MAT_ORDER_ITEM$>
|
||||
ReprocessedMat = WOMatRec<WO_MAT_REPROCESSED_MAT$>
|
||||
CassSubVendCd = WOMatRec<WO_MAT_SUB_VEND_CD$>
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.1 - Start obj_RDS("Create")'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
Done = False$
|
||||
For AttemptIndex = 1 to NUM_RETRIES$
|
||||
If (AttemptIndex GT 1) then Delay(1)
|
||||
NewRDSNo = obj_RDS('Create',Parms)
|
||||
errCode = ''
|
||||
Begin Case
|
||||
Case Get_Status(errCode)
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Error message: ':errCode
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
Case (NewRDSNo EQ 0) or (NewRDSNo EQ '')
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Invalid RDSNo ':Quote(RDSNo):' returned.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
Case RowExists('RDS', NewRDSNo)
|
||||
Done = True$
|
||||
End Case
|
||||
Until Done
|
||||
Next AttemptIndex
|
||||
|
||||
IF OrderNo = '' THEN
|
||||
QuoteNo = ''
|
||||
END ELSE
|
||||
QuoteNo = XLATE('ORDER_DET',OrderNo:'*':CassOrderItem,ORDER_DET_QUOTE_NO$,'X')
|
||||
END
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.2 - End obj_RDS("Create")'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
Parms = WONo:@RM
|
||||
Parms := WOStep:@RM
|
||||
Parms := LastStep:@RM
|
||||
Parms := CassNo:@RM
|
||||
Parms := QuoteNo:@RM
|
||||
Parms := OrderNo:@RM
|
||||
Parms := CassOrderItem:@RM
|
||||
Parms := CustNo:@RM
|
||||
Parms := PONo:@RM
|
||||
Parms := ProcPSN:@RM
|
||||
Parms := SubSupplyBy:@RM
|
||||
Parms := SubPreClean:@RM
|
||||
Parms := SubPostClean:@RM
|
||||
Parms := PromiseDt:@RM
|
||||
Parms := CassLotNo:@RM
|
||||
Parms := CassCustPartNo:@RM
|
||||
Parms := CassWaferQty:@RM
|
||||
Parms := CassSubPartNo:@RM
|
||||
Parms := '':@RM ;* QXJ Flag
|
||||
Parms := CassSubVendCd
|
||||
|
||||
IF ReactorType NE 'GAN' then
|
||||
If ( (NewRDSNo EQ 0) or (NewRDSNo EQ '') ) then
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.1 - Start obj_RDS("Create")'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
Done = False$
|
||||
For AttemptIndex = 1 to NUM_RETRIES$
|
||||
If (AttemptIndex GT 1) then Delay(AttemptIndex)
|
||||
NewRDSNo = obj_RDS('Create',Parms)
|
||||
errCode = ''
|
||||
Begin Case
|
||||
Case Get_Status(errCode)
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Error message: ':errCode
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
Case (NewRDSNo EQ 0) or (NewRDSNo EQ '')
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.1.1 - Attempt ':AttemptIndex:'. Error calling obj_RDS("Create"). Invalid RDSNo ':Quote(RDSNo):' returned.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
Case RowExists('RDS', NewRDSNo)
|
||||
Done = True$
|
||||
End Case
|
||||
Until Done
|
||||
Next AttemptIndex
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 2.':N:'.2 - End obj_RDS("Create")'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
If ( (NewRDSNo EQ 0) or (NewRDSNo EQ '') ) then
|
||||
|
||||
ErrMsg(errCode)
|
||||
ErrorMsg = "RDS '" : NewRDSNo : "' Create Failure - Check for missing data on Work Order"
|
||||
If Error_Services('HasError') then
|
||||
ErrMsg = Error_Services('GetMessage')
|
||||
LogData = LoggingDTM : ',' : ReleaseUser : ',' : WONo : ',' : ErrMsg
|
||||
Logging_Services('AppendLog', objLog, LogData, CRLF$, COMMA$, False$, '', LogData)
|
||||
end
|
||||
|
||||
RTParms = 'RDS'
|
||||
FOR I = 1 TO COUNT(StepRdsNos,@VM) + (StepRdsNos NE '')
|
||||
RdsNo = StepRdsNos<1,I>
|
||||
RTParms = FieldStore(RTParms, @RM, 2, 1, RdsNo)
|
||||
obj_Tables('DeleteRec',RTParms)
|
||||
NEXT I
|
||||
RETURN
|
||||
END else
|
||||
// No error creating RDS record -> add it to the batch list.
|
||||
StepRDSNos<1,-1> = NewRDSNo
|
||||
ErrMsg(errCode)
|
||||
ErrorMsg = "RDS '" : NewRDSNo : "' Create Failure - Check for missing data on Work Order"
|
||||
If Error_Services('HasError') then
|
||||
ErrMsg = Error_Services('GetMessage')
|
||||
LogData = LoggingDTM : ',' : ReleaseUser : ',' : WONo : ',' : ErrMsg
|
||||
Logging_Services('AppendLog', objLog, LogData, CRLF$, COMMA$, False$, '', LogData)
|
||||
end
|
||||
|
||||
IF ReprocessedMat THEN
|
||||
OrgRDSNo = CassLotNo
|
||||
obj_Reprocess('FixUp',OrgRDSNo:@RM:NewRDSNo)
|
||||
END
|
||||
|
||||
END ;* End of check for GAN reactor
|
||||
END ;* End of Check for existing RDS
|
||||
END ;* End of check for EpiPRO reactor type
|
||||
NEXT N
|
||||
RTParms = 'RDS'
|
||||
FOR I = 1 TO COUNT(StepRdsNos,@VM) + (StepRdsNos NE '')
|
||||
RdsNo = StepRdsNos<1,I>
|
||||
RTParms = FieldStore(RTParms, @RM, 2, 1, RdsNo)
|
||||
obj_Tables('DeleteRec',RTParms)
|
||||
NEXT I
|
||||
RETURN
|
||||
END else
|
||||
// No error creating RDS record -> add it to the batch list.
|
||||
StepRDSNos<1,-1> = NewRDSNo
|
||||
end
|
||||
|
||||
IF ReprocessedMat THEN
|
||||
OrgRDSNo = CassLotNo
|
||||
obj_Reprocess('FixUp',OrgRDSNo:@RM:NewRDSNo)
|
||||
END
|
||||
|
||||
END ;* End of check for GAN reactor
|
||||
END ;* End of Check for existing RDS
|
||||
END ;* End of check for EpiPRO reactor type
|
||||
NEXT WOStep
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3'
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
If RelDtm EQ '' then
|
||||
@ -1251,95 +1235,91 @@ ReleaseCassettes:
|
||||
|
||||
MaxShipQty = Xlate('WO_LOG', WONo, 'CUST_EPI_PART_SHIP_QTY', 'X')
|
||||
|
||||
FOR N = 1 TO CassCnt
|
||||
WOMKey = WOMKeys<1,N>
|
||||
CassNo = FIELD(WOMKey,'*',2)
|
||||
// Keep trying to get the lock. Another process may be updating this record at the same time.
|
||||
Done = False$
|
||||
For AttemptIndex = 1 to NUM_RETRIES$
|
||||
CassNo = FIELD(WOMKey,'*',2)
|
||||
// Keep trying to get the lock. Another process may be updating this record at the same time.
|
||||
Done = False$
|
||||
For AttemptIndex = 1 to NUM_RETRIES$
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
If (AttemptIndex GT 1) then Delay(1)
|
||||
HaveLock = Database_Services('GetKeyIDLock', 'WO_MAT', WOMKey, True$)
|
||||
If HaveLock then
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
If (AttemptIndex GT 1) then Delay(AttemptIndex)
|
||||
HaveLock = Database_Services('GetKeyIDLock', 'WO_MAT', WOMKey)
|
||||
If HaveLock then
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Have lock!'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
WOMatRec = XLATE('WO_MAT',WOMKey,'','X') ;* We have the lock, so just get the record this way
|
||||
|
||||
IF WOMatRec<WO_MAT_REL_DTM$> = '' THEN
|
||||
WOMatRec<WO_MAT_REL_DTM$> = IConv(RelDTM,'DT')
|
||||
WOMatRec<WO_MAT_REL_BY$> = ReleaseUser
|
||||
WOMatRec<WO_MAT_ORG_COMMIT_DT$> = PromiseDt
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Have lock!'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
IF SubPreClean = 'No' OR SubPreClean = '' THEN
|
||||
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'RTU'
|
||||
END ELSE
|
||||
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'PREC'
|
||||
END
|
||||
|
||||
WOMatRec = XLATE('WO_MAT',WOMKey,'','X') ;* We have the lock, so just get the record this way
|
||||
WOMatRec<WO_MAT_WMO_CURR_STATUS$> = 'RTB'
|
||||
|
||||
IF WOMatRec<WO_MAT_REL_DTM$> = '' THEN
|
||||
WOMatRec<WO_MAT_REL_DTM$> = IConv(RelDTM,'DT')
|
||||
WOMatRec<WO_MAT_REL_BY$> = ReleaseUser
|
||||
WOMatRec<WO_MAT_ORG_COMMIT_DT$> = PromiseDt
|
||||
thisInvDTM = ICONV(RelDTM,'DT')
|
||||
|
||||
WHCd = 'SR'
|
||||
LocCd = 'RB'
|
||||
InvAction = 'REL'
|
||||
ScanUserID = ReleaseUser
|
||||
Tag = ''
|
||||
ToolID = ''
|
||||
|
||||
LOCATE thisInvDTM IN WOMatRec<WO_MAT_INV_DTM$> BY 'AR' USING @VM SETTING Pos ELSE
|
||||
|
||||
IF SubPreClean = 'No' OR SubPreClean = '' THEN
|
||||
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'RTU'
|
||||
END ELSE
|
||||
WOMatRec<WO_MAT_WMI_CURR_STATUS$> = 'PREC'
|
||||
END
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_WH$,Pos,0,WHCd)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_LOCATION$,Pos,0,LocCd)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_ACTION$,Pos,0,InvAction)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_DTM$,Pos,0,thisInvDTM)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_USER$,Pos,0,ScanUserID)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TAG$,Pos,0,Tag)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TOOL_ID$,Pos,0,ToolID)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_SCAN_ENTRY$,Pos,0,False$)
|
||||
|
||||
WOMatRec<WO_MAT_WMO_CURR_STATUS$> = 'RTB'
|
||||
|
||||
thisInvDTM = ICONV(RelDTM,'DT')
|
||||
|
||||
WHCd = 'SR'
|
||||
LocCd = 'RB'
|
||||
InvAction = 'REL'
|
||||
ScanUserID = ReleaseUser
|
||||
Tag = ''
|
||||
ToolID = ''
|
||||
|
||||
LOCATE thisInvDTM IN WOMatRec<WO_MAT_INV_DTM$> BY 'AR' USING @VM SETTING Pos ELSE
|
||||
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_WH$,Pos,0,WHCd)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_LOCATION$,Pos,0,LocCd)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_ACTION$,Pos,0,InvAction)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_DTM$,Pos,0,thisInvDTM)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_USER$,Pos,0,ScanUserID)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TAG$,Pos,0,Tag)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TOOL_ID$,Pos,0,ToolID)
|
||||
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_SCAN_ENTRY$,Pos,0,False$)
|
||||
|
||||
END
|
||||
|
||||
WOMatParms = 'WO_MAT':@RM:WOMKey:@RM:WOMTableVar:@RM:WOMatRec
|
||||
obj_Tables('WriteRec',WOMatParms) ;* This writes and unlocks the WO_MAT records
|
||||
|
||||
If Not(Get_Status(errCode)) then
|
||||
Done = True$
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Successfully updated WO_MAT record ':WOMKey:' with REL operation.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
end else
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Failed to update WO_MAT record ':WOMKey:' with REL operation.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
end
|
||||
|
||||
IF ReactType = 'EPP' OR ReactType = 'GAN' THEN
|
||||
obj_WO_Wfr('CassRel',WOMKey) ;* Added 3/17/2016 JCH for wafer history
|
||||
END
|
||||
END else
|
||||
END
|
||||
|
||||
WOMatParms = 'WO_MAT':@RM:WOMKey:@RM:WOMTableVar:@RM:WOMatRec
|
||||
obj_Tables('WriteRec',WOMatParms) ;* This writes and unlocks the WO_MAT records
|
||||
|
||||
If Not(Get_Status(errCode)) then
|
||||
Done = True$
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Error! REL_DTM is not null.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Successfully updated WO_MAT record ':WOMKey:' with REL operation.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
end else
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Failed to update WO_MAT record ':WOMKey:' with REL operation.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
end
|
||||
|
||||
IF ReactType = 'EPP' OR ReactType = 'GAN' THEN
|
||||
obj_WO_Wfr('CassRel',WOMKey) ;* Added 3/17/2016 JCH for wafer history
|
||||
END
|
||||
END else
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 3.':AttemptIndex:' Error! REL_DTM is not null.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
end
|
||||
Until Done
|
||||
Next AttemptIndex
|
||||
end
|
||||
Until Done
|
||||
Next AttemptIndex
|
||||
|
||||
NEXT N
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 4'
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 4'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
OutOnlyCnt = COUNT(OutOnlyCassIDs,@VM) + (OutOnlyCassIDs NE '')
|
||||
OutOnlyCnt = DCount(OutOnlyCassIDs, @VM)
|
||||
ExistingWOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
||||
NewWOMatKeys = ExistingWOMatKeys
|
||||
FOR I = 1 TO OutOnlyCnt
|
||||
@ -1351,7 +1331,7 @@ ReleaseCassettes:
|
||||
NEXT I
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Trace 5'
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Trace 5'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
ReactNos = obj_Sched('GetReactNos',WONo) ; // 5/26/2-15 JCH Added schedule ReactNos and check for WO_START_DTM$
|
||||
@ -1401,12 +1381,12 @@ ReleaseCassettes:
|
||||
|
||||
If ErrorMsg NE '' then
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Error Message: ':ErrorMsg
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Error Message: ':ErrorMsg
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
end
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNos:':CassNos:' CassCnt:':CassCnt:' WMOLoadQty:':WMOLoadQty:' ||| Ending ReleaseCassettes routine'
|
||||
LogData<4> = 'WONo:':WONo:' WOStep:':WOStep:' CassNo:':CassNo:' WMOLoadQty:':WMOLoadQty:' ||| Ending ReleaseCassette routine'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
||||
|
||||
RETURN
|
||||
@ -2348,7 +2328,6 @@ Route:
|
||||
|
||||
IF Get_Status(errCode) THEN RETURN
|
||||
|
||||
|
||||
WOStepKeys = WOLogRec<WO_LOG_WO_STEP_KEY$>
|
||||
|
||||
IF WOStepKeys NE '' THEN
|
||||
@ -2386,7 +2365,6 @@ Route:
|
||||
|
||||
DefWMOCassQtys = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,CUST_EPI_PART_WMO_LOAD_CNT$,'X')
|
||||
|
||||
|
||||
WOStepKeys = ''
|
||||
DefWMOCassQty = ''
|
||||
|
||||
@ -2418,8 +2396,43 @@ Route:
|
||||
WOLogRec<WO_LOG_CUST_PART_NO$> = EpiPN
|
||||
END
|
||||
|
||||
WOLogRec<WO_LOG_PROD_VER_NO$> = ProdVerNo
|
||||
WOLogRec<WO_LOG_CUST_NO$> = CustNo
|
||||
WOLogRec<WO_LOG_PROD_VER_NO$> = ProdVerNo
|
||||
WOLogRec<WO_LOG_CUST_NO$> = CustNo
|
||||
|
||||
WOQty = WOLogRec<WO_LOG_WO_QTY$>
|
||||
If WOQty EQ '' then
|
||||
WOQty = 0
|
||||
WOLogRec<WO_LOG_WO_QTY$> = WOQty
|
||||
end
|
||||
RxQty = WOLogRec<WO_LOG_RX_QTY_STATIC$>
|
||||
If RxQty EQ '' then
|
||||
RxQty = 0
|
||||
WOLOgRec<WO_LOG_RX_QTY_STATIC$> = RxQty
|
||||
end
|
||||
RelQty = WOLogRec<WO_LOG_REL_QTY_STATIC$>
|
||||
If RelQty EQ '' then
|
||||
RelQty = 0
|
||||
WOLogRec<WO_LOG_REL_QTY_STATIC$> = RelQty
|
||||
end
|
||||
UnRelQty = WOLogRec<WO_LOG_UNREL_QTY_STATIC$>
|
||||
If UnRelQty EQ '' then
|
||||
UnRelQty = WOQty - RelQty
|
||||
end
|
||||
OpenQty = WOLogRec<WO_LOG_OPEN_QTY_STATIC$>
|
||||
If OpenQty EQ '' then
|
||||
OpenQty = WOQty - RxQty
|
||||
WOLogRec<WO_LOG_OPEN_QTY_STATIC$> = OpenQty
|
||||
end
|
||||
ScrapQty = WOLogRec<WO_LOG_SCRAP_QTY_STATIC$>
|
||||
If ScrapQty EQ '' then
|
||||
ScrapQty = 0
|
||||
WOLogRec<WO_LOG_SCRAP_QTY_STATIC$> = ScrapQty
|
||||
end
|
||||
ShippedQty = WOLogRec<WO_LOG_STATIC_SHIP_QTY$>
|
||||
If ShippedQty EQ '' then
|
||||
ShippedQty = 0
|
||||
WOLogRec<WO_LOG_STATIC_SHIP_QTY$> = ShippedQty
|
||||
end
|
||||
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,WOLogRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
|
||||
Reference in New Issue
Block a user