Updated Method to determine if test wafer is required.
This commit is contained in:
parent
2768c1e7f9
commit
0da14ae4ae
@ -89,7 +89,7 @@ Declare subroutine Dialog_Box, Qa_Services, Obj_React_Ll, Start_Window, obj_Reac
|
|||||||
Declare subroutine Lot_Services
|
Declare subroutine Lot_Services
|
||||||
Declare function Dialog_Box, Msg, MemberOf, obj_WO_Mat, Database_Services, Get_Property, obj_React_Status, Get_Status
|
Declare function Dialog_Box, Msg, MemberOf, obj_WO_Mat, Database_Services, Get_Property, obj_React_Status, Get_Status
|
||||||
Declare function QA_Services, Database_Services, Rds_Services, Obj_Calendar, Override_Log_Services, Max, Supplement_Services
|
Declare function QA_Services, Database_Services, Rds_Services, Obj_Calendar, Override_Log_Services, Max, Supplement_Services
|
||||||
Declare function Datetime
|
Declare function Datetime, Test_Run_Services
|
||||||
|
|
||||||
SubclassInfo = Form_Services('FindSubclassControl')
|
SubclassInfo = Form_Services('FindSubclassControl')
|
||||||
Subclass = SubclassInfo<1>
|
Subclass = SubclassInfo<1>
|
||||||
@ -351,9 +351,63 @@ Event PUB_SIGN.CLICK()
|
|||||||
If (Valid EQ True$) then
|
If (Valid EQ True$) then
|
||||||
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ then
|
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ then
|
||||||
UsingTestWafers = False$
|
UsingTestWafers = False$
|
||||||
if ReactorType NE 'EPP' then
|
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
|
||||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?')
|
If ExistingTestWafersLogged EQ '' then
|
||||||
end
|
if ReactorType NE 'EPP' then
|
||||||
|
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?')
|
||||||
|
end
|
||||||
|
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
||||||
|
If UsingTestWafers then
|
||||||
|
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||||
|
If TWLogResult then
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end else
|
||||||
|
If IsTWReqd then
|
||||||
|
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>
|
||||||
|
If Override then
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
||||||
|
If ContinueLoad then
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
if IsTWReqd EQ False$ then
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end else
|
||||||
|
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>
|
||||||
|
If Override then
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
|
|
||||||
|
end else
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ then
|
||||||
|
UsingTestWafers = False$
|
||||||
|
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
|
||||||
|
If ExistingTestWafersLogged EQ '' then
|
||||||
|
if ReactorType NE 'EPP' then
|
||||||
|
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?')
|
||||||
|
end
|
||||||
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
||||||
If UsingTestWafers then
|
If UsingTestWafers then
|
||||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||||
@ -361,7 +415,13 @@ Event PUB_SIGN.CLICK()
|
|||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
end else
|
end else
|
||||||
If IsTWReqd then
|
If IsTWReqd then
|
||||||
Msg(@Window, 'Unable to sign load because test wafer logging is required on this run.')
|
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>
|
||||||
|
If Override then
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
||||||
If ContinueLoad then
|
If ContinueLoad then
|
||||||
@ -373,27 +433,20 @@ Event PUB_SIGN.CLICK()
|
|||||||
if IsTWReqd EQ False$ then
|
if IsTWReqd EQ False$ then
|
||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
end else
|
end else
|
||||||
Msg(@Window, 'Unable to sign load because test wafer logging is required on this run.')
|
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>
|
||||||
|
If Override then
|
||||||
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?')
|
|
||||||
If UsingTestWafers then
|
|
||||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
|
||||||
If TWLogResult then
|
|
||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
|
||||||
end else
|
|
||||||
ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
|
||||||
If ContinueLoad then
|
|
||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||||
end
|
end
|
||||||
@ -720,3 +773,4 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ $Insert REACT_RUN_EQUATES
|
|||||||
$Insert REACTOR_EQUATES
|
$Insert REACTOR_EQUATES
|
||||||
$Insert WO_MAT_QA_EQUATES
|
$Insert WO_MAT_QA_EQUATES
|
||||||
$Insert PRS_STAGE_EQUATES
|
$Insert PRS_STAGE_EQUATES
|
||||||
|
$Insert PRS_PROP_EQUATES
|
||||||
$Insert WO_LOG_EQUATES
|
$Insert WO_LOG_EQUATES
|
||||||
$Insert WM_OUT_EQUATES
|
$Insert WM_OUT_EQUATES
|
||||||
$Insert REACT_UTIL_EQU
|
$Insert REACT_UTIL_EQU
|
||||||
@ -743,31 +744,88 @@ Service IsValidSubLot(RDSNo, RDSType, SupplierLot)
|
|||||||
Response = IsValid
|
Response = IsValid
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
|
||||||
|
table = "RDS"
|
||||||
|
ErrorMessage = ''
|
||||||
|
RDSRecords = ''
|
||||||
|
RDSSortedByAssignmentDTM = ''
|
||||||
|
Open "DICT ":table To @DICT Else
|
||||||
|
ErrorMessage = 'Error opening RDS dictionary'
|
||||||
|
End
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
srch_strng = "WO":@VM:WO:@FM:"REACTOR":@VM:ReactorNo:@FM
|
||||||
|
option = ""
|
||||||
|
flag = ""
|
||||||
|
Btree.Extract(srch_strng, table, @DICT, RDSRecords, option, flag)
|
||||||
|
end
|
||||||
|
RDSRecordsWithPreEpiSig = ''
|
||||||
|
for each RDSKey in RDSRecords using @VM setting RDSPos
|
||||||
|
ThisRDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey, True$, 0, False$)
|
||||||
|
ThisRDSPreEpiDT = ThisRDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||||
|
ThisRDSPreEpiTM = ThisRDSRec<RDS_PRE_EPI_SIG_TIME$>
|
||||||
|
ThisRDSPreEpiDTM = SRP_Datetime('Combine', ThisRDSPreEpiDT, ThisRDSPreEpiTM)
|
||||||
|
RDSRecordsWithPreEpiSig<1, RDSPos> = RDSKey
|
||||||
|
RDSRecordsWithPreEpiSig<2, RDSPos> = ThisRDSPreEpiDTM
|
||||||
|
Next RDSKey
|
||||||
|
RDSSortedByAssignmentDTM = SRP_Sort_Array(RDSRecordsWithPreEpiSig, 'AN2', 0)
|
||||||
|
FinalRDSSortedByAssignmentDTM = ''
|
||||||
|
|
||||||
|
for each RDS in RDSSortedByAssignmentDTM<1> using @VM setting SortedRDSPos
|
||||||
|
ThisRDSDtm = RDSSortedByAssignmentDTM<2, SortedRDSPos>
|
||||||
|
if ThisRDSDtm GT 0 then
|
||||||
|
FinalRDSSortedByAssignmentDTM<1, -1> = RDS
|
||||||
|
FinalRDSSortedByAssignmentDTM<2, -1> = OConv(ThisRDSDtm, 'DT')
|
||||||
|
end
|
||||||
|
Next RDS
|
||||||
|
Response = FinalRDSSortedByAssignmentDTM<1>
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service IsTWLoggingReqd(RDSNo)
|
Service IsTWLoggingReqd(RDSNo)
|
||||||
Response = False$
|
IsTWReqd = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo, True$, 0, False$)
|
ExistingTWRuns = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
|
||||||
ReactorNo = RDSRec<RDS_REACTOR$>
|
If ExistingTWRuns EQ '' then
|
||||||
ReactorType = Database_Services('ReadDataColumn', 'REACTOR', ReactorNo, REACTOR_REACT_TYPE$)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
If ReactorType NE 'EPP' then
|
WONo = RDSRec<RDS_WO$>
|
||||||
IsHGCVReqd = obj_RDS('MetPropFlag', RDSNo:@RM:RDSRec:@RM:'CRES')
|
ReactNo = RDSRec<RDS_REACTOR$>
|
||||||
If IsHGCVReqd EQ True$ then
|
ThisReactorRunOrder = 0
|
||||||
ExistingTWKeys = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
|
ReactRDSNos = RDS_Services('GetRDSRunHistoryByReactorAndWO', ReactNo, WONo)
|
||||||
If ExistingTWKeys EQ '' then
|
LOCATE RDSNo IN ReactRDSNos USING @VM SETTING ThisReactorRunOrder ELSE Return
|
||||||
Response = True$
|
PSNo = RDSRec<RDS_PROD_SPEC_ID$>
|
||||||
end else
|
PSRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo)
|
||||||
Response = False$
|
PRSLayerKeys = PSRec<PROD_SPEC_PRS_LAYER_KEY$>
|
||||||
end
|
for each PRSLayerKey in PRSLayerKeys using @VM
|
||||||
|
PRSPropKeys = Database_Services('ReadDataColumn', 'PRS_LAYER', PRSLayerKey, 5)
|
||||||
end else
|
for each PRSPropKey in PRSPropKeys using @VM
|
||||||
Response = False$
|
PRSPropRec = Database_Services('ReadDataRow', 'PRS_PROP', PRSPropKey)
|
||||||
end
|
WaferType = PRSPropRec<6>
|
||||||
|
TestType = Field(PRSPropKey, '*', 3)
|
||||||
|
Layer = Field(PRSPropKey, '*', 2)
|
||||||
|
MeasureFreq = PRSPropRec<PRS_PROP_FREQ$>
|
||||||
|
Start = PRSPropRec<PRS_PROP_MET_START$>
|
||||||
|
If WaferType NE 'Product' AND WaferType NE 'Prod' then
|
||||||
|
BEGIN CASE
|
||||||
|
CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; IsTWReqd = 1
|
||||||
|
CASE ThisReactorRunOrder = Start ; IsTWReqd = 1
|
||||||
|
CASE NUM(MeasureFreq)
|
||||||
|
IF MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 THEN
|
||||||
|
IsTWReqd = True$
|
||||||
|
END
|
||||||
|
END CASE
|
||||||
|
end
|
||||||
|
Until IsTWReqd EQ True$
|
||||||
|
Next PRSPropKey
|
||||||
|
Until IsTWReqd EQ True$
|
||||||
|
Next PRSLayerKey
|
||||||
end else
|
end else
|
||||||
Response = False$
|
IsTWReqd = False$
|
||||||
end
|
end
|
||||||
|
//The code below will be removed upon final production usage.
|
||||||
TWTrackingSystemActive = Database_Services('ReadDataColumn', 'APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, True$, 0, False$)
|
TWTrackingSystemActive = Database_Services('ReadDataColumn', 'APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, True$, 0, False$)
|
||||||
If TWTrackingSystemActive EQ False$ then
|
If TWTrackingSystemActive EQ False$ then
|
||||||
Response = False$
|
IsTWReqd = False$
|
||||||
end
|
end
|
||||||
|
Response = IsTWReqd
|
||||||
end service
|
end service
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
@ -1703,3 +1761,4 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user