diff --git a/LSL2/STPROC/OBJ_WO_MAT_QA.txt b/LSL2/STPROC/OBJ_WO_MAT_QA.txt
index 097db74..b4a22c7 100644
--- a/LSL2/STPROC/OBJ_WO_MAT_QA.txt
+++ b/LSL2/STPROC/OBJ_WO_MAT_QA.txt
@@ -501,7 +501,7 @@ AddQAMet:
//Record is blank, create new from spec.
PSN_Services('UpdateAllQAMetrologyRecord', WOMatKey)
end
-
+ Database_Services('ReleaseKeyIDLock', 'WO_MAT_QA', WOMatKey)
end else
LogData = ''
LogData<1> = LoggingDTM;//Defined at entry of subroutine
@@ -756,3 +756,4 @@ RETURN
+
diff --git a/LSL2/STPROC/OBJ_WO_REACT.txt b/LSL2/STPROC/OBJ_WO_REACT.txt
index b8d3747..49e25c0 100644
--- a/LSL2/STPROC/OBJ_WO_REACT.txt
+++ b/LSL2/STPROC/OBJ_WO_REACT.txt
@@ -18,6 +18,7 @@ COMPILE FUNCTION obj_WO_React(Method,Parms)
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount
Declare function Environment_Services
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA, Mona_Services
+Declare subroutine RDS_Services
$INSERT MSG_EQUATES
$INSERT WO_REACT_EQUATES
@@ -303,46 +304,8 @@ RETURN
AddSchedQA:
* * * * * * *
-chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '')
-
-FOR I = 1 TO chgCnt
- AddCassNo = CassNos<1,ChangePoslist<1,I>>
-
- Log:= 'AddSched on CassNo: ':AddCassNo:@FM
-
- owmParms = WONo:@RM
- owmParms := StepNo:@RM
- owmParms := AddCassNo:@RM
- owmParms := QAMetData
:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData:@RM
- owmParms := QAMetData ; // 10/15/18 - djs - Added Phase Min Spec for HgCV
-
-
- obj_WO_Mat_QA('AddQAMet', owmParms) ;* Schedule test boxes after list change
-
- IF Get_Status(errCode) THEN
- ErrMsg(errCode)
- END
-
- *obj_WO_Mat('AddQAMet',owmParms) ;* Dead 6/5/2015 JCH - remove after a few days
-
- *IF Get_Status(errCode) THEN
- * ErrMsg(errCode)
- *END
-
-
-
-NEXT I
+//Redirect to this service as a fallback because the below logic doesn't work
+RDS_Services('ProcessMetQA', RDSNo)
RETURN
+
diff --git a/LSL2/STPROC/RDS_SERVICES.txt b/LSL2/STPROC/RDS_SERVICES.txt
index 54cba81..1f2bc9b 100644
--- a/LSL2/STPROC/RDS_SERVICES.txt
+++ b/LSL2/STPROC/RDS_SERVICES.txt
@@ -85,6 +85,7 @@ $Insert DICT_EQUATES
$Insert COMPANY_EQUATES
$Insert RETURN_TO_FAB_LOTS_EQUATES
$Insert TEST_RUN_EQUATES
+$Insert QA_MET_EQUATES
EQU COL$LSID TO 1
EQU COL$RECIPE TO 2
@@ -119,7 +120,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 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 Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce
+Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce, obj_wo_mat_qa
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 Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec
@@ -809,6 +810,104 @@ Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
end service
+Service ProcessMetQA(RDSNo)
+
+ RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
+ WONo = RDSRec
+ CassNo = RDSRec
+ StepNo = 1
+ PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X')
+ PSNo = PSNos<1,StepNo>
+
+ QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * *
+ If QAMetData NE '' then
+ for each Stage in QAMetData using @VM setting StagePos
+ Start = QAMetData
+ Interval = QAMetData
+ Stage = QAMetData
+ MetPropCd = QAMetData
+
+ IsProdTestReqd = RDS_Services('IsProdTestReqd', RDSNo, MetPropCd)
+
+ If IsProdTestReqd then
+
+ owmParms = WONo:@RM
+ owmParms := StepNo:@RM
+ owmParms := CassNo:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData:@RM
+ owmParms := QAMetData ; // 10/15/18 - djs - Added Phase Min Spec for HgCV
+
+
+ obj_WO_Mat_QA('AddQAMet', owmParms) ;* Schedule test boxes after list change
+
+ IF Get_Status(errCode) THEN
+ ErrMsg(errCode)
+ END
+ end
+ Next Stage
+ end
+
+end service
+
+Service IsProdTestReqd(RDSNo, PropCd)
+
+ ProdTestReqd = False$
+ RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
+ WONo = RDSRec
+ ReactNo = RDSRec
+ ReactorType = Database_Services('ReadDataColumn', 'REACTOR', ReactNo, REACTOR_REACT_TYPE$, True$, 0, False$)
+ ThisReactorRunOrder = 0
+ ReactRDSNos = RDS_Services('GetRDSRunHistoryByReactorAndWO', ReactNo, WONo)
+ LOCATE RDSNo IN ReactRDSNos USING @VM SETTING ThisReactorRunOrder else
+ //Add it to the end of the RDS List assuming that it's next to run.
+ LastIndex = DCount(ReactRDSNos, @VM)
+ ThisReactorRunOrder = LastIndex + 1
+ ReactRDSNos<1, ThisReactorRunOrder> = RDSNo
+ end
+ PSNo = RDSRec
+ PSRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo)
+ PRSLayerKeys = PSRec
+ for each PRSLayerKey in PRSLayerKeys using @VM
+ PRSPropKeys = Database_Services('ReadDataColumn', 'PRS_LAYER', PRSLayerKey, 5)
+ for each PRSPropKey in PRSPropKeys using @VM
+ PRSPropRec = Database_Services('ReadDataRow', 'PRS_PROP', PRSPropKey)
+ ReqdPropCd = Field(PRSPropKey, '*', 3)
+ If PropCd EQ ReqdPropCd then
+ WaferType = PRSPropRec<6>
+ TestType = Field(PRSPropKey, '*', 3)
+ Layer = Field(PRSPropKey, '*', 2)
+ MeasureFreq = PRSPropRec
+ Start = PRSPropRec
+ If WaferType EQ 'Product' OR WaferType EQ 'Prod' then
+ BEGIN CASE
+ CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; ProdTestReqd = 1
+ CASE ThisReactorRunOrder = Start ; ProdTestReqd = 1
+ CASE NUM(MeasureFreq)
+ If MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 then
+ ProdTestReqd = 1
+ end
+ END CASE
+ end
+ end
+ Until ProdTestReqd EQ True$
+ Next PRSPropKey
+ Until ProdTestReqd EQ True$
+ Next PRSLayerKey
+ Response = ProdTestReqd
+
+end service
Service IsTWLoggingReqd(RDSNo)
@@ -2298,3 +2397,4 @@ ClearCursors:
return
+