added logic to RDS_ACTIONS to restore load signatures if erased unexpectedly
refactored solution to leverage the LOT and LOT_EVENT tables minor fix
This commit is contained in:
parent
b84cfb970f
commit
24a246a99b
@ -794,7 +794,7 @@ CreateRDS:
|
||||
CassSubPartNo = WOMatRec<WO_MAT_SUB_PART_NO$>
|
||||
CassSubInvID = '' ;* This isn't being used
|
||||
CassOrderItem = WOMatRec<WO_MAT_ORDER_ITEM$>
|
||||
|
||||
CassSubVendCode = WOMatRec<WO_MAT_SUB_VEND_CD$>
|
||||
|
||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
||||
|
||||
@ -845,7 +845,9 @@ CreateRDS:
|
||||
Parms := CassLotNo:@RM
|
||||
Parms := CassPartNo:@RM
|
||||
Parms := CassWaferQty:@RM
|
||||
Parms := CassSubPartNo
|
||||
Parms := CassSubPartNo:@RM
|
||||
Parms := '':@RM ; // QXJ flag
|
||||
Parms := CassSubVendCode
|
||||
|
||||
RDSNo = obj_RDS('Create',Parms)
|
||||
|
||||
@ -1015,3 +1017,4 @@ RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -28,7 +28,7 @@ LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' L
|
||||
Headers = 'Logging DTM' : @FM : 'Lot Id' : @FM : 'Event Type' : @FM : 'Operator' : @FM : 'Begin Wafer Qty' : @FM : 'End Wafer Qty' : @FM : 'Bonus Wafer Qty' : @FM : 'Reduce Wafer Qty' : @FM : 'Message'
|
||||
objLotEventLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
|
||||
|
||||
Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION'
|
||||
Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD'
|
||||
Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN'
|
||||
|
||||
GoToService
|
||||
@ -78,6 +78,145 @@ Service GenerateNewLotId(LotType)
|
||||
Response = NewLotID
|
||||
end service
|
||||
|
||||
|
||||
Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId)
|
||||
; //649491 , 03M6241, 814474, SP
|
||||
CreatedLotNumber = ''
|
||||
ErrorMessage = ''
|
||||
Begin Case
|
||||
Case LotType EQ 'RDS'
|
||||
NewLotId = LotId
|
||||
If NewLotId NE '' then
|
||||
If RowExists('LOT', NewLotId) EQ False$ then
|
||||
LotRec = ''
|
||||
LotRec<LOT_TYPE$> = LotType
|
||||
LotRec<LOT_PROD_ID$> = ''
|
||||
LotRec<LOT_ORIG_WAFER_QTY$> = LotQty
|
||||
LotRec<LOT_WAFER_QTY$> = LotQty
|
||||
LotRec<LOT_VENDOR_PART_NO$> = VendorPartNo
|
||||
LotRec<LOT_VENDOR_LOT_NO$> = VendorLotNo
|
||||
LotRec<LOT_VENDOR_CODE$> = VendorCode
|
||||
Database_Services('WriteDataRow', 'LOT', NewLotId, LotRec)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = 'Error in ':Service:' service. ':Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in ':Service:' service. LOT record "':NewLotId:'" already exists.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in ':Service:' service. No lot ID passed in.'
|
||||
end
|
||||
Case LotType EQ 'TW'
|
||||
If ProdName NE '' then
|
||||
TWProdID = Test_Wafer_Prod_Services('GetTestWaferProdIDsByPartName', ProdName)
|
||||
If TWProdID NE '' then
|
||||
If DCount(TWProdID, @VM) EQ 1 then
|
||||
NewLotId = Lot_Services('GenerateNewLotId', 'TW');//Don't use this
|
||||
If NewLotId NE '' then
|
||||
If RowExists('LOT', NewLotId) then
|
||||
LotRec = Database_Services('ReadDataRow', 'LOT', NewLotId)
|
||||
//Ensure the lot record is empty
|
||||
If LotRec<LOT_TYPE$> EQ '' AND LotRec<LOT_PROD_ID$> EQ '' AND LotRec<LOT_ORIG_WAFER_QTY$> EQ '' AND LotRec<LOT_WAFER_QTY$> EQ '' then
|
||||
LotRec<LOT_TYPE$> = LotType
|
||||
LotRec<LOT_PROD_ID$> = TWProdID
|
||||
LotRec<LOT_ORIG_WAFER_QTY$> = LotQty
|
||||
LotRec<LOT_WAFER_QTY$> = LotQty
|
||||
LotRec<LOT_VENDOR_PART_NO$> = VendorPartNo
|
||||
LotRec<LOT_VENDOR_LOT_NO$> = VendorLotNo
|
||||
LotRec<LOT_VENDOR_CODE$> = VendorCode
|
||||
Database_Services('WriteDataRow', 'LOT', NewLotId, LotRec)
|
||||
//Now Ensure that the written lot matches what was just written
|
||||
LotRecCheck = Database_Services('ReadDataRow', 'LOT', NewLotId)
|
||||
If LotRecCheck EQ LotRec then
|
||||
//Lot Created successfully
|
||||
CreatedLotNumber = NewLotId
|
||||
If RowExists('LOT', CreatedLotNumber) then
|
||||
Lot_Services('CreateInitialLotOperationRecords', CreatedLotNumber)
|
||||
If Error_Services('NoError') then
|
||||
//Check in at first operation
|
||||
//Get Curr Operation(Should be first one in sequence)
|
||||
ThisLotCurrOpId = Lot_Services('GetLotCurrOperation', CreatedLotNumber)
|
||||
If ThisLotCurrOpId NE '' then
|
||||
Lot_Services('MoveInLot', NewLotId, LotQty, Username)
|
||||
if Error_Services('NoError') then
|
||||
//Set lot to open
|
||||
Lot_Services('OpenLot', CreatedLotNumber)
|
||||
if Error_Services('NoError') then
|
||||
If PrinterID NE 'WEB' then
|
||||
//If PrinterID is set to WEB this means the request comes from OI_Wizard and the client is going to handle printing.
|
||||
Labeling_Services('PrintTestWaferLotLabel', CreatedLotNumber, Username, PrinterID)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : CreatedLotNumber : ' , ' : Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
Lot_Services('MoveOutLot', NewLotId, LotQty, Username)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Services('MoveInLot', NewLotId, LotQty, Username)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, error getting current operation for lot: ' : NewLotId
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, Lot attributes did not write correctly for lot: ' : NewLotId
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, Lot already had data, lot: ' : NewLotId
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, Created lot: ' : NewLotId : ' not found in LOT table.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, no lot id returned.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, ambiguous product passed to routine OR no matching products found.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create New Test Wafer Lot Process, product(':ProdName:') passed to routine not found.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Null value passed in for ProdID'
|
||||
end
|
||||
Case Otherwise$
|
||||
ErrorMessage = 'Error in ':Service:' service. Lot Type "':LotType:'" is not currently supported.'
|
||||
End Case
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = ProdName
|
||||
LogData<3> = Username
|
||||
LogData<4> = 'Successfully created lot id ' : CreatedLotNumber : ' of product type ' : ProdName '.'
|
||||
Logging_Services('AppendLog', objTWCreationLog, LogData, @RM, @FM, False$)
|
||||
end else
|
||||
Error_Services('Add', ErrorMessage)
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = ProdName
|
||||
LogData<3> = Username
|
||||
LogData<4> = ErrorMessage
|
||||
Logging_Services('AppendLog', objTWCreationLog, LogData, @RM, @FM, False$)
|
||||
end
|
||||
Response = CreatedLotNumber
|
||||
|
||||
End Service
|
||||
|
||||
|
||||
Service CreateNewTestWaferLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID)
|
||||
CreatedLotNumber = ''
|
||||
ErrorMessage = ''
|
||||
@ -511,6 +650,7 @@ Service MoveOutLot(LotID, WaferQty, Operator)
|
||||
end service
|
||||
|
||||
Service CreateLotEvent(LotId, LotType=LOT_TYPES, EventDatetime, EventType=EVENT_TYPES, EventNote, EventEquipmentId, ReduceWaferQty, BonusWaferQty, OperationId, OperatorId)
|
||||
|
||||
ErrorMessage = ''
|
||||
BeginWaferQty = ''
|
||||
EndWaferQty = ''
|
||||
@ -574,7 +714,55 @@ Service CreateLotEvent(LotId, LotType=LOT_TYPES, EventDatetime, EventType=EVENT_
|
||||
ErrorMessage = 'Error in Create Lot Event routine, Missing event type or Operator ID.'
|
||||
end
|
||||
Case LotType EQ 'RDS'
|
||||
ErrorMessage = 'Error in Create Lot Event routine, Lot type RDS was passed to routine and this is currently not supported.'
|
||||
If EventType NE '' AND OperatorId NE '' then
|
||||
If RowExists('LOT', LotId) then
|
||||
ValidId = False$
|
||||
NewEventId = ''
|
||||
Loop
|
||||
NewEventId = RTI_CreateGUID()
|
||||
If Not(RowExists('LOT_EVENT', NewEventId)) then
|
||||
ValidId = True$
|
||||
end
|
||||
Until ValidId EQ True$
|
||||
Repeat
|
||||
BeginWaferQty = Xlate('LOT', LotId, LOT_WAFER_QTY$, 'X')
|
||||
If ReduceWaferQty NE '' then
|
||||
If Num(ReduceWaferQty) then
|
||||
EndWaferQty = BeginWaferQty - ReduceWaferQty
|
||||
end
|
||||
end
|
||||
If BonusWaferQty NE '' then
|
||||
If Num(BonusWaferQty) then
|
||||
EndWaferQty = BeginWaferQty + BonusWaferQty
|
||||
end
|
||||
end
|
||||
If Not(Num(EventDatetime)) then EventDatetime = IConv(EventDatetime, 'DT')
|
||||
NewEventRec = ''
|
||||
NewEventRec<LOT_EVENT_LOT_ID$> = LotId
|
||||
NewEventRec<LOT_EVENT_LOT_EVENT_TYPE$> = EventType
|
||||
NewEventRec<LOT_EVENT_EVENT_DATETIME$> = EventDatetime
|
||||
NewEventRec<LOT_EVENT_EVENT_NOTE$> = EventNote
|
||||
NewEventRec<LOT_EVENT_EQUIPMENT_ID$> = EventEquipmentId
|
||||
NewEventRec<LOT_EVENT_EVENT_REDUCE_WAFER_QTY$> = ReduceWaferQty
|
||||
NewEventRec<LOT_EVENT_EVENT_BONUS_WAFER_QTY$> = BonusWaferQty
|
||||
NewEventRec<LOT_EVENT_EVENT_BEGIN_WAFER_QTY$> = BeginWaferQty
|
||||
NewEventRec<LOT_EVENT_EVENT_END_WAFER_QTY$> = EndWaferQty
|
||||
NewEventRec<LOT_EVENT_EVENT_OPERATION_ID$> = OperationId
|
||||
NewEventRec<LOT_EVENT_EVENT_OPERATOR_ID$> = OperatorId
|
||||
NewEventSequence = Lot_Services('GetLotEventNextSequence', LotId)
|
||||
NewEventRec<LOT_EVENT_SEQUENCE$> = NewEventSequence
|
||||
|
||||
Database_Services('WriteDataRow', 'LOT_EVENT', NewEventId, NewEventRec)
|
||||
if Error_Services('HasError') then
|
||||
ErrorMessage = 'Error in Create Lot Event routine, Error writing Lot Event record, ' : Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create Lot Event routine, Lot Id passed to routine was not found in LOT table.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error in Create Lot Event routine, Missing event type or Operator ID.'
|
||||
end
|
||||
|
||||
Case LotType EQ 'WM_OUT'
|
||||
ErrorMessage = 'Error in Create Lot Event routine, Lot type WM_OUT was passed to routine and this is currently not supported.'
|
||||
Case LotType EQ 'WM_IN'
|
||||
@ -799,3 +987,4 @@ end service
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -21,7 +21,7 @@ DECLARE FUNCTION obj_RDS2, obj_RDS_Test, obj_WO_Mat, obj_Clean_Insp, obj_PRS_Pro
|
||||
DECLARE FUNCTION Logging_Services, Environment_Services, Error_Services, Signature_Services
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, obj_WM_In
|
||||
DECLARE SUBROUTINE Btree.Extract, RDS_React_Run, Environment_Services, Logging_Services, Error_Services, Send_Info
|
||||
DECLARE SUBROUTINE SRP_Stopwatch, Database_Services
|
||||
DECLARE SUBROUTINE SRP_Stopwatch, Database_Services, Lot_Services
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT WO_VERIFY_EQU
|
||||
@ -264,6 +264,7 @@ Create:
|
||||
WaferQty = Parms[COL2()+1,@RM]
|
||||
SubPartNo = Parms[COL2()+1,@RM]
|
||||
QXJFlag = Parms[COL2()+1,@RM]
|
||||
SubVendCd = Parms[COL2()+1,@RM]
|
||||
|
||||
ErrorMsg = ''
|
||||
IF WONo = '' THEN ErrorMsg := 'Null Parameter "WONo" passed to routine. (':Method:')'
|
||||
@ -499,6 +500,7 @@ Create:
|
||||
Logging_Services('AppendLog', objLog, LoggingDTM : ',' : @USER4 : ',' : RDSNo : ',' : 'Error writing new RDS record. Error code: ':errCode)
|
||||
Result = ''
|
||||
END ELSE
|
||||
Lot_Services('CreateNewLot', 'RDS', '', WaferQty, SubPartNo, LotNo, SubVendCd, @User4, '', RDSNo)
|
||||
Result = RDSNo
|
||||
END
|
||||
|
||||
@ -1471,3 +1473,4 @@ CalcThickTarget:
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
@ -1096,6 +1096,7 @@ FOR WOStep = 1 TO WOStepCnt
|
||||
CassSubInvID = ''
|
||||
CassOrderItem = WOMatRec<WO_MAT_ORDER_ITEM$>
|
||||
ReprocessedMat = WOMatRec<WO_MAT_REPROCESSED_MAT$>
|
||||
CassSubVendCd = WOMatRec<WO_MAT_SUB_VEND_CD$>
|
||||
|
||||
IF OrderNo = '' THEN
|
||||
QuoteNo = ''
|
||||
@ -1121,7 +1122,8 @@ FOR WOStep = 1 TO WOStepCnt
|
||||
Parms := CassCustPartNo:@RM
|
||||
Parms := CassWaferQty:@RM
|
||||
Parms := CassSubPartNo:@RM
|
||||
Parms := '' ;* QXJ Flag
|
||||
Parms := '':@RM ;* QXJ Flag
|
||||
Parms := CassSubVendCd
|
||||
|
||||
Send_Info('Creating RDS for Cass No: ':CassNo:'...') ;** - Messaging - **
|
||||
|
||||
@ -3016,3 +3018,4 @@ RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -143,7 +143,7 @@ Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_
|
||||
Declare subroutine Set_Status, Sleepery, Winyield, Yield, SRP_COM, QA_Services, Logging_Services, Obj_RDS
|
||||
Declare subroutine Validate, obj_WO_Mat, obj_WO_Mat_Log, obj_React_Status, Record_Lock, obj_React_State, obj_Post_Log
|
||||
Declare subroutine RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch
|
||||
Declare subroutine Override_Services, Reactor_Services
|
||||
Declare subroutine Override_Services, Reactor_Services, Lot_Services
|
||||
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
|
||||
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
|
||||
Declare function Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClient_Services, Obj_RDS, SQL_Services
|
||||
@ -2517,6 +2517,8 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
return
|
||||
end else
|
||||
Lot_Services('CreateLotEvent', RDSNo, 'RDS', Datetime(), 'LOAD', 'Load stage signed', Reactor, '', '', '', Username)
|
||||
end
|
||||
|
||||
IF ReactorType NE 'EPP' THEN
|
||||
@ -2541,7 +2543,6 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
|
||||
SigTime = RDSRec<RDS_TIME_IN$>
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'LOAD':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
||||
* Sets LOAD signature
|
||||
* obj_WO_Mat('SetSignature',owmParms)
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
|
||||
Error_Services('Set', ErrorMsg)
|
||||
@ -2659,10 +2660,6 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
|
||||
IdleTime = obj_React_Status('ReactorLoad',Reactor:@RM:WONo:@RM:InCassettes:@RM:LoadDTM:@RM:RDSNo)
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
* ErrorMsg = 'Process Error: Error calling obj_React_Status("ReactorLoad"). Error code: ':errCode
|
||||
* Error_Services('Set', ErrorMsg)
|
||||
* Response = False$
|
||||
* Return
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = @User4
|
||||
@ -3904,3 +3901,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -58,12 +58,13 @@ $Insert QA_MET_EQUATES
|
||||
$Insert PRS_STAGE_EQUATES
|
||||
$Insert WO_MAT_EQUATES
|
||||
$Insert WO_MAT_QA_EQUATES
|
||||
$Insert LOT_EVENT_EQUATES
|
||||
|
||||
Equ COMMA$ to ','
|
||||
|
||||
Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services, SRP_Math
|
||||
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services, obj_WO_Mat
|
||||
Declare function Rds_Services
|
||||
Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services
|
||||
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services
|
||||
Declare function Rds_Services, SRP_DateTime, SRP_Math, obj_WO_Mat, Lot_Services, SRP_Array
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services
|
||||
Declare subroutine Work_Order_Services, Material_Services, Set_FSError
|
||||
|
||||
@ -86,8 +87,6 @@ Headers = 'Logging DTM' : @FM : 'Results'
|
||||
ColumnWidths = 20 : @FM : 100
|
||||
objLog2 = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||
|
||||
|
||||
|
||||
If KeyID then GoSub Initialize_System_Variables
|
||||
|
||||
Begin Case
|
||||
@ -691,6 +690,46 @@ WRITE_RECORD_PRE:
|
||||
PostDTM = IConv(OConv({POST_EPI_SIG_DATE}, 'D'):' ':OConv({POST_EPI_SIG_TIME}, 'MT'), 'DT')
|
||||
FQADTM = IConv(OConv({SUP_VER_SIG_DATE}, 'D'):' ':OConv({SUP_VER_SIG_TIME}, 'MT'), 'DT')
|
||||
|
||||
If NewLoadSig EQ '' then
|
||||
// Audit the LOT_EVENT table for missing LOAD event (i.e., signature)
|
||||
If RowExists('LOT', RDSNo) then
|
||||
LotEvents = Lot_Services('GetLotEventsInSequence', RDSNo)
|
||||
If LotEvents NE '' then
|
||||
LotEventsRev = SRP_Array('Reverse', LotEvents, @FM)
|
||||
LotEventsTypesRev = Xlate('LOT_EVENT', LotEventsRev, LOT_EVENT_LOT_EVENT_TYPE$, 'X')
|
||||
If LotEventsTypesRev NE '' then
|
||||
Done = False$
|
||||
For each LotEventType in LotEventsTypesRev using @FM setting EventPos
|
||||
Begin Case
|
||||
Case LotEventType EQ 'LOAD'
|
||||
Done = True$
|
||||
If NewLoadSig EQ '' then
|
||||
// Load signature is missing from RDS record
|
||||
NewLoadSig = Xlate('LOT_EVENT', LotEventsRev<EventPos>, LOT_EVENT_EVENT_OPERATOR_ID$, 'X')
|
||||
NewLoadSigDtm = Xlate('LOT_EVENT', LotEventsRev<EventPos>, LOT_EVENT_EVENT_DATETIME$, 'X')
|
||||
NewLoadDate = SRP_DateTime("Date", NewLoadSigDtm)
|
||||
NewLoadTime = SRP_DateTime("Time", NewLoadSigDtm)
|
||||
Record<RDS_OPERATOR_IN$> = NewLoadSig
|
||||
Record<RDS_DATE_IN$> = NewLoadDate
|
||||
Record<RDS_TIME_IN$> = NewLoadTime
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = @User4
|
||||
LogData<3> = RDSKeyID
|
||||
LogData<4> = 'Detected missing LOAD signature from RDS record. Restored signature from LOT_EVENT table.'
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
end
|
||||
Case LotEventType EQ 'UNSIGN_LOAD'
|
||||
Done = True$
|
||||
// No need to check for missing load signature
|
||||
End Case
|
||||
Until Done
|
||||
Next LotEventType
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Begin Case
|
||||
Case LoadDTM NE '' and UnloadDTM EQ '' and UnloadEx1DTM EQ ''
|
||||
// Cassette still running...
|
||||
@ -1005,4 +1044,3 @@ Restore_System_Variables:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -86,8 +86,10 @@ EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
|
||||
|
||||
Declare subroutine ErrMsg, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, obj_RDS, Set_Property, Send_Event, Database_Services
|
||||
Declare subroutine Dialog_Box, Qa_Services, Obj_React_Ll, Start_Window, obj_React_Status, Reactor_Services, Rds_Services
|
||||
Declare subroutine Lot_Services
|
||||
Declare function Dialog_Box, Msg, MemberOf, obj_WO_Mat, Database_Services, Get_Property, obj_React_Status, Get_Status
|
||||
Declare function QA_Services, Database_Services, Rds_Services, Obj_Calendar, Override_Log_Services, Max, Supplement_Services
|
||||
Declare function Datetime
|
||||
|
||||
SubclassInfo = Form_Services('FindSubclassControl')
|
||||
Subclass = SubclassInfo<1>
|
||||
@ -396,23 +398,17 @@ Event PUB_SIGN.CLICK()
|
||||
ErrMsg(ErrorMessage)
|
||||
Return 0
|
||||
end
|
||||
|
||||
// 3. Lead/Supervisor/Engineer/EngTech override
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'LEAD' : @VM : 'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH')
|
||||
Valid = Response<1>
|
||||
OverrideUser = Response<2>
|
||||
|
||||
If Valid then
|
||||
// 4. Remove RDS Unload signature, date, and time
|
||||
Set_Property(@Window:'.OP_IN', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_NAME', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_DATE', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_TIME', 'TEXT', '')
|
||||
IOOptions = Get_Property(@Window, 'IOOPTIONS')
|
||||
IOOptions<6> = True$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
Send_Event(@Window, 'WRITE')
|
||||
IOOptions<6> = False$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
// 5. Remove WO_MAT Unload signature, date, and time
|
||||
|
||||
Lot_Services('CreateLotEvent', RDSNo, 'RDS', Datetime(), 'UNSIGN_LOAD', 'Load stage unsigned', Reactor, '', '', '', @User4)
|
||||
|
||||
// 4. Remove WO_MAT Unload signature, date, and time
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
SigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
Sigs = WOMatRec<WO_MAT_SIGNATURE$>
|
||||
@ -424,7 +420,8 @@ Event PUB_SIGN.CLICK()
|
||||
WOMatRec<WO_MAT_SIG_DTM$> = SigDTMs
|
||||
obj_React_Status('HandleLoadUnsign',Reactor:@RM:WONo:@RM:CassNo:@RM:RDSNo:@RM:OverrideUser)
|
||||
end
|
||||
// 6. Remove '1LOAD' material log entry (i.e. WO_MAT<INV...> columns)
|
||||
|
||||
// 5. Remove '1LOAD' material log entry (i.e. WO_MAT<INV...> columns)
|
||||
InvActions = WOMatRec<WO_MAT_INV_ACTION$>
|
||||
Locate '1LOAD' in InvActions using @VM setting vPos then
|
||||
WOMatRec<WO_MAT_INV_WH$> = Delete(WOMatRec<WO_MAT_INV_WH$>, 0, vPos, 0)
|
||||
@ -439,10 +436,24 @@ Event PUB_SIGN.CLICK()
|
||||
end
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
||||
|
||||
// 6. Remove RDS Unload signature, date, and time
|
||||
// NOTE: This needs to occur before item #5 to avoid RDS_ACTIONS restoring the load signature
|
||||
Set_Property(@Window:'.OP_IN', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_NAME', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_DATE', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_TIME', 'TEXT', '')
|
||||
IOOptions = Get_Property(@Window, 'IOOPTIONS')
|
||||
IOOptions<6> = True$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
Send_Event(@Window, 'WRITE')
|
||||
IOOptions<6> = False$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
|
||||
Reactor = Get_Property(@Window:'.REACTOR', 'TEXT')
|
||||
Rds_Services('AddComment', RDSNo, 'Load Stage Unsigned from Reactor ' : Reactor)
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
|
||||
PreviousRotrOverrideRds = ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$>
|
||||
|
||||
// Check if ROTR override was preformed when signing this load
|
||||
If (PreviousRotrOverrideRds EQ RDSNo) then
|
||||
// Reset the override flag
|
||||
@ -457,6 +468,7 @@ Event PUB_SIGN.CLICK()
|
||||
Reactor_Services('DecrementWfrMetrics', RDSNo)
|
||||
end
|
||||
Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Sign')
|
||||
|
||||
end else
|
||||
Return 0
|
||||
end
|
||||
@ -659,3 +671,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user