Implemented suggested changes and added extra error checking
This commit is contained in:
@ -199,89 +199,94 @@ 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$>
|
if Error_Services('NoError') then
|
||||||
ReactorNo = RDSRec<RDS_REACTOR$>
|
UnloadSigned = RDSRec<RDS_OPERATOR_OUT$>
|
||||||
//Unload Extra 1
|
ReactorNo = RDSRec<RDS_REACTOR$>
|
||||||
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
//Unload Extra 1
|
||||||
UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' )
|
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
||||||
UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D')
|
UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' )
|
||||||
UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT')
|
UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D')
|
||||||
//Load Extra 1
|
UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT')
|
||||||
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
//Load Extra 1
|
||||||
LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' )
|
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
||||||
LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D')
|
LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' )
|
||||||
LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT')
|
LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D')
|
||||||
LoadExtra1Reactor = RDSRec<RDS_LOAD_EXTRA_1_REACTOR$>
|
LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT')
|
||||||
//Unload Extra 2
|
LoadExtra1Reactor = RDSRec<RDS_LOAD_EXTRA_1_REACTOR$>
|
||||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
//Unload Extra 2
|
||||||
UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' )
|
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||||
UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D')
|
UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' )
|
||||||
UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT')
|
UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D')
|
||||||
//Load Extra 2
|
UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT')
|
||||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
//Load Extra 2
|
||||||
LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
|
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||||
LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
|
LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
|
||||||
LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
|
LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
|
||||||
LoadExtra2Reactor = RDSRec<RDS_LOAD_EXTRA_2_REACTOR$>
|
LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
|
||||||
|
LoadExtra2Reactor = RDSRec<RDS_LOAD_EXTRA_2_REACTOR$>
|
||||||
|
|
||||||
|
//Populate text fields
|
||||||
|
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast)
|
||||||
|
Set_Property(@Window : '.EDL_UNLOAD_EX_1_DATE', 'TEXT', UnloadExtra1Date)
|
||||||
|
Set_Property(@Window : '.EDL_UNLOAD_EX_1_TIME', 'TEXT', UnloadExtra1Time)
|
||||||
|
Set_Property(@Window : '.EDL_LOAD_EX_1_USER', 'TEXT', LoadExtra1UserFirstLast)
|
||||||
|
Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date)
|
||||||
|
Set_Property(@Window : '.EDL_LOAD_EX_1_TIME', 'TEXT', LoadExtra1Time)
|
||||||
|
Set_Property(@Window : '.EDL_UNLOAD_EX_2_USER', 'TEXT', UnloadExtra2UserFirstLast)
|
||||||
|
Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date)
|
||||||
|
Set_Property(@Window : '.EDL_UNLOAD_EX_2_TIME', 'TEXT', UnloadExtra2Time)
|
||||||
|
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_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
|
||||||
|
Msg(@Window, 'Error reading RDS record from database.')
|
||||||
|
end
|
||||||
|
|
||||||
//Populate text fields
|
|
||||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast)
|
|
||||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_DATE', 'TEXT', UnloadExtra1Date)
|
|
||||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_TIME', 'TEXT', UnloadExtra1Time)
|
|
||||||
Set_Property(@Window : '.EDL_LOAD_EX_1_USER', 'TEXT', LoadExtra1UserFirstLast)
|
|
||||||
Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date)
|
|
||||||
Set_Property(@Window : '.EDL_LOAD_EX_1_TIME', 'TEXT', LoadExtra1Time)
|
|
||||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_USER', 'TEXT', UnloadExtra2UserFirstLast)
|
|
||||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date)
|
|
||||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_TIME', 'TEXT', UnloadExtra2Time)
|
|
||||||
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_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')
|
||||||
@ -289,101 +294,115 @@ Refresh:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ReactorChange:
|
ReactorChange:
|
||||||
|
|
||||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
WONo = RDSRec<RDS_WO$>
|
if Error_Services('NoError') then
|
||||||
ReactorNo = ''
|
WONo = RDSRec<RDS_WO$>
|
||||||
LLChosen = ''
|
ReactorNo = ''
|
||||||
ChangePermitted = False$
|
LLChosen = ''
|
||||||
Begin Case
|
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
|
Case Control EQ 'PUB_SIGN_LOAD_EX_1'
|
||||||
If PickPlace EQ True$ then
|
ReactorNo = Get_Property(@Window : '.EDL_REACTOR1', 'TEXT')
|
||||||
LLDisabled = XLATE('REACTOR', ReactorNo, 'ACTIVE_LL_DISABLED', 'X')
|
ReactorField = RDS_LOAD_EXTRA_1_REACTOR$
|
||||||
IF LLDisabled NE '' then
|
Case Control EQ 'PUB_SIGN_LOAD_EX_2'
|
||||||
ReactLLRec = Database_Services('ReadDataRow', 'REACT_LL', LLDisabled)
|
ReactorNo = Get_Property(@Window : '.EDL_REACTOR2', 'TEXT')
|
||||||
SideDisabled = ReactLLRec<REACT_LL_DISABLED$>
|
ReactorField = RDS_LOAD_EXTRA_2_REACTOR$
|
||||||
QualMode = ReactLLRec<REACT_LL_QUAL_MODE$>
|
Case Otherwise$
|
||||||
Begin Case
|
|
||||||
Case SideDisabled EQ 'L'
|
End Case
|
||||||
LLChosen = 'R'
|
|
||||||
Case SideDisabled EQ 'R'
|
If ReactorNo NE '' then
|
||||||
LLChosen = 'L'
|
PickPlace = Xlate('REACTOR', ReactorNo, 'PICK_PLACE', 'X')
|
||||||
End Case
|
If (Reactor_Services('GetReactorAvailChamberCount', ReactorNo) NE 0) OR (PickPlace EQ False$) then
|
||||||
end else
|
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
|
||||||
Def = ''
|
GoSub ClearCursors
|
||||||
Def<MCAPTION$> = 'Select Load Lock'
|
Set_Status(0)
|
||||||
Def<MTYPE$> = 'BLeft,Right'
|
RList(Query, TARGET_ACTIVELIST$, '', '' '')
|
||||||
Def<MTEXT$> = 'Please select a load lock.'
|
SchedReactors = ''
|
||||||
Def<MMODAL$> = 'A'
|
EOF = False$
|
||||||
LLResponse = Msg(@Window, Def)
|
Loop
|
||||||
Begin Case
|
ReadNext SchedReactor else EOF = True$
|
||||||
Case LLResponse EQ 1
|
Until EOF
|
||||||
LLChosen = 'L'
|
SchedReactors<0, -1> = SchedReactor
|
||||||
Case LLResponse EQ 2
|
Repeat
|
||||||
LLChosen = 'R'
|
|
||||||
End Case
|
Locate ReactorNo in SchedReactors using @VM setting vPos then
|
||||||
end
|
If PickPlace EQ True$ then
|
||||||
If LLChosen NE '' then
|
LLDisabled = XLATE('REACTOR', ReactorNo, 'ACTIVE_LL_DISABLED', 'X')
|
||||||
ChangePermitted = True$
|
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
|
end else
|
||||||
Error_Services('Add', 'You must select a load lock for this lot.')
|
ChangePermitted = True$
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ChangePermitted = True$
|
Swap @VM with ',' in SchedReactors
|
||||||
|
Error_Services('Add', 'Assigned reactor, ':ReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.')
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Swap @VM with ',' in SchedReactors
|
Error_Services('Add', ReactorNo: 'does not have the capacity necessary for this lot.')
|
||||||
Error_Services('Add', 'Assigned reactor, ':ReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.')
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', ReactorNo: 'does not have the capacity necessary for this lot.')
|
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 else
|
||||||
|
Msg(@Window, 'Error changing reactor!')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid Reactor number.')
|
Msg(@Window, 'Error reading RDS from database!')
|
||||||
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
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ClearCursors:
|
||||||
|
For counter = 0 to 8
|
||||||
|
ClearSelect counter
|
||||||
|
Next counter
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2333,123 +2333,52 @@ Service UnsignLoadSignatureReady(RDSNo)
|
|||||||
|
|
||||||
end service
|
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
|
|
||||||
|
|
||||||
|
|
||||||
Service LoadExtra1stReady(RDSNo)
|
Service LoadExtra1stReady(RDSNo)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
if Error_Services('NoError') then
|
||||||
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
||||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
||||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||||
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||||
Reactor = RDSRec<RDS_REACTOR$>
|
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
|
If Reactor NE '' then
|
||||||
Swap @VM with ',' in SchedReactors
|
WONo = RDSRec<RDS_WO$>
|
||||||
ErrorMessage = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
|
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
|
||||||
Error_Services('Set', ErrorMessage)
|
GoSub ClearCursors
|
||||||
Response = False$
|
Set_Status(0)
|
||||||
return
|
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 then
|
||||||
|
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||||
|
Response = True$
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'RDS is not eligible to have Load Extra 1 signed.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in SchedReactors
|
||||||
|
ErrorMsg = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
|
|
||||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
If ErrorMsg NE '' then
|
||||||
Response = True$
|
Error_Services('Add', ErrorMsg)
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
@ -2457,79 +2386,106 @@ end service
|
|||||||
|
|
||||||
Service UnsignLoadExtra1stReady(RDSNo)
|
Service UnsignLoadExtra1stReady(RDSNo)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
if Error_Services('NoError') then
|
||||||
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
||||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
||||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||||
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||||
If LoadExtra1Signature NE '' then
|
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
||||||
If UnloadExtra2Signature EQ '' AND LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
If LoadExtra1Signature NE '' then
|
||||||
Response = True$
|
If UnloadExtra2Signature EQ '' AND LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||||
end
|
Response = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service LoadExtra2ndReady(RDSNo)
|
Service LoadExtra2ndReady(RDSNo)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
If Error_Services('NoError') then
|
||||||
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
||||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
||||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||||
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||||
Reactor = RDSRec<RDS_REACTOR$>
|
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
|
If Reactor NE '' then
|
||||||
Swap @VM with ',' in SchedReactors
|
WONo = RDSRec<RDS_WO$>
|
||||||
ErrorMessage = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
|
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
|
||||||
Error_Services('Set', ErrorMessage)
|
ClearSelect
|
||||||
Response = False$
|
Set_Status(0)
|
||||||
return
|
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 then
|
||||||
|
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||||
|
Response = True$
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'RDS is not eligible to have the Load Extra 2 set.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in SchedReactors
|
||||||
|
ErrorMsg = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
|
||||||
|
Response = False$
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
|
|
||||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
If ErrorMsg NE '' then
|
||||||
Response = True$
|
Error_Services('Add', ErrorMsg)
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignLoadExtra2ndReady(RDSNo)
|
Service UnsignLoadExtra2ndReady(RDSNo)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
If Error_Services('NoError') then
|
||||||
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
||||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
||||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||||
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||||
If LoadExtra2Signature NE '' then
|
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
||||||
If StandardUnloadSignature EQ '' then
|
If LoadExtra2Signature NE '' then
|
||||||
Response = True$
|
If StandardUnloadSignature EQ '' then
|
||||||
end
|
Response = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
@ -3834,10 +3790,14 @@ Service UnsignPreEpiReady(RDSNo)
|
|||||||
If UnsignLoadReady then
|
If UnsignLoadReady then
|
||||||
//Check if LOAD signature is present
|
//Check if LOAD signature is present
|
||||||
LoadSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_OPERATOR_IN$, True$, 0, False$)
|
LoadSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_OPERATOR_IN$, True$, 0, False$)
|
||||||
If LoadSig EQ '' then
|
If Error_Services('NoError') then
|
||||||
UnsignPreEpiReady = True$
|
If LoadSig EQ '' then
|
||||||
|
UnsignPreEpiReady = True$
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Load signature is set.'
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMsg = 'Load signature is set.'
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMsg = 'A signature beyond pre-epi exists. Please check later stages of this RDS.'
|
ErrorMsg = 'A signature beyond pre-epi exists. Please check later stages of this RDS.'
|
||||||
@ -3883,3 +3843,4 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -169,7 +169,6 @@ 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')
|
||||||
@ -187,243 +186,252 @@ Event PUB_SIGN.CLICK()
|
|||||||
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 = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_REACTOR$, True$, 0, False$)
|
Reactor = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_REACTOR$, True$, 0, False$)
|
||||||
If Reactor NE '' then
|
If Error_Services('NoError') then
|
||||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
|
If Reactor NE '' then
|
||||||
ReactorType = ReactorRec<REACTOR_REACT_TYPE$>
|
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
|
||||||
ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X')
|
if Error_Services('NoError') then
|
||||||
|
ReactorType = ReactorRec<REACTOR_REACT_TYPE$>
|
||||||
// Don't allow tracking in on down reactor
|
ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X')
|
||||||
ReactorCurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 1, 'X')
|
|
||||||
ReactCurrModeRec = Database_Services('ReadDataRow','REACT_MODE_NG', ReactorCurrModeKey, '','','')
|
|
||||||
CurrReactMode = ReactCurrModeRec<REACT_MODE_NG_MODE$>
|
|
||||||
CurrE10State = Xlate('REACTOR_MODES', CurrReactMode, REACTOR_MODES_E10_STATE$, 'X')
|
|
||||||
|
|
||||||
Override = False$
|
|
||||||
UserVerification = ''
|
|
||||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE'
|
|
||||||
|
|
||||||
ReactorIsDown = CurrE10State _NEC 'PRODUCTIVE'
|
|
||||||
If (ReactorIsDown EQ True$) then
|
|
||||||
// Allow override during prove in
|
|
||||||
If ReactorType EQ 'EPP' then
|
|
||||||
If RDS_Services('IsEpiProTestRun', RDSNo) then Override = True$
|
|
||||||
end
|
|
||||||
|
|
||||||
If Override EQ False$ then
|
|
||||||
UserMsg = "Reactor down. Override required from a lead or supervisor."
|
|
||||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
|
||||||
Override = UserVerification<1>
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If (ReactorIsDown NE True$) OR (Override EQ True$) then
|
|
||||||
If (ReactorType EQ 'ASM+' OR ReactorType EQ 'HTR' OR ReactorType EQ 'ASM') AND (ROTREnabled EQ True$) then
|
|
||||||
ROTRStatus = ReactorRec<REACTOR_ROTR_STATUS$>
|
|
||||||
If ROTRStatus EQ 'F' then
|
|
||||||
FailReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
|
||||||
Message = 'Unable to load reactor.' : CRLF$ : FailReason
|
|
||||||
RotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
|
||||||
If RotrOverrideCount EQ '' then RotrOverrideCount = 0
|
|
||||||
Message := CRLF$ : RotrOverrideCount : ' override(s) were performed since the ROTR block was originally set.'
|
|
||||||
Message := CRLF$ : 'A lead or supervisor must override to clear ROTR status.'
|
|
||||||
|
|
||||||
Response = Msg(@Window, '', 'RDS_ROTR_OVERRIDE', '', Message)
|
|
||||||
|
|
||||||
Begin Case
|
|
||||||
Case Response EQ 1
|
|
||||||
Response = True$ ; // User Clicked Override
|
|
||||||
Case Response EQ 2
|
|
||||||
Response = False$ ; // User Clicked Cancel
|
|
||||||
Case Response EQ char(27)
|
|
||||||
Response = False$ ; // User Pressed Escape Key
|
|
||||||
End Case
|
|
||||||
|
|
||||||
If Response EQ True$ then
|
|
||||||
If UserVerification EQ '' then
|
|
||||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups)
|
|
||||||
end
|
|
||||||
Valid = UserVerification<1>
|
|
||||||
If Valid EQ True$ then
|
|
||||||
// Prompt user for a comment
|
|
||||||
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)
|
|
||||||
|
|
||||||
IF ResponseComment<2> NE '' THEN
|
|
||||||
// Clear ROTR reactor load block.
|
|
||||||
overrideLogTable = 'RDS':@VM:'REACTOR'
|
|
||||||
overrideLogKey = RDSNo:@VM:Reactor
|
|
||||||
overrideLogUser = Response<2>
|
|
||||||
overrideLogComment = ResponseComment<2>
|
|
||||||
overrideLogCategory = 'ROTR_BLOCK'
|
|
||||||
overrideLogCause = FailReason
|
|
||||||
orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory, overrideLogCause)
|
|
||||||
|
|
||||||
//Add override key to RDS
|
|
||||||
RDSRec = Xlate('RDS', RDSNo, '', 'X')
|
|
||||||
RDSRec = Insert(RDSRec, RDS_OVERRIDE_KEYS$, 1, 0, orKey)
|
|
||||||
|
|
||||||
ReactorRec<REACTOR_ROTR_STATUS$> = 'P'
|
|
||||||
|
|
||||||
rotrStatusReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
|
||||||
ReactorRec<REACTOR_PREVIOUS_ROTR_STATUS_REASON$> = rotrStatusReason
|
|
||||||
ReactorRec<REACTOR_ROTR_STATUS_REASON$> = ''
|
|
||||||
|
|
||||||
ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$> = RDSNo
|
|
||||||
|
|
||||||
rotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
|
||||||
ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$> = rotrOverrideCount + 1
|
|
||||||
|
|
||||||
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
|
||||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
|
||||||
|
|
||||||
end else
|
|
||||||
//No Comment added. Block Load Signaure
|
|
||||||
Msg(@Window, 'A comment is required to perform an ROTR Block Override', '', '', '')
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
// ROTR override not verified. Block load signature.
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
// Block load signature
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
SupplAckReq = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD')
|
|
||||||
IF (SupplAckReq NE FALSE$) then
|
|
||||||
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$)
|
|
||||||
If Response EQ False$ then
|
|
||||||
return
|
|
||||||
end else
|
|
||||||
PreAuthenticated = TRUE$
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X')
|
|
||||||
If RDSLayerAckReq EQ True$ then
|
|
||||||
ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
|
|
||||||
ErrMsg(ErrorMessage)
|
|
||||||
LayerKeys = Xlate('RDS', RDSNo, 'RDS_LAYER_KEYS', 'X')
|
|
||||||
// Just display the first layer
|
|
||||||
RDSLSID = LayerKeys<0, 1>
|
|
||||||
Dialog_Box('RDS_LAYER', @Window, RDSLSID)
|
|
||||||
|
|
||||||
RDSLayerAck = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK', 'X')
|
// Don't allow tracking in on down reactor
|
||||||
If ( (RDSLayerAck EQ False$) or (RDSLayerAck EQ '') ) then
|
ReactorCurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 1, 'X')
|
||||||
ErrorMessage = 'RDS layer parameters were not acknowledged. Sign load stage event aborting.'
|
ReactCurrModeRec = Database_Services('ReadDataRow','REACT_MODE_NG', ReactorCurrModeKey, '','','')
|
||||||
ErrMsg(ErrorMessage)
|
CurrReactMode = ReactCurrModeRec<REACT_MODE_NG_MODE$>
|
||||||
return
|
CurrE10State = Xlate('REACTOR_MODES', CurrReactMode, REACTOR_MODES_E10_STATE$, 'X')
|
||||||
|
|
||||||
|
Override = False$
|
||||||
|
UserVerification = ''
|
||||||
|
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE'
|
||||||
|
|
||||||
|
ReactorIsDown = CurrE10State _NEC 'PRODUCTIVE'
|
||||||
|
If (ReactorIsDown EQ True$) then
|
||||||
|
// Allow override during prove in
|
||||||
|
If ReactorType EQ 'EPP' then
|
||||||
|
If RDS_Services('IsEpiProTestRun', RDSNo) then Override = True$
|
||||||
|
end
|
||||||
|
|
||||||
|
If Override EQ False$ then
|
||||||
|
UserMsg = "Reactor down. Override required from a lead or supervisor."
|
||||||
|
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||||
|
Override = UserVerification<1>
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
If (ReactorIsDown NE True$) OR (Override EQ True$) then
|
||||||
FWIInstAckReq = Xlate('RDS', RDSNo, 'FWI_INST_ACK_REQ', 'X')
|
If (ReactorType EQ 'ASM+' OR ReactorType EQ 'HTR' OR ReactorType EQ 'ASM') AND (ROTREnabled EQ True$) then
|
||||||
If (FWIInstAckReq EQ True$) then
|
ROTRStatus = ReactorRec<REACTOR_ROTR_STATUS$>
|
||||||
Response = RDS_Services('RDSVerifyInst', RDSNo, 'FWI')
|
If ROTRStatus EQ 'F' then
|
||||||
If Response EQ False$ then return
|
FailReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
||||||
end
|
Message = 'Unable to load reactor.' : CRLF$ : FailReason
|
||||||
|
RotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||||
LoadInstAckReq = Xlate('RDS', RDSNo, 'LOAD_INST_ACK_REQ', 'X')
|
If RotrOverrideCount EQ '' then RotrOverrideCount = 0
|
||||||
If (LoadInstAckReq EQ True$) then
|
Message := CRLF$ : RotrOverrideCount : ' override(s) were performed since the ROTR block was originally set.'
|
||||||
Response = RDS_Services('RDSVerifyInst', RDSNo, 'LOAD')
|
Message := CRLF$ : 'A lead or supervisor must override to clear ROTR status.'
|
||||||
If Response EQ False$ then return
|
|
||||||
end
|
Response = Msg(@Window, '', 'RDS_ROTR_OVERRIDE', '', Message)
|
||||||
|
|
||||||
SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
|
Begin Case
|
||||||
IF (SupplAckReq EQ True$) then
|
Case Response EQ 1
|
||||||
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo)
|
Response = True$ ; // User Clicked Override
|
||||||
If Response EQ False$ then return
|
Case Response EQ 2
|
||||||
end
|
Response = False$ ; // User Clicked Cancel
|
||||||
//Check if TW Required
|
Case Response EQ char(27)
|
||||||
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ AND (ReactorType EQ 'HTR' OR ReactorType EQ 'ASM' OR ReactorType 'ASM+') then
|
Response = False$ ; // User Pressed Escape Key
|
||||||
UsingTestWafers = False$
|
End Case
|
||||||
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
|
||||||
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
|
If Response EQ True$ then
|
||||||
If ExistingTestWafersLogged NE True$ then
|
If UserVerification EQ '' then
|
||||||
If Not(IsTWReqd) then
|
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups)
|
||||||
//Test wafer logging is NOT required here.
|
|
||||||
If ReactorType NE 'EPP' then
|
|
||||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Test Wafer Usage logging is not required on this load.':@FM:'Are any test wafers loaded?')
|
|
||||||
If UsingTestWafers EQ True$ then
|
|
||||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
|
||||||
If TWLogResult NE True$ then
|
|
||||||
ContinueSign = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
|
||||||
If Not(ContinueSign) then return
|
|
||||||
end
|
end
|
||||||
end
|
Valid = UserVerification<1>
|
||||||
end
|
If Valid EQ True$ then
|
||||||
end else
|
// Prompt user for a comment
|
||||||
//Test wafer logging is Required here.
|
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)
|
||||||
Begin Case
|
|
||||||
Case ReactorType EQ 'ASM' OR ReactorType EQ 'HTR'
|
IF ResponseComment<2> NE '' THEN
|
||||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on this run':@FM:'Are any test wafers loaded?')
|
// Clear ROTR reactor load block.
|
||||||
Case ReactorType EQ 'ASM+'
|
overrideLogTable = 'RDS':@VM:'REACTOR'
|
||||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on the next run.':@FM:'Are any test wafers loaded?')
|
overrideLogKey = RDSNo:@VM:Reactor
|
||||||
End Case
|
overrideLogUser = Response<2>
|
||||||
If UsingTestWafers EQ True$ then
|
overrideLogComment = ResponseComment<2>
|
||||||
//User has stated that they are using test wafers
|
overrideLogCategory = 'ROTR_BLOCK'
|
||||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
overrideLogCause = FailReason
|
||||||
If TWLogResult NE True$ then
|
orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory, overrideLogCause)
|
||||||
//User exited the the TW log prompt answering that they are not using any test wafers.
|
|
||||||
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
|
//Add override key to RDS
|
||||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
|
RDSRec = Xlate('RDS', RDSNo, '', 'X')
|
||||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
RDSRec = Insert(RDSRec, RDS_OVERRIDE_KEYS$, 1, 0, orKey)
|
||||||
Override = UserVerification<1>
|
|
||||||
OverrideUser = UserVerification<2>
|
ReactorRec<REACTOR_ROTR_STATUS$> = 'P'
|
||||||
If Override then
|
|
||||||
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
rotrStatusReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
||||||
|
ReactorRec<REACTOR_PREVIOUS_ROTR_STATUS_REASON$> = rotrStatusReason
|
||||||
|
ReactorRec<REACTOR_ROTR_STATUS_REASON$> = ''
|
||||||
|
|
||||||
|
ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$> = RDSNo
|
||||||
|
|
||||||
|
rotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||||
|
ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$> = rotrOverrideCount + 1
|
||||||
|
|
||||||
|
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
||||||
|
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||||
|
|
||||||
|
end else
|
||||||
|
//No Comment added. Block Load Signaure
|
||||||
|
Msg(@Window, 'A comment is required to perform an ROTR Block Override', '', '', '')
|
||||||
|
return
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
|
// ROTR override not verified. Block load signature.
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end else
|
|
||||||
//User has stated that they are NOT using test wafers
|
|
||||||
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
|
|
||||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
|
|
||||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
|
||||||
Override = UserVerification<1>
|
|
||||||
OverrideUser = UserVerification<2>
|
|
||||||
If Override then
|
|
||||||
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
|
||||||
end else
|
end else
|
||||||
|
// Block load signature
|
||||||
return
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
SupplAckReq = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD')
|
||||||
|
IF (SupplAckReq NE FALSE$) then
|
||||||
|
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$)
|
||||||
|
If Response EQ False$ then
|
||||||
|
return
|
||||||
|
end else
|
||||||
|
PreAuthenticated = TRUE$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X')
|
||||||
|
If RDSLayerAckReq EQ True$ then
|
||||||
|
ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
|
||||||
|
ErrMsg(ErrorMessage)
|
||||||
|
LayerKeys = Xlate('RDS', RDSNo, 'RDS_LAYER_KEYS', 'X')
|
||||||
|
// Just display the first layer
|
||||||
|
RDSLSID = LayerKeys<0, 1>
|
||||||
|
Dialog_Box('RDS_LAYER', @Window, RDSLSID)
|
||||||
|
|
||||||
|
RDSLayerAck = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK', 'X')
|
||||||
|
If ( (RDSLayerAck EQ False$) or (RDSLayerAck EQ '') ) then
|
||||||
|
ErrorMessage = 'RDS layer parameters were not acknowledged. Sign load stage event aborting.'
|
||||||
|
ErrMsg(ErrorMessage)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
FWIInstAckReq = Xlate('RDS', RDSNo, 'FWI_INST_ACK_REQ', 'X')
|
||||||
|
If (FWIInstAckReq EQ True$) then
|
||||||
|
Response = RDS_Services('RDSVerifyInst', RDSNo, 'FWI')
|
||||||
|
If Response EQ False$ then return
|
||||||
|
end
|
||||||
|
|
||||||
|
LoadInstAckReq = Xlate('RDS', RDSNo, 'LOAD_INST_ACK_REQ', 'X')
|
||||||
|
If (LoadInstAckReq EQ True$) then
|
||||||
|
Response = RDS_Services('RDSVerifyInst', RDSNo, 'LOAD')
|
||||||
|
If Response EQ False$ then return
|
||||||
|
end
|
||||||
|
|
||||||
|
SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
|
||||||
|
IF (SupplAckReq EQ True$) then
|
||||||
|
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo)
|
||||||
|
If Response EQ False$ then return
|
||||||
|
end
|
||||||
|
//Check if TW Required
|
||||||
|
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ AND (ReactorType EQ 'HTR' OR ReactorType EQ 'ASM' OR ReactorType 'ASM+') then
|
||||||
|
UsingTestWafers = False$
|
||||||
|
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
||||||
|
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
|
||||||
|
If ExistingTestWafersLogged NE True$ then
|
||||||
|
If Not(IsTWReqd) then
|
||||||
|
//Test wafer logging is NOT required here.
|
||||||
|
If ReactorType NE 'EPP' then
|
||||||
|
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Test Wafer Usage logging is not required on this load.':@FM:'Are any test wafers loaded?')
|
||||||
|
If UsingTestWafers EQ True$ then
|
||||||
|
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||||
|
If TWLogResult NE True$ then
|
||||||
|
ContinueSign = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
||||||
|
If Not(ContinueSign) then return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
//Test wafer logging is Required here.
|
||||||
|
Begin Case
|
||||||
|
Case ReactorType EQ 'ASM' OR ReactorType EQ 'HTR'
|
||||||
|
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on this run':@FM:'Are any test wafers loaded?')
|
||||||
|
Case ReactorType EQ 'ASM+'
|
||||||
|
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on the next run.':@FM:'Are any test wafers loaded?')
|
||||||
|
End Case
|
||||||
|
If UsingTestWafers EQ True$ then
|
||||||
|
//User has stated that they are using test wafers
|
||||||
|
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||||
|
If TWLogResult NE True$ then
|
||||||
|
//User exited the the TW log prompt answering that they are not using any test wafers.
|
||||||
|
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
|
||||||
|
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
|
||||||
|
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||||
|
Override = UserVerification<1>
|
||||||
|
OverrideUser = UserVerification<2>
|
||||||
|
If Override then
|
||||||
|
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
||||||
|
end else
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
//User has stated that they are NOT using test wafers
|
||||||
|
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
|
||||||
|
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
|
||||||
|
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||||
|
Override = UserVerification<1>
|
||||||
|
OverrideUser = UserVerification<2>
|
||||||
|
If Override then
|
||||||
|
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
||||||
|
end else
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
ReadyToSign = QA_Services('LoadSignatureReady', RDSNo, @User4, WfrQty, LLSide)
|
||||||
|
If ReadyToSign EQ True$ then
|
||||||
ReadyToSign = QA_Services('LoadSignatureReady', RDSNo, @User4, WfrQty, LLSide)
|
If PreAuthenticated EQ FALSE$ then
|
||||||
If ReadyToSign EQ True$ then
|
initParams = ''
|
||||||
If PreAuthenticated EQ FALSE$ then
|
initParams<4> = 'Sign Load'
|
||||||
initParams = ''
|
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
||||||
initParams<4> = 'Sign Load'
|
Valid = Response<1>
|
||||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
If (Valid EQ True$) then
|
||||||
Valid = Response<1>
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
If (Valid EQ True$) then
|
end
|
||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
end else
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
Msg(@Window, ErrorMsg)
|
||||||
end
|
end
|
||||||
end
|
end else
|
||||||
If Error_Services('HasError') then
|
Msg(@Window, "Reactor load signature not allowed on a down reactor.")
|
||||||
ErrorMsg = Error_Services('GetMessage')
|
|
||||||
ErrMsg(ErrorMsg)
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Msg(@Window, "Reactor load signature not allowed on a down reactor.")
|
Msg(@Window, "RDS is not assigned to a reactor.")
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Msg(@Window, "RDS is not assigned to a reactor.")
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
Msg(@Window, ErrorMsg)
|
||||||
end
|
end
|
||||||
GoSub OLE_LL_Status
|
GoSub OLE_LL_Status
|
||||||
Set_Property(@Window, 'SAVEWARN', False$)
|
Set_Property(@Window, 'SAVEWARN', False$)
|
||||||
@ -720,3 +728,4 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1925,6 +1925,9 @@ 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'
|
||||||
@ -1996,9 +1999,15 @@ Service PushSigProfileToWoMat(RDSNo)
|
|||||||
WOMatSigDTM<0, vPos> = FQASigDTM
|
WOMatSigDTM<0, vPos> = FQASigDTM
|
||||||
end
|
end
|
||||||
|
|
||||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_PROFILE$, WOMatSigProf)
|
If WOMatSigProf NE WOMatSigProfOrig then
|
||||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSig)
|
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_PROFILE$, WOMatSigProf)
|
||||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTM)
|
end
|
||||||
|
If WOMatSig NE WOMatSigOrig then
|
||||||
|
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)
|
||||||
|
end
|
||||||
|
|
||||||
end else
|
end else
|
||||||
ErrorMsg = Error_Services('GetMessage')
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
@ -2364,31 +2373,21 @@ Service UnsignPreEpiSignature(RDSNo, UserId)
|
|||||||
UnsignPreEpiReady = QA_Services('UnsignPreEpiReady', RDSNo)
|
UnsignPreEpiReady = QA_Services('UnsignPreEpiReady', RDSNo)
|
||||||
if Error_Services('NoError') then
|
if Error_Services('NoError') then
|
||||||
If UnsignPreEpiReady then
|
If UnsignPreEpiReady then
|
||||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG$, '', True$, False$, False$)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo, True$, 0, False$)
|
||||||
If Error_Services('NoError') then
|
if Error_Services('NoError') then
|
||||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG_DATE$, '', True$, False$, False$)
|
RDSRec<RDS_PRE_EPI_SIG$> = ''
|
||||||
|
RDSRec<RDS_PRE_EPI_SIG_DATE$> = ''
|
||||||
|
RDSRec<RDS_PRE_EPI_SIG_TIME$> = ''
|
||||||
|
RDSRec<RDS_VERIFY_QTY$> = ''
|
||||||
|
RDSRec<RDS_REACTOR$> = ''
|
||||||
|
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG_TIME$, '', True$, False$, False$)
|
PreEpiUnsign = True$
|
||||||
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
|
end else
|
||||||
ErrorMsg = 'Error clearing the RDS Pre Epi Signature Date on RDS ' : RDSNo : '.'
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMsg = 'Error clearing the RDS Pre Epi Signature on RDS ' : RDSNo : '.'
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMsg = 'Pre Epi is unable to be unsigned because a signature beyond pre-epi exists.'
|
ErrorMsg = 'Pre Epi is unable to be unsigned because a signature beyond pre-epi exists.'
|
||||||
@ -2464,3 +2463,4 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user