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:
Infineon\StieberD 2024-11-05 13:35:42 -07:00
parent b84cfb970f
commit 24a246a99b
7 changed files with 287 additions and 40 deletions

View File

@ -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

View File

@ -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

View File

@ -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,7 +500,8 @@ Create:
Logging_Services('AppendLog', objLog, LoggingDTM : ',' : @USER4 : ',' : RDSNo : ',' : 'Error writing new RDS record. Error code: ':errCode)
Result = ''
END ELSE
Result = RDSNo
Lot_Services('CreateNewLot', 'RDS', '', WaferQty, SubPartNo, LotNo, SubVendCd, @User4, '', RDSNo)
Result = RDSNo
END
* * * * * * *
@ -1471,3 +1473,4 @@ CalcThickTarget:
RETURN

View File

@ -1089,13 +1089,14 @@ FOR WOStep = 1 TO WOStepCnt
IF WOStepRec<WO_STEP_RDS_KEY$,CassNo> = '' THEN
WOMatRec = XLATE('WO_MAT',WoNo:'*':CassNo,'','X')
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$>
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$>
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

View File

@ -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

View File

@ -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

View File

@ -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