ebase 8/22/2025

Modified RDS_Actions to fix RDSNo being unassigned when calling obj_wo_react -> RemRDS

various bug fixes

Re-initializaing branch

Modified RDS_Actions to fix RDSNo being unassigned when calling obj_wo_react -> RemRDS

Added a check prior to running Load logic to check that a reactor is assigned.
This commit is contained in:
Infineon\Ouellette
2025-08-20 17:01:57 -07:00
parent cc2213061c
commit d61ae234c9
12 changed files with 6092 additions and 3104 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3591,7 +3591,7 @@
"<22,2>": "", "<22,2>": "",
"<22,3>": "EDITFIELD", "<22,3>": "EDITFIELD",
"<22,4>": "RDS_PRE_EPI", "<22,4>": "RDS_PRE_EPI",
"<22,5>": "366", "<22,5>": "380",
"<22,6>": "370", "<22,6>": "370",
"<22,7>": "132", "<22,7>": "132",
"<22,8>": "18", "<22,8>": "18",
@ -3731,7 +3731,7 @@
"<23,2>": "", "<23,2>": "",
"<23,3>": "EDITFIELD", "<23,3>": "EDITFIELD",
"<23,4>": "RDS_PRE_EPI", "<23,4>": "RDS_PRE_EPI",
"<23,5>": "505", "<23,5>": "521",
"<23,6>": "370", "<23,6>": "370",
"<23,7>": "84", "<23,7>": "84",
"<23,8>": "18", "<23,8>": "18",
@ -3871,7 +3871,7 @@
"<24,2>": "", "<24,2>": "",
"<24,3>": "EDITFIELD", "<24,3>": "EDITFIELD",
"<24,4>": "RDS_PRE_EPI", "<24,4>": "RDS_PRE_EPI",
"<24,5>": "593", "<24,5>": "612",
"<24,6>": "370", "<24,6>": "370",
"<24,7>": "75", "<24,7>": "75",
"<24,8>": "18", "<24,8>": "18",
@ -9835,9 +9835,9 @@
"<56,3>": "PUSHBUTTON", "<56,3>": "PUSHBUTTON",
"<56,4>": "RDS_PRE_EPI", "<56,4>": "RDS_PRE_EPI",
"<56,5>": "324", "<56,5>": "324",
"<56,6>": "370", "<56,6>": "368",
"<56,7>": "36", "<56,7>": "52",
"<56,8>": "18", "<56,8>": "24",
"<56,9>": "Sign", "<56,9>": "Sign",
"<56,10>": { "<56,10>": {
"<56,10,1>": "0x56000300", "<56,10,1>": "0x56000300",
@ -17211,9 +17211,9 @@
"<101,2>": "", "<101,2>": "",
"<101,3>": "GROUPBOX", "<101,3>": "GROUPBOX",
"<101,4>": "RDS_PRE_EPI", "<101,4>": "RDS_PRE_EPI",
"<101,5>": "10", "<101,5>": "12",
"<101,6>": "268", "<101,6>": "268",
"<101,7>": "672", "<101,7>": "690",
"<101,8>": "129", "<101,8>": "129",
"<101,9>": "Pre-Epi Verification", "<101,9>": "Pre-Epi Verification",
"<101,10>": { "<101,10>": {
@ -17917,7 +17917,8 @@
"<1,26,16>": "", "<1,26,16>": "",
"<1,26,17>": "", "<1,26,17>": "",
"<1,26,18>": "", "<1,26,18>": "",
"<1,26,19>": "" "<1,26,19>": "",
"<1,26,20>": ""
}, },
"<1,27>": { "<1,27>": {
"<1,27,1>": "ITEM", "<1,27,1>": "ITEM",
@ -17938,7 +17939,8 @@
"<1,27,16>": "", "<1,27,16>": "",
"<1,27,17>": "", "<1,27,17>": "",
"<1,27,18>": "", "<1,27,18>": "",
"<1,27,19>": "" "<1,27,19>": "",
"<1,27,20>": ""
}, },
"<1,28>": { "<1,28>": {
"<1,28,1>": "POPUP", "<1,28,1>": "POPUP",
@ -18010,9 +18012,9 @@
"<2>": { "<2>": {
"<2,1>": { "<2,1>": {
"<2,1,1>": { "<2,1,1>": {
"<2,1,1,1>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT", "<2,1,1,1>": "EDIT.THICKNESS_OVERGROWTH_AVG",
"<2,1,1,2>": "EDIT.SSI_STANDARDS", "<2,1,1,2>": "EDIT.SSI_STANDARDS",
"<2,1,1,3>": "EDIT.THICKNESS_OVERGROWTH_AVG" "<2,1,1,3>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT"
} }
}, },
"<2,2>": { "<2,2>": {
@ -18022,7 +18024,17 @@
"<2,2,1,3>": "@WINDOW", "<2,2,1,3>": "@WINDOW",
"<2,2,1,4>": "", "<2,2,1,4>": "",
"<2,2,1,5>": "", "<2,2,1,5>": "",
"<2,2,1,6>": "" "<2,2,1,6>": "",
"<2,2,1,7>": "",
"<2,2,1,8>": "",
"<2,2,1,9>": "",
"<2,2,1,10>": "",
"<2,2,1,11>": "",
"<2,2,1,12>": "",
"<2,2,1,13>": "",
"<2,2,1,14>": "",
"<2,2,1,15>": "READROW",
"<2,2,1,16>": "0"
}, },
"<2,2,2>": { "<2,2,2>": {
"<2,2,2,1>": "E", "<2,2,2,1>": "E",
@ -18152,7 +18164,17 @@
"<2,2,16,3>": "@WINDOW", "<2,2,16,3>": "@WINDOW",
"<2,2,16,4>": "", "<2,2,16,4>": "",
"<2,2,16,5>": "", "<2,2,16,5>": "",
"<2,2,16,6>": "" "<2,2,16,6>": "",
"<2,2,16,7>": "",
"<2,2,16,8>": "",
"<2,2,16,9>": "",
"<2,2,16,10>": "",
"<2,2,16,11>": "",
"<2,2,16,12>": "",
"<2,2,16,13>": "",
"<2,2,16,14>": "",
"<2,2,16,15>": "GEN",
"<2,2,16,16>": "0"
} }
}, },
"<2,3>": { "<2,3>": {

View File

@ -3,13 +3,15 @@ Compile function NDW_LOAD_UNLOAD_EXTRA_EVENTS(CtrlEntId, Event, @PARAMS)
#window NDW_LOAD_UNLOAD_EXTRA #window NDW_LOAD_UNLOAD_EXTRA
Declare subroutine End_Dialog, Post_Event, Database_Services, Error_Services, Msg Declare subroutine End_Dialog, Post_Event, Database_Services, Error_Services, Msg
Declare subroutine Set_Property, Rds_Services Declare subroutine Set_Property, Rds_Services, Set_Status, Rlist, Obj_Post_Log
Declare function Database_Services, Error_Services Declare function Database_Services, Error_Services, Qa_Services, Reactor_Services
Declare function Get_Property Declare function Get_Property, Dialog_Box
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert LOGICAL $Insert LOGICAL
$Insert RDS_EQUATES $Insert RDS_EQUATES
$Insert REACT_LL_EQUATES
$Insert REACTOR_EQUATES
$Insert MSG_EQUATES
GoToEvent Event for CtrlEntId else GoToEvent Event for CtrlEntId else
// Event not implemented // Event not implemented
@ -42,47 +44,101 @@ end event
//Signature buttons //Signature buttons
Event PUB_SIGN_UNLOAD_EX_1.CLICK() Event PUB_SIGN_UNLOAD_EX_1.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
initParams = ''
initParams<4> = 'Sign Unload Extra 1'
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
Valid = Response<1>
If Valid then
Rds_Services('SignUnloadExtra1', RDSNo, @USER4) Rds_Services('SignUnloadExtra1', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 1 Signed!') Msg(@Window, 'Unload Extra 1 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_SIGN_LOAD_EX_1.CLICK() Event PUB_SIGN_LOAD_EX_1.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
OldReactorNo = RDSRec<RDS_REACTOR$>
NewReactorNo = Get_Property(@Window : '.EDL_REACTOR1', 'TEXT')
initParams = ''
initParams<4> = 'Sign Load Extra 1'
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
Valid = Response<1>
If Valid then
If Qa_Services('LoadExtra1stReady', RDSNo) AND (OldReactorNo NE NewReactorNo) then
Gosub ReactorChange
end
If Error_Services('NoError') then
Rds_Services('SignLoadExtra1', RDSNo, @USER4) Rds_Services('SignLoadExtra1', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Load Extra 1 Signed!') Msg(@Window, 'Load Extra 1 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
End else
Msg(@Window, Error_Services('GetMessage'))
end
end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_SIGN_UNLOAD_EX_2.CLICK() Event PUB_SIGN_UNLOAD_EX_2.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
initParams = ''
initParams<4> = 'Sign Unload Extra 2'
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
Valid = Response<1>
If Valid then
Rds_Services('SignUnloadExtra2', RDSNo, @USER4) Rds_Services('SignUnloadExtra2', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Unload Extra 2 Signed!') Msg(@Window, 'Unload Extra 2 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
end
GoSub Refresh GoSub Refresh
end event end event
Event PUB_SIGN_LOAD_EX_2.CLICK() Event PUB_SIGN_LOAD_EX_2.CLICK()
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
OldReactorNo = RDSRec<RDS_REACTOR$>
NewReactorNo = Get_Property(@Window : '.EDL_REACTOR2', 'TEXT')
initParams = ''
initParams<4> = 'Sign Load Extra 2'
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
Valid = Response<1>
If Valid then
If Qa_Services('LoadExtra2ndReady', RDSNo) AND (OldReactorNo NE NewReactorNo) then
Gosub ReactorChange
end
If Error_Services('NoError') then
Rds_Services('SignLoadExtra2', RDSNo, @USER4) Rds_Services('SignLoadExtra2', RDSNo, @USER4)
If Error_Services('NoError') then If Error_Services('NoError') then
Msg(@Window, 'Load Extra 2 Signed!') Msg(@Window, 'Load Extra 2 Signed!')
end else end else
Msg(@Window, Error_Services('GetMessage')) Msg(@Window, Error_Services('GetMessage'))
end end
End else
Msg(@Window, Error_Services('GetMessage'))
end
end
GoSub Refresh GoSub Refresh
end event end event
//Clear Signature Buttons //Clear Signature Buttons
@ -143,6 +199,8 @@ Refresh:
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
If RowExists('RDS', RDSNo) then If RowExists('RDS', RDSNo) then
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
UnloadSigned = RDSRec<RDS_OPERATOR_OUT$>
ReactorNo = RDSRec<RDS_REACTOR$>
//Unload Extra 1 //Unload Extra 1
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$> UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' ) UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' )
@ -153,6 +211,7 @@ Refresh:
LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' ) LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' )
LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D') LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D')
LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT') LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT')
LoadExtra1Reactor = RDSRec<RDS_LOAD_EXTRA_1_REACTOR$>
//Unload Extra 2 //Unload Extra 2
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$> UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' ) UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' )
@ -163,6 +222,7 @@ Refresh:
LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' ) LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D') LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT') LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
LoadExtra2Reactor = RDSRec<RDS_LOAD_EXTRA_2_REACTOR$>
//Populate text fields //Populate text fields
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast) Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast)
@ -177,6 +237,51 @@ Refresh:
Set_Property(@Window : '.EDL_LOAD_EX_2_USER', 'TEXT', LoadExtra2UserFirstLast) Set_Property(@Window : '.EDL_LOAD_EX_2_USER', 'TEXT', LoadExtra2UserFirstLast)
Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date) Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date)
Set_Property(@Window : '.EDL_LOAD_EX_2_TIME', 'TEXT', LoadExtra2Time) Set_Property(@Window : '.EDL_LOAD_EX_2_TIME', 'TEXT', LoadExtra2Time)
If LoadExtra1Reactor NE '' then
Set_Property(@Window : '.EDL_REACTOR1', 'TEXT', LoadExtra1Reactor)
end else
Set_Property(@Window : '.EDL_REACTOR1', 'TEXT', ReactorNo)
end
If LoadExtra2Reactor NE '' then
Set_Property(@Window : '.EDL_REACTOR2', 'TEXT', LoadExtra2Reactor)
end else
Set_Property(@Window : '.EDL_REACTOR2', 'TEXT', ReactorNo)
end
If UnloadSigned EQ '' then
Set_Property(@Window : '.EDL_REACTOR1', 'ENABLED', True$)
Set_Property(@Window : '.EDL_REACTOR2', 'ENABLED', True$)
end else
Set_Property(@Window : '.EDL_REACTOR1', 'ENABLED', False$)
Set_Property(@Window : '.EDL_REACTOR2', 'ENABLED', False$)
end
If UnloadExtra1Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_1', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_1', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_1', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_1', 'ENABLED', False$)
end
If UnloadExtra2Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_2', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_2', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_2', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_2', 'ENABLED', False$)
end
If LoadExtra1Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_1', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_1', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_1', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_1', 'ENABLED', False$)
end
If LoadExtra2Signature NE '' then
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_2', 'ENABLED', False$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_2', 'ENABLED', True$)
end else
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_2', 'ENABLED', True$)
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_2', 'ENABLED', False$)
end
end else end else
ResponseValue = Set_Property(@Window, '@responsevalue', 0) ResponseValue = Set_Property(@Window, '@responsevalue', 0)
Post_Event(@Window, 'CLOSE') Post_Event(@Window, 'CLOSE')
@ -185,3 +290,100 @@ Refresh:
return return
ReactorChange:
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
WONo = RDSRec<RDS_WO$>
ReactorNo = ''
LLChosen = ''
ChangePermitted = False$
Begin Case
Case Control EQ 'PUB_SIGN_LOAD_EX_1'
ReactorNo = Get_Property(@Window : '.EDL_REACTOR1', 'TEXT')
ReactorField = RDS_LOAD_EXTRA_1_REACTOR$
Case Control EQ 'PUB_SIGN_LOAD_EX_2'
ReactorNo = Get_Property(@Window : '.EDL_REACTOR2', 'TEXT')
ReactorField = RDS_LOAD_EXTRA_2_REACTOR$
Case Otherwise$
End Case
If ReactorNo NE '' then
PickPlace = Xlate('REACTOR', ReactorNo, 'PICK_PLACE', 'X')
If (Reactor_Services('GetReactorAvailChamberCount', ReactorNo) NE 0) OR (PickPlace EQ False$) then
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
ClearSelect
Set_Status(0)
RList(Query, TARGET_ACTIVELIST$, '', '' '')
SchedReactors = ''
EOF = False$
Loop
ReadNext SchedReactor else EOF = True$
Until EOF
SchedReactors<0, -1> = SchedReactor
Repeat
Locate ReactorNo in SchedReactors using @VM setting vPos then
If PickPlace EQ True$ then
LLDisabled = XLATE('REACTOR', ReactorNo, 'ACTIVE_LL_DISABLED', 'X')
IF LLDisabled NE '' then
ReactLLRec = Database_Services('ReadDataRow', 'REACT_LL', LLDisabled)
SideDisabled = ReactLLRec<REACT_LL_DISABLED$>
QualMode = ReactLLRec<REACT_LL_QUAL_MODE$>
Begin Case
Case SideDisabled EQ 'L'
LLChosen = 'R'
Case SideDisabled EQ 'R'
LLChosen = 'L'
End Case
end else
Def = ''
Def<MCAPTION$> = 'Select Load Lock'
Def<MTYPE$> = 'BLeft,Right'
Def<MTEXT$> = 'Please select a load lock.'
Def<MMODAL$> = 'A'
LLResponse = Msg(@Window, Def)
Begin Case
Case LLResponse EQ 1
LLChosen = 'L'
Case LLResponse EQ 2
LLChosen = 'R'
End Case
end
If LLChosen NE '' then
ChangePermitted = True$
end else
Error_Services('Add', 'You must select a load lock for this lot.')
end
end else
ChangePermitted = True$
end
end else
Swap @VM with ',' in SchedReactors
Error_Services('Add', 'Assigned reactor, ':ReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.')
end
end else
Error_Services('Add', ReactorNo: 'does not have the capacity necessary for this lot.')
end
end else
Error_Services('Add', 'Invalid Reactor number.')
end
If ChangePermitted then
RDSRec<RDS_REACTOR$> = ReactorNo
RDSRec<ReactorField> = ReactorNo
RDSRec<RDS_LOAD_LOCK_SIDE$> = LLChosen
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
If Error_Services('NoError') then
Msg(@Window, 'Reactor successfully changed!')
end
end
return

View File

@ -39,8 +39,6 @@ $Insert POPUP_EQUATES
$Insert NOTIFICATION_EQUATES $Insert NOTIFICATION_EQUATES
$Insert LSL_USERS_EQUATES $Insert LSL_USERS_EQUATES
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
@ -643,3 +641,4 @@ return

View File

@ -39,8 +39,6 @@ $Insert POPUP_EQUATES
$Insert SEC_GROUPS_EQUATES $Insert SEC_GROUPS_EQUATES
$Insert LSL_USERS_EQUATES $Insert LSL_USERS_EQUATES
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
@ -726,3 +724,4 @@ UnlockRec:
return return

View File

@ -145,7 +145,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 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 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 RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch
Declare subroutine Override_Services, Reactor_Services, Lot_Services, Obj_Notes, Mona_Services, Service_Services Declare subroutine Override_Services, Reactor_Services, Lot_Services, Mona_Services, Service_Services, Obj_Notes
Declare subroutine Transaction_Services Declare subroutine Transaction_Services
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_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 Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
@ -1828,22 +1828,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
PSNo = RDSRec<RDS_PROD_SPEC_ID$> PSNo = RDSRec<RDS_PROD_SPEC_ID$>
WOStep = Xlate('RDS', RDSNo, 'WO_STEP', 'X') WOStep = Xlate('RDS', RDSNo, 'WO_STEP', 'X')
BEGIN CASE
CASE OrgReactNo = '' AND Reactor NE ''
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
CASE OrgReactNo NE '' AND Reactor = ''
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
CASE OrgReactNo NE Reactor
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
CASE Otherwise$
NULL
END CASE
// Need to update/save RDS record before calling RDS_React_Run // Need to update/save RDS record before calling RDS_React_Run
RDSRec<RDS_REACTOR$> = Reactor RDSRec<RDS_REACTOR$> = Reactor
RDSRec<RDS_VERIFY_QTY$> = WaferQty RDSRec<RDS_VERIFY_QTY$> = WaferQty
@ -2013,11 +1997,11 @@ end service
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt) Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
StartTick = GetTickCount() StartTick = GetTickCount()
MetricName = 'LoadSignatureReady' MetricName = 'LoadSignatureReady'
ErrorMsg = ''
Error_Services('Clear') Error_Services('Clear')
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
ErrorMessage = 'Process Error: RDSNo, Username, or WaferQty not supplied in the ':Service:' service.' ErrorMsg = 'Process Error: RDSNo, Username, or WaferQty not supplied in the ':Service:' service.'
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMsg)
Response = False$ Response = False$
return return
end end
@ -2055,15 +2039,15 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
ReactorCapacity = Reactor_Services('GetReactorAvailChamberCount', Reactor) ReactorCapacity = Reactor_Services('GetReactorAvailChamberCount', Reactor)
If ReactorCapacity LE 0 then If ReactorCapacity LE 0 then
ErrorMessage = 'Process Error: Reactor ' : Reactor : ' does not have the capacity for this lot.' ErrorMsg = 'Process Error: Reactor ' : Reactor : ' does not have the capacity for this lot.'
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMsg)
Response = False$ Response = False$
return return
end end
If WaferQty NE SchedQty then If WaferQty NE SchedQty then
ErrorMessage = 'Process Error: Verified wafer quantity does not match the scheduled quantity.' ErrorMsg = 'Process Error: Verified wafer quantity does not match the scheduled quantity.'
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMsg)
Response = False$ Response = False$
return return
end end
@ -2083,8 +2067,8 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
// the parameters. If they do not confirm them, then we need to stop the load signature. // the parameters. If they do not confirm them, then we need to stop the load signature.
RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X') RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X')
If RDSLayerAckReq EQ True$ then If RDSLayerAckReq EQ True$ then
ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.' ErrorMsg = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMsg)
Response = False$ Response = False$
return return
end end
@ -2167,9 +2151,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
ROTRStatus = ReactorRec<REACTOR_ROTR_STATUS$> ROTRStatus = ReactorRec<REACTOR_ROTR_STATUS$>
If ROTRStatus EQ 'F' then If ROTRStatus EQ 'F' then
ErrorMessage = 'Process Error: Unable to load reactor due to ROTR load block. ' | ErrorMsg = 'Process Error: Unable to load reactor due to ROTR load block. ' |
: 'A lead or supervisor must clear the ROTR load block.' : 'A lead or supervisor must clear the ROTR load block.'
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMsg)
Response = False$ Response = False$
return return
end end
@ -2252,20 +2236,180 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
// Add check for supplement signatures // Add check for supplement signatures
UnacknowledgedSupp = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD') UnacknowledgedSupp = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD')
If UnacknowledgedSupp NE FALSE$ then If UnacknowledgedSupp NE FALSE$ then
ErrorMessage = 'The LOAD stage supplements must be acknowledged before the load operation can be signed.' ErrorMsg = 'The LOAD stage supplements must be acknowledged before the load operation can be signed.'
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMsg)
Response = False$ Response = False$
return return
end end
If Error_Services('NoError') then EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
If ErrorMsg EQ '' then
Response = True$ Response = True$
end else end else
Response = False$ Response = False$
Error_Services('Add', ErrorMsg)
end end
EndTick = GetTickCount() end service
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
Service UnsignLoadSignatureReady(RDSNo)
ErrorMessage = ''
UnsignEligible = True$
If RowExists('RDS', RDSNo) then
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo, True$, 0, False$)
If Error_Services('NoError') then
WONo = RDSRec<RDS_WO$>
CassNo = RDSRec<RDS_CASS_NO$>
WoMatKey = WONo : '*' : CassNo
If RowExists('WO_MAT', WoMatKey) then
WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey)
//Cases to check for various statuses that should block unsigning the unload.
Begin Case
Case WOMatCurrStatus EQ 'HOLD'
ErrorMessage = 'Cassette is on HOLD and may not have the signature removed.'
Case Otherwise$
End Case
If ErrorMessage EQ '' then
//Check if any subsequent signature are set. If so RDS is not eligible.
UnloadExtra1Sig = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Sig = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Sig = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Sig = RDSRec<RDS_OP_IN_EX3$>
UnloadSig = RDSRec<RDS_OPERATOR_OUT$>Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X')
CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X')
swap @VM with '' in CISigs
ReactorType = XLATE('RDS', RDSNo, 'REACTOR_TYPE', 'X')
If ReactorType NE 'EPP' Then
FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
end else
WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X')
FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X')
end
Begin Case
Case FQASig NE ''
ErrorMessage = 'FQA Signature is set.'
Case CISigs NE ''
ErrorMessage = 'Clean and Inspect Signatures are set.'
Case UnloadSig NE ''
ErrorMessage = 'Unload signature is set.'
Case LoadExtra2Sig NE ''
ErrorMessage = 'Load extra 2 signature is set.'
Case UnloadExtra2Sig NE ''
ErrorMessage = 'Unload extra 2 signature is set.'
Case LoadExtra1Sig NE ''
ErrorMessage = 'Load extra 1 signature is set.'
Case UnloadExtra1Sig NE ''
ErrorMessage = 'Unload extra 1 signature is set.'
End Case
end
end else
ErrorMessage = 'Unable to locate the WO_MAT record for this RDS in the WO_MAT table.'
end
end else
ErrorMessage = 'Error reading RDS Record. ' : Error_Services('GetMessage')
end
end else
ErrorMessage = 'Unable to locate RDS in the RDS Table.'
end
If ErrorMessage NE '' then
UnsignEligible = False$
ErrorMessage = 'Process Error: Unable to verify the load signature is Eligible to be unsigned: ' : ErrorMessage
Error_Services('Add', ErrorMessage)
end
Response = UnsignEligible
end service
Service UnsignLoadSignatureReady(RDSNo)
ErrorMessage = ''
UnsignEligible = True$
If RowExists('RDS', RDSNo) then
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo, True$, 0, False$)
If Error_Services('NoError') then
WONo = RDSRec<RDS_WO$>
CassNo = RDSRec<RDS_CASS_NO$>
WoMatKey = WONo : '*' : CassNo
If RowExists('WO_MAT', WoMatKey) then
WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey)
//Cases to check for various statuses that should block unsigning the unload.
Begin Case
Case WOMatCurrStatus EQ 'HOLD'
ErrorMessage = 'Cassette is on HOLD and may not have the signature removed.'
Case Otherwise$
End Case
If ErrorMessage EQ '' then
//Check if any subsequent signature are set. If so RDS is not eligible.
UnloadExtra1Sig = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Sig = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Sig = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Sig = RDSRec<RDS_OP_IN_EX3$>
UnloadSig = RDSRec<RDS_OPERATOR_OUT$>Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X')
CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X')
swap @VM with '' in CISigs
ReactorType = XLATE('RDS', RDSNo, 'REACTOR_TYPE', 'X')
If ReactorType NE 'EPP' Then
FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
end else
WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X')
FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X')
end
Begin Case
Case FQASig NE ''
ErrorMessage = 'FQA Signature is set.'
Case CISigs NE ''
ErrorMessage = 'Clean and Inspect Signatures are set.'
Case UnloadSig NE ''
ErrorMessage = 'Unload signature is set.'
Case LoadExtra2Sig NE ''
ErrorMessage = 'Load extra 2 signature is set.'
Case UnloadExtra2Sig NE ''
ErrorMessage = 'Unload extra 2 signature is set.'
Case LoadExtra1Sig NE ''
ErrorMessage = 'Load extra 1 signature is set.'
Case UnloadExtra1Sig NE ''
ErrorMessage = 'Unload extra 1 signature is set.'
End Case
end
end else
ErrorMessage = 'Unable to locate the WO_MAT record for this RDS in the WO_MAT table.'
end
end else
ErrorMessage = 'Error reading RDS Record. ' : Error_Services('GetMessage')
end
end else
ErrorMessage = 'Unable to locate RDS in the RDS Table.'
end
If ErrorMessage NE '' then
UnsignEligible = False$
ErrorMessage = 'Process Error: Unable to verify the load signature is Eligible to be unsigned: ' : ErrorMessage
Error_Services('Add', ErrorMessage)
end
Response = UnsignEligible
end service end service
@ -2279,6 +2423,31 @@ Service LoadExtra1stReady(RDSNo)
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$> UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$> LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$> StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
Reactor = RDSRec<RDS_REACTOR$>
If Reactor NE '' then
WONo = RDSRec<RDS_WO$>
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
ClearSelect
Set_Status(0)
RList(Query, TARGET_ACTIVELIST$, '', '' '')
SchedReactors = ''
EOF = False$
Loop
ReadNext SchedReactor else EOF = True$
Until EOF
SchedReactors<0, -1> = SchedReactor
Repeat
Locate Reactor in SchedReactors using @VM setting vPos else
Swap @VM with ',' in SchedReactors
ErrorMessage = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
Error_Services('Set', ErrorMessage)
Response = False$
return
end
end
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$ Response = True$
end end
@ -2315,6 +2484,31 @@ Service LoadExtra2ndReady(RDSNo)
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$> UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$> LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$> StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
Reactor = RDSRec<RDS_REACTOR$>
If Reactor NE '' then
WONo = RDSRec<RDS_WO$>
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
ClearSelect
Set_Status(0)
RList(Query, TARGET_ACTIVELIST$, '', '' '')
SchedReactors = ''
EOF = False$
Loop
ReadNext SchedReactor else EOF = True$
Until EOF
SchedReactors<0, -1> = SchedReactor
Repeat
Locate Reactor in SchedReactors using @VM setting vPos else
Swap @VM with ',' in SchedReactors
ErrorMessage = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
Error_Services('Set', ErrorMessage)
Response = False$
return
end
end
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$ Response = True$
end end
@ -2401,62 +2595,6 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
return return
end end
IF ReactorType NE 'EPP' THEN
WOMatRec = XLATE('WO_MAT',WONo:'*':CassNo,'','X')
WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
SigAction = WOStep:'LOAD'
LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
CurrDTM = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
END ELSE
WOMatSig = ''
END
RDSSig = Xlate('RDS', RDSNo, 'OPERATOR_IN', 'X')
BEGIN CASE
CASE WOMatSig = '' AND RDSSig NE ''
* Signature missing on WO_MAT
SigDate = RDSRec<RDS_DATE_IN$>
SigTime = RDSRec<RDS_TIME_IN$>
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'LOAD':@RM:RDSSig:@RM:SigDate:' ':SigTime
* Sets LOAD signature
IF Get_Status(errCode) THEN
ErrorMsg = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
Error_Services('Set', ErrorMsg)
Response = False$
END else
Response = True$
end
return
CASE RDSSig = '' AND WOMatSig NE ''
* Signature missing on RDS
CurrDate = CurrDTM[1,' ']
CurrTime = CurrDTM[COL2()+1,' ']
RDSRec<RDS_OPERATOR_IN$> = WOMatSig
RDSRec<RDS_DATE_IN$> = IConv(CurrDate, 'D')
RDSRec<RDS_TIME_IN$> = IConv(CurrTime, 'MT')
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
Response = True$
return
CASE RDSSig NE '' AND WOMatSig NE ''
ErrorMsg = 'Process Error: Load stage has already been signed.'
Error_Services('Set', ErrorMsg)
Response = False$
RETURN
CASE Otherwise$
Null
// Continue
END CASE
END
SigDt = OCONV( Date(), 'D2/' ) SigDt = OCONV( Date(), 'D2/' )
SigTm = OCONV( Time(), 'MTS' ) SigTm = OCONV( Time(), 'MTS' )
LoadDTM = SigDt:' ':SigTm LoadDTM = SigDt:' ':SigTm
@ -3682,6 +3820,48 @@ Service SignFQAStage(RDSNo, Username)
end service end service
Service UnsignPreEpiReady(RDSNo)
ErrorMsg = ''
UnsignPreEpiReady = False$
If RDSNo NE '' then
If RowExists('RDS', RDSNo) then
If Error_Services('NoError') then
//Call on the same logic to determine if the unsign LOAD signature is ready
UnsignLoadReady = QA_Services('UnsignLoadSignatureReady', RDSNo)
if Error_Services('NoError') then
If UnsignLoadReady then
//Check if LOAD signature is present
LoadSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_OPERATOR_IN$, True$, 0, False$)
If LoadSig EQ '' then
UnsignPreEpiReady = True$
end else
ErrorMsg = 'Load signature is set.'
end
end else
ErrorMsg = 'A signature beyond pre-epi exists. Please check later stages of this RDS.'
end
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'RDS ' : RDSNo : ' was not found in database.'
end
end else
ErrorMsg = 'RDS No was null'
end
If ErrorMsg NE '' then
Error_Services('Add', ErrorMsg)
end
Response = UnsignPreEpiReady
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
@ -3695,3 +3875,11 @@ ClearCursors:
return return

View File

@ -67,7 +67,8 @@ Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Ser
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_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 function Rds_Services, SRP_DateTime, SRP_Math, obj_WO_Mat, Lot_Services, SRP_Array
Declare function Lot_Event_Services, GetTickCount, Work_Order_Services Declare function Lot_Event_Services, GetTickCount, Work_Order_Services
Declare subroutine Error_Services, Database_Services, Logging_Services, Service_Services, Mona_Services Declare subroutine Error_Services, Database_Services, Logging_Services, Service_Services, obj_WO_React
Declare Subroutine Mona_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -769,7 +770,7 @@ WRITE_RECORD_PRE:
Begin Case Begin Case
Case ( (OrigLoadSig NE '') and (OrigReactor NE NewReactor) ) Case ( (OrigTimeOutSig NE '') and (OrigReactor NE NewReactor) )
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = @USER4 LogData<2> = @USER4
@ -778,25 +779,8 @@ WRITE_RECORD_PRE:
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
// User is attempting to erase data that is prohibited from being erased Set the FS104 error and block the write. // User is attempting to erase data that is prohibited from being erased Set the FS104 error and block the write.
Error_Services('Add', 'Reactor number cannot be changed or removed once the load signature is set!') Error_Services('Add', 'Reactor number cannot be changed or removed once the unload signature is set!')
OrigFileError = 104:': Reactor number cannot be changed or removed once the load signature is set!' OrigFileError = 104:': Reactor number cannot be changed or removed once the unload signature is set!'
Status = 0
Record = ''
ActionFlow = ACTION_STOP$
Case ( (OrigVerSig NE '') and (NewVerSig EQ '') ) or ( (OrigVerDate NE '') and (NewVerDate EQ '') ) |
or ( (OrigVerTime NE '') and (NewVerTime EQ '') ) or ( (NewVerDate EQ '') and (NewVerTime NE '') ) |
or ( (NewVerDate NE '') and (NewVerTime EQ '') )
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = @USER4
LogData<3> = RDSKeyID
LogData<4> = 'Signature data cannot be removed!'
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
// User is attempting to erase data that is prohibited from being erased Set the FS104 error and block the write.
Error_Services('Add', 'Signature data cannot be removed!')
OrigFileError = 104:': Signature data cannot be removed!'
Status = 0 Status = 0
Record = '' Record = ''
ActionFlow = ACTION_STOP$ ActionFlow = ACTION_STOP$
@ -861,6 +845,7 @@ WRITE_RECORD_PRE:
EndTick = GetTickCount() EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick) Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
return return
@ -880,6 +865,32 @@ WRITE_RECORD:
OrigDateOut = OrigRecord<RDS_DATE_OUT$> OrigDateOut = OrigRecord<RDS_DATE_OUT$>
NewDateOut = Record<RDS_DATE_OUT$> NewDateOut = Record<RDS_DATE_OUT$>
RDSNo = {SEQ}
Reactor = Record<RDS_REACTOR$>
OrgReactNo = OrigRecord<RDS_REACTOR$>
CassNo = Record<RDS_CASS_NO$>
PSNo = Record<RDS_PROD_SPEC_ID$>
WOStep = Xlate('RDS', RDSNo, 'WO_STEP', 'X')
BEGIN CASE
CASE OrgReactNo = '' AND Reactor NE ''
//Assignment to a reactor where there was no prior assigned reactor
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
CASE OrgReactNo NE '' AND Reactor = ''
//Reactor Assignment is being cleared.
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
CASE OrgReactNo NE Reactor
//Reactor Assignment is changing
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
CASE Otherwise$
NULL
END CASE
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}
@ -1003,3 +1014,4 @@ Restore_System_Variables:
return return

View File

@ -82,8 +82,6 @@ Equ COL$MET_SIG_DTM to 12
Equ MSG_WIDTH$ to 600 Equ MSG_WIDTH$ to 600
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 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 Dialog_Box, Qa_Services, Obj_React_Ll, Start_Window, obj_React_Status, Reactor_Services, Rds_Services
Declare subroutine Lot_Event_Services, Override_Log_Services, Logging_Services Declare subroutine Lot_Event_Services, Override_Log_Services, Logging_Services
@ -171,6 +169,7 @@ end event
Event PUB_SIGN.CLICK() Event PUB_SIGN.CLICK()
RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT') RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT')
ReactorType = Get_Property(@WINDOW:'.REACTOR_TYPE','TEXT') ReactorType = Get_Property(@WINDOW:'.REACTOR_TYPE','TEXT')
LoadLockVal = Get_Property(@WINDOW:'.LOAD_LOCK_SIDE_HIDDEN','TEXT') LoadLockVal = Get_Property(@WINDOW:'.LOAD_LOCK_SIDE_HIDDEN','TEXT')
@ -183,16 +182,18 @@ Event PUB_SIGN.CLICK()
LSIDArray = Get_Property(@WINDOW:'.RDS_LS_ID','ARRAY') LSIDArray = Get_Property(@WINDOW:'.RDS_LS_ID','ARRAY')
Preauthenticated = FALSE$ Preauthenticated = FALSE$
SignEventType = Get_Property(CtrlEntID, 'TEXT') SignEventType = Get_Property(CtrlEntID, 'TEXT')
WoMatKey = WONo : '*' : CassNo
Begin Case Begin Case
Case SignEventType EQ 'Sign' Case SignEventType EQ 'Sign'
debug
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP') RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
WfrQty = Get_Property(@WINDOW:'.WAFERS_IN','TEXT') WfrQty = Get_Property(@WINDOW:'.WAFERS_IN','TEXT')
LLSide = Get_Property(@Window:'.LOAD_LOCK_SIDE', 'DEFPROP') LLSide = Get_Property(@Window:'.LOAD_LOCK_SIDE', 'DEFPROP')
Reactor = Get_Property(@Window:'.REACTOR', 'TEXT') Reactor = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_REACTOR$, True$, 0, False$)
If Reactor NE '' then
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
ReactorType = ReactorRec<REACTOR_REACT_TYPE$> ReactorType = ReactorRec<REACTOR_REACT_TYPE$>
ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X') ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X')
@ -421,42 +422,18 @@ Event PUB_SIGN.CLICK()
end else end else
Msg(@Window, "Reactor load signature not allowed on a down reactor.") Msg(@Window, "Reactor load signature not allowed on a down reactor.")
end end
end else
Msg(@Window, "RDS is not assigned to a reactor.")
end
GoSub OLE_LL_Status GoSub OLE_LL_Status
Set_Property(@Window, 'SAVEWARN', False$) Set_Property(@Window, 'SAVEWARN', False$)
Send_Event(@Window, 'READ') Send_Event(@Window, 'READ')
Case SignEventType EQ 'Unsign' Case SignEventType EQ 'Unsign'
// 1. Check if on hold. If so, then block event and inform user // 1. Check if RDS Load signature is eligible to be set.
WOMatKey = WONo:'*':CassNo IsEligible = QA_Services('UnsignLoadSignatureReady', RDSNo)
WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey)
IF WOMatCurrStatus = 'HOLD' THEN
ErrorMessage = 'Process Error':@SVM:'Cassette is on Hold and may not have the signature removed.':CRLF$:CRLF$
ErrMsg(ErrorMessage)
RETURN 0
END
// 2.
// a. For Non-EPP - Check if LWII, LWIS, or FQA has been signed. If so, then block event and inform user
// b. For EPP - Check Clean_Insp actions to see if an inspection or surfscan has been completed
// Also check the FQA signature (MO_QA)
UnloadSig = Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X')
ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE','X')
CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X')
Convert @VM to '' in CISigs
IF ReactorType NE 'EPP' THEN
FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
END ELSE
WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X')
FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X')
END
If ( (UnloadSig NE '') or (CISigs NE '') or (FQASig NE '') ) then
// UNLOAD, LWII, LWIS, or FQA already signed. Block unload unsign event.
ErrorMessage = 'Process Error':@SVM:'UNLOAD, LWII, LWIS, or FQA already signed. Cannot unsign unload event.' |
: CRLF$ : CRLF$
ErrMsg(ErrorMessage)
Return 0
end
If IsEligible then
// 3. Lead/Supervisor/Engineer/EngTech override // 3. Lead/Supervisor/Engineer/EngTech override
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'LEAD' : @VM : 'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH') Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'LEAD' : @VM : 'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH')
Valid = Response<1> Valid = Response<1>
@ -519,7 +496,6 @@ Event PUB_SIGN.CLICK()
Set_Property(@Window, 'IOOPTIONS', IOOptions) Set_Property(@Window, 'IOOPTIONS', IOOptions)
Reactor = Get_Property(@Window:'.REACTOR', 'TEXT') Reactor = Get_Property(@Window:'.REACTOR', 'TEXT')
Rds_Services('AddComment', RDSNo, 'Load Stage Unsigned from Reactor ' : Reactor)
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
PreviousRotrOverrideRds = ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$> PreviousRotrOverrideRds = ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$>
@ -541,7 +517,10 @@ Event PUB_SIGN.CLICK()
end else end else
Return 0 Return 0
end end
end else
ErrorMessage = Error_Services('GetMessage')
Msg(@Window, ErrorMessage)
end
End Case End Case
Post_Event(@Window, 'READ') Post_Event(@Window, 'READ')
@ -582,7 +561,6 @@ Event LL_R_STATUS.OnClick()
end event end event
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -740,3 +718,5 @@ OLE_LL_Status:
return return

View File

@ -51,8 +51,6 @@ $insert REACT_STATUS_EQUATES
$insert SUPPL_INFO_ARRAY_EQU $insert SUPPL_INFO_ARRAY_EQU
$insert CLEAN_INSP_EQUATES $insert CLEAN_INSP_EQUATES
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
Equ COL$LOG_FILE to 1 Equ COL$LOG_FILE to 1
Equ COL$LOG_DTM to 2 Equ COL$LOG_DTM to 2
Equ COL$ACTION to 3 Equ COL$ACTION to 3
@ -67,7 +65,7 @@ Equ COL$TOOL_ID to 10
Declare subroutine ErrMsg, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, obj_RDS, Set_Property, Send_Event, Database_Services Declare subroutine ErrMsg, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, obj_RDS, Set_Property, Send_Event, Database_Services
Declare subroutine Qa_Services, RDS_Services, Dialog_Box Declare subroutine Qa_Services, RDS_Services, Dialog_Box
Declare function Dialog_Box, Msg, MemberOf, obj_WO_Mat, Database_Services, Get_Property, obj_React_Status, Get_Status Declare function Dialog_Box, Msg, MemberOf, obj_WO_Mat, Database_Services, Get_Property, obj_React_Status, Get_Status
Declare function QA_Services, Database_Services, Supplement_Services Declare function QA_Services, Database_Services, Supplement_Services, RDS_Services
SubclassInfo = Form_Services('FindSubclassControl') SubclassInfo = Form_Services('FindSubclassControl')
Subclass = SubclassInfo<1> Subclass = SubclassInfo<1>
@ -96,19 +94,15 @@ Return EventFlow else EVENT_CONTINUE$
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
GoSub SetupControls
end event end event
Event WINDOW.READ() Event WINDOW.READ()
// Disable reactor edit line control if the RDS has been loaded.
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT') GoSub SetupControls
If RDSNo NE '' then
LoadSig = Xlate('RDS', RDSNo, 'OPERATOR_IN', 'X')
If LoadSig NE '' then
Set_Property(@Window:'.REACTOR', 'ENABLED', False$)
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', READONLY_GREEN$)
end
end
end event end event
@ -132,6 +126,76 @@ end event
Event PUB_SIGN.CLICK() Event PUB_SIGN.CLICK()
ButtonText = Get_Property(@Window:'.PUB_SIGN', 'TEXT')
Begin Case
Case ButtonText EQ 'Sign'
GoSub SignPreEpi
Case ButtonText EQ 'Unsign'
GoSub UnsignPreEpi
End Case
If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage')
ErrMsg(ErrorMsg)
end
Set_Property(@Window, 'SAVEWARN', False$)
Set_Status(0)
Send_Event(@Window, 'READ')
end event
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SetupControls:
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
GoSub ReactorEdlCtrlSetup
GoSub PubSignCtrlSetup
return
ReactorEdlCtrlSetup:
// Disable reactor edit line control if the RDS has been assigned.
If RDSNo NE '' then
PreEpiSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG$, True$, 0, False$)
If Error_Services('NoError') then
If PreEpiSig NE '' then
Set_Property(@Window:'.REACTOR', 'ENABLED', False$)
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', READONLY_GREEN$)
end else
Set_Property(@Window:'.REACTOR', 'ENABLED', True$)
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', EDIT_ACTIVE_WHITE$)
end
end else
Set_Property(@Window:'.REACTOR', 'ENABLED', False$)
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', READONLY_GREEN$)
end
end
return
PubSignCtrlSetup:
If RDSNo NE '' then
PreEpiSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG$, True$, 0, False$)
If Error_Services('NoError') then
If PreEpiSig NE '' then
Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Unsign')
end else
Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Sign')
end
end
end
return
SignPreEpi:
RDSNo = Get_Property(@Window:'.RDS_NO' ,'DEFPROP') RDSNo = Get_Property(@Window:'.RDS_NO' ,'DEFPROP')
WfrQty = Get_Property(@Window:'.VERIFY_QTY','TEXT') WfrQty = Get_Property(@Window:'.VERIFY_QTY','TEXT')
Reactor = Get_Property(@Window:'.REACTOR' ,'TEXT') Reactor = Get_Property(@Window:'.REACTOR' ,'TEXT')
@ -161,18 +225,24 @@ Event PUB_SIGN.CLICK()
QA_Services('SignPreEpiStage', RDSNo, @USER4, WfrQty, Reactor) QA_Services('SignPreEpiStage', RDSNo, @USER4, WfrQty, Reactor)
end end
end end
If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage') return
ErrMsg(ErrorMsg)
UnsignPreEpi:
RDSNo = Get_Property(@Window:'.RDS_NO','DEFPROP')
VerCheckParams = ''
VerCheckParams<4> = 'Permission needed for Pre-Epi Unsign on RDS# ' : RDSNo
UserVerCheck = Dialog_Box('NDW_VERIFY_USER', @Window, '':@FM:'':@FM:'':@FM:VerCheckParams)
ValidUserCheck = UserVerCheck<1>
If ValidUserCheck then
ValidUserId = UserVerCheck<2>
If ValidUserId NE '' then
RDS_Services('UnsignPreEpiSignature', RDSNo, ValidUserId)
end
end end
Set_Property(@Window, 'SAVEWARN', False$)
Set_Status(0)
Send_Event(@Window, 'READ')
end event return
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -118,7 +118,7 @@ AutoDisplayErrors = FALSE$ ; // Set this to True$ when debugging so all erro
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log
Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status , Reactor_Services Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status, Reactor_Services
Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_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 Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
@ -1461,12 +1461,11 @@ Service SignUnloadExtra1(RDSNo, LSLUserName)
RDSRec<RDS_OP_OUT_EX1$> = LSLUsername RDSRec<RDS_OP_OUT_EX1$> = LSLUsername
RDSRec<RDS_OP_OUT_EX1_DATE$> = SRP_Date('Today') RDSRec<RDS_OP_OUT_EX1_DATE$> = SRP_Date('Today')
RDSRec<RDS_OP_OUT_EX1_TIME$> = SRP_Time('Now') RDSRec<RDS_OP_OUT_EX1_TIME$> = SRP_Time('Now')
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
Reactor = RDSRec<RDS_REACTOR$> Reactor = RDSRec<RDS_REACTOR$>
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Unload Extra 1 Signed from Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName) Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
end
end else end else
Error_Services('Add', 'Unload Extra 1 is not able to be signed at this stage') Error_Services('Add', 'Unload Extra 1 is not able to be signed at this stage')
end end
@ -1494,12 +1493,11 @@ Service UnsignUnloadExtra1(RDSNo, LSLUserName)
RDSRec<RDS_OP_OUT_EX1$> = '' RDSRec<RDS_OP_OUT_EX1$> = ''
RDSRec<RDS_OP_OUT_EX1_DATE$> = '' RDSRec<RDS_OP_OUT_EX1_DATE$> = ''
RDSRec<RDS_OP_OUT_EX1_TIME$> = '' RDSRec<RDS_OP_OUT_EX1_TIME$> = ''
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
Reactor = RDSRec<RDS_REACTOR$> Reactor = RDSRec<RDS_REACTOR$>
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Unload Extra 1 Unsigned on Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor) Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
end
end else end else
Error_Services('Add', 'Unsign Load Extra 1 is not able to be unsigned.') Error_Services('Add', 'Unsign Load Extra 1 is not able to be unsigned.')
end end
@ -1534,11 +1532,10 @@ Service SignLoadExtra1(RDSNo,LSLUserName)
RDSRec<RDS_OP_IN_EX2$> = LSLUsername RDSRec<RDS_OP_IN_EX2$> = LSLUsername
RDSRec<RDS_OP_IN_EX2_DATE$> = SRP_Date('Today') RDSRec<RDS_OP_IN_EX2_DATE$> = SRP_Date('Today')
RDSRec<RDS_OP_IN_EX2_TIME$> = SRP_Time('Now') RDSRec<RDS_OP_IN_EX2_TIME$> = SRP_Time('Now')
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Load Extra 1 Signed to Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor) Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
end
end else end else
Error_Services('Add', 'Load Extra 1 is not able to be signed at this stage') Error_Services('Add', 'Load Extra 1 is not able to be signed at this stage')
end end
@ -1569,12 +1566,11 @@ Service UnsignLoadExtra1(RDSNo, LSLUserName)
RDSRec<RDS_OP_IN_EX2$> = '' RDSRec<RDS_OP_IN_EX2$> = ''
RDSRec<RDS_OP_IN_EX2_DATE$> = '' RDSRec<RDS_OP_IN_EX2_DATE$> = ''
RDSRec<RDS_OP_IN_EX2_TIME$> = '' RDSRec<RDS_OP_IN_EX2_TIME$> = ''
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
Reactor = RDSRec<RDS_REACTOR$> Reactor = RDSRec<RDS_REACTOR$>
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Load Extra 1 Unsigned on Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName) Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
end
end else end else
Error_Services('Add', 'Unsign Load Extra 1 is not able to be unsigned.') Error_Services('Add', 'Unsign Load Extra 1 is not able to be unsigned.')
end end
@ -1598,12 +1594,11 @@ Service SignUnloadExtra2(RDSNo,LSLUserName)
RDSRec<RDS_OP_OUT_EX2$> = LSLUsername RDSRec<RDS_OP_OUT_EX2$> = LSLUsername
RDSRec<RDS_OP_OUT_EX2_DATE$> = SRP_Date('Today') RDSRec<RDS_OP_OUT_EX2_DATE$> = SRP_Date('Today')
RDSRec<RDS_OP_OUT_EX2_TIME$> = SRP_Time('Now') RDSRec<RDS_OP_OUT_EX2_TIME$> = SRP_Time('Now')
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
Reactor = RDSRec<RDS_REACTOR$> Reactor = RDSRec<RDS_REACTOR$>
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Unload Extra 2 Signed from Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName) Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
end
end else end else
Error_Services('Add', 'Unload Extra 2 is not able to be signed at this stage') Error_Services('Add', 'Unload Extra 2 is not able to be signed at this stage')
end end
@ -1631,12 +1626,11 @@ Service UnsignUnloadExtra2(RDSNo, LSLUserName)
RDSRec<RDS_OP_OUT_EX2$> = '' RDSRec<RDS_OP_OUT_EX2$> = ''
RDSRec<RDS_OP_OUT_EX2_DATE$> = '' RDSRec<RDS_OP_OUT_EX2_DATE$> = ''
RDSRec<RDS_OP_OUT_EX2_TIME$> = '' RDSRec<RDS_OP_OUT_EX2_TIME$> = ''
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
Reactor = RDSRec<RDS_REACTOR$> Reactor = RDSRec<RDS_REACTOR$>
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Unload Extra 2 Unsigned on Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor) Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
end
end else end else
Error_Services('Add', 'Unsign Load Extra 2 is not able to be unsigned.') Error_Services('Add', 'Unsign Load Extra 2 is not able to be unsigned.')
end end
@ -1671,11 +1665,10 @@ Service SignLoadExtra2(RDSNo,LSLUserName)
RDSRec<RDS_OP_IN_EX3$> = LSLUsername RDSRec<RDS_OP_IN_EX3$> = LSLUsername
RDSRec<RDS_OP_IN_EX3_DATE$> = SRP_Date('Today') RDSRec<RDS_OP_IN_EX3_DATE$> = SRP_Date('Today')
RDSRec<RDS_OP_IN_EX3_TIME$> = SRP_Time('Now') RDSRec<RDS_OP_IN_EX3_TIME$> = SRP_Time('Now')
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Load Extra 2 Signed to Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor) Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
end
end else end else
Error_Services('Add', 'Load Extra 2 is not able to be signed at this stage') Error_Services('Add', 'Load Extra 2 is not able to be signed at this stage')
end end
@ -1689,7 +1682,7 @@ Service SignLoadExtra2(RDSNo,LSLUserName)
Error_Services('Add', 'RDS ' : RDSNo : ' does not exist.') Error_Services('Add', 'RDS ' : RDSNo : ' does not exist.')
end end
end else end else
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine') Error_Services('Add', 'Invalid user passed to Sign Unload Extra 2 routine')
end end
end service end service
@ -1705,12 +1698,11 @@ Service UnsignLoadExtra2(RDSNo, LSLUserName)
RDSRec<RDS_OP_IN_EX3$> = '' RDSRec<RDS_OP_IN_EX3$> = ''
RDSRec<RDS_OP_IN_EX3_DATE$> = '' RDSRec<RDS_OP_IN_EX3_DATE$> = ''
RDSRec<RDS_OP_IN_EX3_TIME$> = '' RDSRec<RDS_OP_IN_EX3_TIME$> = ''
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
Reactor = RDSRec<RDS_REACTOR$> Reactor = RDSRec<RDS_REACTOR$>
If Error_Services('NoError') then If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Load Extra 2 Unsigned on Reactor ' : Reactor, LSLUserName)
end
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName) Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
end
end else end else
Error_Services('Add', 'Unsign Load Extra 2 is not able to be unsigned.') Error_Services('Add', 'Unsign Load Extra 2 is not able to be unsigned.')
end end
@ -1868,6 +1860,47 @@ Service DetachRDSFromWO(RDSNo)
end service end service
Service ChangeReactor(RDSNo, NewReactorNo)
ErrorMessage = ''
If RDSNo NE '' AND NewReactorNo NE '' then
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
WONo = RDSRec<RDS_WO$>
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
ClearSelect
Set_Status(0)
RList(Query, TARGET_ACTIVELIST$, '', '' '')
SchedReactors = ''
EOF = False$
Loop
ReadNext SchedReactor else EOF = True$
Until EOF
SchedReactors<0, -1> = SchedReactor
Repeat
Locate NewReactorNo in SchedReactors using @VM setting vPos then
RDSRec<RDS_REACTOR$> = NewReactorNo
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
If Error_Services('NoError') then
Response = True$
end else
Response = False$
ErrorMessage = Error_Services('GetMessage')
end
end else
Swap @VM with ',' in SchedReactors
ErrorMessage = 'Assigned reactor, ':NewReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
Response = False$
end
end else
ErrorMessage = 'Missing RDSNo or NewReactorNo param.'
end
If ErrorMessage NE '' then
Error_Services('Set', ErrorMessage)
end
end service
Service PushSigProfileToWoMat(RDSNo) Service PushSigProfileToWoMat(RDSNo)
@ -1892,9 +1925,6 @@ Service PushSigProfileToWoMat(RDSNo)
WOMatSigProf = obj_WO_Mat('CassSigProfile', WOMatKey) WOMatSigProf = obj_WO_Mat('CassSigProfile', WOMatKey)
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$> WOMatSig = WOMatRec<WO_MAT_SIGNATURE$>
WOMatSigDTM = WOMatRec<WO_MAT_SIG_DTM$> WOMatSigDTM = WOMatRec<WO_MAT_SIG_DTM$>
WOMatSigProfOrig = WOMatSigProf
WOMatSigOrig = WOMatSig
WOMatSigDTMOrig = WOMatSigDTM
// Update WO_MAT signature profile to match for the "1VER" stage // Update WO_MAT signature profile to match for the "1VER" stage
Stage = '1VER' Stage = '1VER'
@ -1966,15 +1996,9 @@ Service PushSigProfileToWoMat(RDSNo)
WOMatSigDTM<0, vPos> = FQASigDTM WOMatSigDTM<0, vPos> = FQASigDTM
end end
If WOMatSigProf NE WOMatSigProfOrig then
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_PROFILE$, WOMatSigProf) Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_PROFILE$, WOMatSigProf)
end
If WOMatSig NE WOMatSigOrig then
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSig) Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSig)
end
If WOMatSigDTM NE WOMatSigDTMOrig then
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTM) Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTM)
end
end else end else
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
@ -1997,9 +2021,7 @@ Service PushSigProfileToWoMat(RDSNo)
end service end service
Service AllTWUseSigned(RDSNo) Service AllTWUseSigned(RDSNo)
If RDSNo NE '' then If RDSNo NE '' then
LSKeys = Xlate('RDS', RDSNo, 'RDS_LS_SORTED', 'X') LSKeys = Xlate('RDS', RDSNo, 'RDS_LS_SORTED', 'X')
AllMetKeys = XLATE('RDS_LAYER', LSKeys, RDS_LAYER_RDS_TEST_KEYS$, 'X') AllMetKeys = XLATE('RDS_LAYER', LSKeys, RDS_LAYER_RDS_TEST_KEYS$, 'X')
@ -2022,10 +2044,8 @@ Service AllTWUseSigned(RDSNo)
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
end end
end end
end service end service
Service GetRDSKeys(WONo) Service GetRDSKeys(WONo)
Response = '' Response = ''
@ -2286,6 +2306,136 @@ Service VerifyWOLogRDSKeyIndex(RDSNo)
end service end service
Service CheckUserRDSModificationPerm(UserId)
ErrorMsg = ''
CanUserModify = False$
If UserId NE '' then
If RowExists('LSL_USERS', UserId) then
Begin Case
Case MemberOf(UserId, 'ENGINEERING')
CanUserModify = True$
Case MemberOf(UserId, 'OI_ADMIN')
CanUserModify = True$
Case MemberOf(UserId, 'SUPERVISOR')
CanUserModify = True$
Case MemberOf(UserId, 'LEAD')
CanUserModify = True$
Case MemberOf(UserId, 'ENG_TECH')
CanUserModify = True$
Case Otherwise$
CanUserModify = False$
End Case
end else
ErrorMsg = 'User not found in Users table.'
end
end else
ErrorMsg = 'User Id was null.'
end
If ErrorMsg NE '' then
Error_Services('Add', ErrorMsg)
end
Response = CanUserModify
end service
Service UnsignPreEpiSignature(RDSNo, UserId)
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS\Signatures'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Pre-Epi-Unsign.csv'
Headers = 'Logging DTM':@FM:'RDS No.':@FM:'User':@FM:'Message'
objPreEpiUnsignLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime
ErrorMsg = ''
PreEpiUnsign = False$
If RDSNo NE '' then
If RowExists('RDS', RDSNo) then
if UserId NE '' then
if RowExists('LSL_USERS', UserId) then
CanUserModifyRDS = RDS_Services('CheckUserRDSModificationPerm', UserId)
If Error_Services('NoError') then
If CanUserModifyRDS then
UnsignPreEpiReady = QA_Services('UnsignPreEpiReady', RDSNo)
if Error_Services('NoError') then
If UnsignPreEpiReady then
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG$, '', True$, False$, False$)
If Error_Services('NoError') then
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG_DATE$, '', True$, False$, False$)
If Error_Services('NoError') then
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG_TIME$, '', True$, False$, False$)
If Error_Services('NoError') then
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_VERIFY_QTY$, '', True$, False$, False$)
if Error_Services('NoError') then
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_REACTOR$, '', True$, False$, False$)
If Error_Services('NoError') then
PreEpiUnsign = True$
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'Error clearing the RDS Pre Epi Signature Time on RDS ' : RDSNo : '.'
end
end else
ErrorMsg = 'Error clearing the RDS Pre Epi Signature Date on RDS ' : RDSNo : '.'
end
end else
ErrorMsg = 'Error clearing the RDS Pre Epi Signature on RDS ' : RDSNo : '.'
end
end else
ErrorMsg = 'Pre Epi is unable to be unsigned because a signature beyond pre-epi exists.'
end
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'User does not have permissions to perform a Pre-Epi Unsign'
end
end else
ErrorMsg = Error_Services('GetMessage')
end
end else
ErrorMsg = 'User ' : UserId : ' not found in database.'
end
end else
ErrorMsg = 'User Id was null.'
end
end else
ErrorMsg = 'RDS ' : RDSNo : ' not found in database.'
end
end else
ErrorMsg = 'RDS Number was null.'
end
If ErrorMsg EQ '' then
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = RDSNo
LogData<3> = UserId
LogData<4> = 'Successfully unsigned pre-epi signature.'
Logging_Services('AppendLog', objPreEpiUnsignLog, LogData, @RM, @FM, False$)
end else
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = RDSNo
LogData<3> = UserId
LogData<4> = ErrorMsg
Logging_Services('AppendLog', objPreEpiUnsignLog, LogData, @RM, @FM, False$)
Error_Services('Add', ErrorMsg)
end
Response = PreEpiUnsign
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -2298,3 +2448,19 @@ ClearCursors:
return return

View File

@ -242,6 +242,10 @@ Equ API_COLOR_BTNTEXT$ To 18
Equ API_COLOR_INACTIVECAPTIONTEXT$ To 19 Equ API_COLOR_INACTIVECAPTIONTEXT$ To 19
Equ API_COLOR_BTNHIGHLIGHT$ To 20 Equ API_COLOR_BTNHIGHLIGHT$ To 20
// Edit Line Color Equates
Equ READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
Equ EDIT_ACTIVE_WHITE$ TO 16777215
// Preference Manager // Preference Manager
Equ ImagePath$ to Memory_Services('GetValue', 'PM_CURRENT_IMAGE_PATH') : '\' Equ ImagePath$ to Memory_Services('GetValue', 'PM_CURRENT_IMAGE_PATH') : '\'
PMSystemFont = Memory_Services('GetValue', 'PM_SYSTEM_FONT') PMSystemFont = Memory_Services('GetValue', 'PM_SYSTEM_FONT')

View File

@ -261,3 +261,6 @@ Equ RDS_WAFER_COUNTER_QTY$ To 308
Equ RDS_WAFER_COUNTER_DTM$ To 309 Equ RDS_WAFER_COUNTER_DTM$ To 309
Equ RDS_POST_SUPERCEDE$ To 310 Equ RDS_POST_SUPERCEDE$ To 310
Equ RDS_ALL_TW_USE_SIGNED$ To 311 Equ RDS_ALL_TW_USE_SIGNED$ To 311
Equ RDS_LOAD_EXTRA_1_REACTOR$ To 312
Equ RDS_LOAD_EXTRA_2_REACTOR$ To 313