From 47a4257d9509b1b12acffbacc9338a6e79087317 Mon Sep 17 00:00:00 2001 From: "Infineon\\Ouellette" Date: Mon, 2 Dec 2024 13:53:17 -0700 Subject: [PATCH] Added additional steps if WO_MAT_QA rec is blank. --- LSL2/STPROC/OBJ_WO_MAT_QA.txt | 1253 +++++++++++++++++---------------- LSL2/STPROC/PSN_SERVICES.txt | 4 +- 2 files changed, 633 insertions(+), 624 deletions(-) diff --git a/LSL2/STPROC/OBJ_WO_MAT_QA.txt b/LSL2/STPROC/OBJ_WO_MAT_QA.txt index 98cac77..097db74 100644 --- a/LSL2/STPROC/OBJ_WO_MAT_QA.txt +++ b/LSL2/STPROC/OBJ_WO_MAT_QA.txt @@ -15,7 +15,7 @@ COMPILE FUNCTION obj_WO_Mat_QA(Method,Parms) #pragma precomp SRP_PreCompiler -DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, ErrMsg, Btree.Extract, Database_Services, Logging_Services +DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, ErrMsg, Btree.Extract, Database_Services, Logging_Services, PSN_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, obj_WO_Log, NextKey, obj_WO_Mat_QA, Environment_Services DECLARE FUNCTION obj_Prod_Spec, obj_RDS_Test, SRP_Math, Database_Services, Error_Services, Logging_Services @@ -47,33 +47,33 @@ IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed t IF NOT(ASSIGNED(Parms)) THEN Parms = '' IF ErrorMsg NE '' THEN - Set_Status(-1,ErrTitle:@SVM:ErrorMsg) - RETURN '' + Set_Status(-1,ErrTitle:@SVM:ErrorMsg) + RETURN '' END Result = '' BEGIN CASE - CASE Method = 'GetQAMet' ; GOSUB GetQAMet - CASE Method = 'GetShipDoc' ; GOSUB GetShipDoc - CASE Method = 'Create' ; GOSUB Create - CASE Method = 'GetQAMetKeys' ; GOSUB GetQAMetKeys - CASE Method = 'AddQAMet' ; GOSUB AddQAMet - CASE Method = 'RemQAMet' ; GOSUB RemQAMet - CASE Method = 'SetSignature' ; GOSUB SetSignature - Case Method = 'QAResults' ; Gosub QAResults - - - CASE Method = 'Convert' ; GOSUB Convert - - CASE 1 - ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.' - + CASE Method = 'GetQAMet' ; GOSUB GetQAMet + CASE Method = 'GetShipDoc' ; GOSUB GetShipDoc + CASE Method = 'Create' ; GOSUB Create + CASE Method = 'GetQAMetKeys' ; GOSUB GetQAMetKeys + CASE Method = 'AddQAMet' ; GOSUB AddQAMet + CASE Method = 'RemQAMet' ; GOSUB RemQAMet + CASE Method = 'SetSignature' ; GOSUB SetSignature + Case Method = 'QAResults' ; Gosub QAResults + + + CASE Method = 'Convert' ; GOSUB Convert + + CASE 1 + ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.' + END CASE IF ErrorMsg NE '' THEN - Set_Status(-1,ErrTitle:@SVM:ErrorMsg) - RETURN '' + Set_Status(-1,ErrTitle:@SVM:ErrorMsg) + RETURN '' END RETURN Result @@ -82,120 +82,120 @@ RETURN Result * * * * * * * GetQAMet: * * * * * * * - -CassID = Parms[1,@RM] -WOMatQARec = Parms[COL2()+1,@RM] -WOStep = Parms[COL2()+1,@RM] -Stage = Parms[COL2()+1,@RM] -MetFields = Parms[COL2()+1,@RM] - -IF CassID = '' THEN RETURN -IF WOStep = '' THEN RETURN -IF Stage = '' THEN RETURN - - -IF MetFields = '' THEN - MetFields = WO_MAT_QA_PROFILE$:@VM - MetFields := WO_MAT_QA_STAGE$:@VM - MetFields := WO_MAT_QA_MIN$:@VM - MetFields := WO_MAT_QA_MAX$:@VM - MetFields := WO_MAT_QA_RESULT$:@VM - MetFields := WO_MAT_QA_SLOT$:@VM - MetFields := WO_MAT_QA_SIG$:@VM - MetFields := WO_MAT_QA_SIG_DTM$:@VM - MetFields := WO_MAT_QA_SLOT_TEST$:@VM - MetFields := WO_MAT_QA_STD_MAX$:@VM - MetFields := WO_MAT_QA_STD_RESULT$:@VM - MetFields := WO_MAT_QA_RECIPE$:@VM - MetFields := WO_MAT_QA_RECIPE_PATTERN$:@VM - MetFields := WO_MAT_QA_PROP$:@VM - MetFields := WO_MAT_QA_TOOL_CLASS$:@VM - MetFields := WO_MAT_QA_WFR_QTY$:@VM - MetFields := WO_MAT_QA_WFR_TYPE$:@VM - MetFields := WO_MAT_QA_SHIP_DOC$ -END - -IF WOMatQARec = '' THEN - WOMatQARec = XLATE('WO_MAT_QA',CassID,'','X') - IF WOMatQARec = '' THEN RETURN -END - -MetTests = WOMatQARec -MetStages = WOMatQARec - -FieldCnt = COUNT(MetFields,@VM) + (MetFields NE '') -MetCnt = COUNT(MetTests,@VM) + (MetTests NE '') - -LineCnt = 1 -Ans = '' -FOR I = 1 TO MetCnt - MetWOStep = MetTests<1,I>[1,1] - IF MetWOStep = WOStep AND WOMatQARec = Stage THEN - FOR N = 1 TO FieldCnt - MetField = MetFields<1,N> - MetTest = MetTests<1, i> - Begin Case - Case MetField EQ WO_MAT_QA_PROFILE$ - Ans = WOMatQARec[2,99] ;* Profile (test) field has stage embedded in the 1st character - Case MetField EQ WO_MAT_QA_MIN$ - MinVal = WOMatQARec - Ans = SRP_Math('ROUND', MinVal, 3) - Case MetField EQ WO_MAT_QA_RESULT$ AND Stage EQ 'UNLOAD' AND (MetTest EQ '1CRES' OR MetTest EQ 'CRES') - Ans = WOMatQARec - Case Otherwise$ - Ans = WOMatQARec - End Case -* IF MetField = WO_MAT_QA_PROFILE$ THEN -* Ans = WOMatQARec[2,99] ;* Profile (test) field has stage embedded in the 1st character -* END ELSE -* Ans = WOMatQARec -* END - NEXT N - LineCnt += 1 - END -NEXT I - -Result = Ans - + CassID = Parms[1,@RM] + WOMatQARec = Parms[COL2()+1,@RM] + WOStep = Parms[COL2()+1,@RM] + Stage = Parms[COL2()+1,@RM] + MetFields = Parms[COL2()+1,@RM] + + IF CassID = '' THEN RETURN + IF WOStep = '' THEN RETURN + IF Stage = '' THEN RETURN + + + IF MetFields = '' THEN + MetFields = WO_MAT_QA_PROFILE$:@VM + MetFields := WO_MAT_QA_STAGE$:@VM + MetFields := WO_MAT_QA_MIN$:@VM + MetFields := WO_MAT_QA_MAX$:@VM + MetFields := WO_MAT_QA_RESULT$:@VM + MetFields := WO_MAT_QA_SLOT$:@VM + MetFields := WO_MAT_QA_SIG$:@VM + MetFields := WO_MAT_QA_SIG_DTM$:@VM + MetFields := WO_MAT_QA_SLOT_TEST$:@VM + MetFields := WO_MAT_QA_STD_MAX$:@VM + MetFields := WO_MAT_QA_STD_RESULT$:@VM + MetFields := WO_MAT_QA_RECIPE$:@VM + MetFields := WO_MAT_QA_RECIPE_PATTERN$:@VM + MetFields := WO_MAT_QA_PROP$:@VM + MetFields := WO_MAT_QA_TOOL_CLASS$:@VM + MetFields := WO_MAT_QA_WFR_QTY$:@VM + MetFields := WO_MAT_QA_WFR_TYPE$:@VM + MetFields := WO_MAT_QA_SHIP_DOC$ + END + + IF WOMatQARec = '' THEN + WOMatQARec = XLATE('WO_MAT_QA',CassID,'','X') + IF WOMatQARec = '' THEN RETURN + END + + MetTests = WOMatQARec + MetStages = WOMatQARec + + FieldCnt = COUNT(MetFields,@VM) + (MetFields NE '') + MetCnt = COUNT(MetTests,@VM) + (MetTests NE '') + + LineCnt = 1 + Ans = '' + FOR I = 1 TO MetCnt + MetWOStep = MetTests<1,I>[1,1] + + IF MetWOStep = WOStep AND WOMatQARec = Stage THEN + FOR N = 1 TO FieldCnt + MetField = MetFields<1,N> + MetTest = MetTests<1, i> + Begin Case + Case MetField EQ WO_MAT_QA_PROFILE$ + Ans = WOMatQARec[2,99] ;* Profile (test) field has stage embedded in the 1st character + Case MetField EQ WO_MAT_QA_MIN$ + MinVal = WOMatQARec + Ans = SRP_Math('ROUND', MinVal, 3) + Case MetField EQ WO_MAT_QA_RESULT$ AND Stage EQ 'UNLOAD' AND (MetTest EQ '1CRES' OR MetTest EQ 'CRES') + Ans = WOMatQARec + Case Otherwise$ + Ans = WOMatQARec + End Case + * IF MetField = WO_MAT_QA_PROFILE$ THEN + * Ans = WOMatQARec[2,99] ;* Profile (test) field has stage embedded in the 1st character + * END ELSE + * Ans = WOMatQARec + * END + NEXT N + LineCnt += 1 + END + NEXT I + + Result = Ans + RETURN * * * * * * * GetShipDoc: * * * * * * * - -* Returns data for inclusion in documents sent to the customer - -WONo = Parms[1,@RM] -CassNo = Parms[COL2()+1,@RM] - -IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' -IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' - -IF ErrorMsg NE '' THEN RETURN - -QAMetRec = XLATE('WO_MAT_QA',WONo:'*':CassNo,'','X') - -IF QAMetRec = '' THEN RETURN - -LineCnt = 0 -IF INDEX(QAMetRec,'1',1) THEN - TestCnt = COUNT(QAMetRec,@VM) + (QAMetRec NE '') - - FOR I = 1 TO TestCnt - IF QAMetRec = 1 THEN - LineCnt += 1 - Result<1,LineCnt> = QAMetRec - Result<2,LineCnt> = QAMetRec - Result<3,LineCnt> = QAMetRec - Result<4,LineCnt> = QAMetRec - END - NEXT I - -END - - + + * Returns data for inclusion in documents sent to the customer + + WONo = Parms[1,@RM] + CassNo = Parms[COL2()+1,@RM] + + IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' + IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' + + IF ErrorMsg NE '' THEN RETURN + + QAMetRec = XLATE('WO_MAT_QA',WONo:'*':CassNo,'','X') + + IF QAMetRec = '' THEN RETURN + + LineCnt = 0 + IF INDEX(QAMetRec,'1',1) THEN + TestCnt = COUNT(QAMetRec,@VM) + (QAMetRec NE '') + + FOR I = 1 TO TestCnt + IF QAMetRec = 1 THEN + LineCnt += 1 + Result<1,LineCnt> = QAMetRec + Result<2,LineCnt> = QAMetRec + Result<3,LineCnt> = QAMetRec + Result<4,LineCnt> = QAMetRec + END + NEXT I + + END + + RETURN @@ -205,11 +205,11 @@ RETURN * * * * * * * Convert: * * * * * * * - - - - - + + + + + RETURN @@ -218,132 +218,132 @@ RETURN * * * * * * * Create: * * * * * * * - -WONo = Parms[1,@RM] -CassNo = Parms[COL2()+1,@RM] - - -IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' -IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' - -IF ErrorMsg NE '' THEN RETURN - -* * * * * * * * Build QA_MET profile - Work Order scheduled only * * * * * * * * - -WOStepKeys = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X') - -StepCnt = COUNT(WOStepKeys,@VM) + (WOStepKeys NE '') - -EpiProPSNo = '' -EpiProPSRec = '' - -MetLine = 1 - -WOMatKey = WONo:'*':CassNo -WOMatQARec = '' -WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') ;* WOMat record used to check for pre-existing signatures jch 6/7/2015 - - -FOR WOStepNo = 1 TO StepCnt - PSNo = XLATE('WO_STEP',WOStepKeys<1,WOStepNo>,WO_STEP_PROD_SPEC_ID$,'X') - PSRec = XLATE('PROD_SPEC',PSNo,'','X') - - QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:PSRec) - - QAStages = QAMetData - - StageCnt = COUNT(QAStages,@VM) + (QAStages NE '') - - FOR StageNo = 1 TO StageCnt - Stage = QAMetData - - MetTest = QAMetData ;* StageRec - - Interval = QAMetData ;* StageRec - Start = QAMetData ;* StageRec - ReactSched = QAMetData ;* StageRec - - TestFlag = 0 - - IF Interval NE '' AND Start NE '' THEN - IF Interval = Start THEN - IF REM(CassNo,Interval) = 0 THEN TestFlag = 1 - END ELSE - IF ABS((Start + INT(CassNo/Interval)*Interval) - CassNo) = 0 THEN TestFlag = 1 - END - IF TestFlag AND NOT(ReactSched) THEN - WOMatQARec = WOStepNo:QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = ReactSched ;* StageRec - WOMatQARec = QAMetData ;* StageRec - WOMatQARec = QAMetData - - MetTest = QAMetData - IF MetTest = 'ADE' THEN - MetSpecSlot = QAMetData - MetWfrQty = QAMetData - IF ( (MetSpecSlot = 'A') OR (MetWfrQty = 'A') OR (MetWfrQty > 5) ) THEN - * Standard Deviation Required - MetStdMax = ((MetMin + MetMax) / 2) * (0.02) - MetStdMax = ICONV(MetStdMax,'MD3') - WOMatQARec = MetStdMax - END - END ;* End of check for ADE test - - * Retrieve any existing results from the WO_MAT record - - ProfileKey = WOMatQARec - - LOCATE ProfileKey IN WOMatRec USING @VM SETTING DPos THEN - WOMatQARec = WOMatRec - WOMatQARec = WOMatRec - WOMatQARec = WOMatRec - WOMatQARec = WOMatRec - WOMatQARec = WOMatRec - WOMatQARec = WOMatRec - END ELSE - WOMatQARec = '' - WOMatQARec = '' - WOMatQARec = '' - WOMatQARec = '' - WOMatQARec = '' - WOMatQARec = '' - - - END - - MetLine += 1 - - END - END - - NEXT StageNo - -NEXT WOStepNo -Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatKey, WOMatQARec, True$, False$, False$) -If Error_Services('HasError') then - ErrorMessage = Error_Services('GetMessage') - LogData = '' - LogData<1> = LoggingDTM;//Defined at entry of subroutine - LogData<2> = WOMatKey - LogData<3> = ErrorMessage - Logging_Services('AppendLog', objLogWOMatQAWrite, LogData, @RM, @FM, False$) -end - -* * * * * * * * * * * * - - - - + + WONo = Parms[1,@RM] + CassNo = Parms[COL2()+1,@RM] + + + IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' + IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' + + IF ErrorMsg NE '' THEN RETURN + + * * * * * * * * Build QA_MET profile - Work Order scheduled only * * * * * * * * + + WOStepKeys = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X') + + StepCnt = COUNT(WOStepKeys,@VM) + (WOStepKeys NE '') + + EpiProPSNo = '' + EpiProPSRec = '' + + MetLine = 1 + + WOMatKey = WONo:'*':CassNo + WOMatQARec = '' + WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') ;* WOMat record used to check for pre-existing signatures jch 6/7/2015 + + + FOR WOStepNo = 1 TO StepCnt + PSNo = XLATE('WO_STEP',WOStepKeys<1,WOStepNo>,WO_STEP_PROD_SPEC_ID$,'X') + PSRec = XLATE('PROD_SPEC',PSNo,'','X') + + QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:PSRec) + + QAStages = QAMetData + + StageCnt = COUNT(QAStages,@VM) + (QAStages NE '') + + FOR StageNo = 1 TO StageCnt + Stage = QAMetData + + MetTest = QAMetData ;* StageRec + + Interval = QAMetData ;* StageRec + Start = QAMetData ;* StageRec + ReactSched = QAMetData ;* StageRec + + TestFlag = 0 + + IF Interval NE '' AND Start NE '' THEN + IF Interval = Start THEN + IF REM(CassNo,Interval) = 0 THEN TestFlag = 1 + END ELSE + IF ABS((Start + INT(CassNo/Interval)*Interval) - CassNo) = 0 THEN TestFlag = 1 + END + IF TestFlag AND NOT(ReactSched) THEN + WOMatQARec = WOStepNo:QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = ReactSched ;* StageRec + WOMatQARec = QAMetData ;* StageRec + WOMatQARec = QAMetData + + MetTest = QAMetData + IF MetTest = 'ADE' THEN + MetSpecSlot = QAMetData + MetWfrQty = QAMetData + IF ( (MetSpecSlot = 'A') OR (MetWfrQty = 'A') OR (MetWfrQty > 5) ) THEN + * Standard Deviation Required + MetStdMax = ((MetMin + MetMax) / 2) * (0.02) + MetStdMax = ICONV(MetStdMax,'MD3') + WOMatQARec = MetStdMax + END + END ;* End of check for ADE test + + * Retrieve any existing results from the WO_MAT record + + ProfileKey = WOMatQARec + + LOCATE ProfileKey IN WOMatRec USING @VM SETTING DPos THEN + WOMatQARec = WOMatRec + WOMatQARec = WOMatRec + WOMatQARec = WOMatRec + WOMatQARec = WOMatRec + WOMatQARec = WOMatRec + WOMatQARec = WOMatRec + END ELSE + WOMatQARec = '' + WOMatQARec = '' + WOMatQARec = '' + WOMatQARec = '' + WOMatQARec = '' + WOMatQARec = '' + + + END + + MetLine += 1 + + END + END + + NEXT StageNo + + NEXT WOStepNo + Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatKey, WOMatQARec, True$, False$, False$) + If Error_Services('HasError') then + ErrorMessage = Error_Services('GetMessage') + LogData = '' + LogData<1> = LoggingDTM;//Defined at entry of subroutine + LogData<2> = WOMatKey + LogData<3> = ErrorMessage + Logging_Services('AppendLog', objLogWOMatQAWrite, LogData, @RM, @FM, False$) + end + + * * * * * * * * * * * * + + + + RETURN @@ -351,39 +351,39 @@ RETURN * * * * * * * GetQAMetKeys: * * * * * * * - -WOMatKey = Parms[1,@RM] -WOMatQARec = Parms[COL2()+1,@RM] - -IF WOMatKey = '' THEN RETURN -IF WOMatQARec = '' THEN - WOMatQARec = XLATE('WO_MAT_QA',WOMatKey,'','X') - IF WOMatQARec = '' THEN RETURN -END - -ProdVerNo = XLATE('WO_MAT',WOMatKey,WO_MAT_PROD_VER_NO$,'X') - -StepPSNos = XLATE('PROD_VER',ProdVerNo,PROD_VER_PROC_STEP_PSN$,'X') - -psCnt = COUNT(StepPSNos,@VM) + (StepPSNos NE '') - -LineCnt = 1 - -FOR I = 1 TO psCNT - StepPSNo = StepPSNos<1,I> - - QAMetStruct = obj_Prod_Spec('GetQAMet',StepPSNo:@RM:'') - - msCnt = COUNT(QAMetStruct,@VM) + (QAMetStruct NE '') - - FOR N = 1 TO msCnt - Result<1,LineCnt> = I:'*':QAMetStruct:'*':QAMetStruct - Result<2,LineCnt> = LineCnt - LineCnt += 1 - NEXT N - -NEXT I - + + WOMatKey = Parms[1,@RM] + WOMatQARec = Parms[COL2()+1,@RM] + + IF WOMatKey = '' THEN RETURN + IF WOMatQARec = '' THEN + WOMatQARec = XLATE('WO_MAT_QA',WOMatKey,'','X') + IF WOMatQARec = '' THEN RETURN + END + + ProdVerNo = XLATE('WO_MAT',WOMatKey,WO_MAT_PROD_VER_NO$,'X') + + StepPSNos = XLATE('PROD_VER',ProdVerNo,PROD_VER_PROC_STEP_PSN$,'X') + + psCnt = COUNT(StepPSNos,@VM) + (StepPSNos NE '') + + LineCnt = 1 + + FOR I = 1 TO psCNT + StepPSNo = StepPSNos<1,I> + + QAMetStruct = obj_Prod_Spec('GetQAMet',StepPSNo:@RM:'') + + msCnt = COUNT(QAMetStruct,@VM) + (QAMetStruct NE '') + + FOR N = 1 TO msCnt + Result<1,LineCnt> = I:'*':QAMetStruct:'*':QAMetStruct + Result<2,LineCnt> = LineCnt + LineCnt += 1 + NEXT N + + NEXT I + RETURN @@ -391,119 +391,125 @@ RETURN * * * * * * * AddQAMet: * * * * * * * - -WONo = Parms[1,@RM] -WOStep = Parms[COL2()+1,@RM] -CassNo = Parms[COL2()+1,@RM] -Stage = Parms[COL2()+1,@RM] -MetTest = Parms[COL2()+1,@RM] -MetProp = Parms[COL2()+1,@RM] -MetToolClass = Parms[COL2()+1,@RM] -MetMin = Parms[COL2()+1,@RM] -MetMax = Parms[COL2()+1,@RM] -MetSlot = Parms[COL2()+1,@RM] -MetRecipe = Parms[COL2()+1,@RM] -MetRecipePattern = Parms[COL2()+1,@RM] -MetWfrQty = Parms[COL2()+1,@RM] -MetWfrType = Parms[COL2()+1,@RM] -MetReactSched = Parms[COL2()+1,@RM] -MetShipDoc = Parms[COL2()+1,@RM] -MetPhaseMin = Parms[COL2()+1,@RM] ; // 10/15/18 - djs - Added Phase Min Spec for HgCV - -IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')' -IF WOStep = '' THEN ErrorMsg = 'Null Parm "WOStep" passed to routine. (':Method:')' -IF CassNo = '' THEN ErrorMsg = 'Null Parm "CassNo" passed to routine. (':Method:')' -IF Stage = '' THEN ErrorMsg = 'Null Parm "Stage" passed to routine. (':Method:')' -IF MetProp = '' THEN ErrorMsg = 'Null Parm "MetProp" passed to routine. (':Method:')' - -IF ErrorMsg NE '' THEN RETURN - -NewMetKey = WOStep:'*':Stage:'*':MetProp - -WOMatKey = WONo:'*':CassNo -HaveLock = Database_Services('GetKeyIDLock', 'WO_MAT_QA', WOMatKey, True$) -If HaveLock then - WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatKey, True$, 0, False$) - WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') - - AllQAMetKeysStruct = obj_WO_Mat_QA('GetQAMetKeys',WOMatKey:@RM:WOMatQARec) ;* All QAMetSort Keys Specified for this Work Order Returns Keys in <1> and Sequence numbers = <2> - - AllMetKeys = AllQAMetKeysStruct<1> ;* Correctly sorted list of all possible QA Met keys built from the PRS_SPEC records for all WO Steps - AllLines = AllQAMetKeysStruct<2> ;* List of position numbers for each of the met keys - - CurrMetKeys = '' - CurrLines = '' - cmqCnt = COUNT(WOMatQARec,@VM) + (WOMatQARec NE '') - - FOR M = 1 to cmqCnt - CurrMetKey = WOMatQARec[1,1]:'*':WOMatQARec:'*':WOMatQARec - CurrMetKeys<1,M> = CurrMetKey - - LOCATE CurrMetKey IN AllMetKeys USING @VM SETTING AllPos THEN - CurrLines<1,M> = AllPos ;* Builds a list of CurrLines for the Met Keys on the existing WO_MAT records - END - NEXT M - - LOCATE NewMetKey IN AllMetKeys USING @VM SETTING SpecLine THEN - - LOCATE SpecLine IN CurrLines BY 'AR' USING @VM SETTING InsertPos ELSE - - CurrLines = INSERT(CurrLines,1,InsertPos,0,SpecLine) + + WONo = Parms[1,@RM] + WOStep = Parms[COL2()+1,@RM] + CassNo = Parms[COL2()+1,@RM] + Stage = Parms[COL2()+1,@RM] + MetTest = Parms[COL2()+1,@RM] + MetProp = Parms[COL2()+1,@RM] + MetToolClass = Parms[COL2()+1,@RM] + MetMin = Parms[COL2()+1,@RM] + MetMax = Parms[COL2()+1,@RM] + MetSlot = Parms[COL2()+1,@RM] + MetRecipe = Parms[COL2()+1,@RM] + MetRecipePattern = Parms[COL2()+1,@RM] + MetWfrQty = Parms[COL2()+1,@RM] + MetWfrType = Parms[COL2()+1,@RM] + MetReactSched = Parms[COL2()+1,@RM] + MetShipDoc = Parms[COL2()+1,@RM] + MetPhaseMin = Parms[COL2()+1,@RM] ; // 10/15/18 - djs - Added Phase Min Spec for HgCV + + IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')' + IF WOStep = '' THEN ErrorMsg = 'Null Parm "WOStep" passed to routine. (':Method:')' + IF CassNo = '' THEN ErrorMsg = 'Null Parm "CassNo" passed to routine. (':Method:')' + IF Stage = '' THEN ErrorMsg = 'Null Parm "Stage" passed to routine. (':Method:')' + IF MetProp = '' THEN ErrorMsg = 'Null Parm "MetProp" passed to routine. (':Method:')' + + IF ErrorMsg NE '' THEN RETURN + + NewMetKey = WOStep:'*':Stage:'*':MetProp + + WOMatKey = WONo:'*':CassNo + HaveLock = Database_Services('GetKeyIDLock', 'WO_MAT_QA', WOMatKey, True$) + If HaveLock then + WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatKey, True$, 0, False$) + if WOMatQARec NE '' then + WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_PROFILE$, InsertPos, 0, WOStep:MetTest) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_PROP$,InsertPos,0,MetProp) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_TOOL_CLASS$, InsertPos, 0, MetToolClass) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STAGE$, InsertPos, 0, Stage) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_MIN$, InsertPos, 0, MetMin) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_MAX$, InsertPos, 0, MetMax) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SLOT$, InsertPos, 0, MetSlot) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RECIPE$, InsertPos, 0, MetRecipe) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RECIPE_PATTERN$, InsertPos, 0, MetRecipePattern) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_WFR_QTY$, InsertPos, 0, MetWfrQty) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_WFR_TYPE$, InsertPos, 0, MetWfrType) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_REACT_SCHED$, InsertPos, 0, MetReactSched) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SHIP_DOC$, InsertPos, 0, MetShipDoc) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_PHASE_MIN$, InsertPos, 0, MetPhaseMin) ; // 10/15/18 - djs - Added Phase Min Spec for HgCV + AllQAMetKeysStruct = obj_WO_Mat_QA('GetQAMetKeys',WOMatKey:@RM:WOMatQARec) ;* All QAMetSort Keys Specified for this Work Order Returns Keys in <1> and Sequence numbers = <2> - * Retrieve any existing results from the WO_MAT record - - ProfileKey = WOMatQARec - - LOCATE ProfileKey IN WOMatRec USING @VM SETTING DPos THEN - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SLOT_TEST$, InsertPos, 0, WOMatRec ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RESULT$, InsertPos, 0, WOMatRec ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG$, InsertPos, 0, WOMatRec ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG_DTM$, InsertPos, 0, WOMatRec ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_MAX$, InsertPos, 0, WOMatRec ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_RESULT$, InsertPos, 0, WOMatRec ) - END ELSE - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SLOT_TEST$, InsertPos, 0, '' ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RESULT$, InsertPos, 0, '') - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG$, InsertPos, 0, '' ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG_DTM$, InsertPos, 0, '' ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_MAX$, InsertPos, 0, '' ) - WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_RESULT$, InsertPos, 0, '' ) - END - Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatKey, WOMatQARec, True$, False$, False$) - If Error_Services('HasError') then - ErrorMessage = Error_Services('GetMessage') - LogData = '' - LogData<1> = LoggingDTM;//Defined at entry of subroutine - LogData<2> = WOMatKey - LogData<3> = ErrorMessage - Logging_Services('AppendLog', objLogWOMatQAWrite, LogData, @RM, @FM, False$) - end - END ;* End of SpecLine LOCATE + AllMetKeys = AllQAMetKeysStruct<1> ;* Correctly sorted list of all possible QA Met keys built from the PRS_SPEC records for all WO Steps + AllLines = AllQAMetKeysStruct<2> ;* List of position numbers for each of the met keys + + CurrMetKeys = '' + CurrLines = '' + cmqCnt = COUNT(WOMatQARec,@VM) + (WOMatQARec NE '') + + FOR M = 1 to cmqCnt + CurrMetKey = WOMatQARec[1,1]:'*':WOMatQARec:'*':WOMatQARec + CurrMetKeys<1,M> = CurrMetKey + + LOCATE CurrMetKey IN AllMetKeys USING @VM SETTING AllPos THEN + CurrLines<1,M> = AllPos ;* Builds a list of CurrLines for the Met Keys on the existing WO_MAT records + END + NEXT M + + LOCATE NewMetKey IN AllMetKeys USING @VM SETTING SpecLine THEN + + LOCATE SpecLine IN CurrLines BY 'AR' USING @VM SETTING InsertPos ELSE + + CurrLines = INSERT(CurrLines,1,InsertPos,0,SpecLine) + + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_PROFILE$, InsertPos, 0, WOStep:MetTest) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_PROP$,InsertPos,0,MetProp) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_TOOL_CLASS$, InsertPos, 0, MetToolClass) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STAGE$, InsertPos, 0, Stage) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_MIN$, InsertPos, 0, MetMin) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_MAX$, InsertPos, 0, MetMax) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SLOT$, InsertPos, 0, MetSlot) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RECIPE$, InsertPos, 0, MetRecipe) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RECIPE_PATTERN$, InsertPos, 0, MetRecipePattern) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_WFR_QTY$, InsertPos, 0, MetWfrQty) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_WFR_TYPE$, InsertPos, 0, MetWfrType) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_REACT_SCHED$, InsertPos, 0, MetReactSched) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SHIP_DOC$, InsertPos, 0, MetShipDoc) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_PHASE_MIN$, InsertPos, 0, MetPhaseMin) ; // 10/15/18 - djs - Added Phase Min Spec for HgCV + + * Retrieve any existing results from the WO_MAT record + + ProfileKey = WOMatQARec + + LOCATE ProfileKey IN WOMatRec USING @VM SETTING DPos THEN + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SLOT_TEST$, InsertPos, 0, WOMatRec ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RESULT$, InsertPos, 0, WOMatRec ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG$, InsertPos, 0, WOMatRec ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG_DTM$, InsertPos, 0, WOMatRec ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_MAX$, InsertPos, 0, WOMatRec ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_RESULT$, InsertPos, 0, WOMatRec ) + END ELSE + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SLOT_TEST$, InsertPos, 0, '' ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_RESULT$, InsertPos, 0, '') + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG$, InsertPos, 0, '' ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_SIG_DTM$, InsertPos, 0, '' ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_MAX$, InsertPos, 0, '' ) + WOMatQARec = INSERT(WOMatQARec, WO_MAT_QA_STD_RESULT$, InsertPos, 0, '' ) + END + Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatKey, WOMatQARec, True$, False$, False$) + If Error_Services('HasError') then + ErrorMessage = Error_Services('GetMessage') + LogData = '' + LogData<1> = LoggingDTM;//Defined at entry of subroutine + LogData<2> = WOMatKey + LogData<3> = ErrorMessage + Logging_Services('AppendLog', objLogWOMatQAWrite, LogData, @RM, @FM, False$) + end + END ;* End of SpecLine LOCATE + + END + end else + //Record is blank, create new from spec. + PSN_Services('UpdateAllQAMetrologyRecord', WOMatKey) + end - END -end else - LogData = '' - LogData<1> = LoggingDTM;//Defined at entry of subroutine - LogData<2> = WOMatKey - LogData<3> = 'Error getting lock on WO_MAT_QA record.' - Logging_Services('AppendLog', objLogWOMatQAWrite, LogData, @RM, @FM, False$) -end - + end else + LogData = '' + LogData<1> = LoggingDTM;//Defined at entry of subroutine + LogData<2> = WOMatKey + LogData<3> = 'Error getting lock on WO_MAT_QA record.' + Logging_Services('AppendLog', objLogWOMatQAWrite, LogData, @RM, @FM, False$) + end + RETURN @@ -511,241 +517,242 @@ RETURN * * * * * * * RemQAMet: * * * * * * * - -WONo = Parms[1,@RM] -WOStep = Parms[COL2()+1,@RM] -CassNo = Parms[COL2()+1,@RM] -Stage = Parms[COL2()+1,@RM] -PropCd = Parms[COL2()+1,@RM] - -IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')' -IF WOStep = '' THEN ErrorMsg = 'Null Parm "WOStep" passed to routine. (':Method:')' -IF CassNo = '' THEN ErrorMsg = 'Null Parm "CassNo" passed to routine. (':Method:')' -IF Stage = '' THEN ErrorMsg = 'Null Parm "Stage" passed to routine. (':Method:')' -IF PropCd = '' THEN ErrorMsg = 'Null Parm "PropCd" passed to routine. (':Method:')' - -IF ErrorMsg NE '' THEN RETURN - -WOMatKey = WONo:'*':CassNo -otParms = 'WO_MAT_QA':@RM:WOMatKey -WOMatQARec = obj_Tables('ReadRec',otParms) - -CurrMetKeys = '' - -cmqCnt = COUNT(WOMatQARec,@VM) + (WOMatQARec NE '') - -FOR M = 1 to cmqCnt - CurrMetKey = WOMatQARec[1,1]:'*':WOMatQARec:'*':WOMatQARec - CurrMetKeys<1,M> = CurrMetKey -NEXT M - -DelMetKey = WOStep:'*':Stage:'*':PropCd - -LOCATE DelMetKey IN CurrMetKeys USING @VM SETTING DelPos THEN - - IF WOMatQARec = '' THEN - - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROFILE$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROP$,DelPos,0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_TOOL_CLASS$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STAGE$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MIN$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MAX$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SLOT$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE_PATTERN$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG_DTM$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_MAX$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_RESULT$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_QTY$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_TYPE$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_REACT_SCHED$, DelPos, 0) - WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SHIP_DOC$, DelPos, 0) - - otParms = FIELDSTORE(otParms,@RM,4,0,WOMatQARec) - obj_Tables('WriteRec',otParms) - - END ELSE - obj_Tables('UnlockRec',otParms) - END - -END ELSE - obj_Tables('UnlockRec',otParms) -END - - + + WONo = Parms[1,@RM] + WOStep = Parms[COL2()+1,@RM] + CassNo = Parms[COL2()+1,@RM] + Stage = Parms[COL2()+1,@RM] + PropCd = Parms[COL2()+1,@RM] + + IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')' + IF WOStep = '' THEN ErrorMsg = 'Null Parm "WOStep" passed to routine. (':Method:')' + IF CassNo = '' THEN ErrorMsg = 'Null Parm "CassNo" passed to routine. (':Method:')' + IF Stage = '' THEN ErrorMsg = 'Null Parm "Stage" passed to routine. (':Method:')' + IF PropCd = '' THEN ErrorMsg = 'Null Parm "PropCd" passed to routine. (':Method:')' + + IF ErrorMsg NE '' THEN RETURN + + WOMatKey = WONo:'*':CassNo + otParms = 'WO_MAT_QA':@RM:WOMatKey + WOMatQARec = obj_Tables('ReadRec',otParms) + + CurrMetKeys = '' + + cmqCnt = COUNT(WOMatQARec,@VM) + (WOMatQARec NE '') + + FOR M = 1 to cmqCnt + CurrMetKey = WOMatQARec[1,1]:'*':WOMatQARec:'*':WOMatQARec + CurrMetKeys<1,M> = CurrMetKey + NEXT M + + DelMetKey = WOStep:'*':Stage:'*':PropCd + + LOCATE DelMetKey IN CurrMetKeys USING @VM SETTING DelPos THEN + + IF WOMatQARec = '' THEN + + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROFILE$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_PROP$,DelPos,0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_TOOL_CLASS$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STAGE$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MIN$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_MAX$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SLOT$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_RECIPE_PATTERN$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SIG_DTM$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_MAX$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_STD_RESULT$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_QTY$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_WFR_TYPE$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_REACT_SCHED$, DelPos, 0) + WOMatQARec = DELETE(WOMatQARec, WO_MAT_QA_SHIP_DOC$, DelPos, 0) + + otParms = FIELDSTORE(otParms,@RM,4,0,WOMatQARec) + obj_Tables('WriteRec',otParms) + + END ELSE + obj_Tables('UnlockRec',otParms) + END + + END ELSE + obj_Tables('UnlockRec',otParms) + END + + RETURN * * * * * * * SetSignature: * * * * * * * - -WONo = Parms[1,@RM] -CassNo = Parms[COL2()+1,@RM] -WOStepNo = Parms[COL2()+1,@RM] -SigProfKeys = Parms[COL2()+1,@RM] -Signatures = Parms[COL2()+1,@RM] -SigDTMs = Parms[COL2()+1,@RM] -MetResults = Parms[COL2()+1,@RM] -Stages = Parms[COL2()+1,@RM] -StdMaxs = Parms[COL2()+1,@RM] -StdResults = Parms[COL2()+1,@RM] ;* Added 08/05/2013 JCH -Slot = Parms[COL2()+1,@RM] ;* Added 07/23/2019 DJS - -IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' -IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' -IF WOStepNo = '' THEN Errormsg = 'Null parameter "WOStepNo" passed to routine. (':Method:')' -IF SigProfKeys = '' THEN ErrorMsg = 'Null parameter "SigProfKeys" passed to routine. (':Method:')' -IF Signatures = '' THEN ErrorMsg = 'Null parameter "Signatures" passed to routine. (':Method:')' -IF SigDTMs = '' THEN ErrorMsg = 'Null parameter "SigDTMs" passed to routine. (':Method:')' - -IF ErrorMsg NE '' THEN RETURN - -SigCnt = COUNT(SigProfKeys,@VM) + (SigProfKeys NE '') - -FOR I = 1 TO SigCnt - - IF SigProfKeys<1,I> = '' THEN ErrorMsg = 'Null parameter "SigProfKey" passed to routine. (':Method:')' - - thisSigDTM = ICONV(SigDTMs<1,I>,'DT') - IF thisSigDTM = '' THEN - *ErrorMsg = 'Invalid SigDTM ':QUOTE(thisSigDTM):' passed to routine. (':Method:')' - END - - IF ErrorMsg NE '' THEN RETURN - -NEXT I - - -otParms = 'WO_MAT_QA':@RM:WONo:'*':CassNo -WOMatQARec = obj_Tables('ReadRec',otParms) - -errCode = '' -IF Get_Status(errCode) THEN - RETURN -END - - -ProfSteps = '' -ProfileCnt = COUNT(WOMatQARec,@VM) + (WOMatQARec NE '') - -FOR N = 1 TO ProfileCnt - ProfSteps<1,N> = WOMatQARec:'*':WOMatQARec -NEXT N - -LastProfSig = WOMatQARec - -LastBoxSigned = 0 -WriteFlag = 0 - -FOR I = 1 TO SigCnt - SigProfKey = SigProfKeys<1,I> - Stage = Stages<1,I> - - IF NUM(SigProfKey[1,1]) ELSE - SigProfKey = WOStepNo:SigProfKey - END - - ProfStep = SigProfKey:'*':Stage - - Found = False$ - For each ProfStep in ProfSteps using @VM setting vPos - - // Use stage, profile, and slot to uniquely identify QA metrology test that is being signed. - If ( (SigProfKey EQ WOMatQARec) | - and (Stage EQ WOMatQARec) | - and (Slot EQ WOMatQARec) ) then - // Test found -> Store values and set signature - Found = True$ - WOMatQARec = MetResults<1,I> - WOMatQARec = ICONV(StdMaxs<1,I>,'MD3') - WOMatQARec = StdResults<1,I> ;* Added 8/5/2013 JCH - WOMatQARec = Signatures<1,I> - WOMatQARec = ICONV(SigDTMs<1,I>,'DT') - WriteFlag = 1 - end - -* Sig = WOMatQARec -* SigDTM = WOMatQARec -* If Sig EQ '' and SigDTM EQ '' then -* Found = True$ -* WOMatQARec = MetResults<1,I> -* WOMatQARec = ICONV(StdMaxs<1,I>,'MD3') -* WOMatQARec = StdResults<1,I> ;* Added 8/5/2013 JCH -* WOMatQARec = Signatures<1,I> -* WOMatQARec = ICONV(SigDTMs<1,I>,'DT') -* -* WriteFlag = 1 -* end - - Until Found EQ True$ - Next ProfStep - -NEXT I - -IF WriteFlag = 1 THEN - otParms = FieldStore(OtParms,@RM,4,0,WOMatQARec) ;* Put record in 4th field of OtParms - obj_Tables('WriteRec',otParms) - -END ELSE - obj_Tables('UnlockRec',otParms) -END - + WONo = Parms[1,@RM] + CassNo = Parms[COL2()+1,@RM] + WOStepNo = Parms[COL2()+1,@RM] + SigProfKeys = Parms[COL2()+1,@RM] + Signatures = Parms[COL2()+1,@RM] + SigDTMs = Parms[COL2()+1,@RM] + MetResults = Parms[COL2()+1,@RM] + Stages = Parms[COL2()+1,@RM] + StdMaxs = Parms[COL2()+1,@RM] + StdResults = Parms[COL2()+1,@RM] ;* Added 08/05/2013 JCH + Slot = Parms[COL2()+1,@RM] ;* Added 07/23/2019 DJS + + IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' + IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' + IF WOStepNo = '' THEN Errormsg = 'Null parameter "WOStepNo" passed to routine. (':Method:')' + IF SigProfKeys = '' THEN ErrorMsg = 'Null parameter "SigProfKeys" passed to routine. (':Method:')' + IF Signatures = '' THEN ErrorMsg = 'Null parameter "Signatures" passed to routine. (':Method:')' + IF SigDTMs = '' THEN ErrorMsg = 'Null parameter "SigDTMs" passed to routine. (':Method:')' + + IF ErrorMsg NE '' THEN RETURN + + SigCnt = COUNT(SigProfKeys,@VM) + (SigProfKeys NE '') + + FOR I = 1 TO SigCnt + + IF SigProfKeys<1,I> = '' THEN ErrorMsg = 'Null parameter "SigProfKey" passed to routine. (':Method:')' + + thisSigDTM = ICONV(SigDTMs<1,I>,'DT') + IF thisSigDTM = '' THEN + *ErrorMsg = 'Invalid SigDTM ':QUOTE(thisSigDTM):' passed to routine. (':Method:')' + END + + IF ErrorMsg NE '' THEN RETURN + + NEXT I + + + otParms = 'WO_MAT_QA':@RM:WONo:'*':CassNo + WOMatQARec = obj_Tables('ReadRec',otParms) + + errCode = '' + IF Get_Status(errCode) THEN + RETURN + END + + + ProfSteps = '' + ProfileCnt = COUNT(WOMatQARec,@VM) + (WOMatQARec NE '') + + FOR N = 1 TO ProfileCnt + ProfSteps<1,N> = WOMatQARec:'*':WOMatQARec + NEXT N + + LastProfSig = WOMatQARec + + LastBoxSigned = 0 + WriteFlag = 0 + + FOR I = 1 TO SigCnt + SigProfKey = SigProfKeys<1,I> + Stage = Stages<1,I> + + IF NUM(SigProfKey[1,1]) ELSE + SigProfKey = WOStepNo:SigProfKey + END + + ProfStep = SigProfKey:'*':Stage + + Found = False$ + For each ProfStep in ProfSteps using @VM setting vPos + + // Use stage, profile, and slot to uniquely identify QA metrology test that is being signed. + If ( (SigProfKey EQ WOMatQARec) | + and (Stage EQ WOMatQARec) | + and (Slot EQ WOMatQARec) ) then + // Test found -> Store values and set signature + Found = True$ + WOMatQARec = MetResults<1,I> + WOMatQARec = ICONV(StdMaxs<1,I>,'MD3') + WOMatQARec = StdResults<1,I> ;* Added 8/5/2013 JCH + WOMatQARec = Signatures<1,I> + WOMatQARec = ICONV(SigDTMs<1,I>,'DT') + WriteFlag = 1 + end + + * Sig = WOMatQARec + * SigDTM = WOMatQARec + * If Sig EQ '' and SigDTM EQ '' then + * Found = True$ + * WOMatQARec = MetResults<1,I> + * WOMatQARec = ICONV(StdMaxs<1,I>,'MD3') + * WOMatQARec = StdResults<1,I> ;* Added 8/5/2013 JCH + * WOMatQARec = Signatures<1,I> + * WOMatQARec = ICONV(SigDTMs<1,I>,'DT') + * + * WriteFlag = 1 + * end + + Until Found EQ True$ + Next ProfStep + + NEXT I + + IF WriteFlag = 1 THEN + + otParms = FieldStore(OtParms,@RM,4,0,WOMatQARec) ;* Put record in 4th field of OtParms + obj_Tables('WriteRec',otParms) + + END ELSE + obj_Tables('UnlockRec',otParms) + END + RETURN * * * * * * * * QAResults: * * * * * * * * - -* Returns Stage/test/missing or not signed * for incomplete tests - -WONo = Parms[1,@RM] -WOStep = Parms[COL2()+1,@RM] -CassNo = Parms[COL2()+1,@RM] - -IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' -If WOStep = '' Then ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' -IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' - -IF ErrorMsg NE '' THEN RETURN - -WOMatQARec = Xlate('WO_MAT_QA',WONo:'*':CassNo,'','X') - -If WOMatQARec = '' Then RETURN - -QAProfile = WOMatQARec -pCnt = Count(QAProfile,@VM) + (QAProfile NE '') - -For I = 1 To pCnt - - PStep = QAProfile<1,I>[1,1] - PTest = QAProfile<1,I>[2,99] - TestMin = WOMatQARec - TestMax = WOMatQARec - TestResult = WOMatQARec - TestSig = WOMatQARec - - - If PStep = WOStep Then - Begin Case - Case TestResult = '' - Result = PTest:' at the ':WOMatQARec:' is incomplete' - - Case TestSig = '' - Result = PTest:' at the ':WOMatQARec:' is unsigned' - - Case TestResult < TestMin Or TestResult > TestMax - Result = PTest:' at the ':WOMatQARec:' is out of spec' - - End Case - - End ;* End check for Same WOStep -Next I - + + * Returns Stage/test/missing or not signed * for incomplete tests + + WONo = Parms[1,@RM] + WOStep = Parms[COL2()+1,@RM] + CassNo = Parms[COL2()+1,@RM] + + IF WONo = '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')' + If WOStep = '' Then ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' + IF CassNo = '' THEN ErrorMsg = 'Null parameter "CassNo" passed to routine. (':Method:')' + + IF ErrorMsg NE '' THEN RETURN + + WOMatQARec = Xlate('WO_MAT_QA',WONo:'*':CassNo,'','X') + + If WOMatQARec = '' Then RETURN + + QAProfile = WOMatQARec + pCnt = Count(QAProfile,@VM) + (QAProfile NE '') + + For I = 1 To pCnt + + PStep = QAProfile<1,I>[1,1] + PTest = QAProfile<1,I>[2,99] + TestMin = WOMatQARec + TestMax = WOMatQARec + TestResult = WOMatQARec + TestSig = WOMatQARec + + + If PStep = WOStep Then + Begin Case + Case TestResult = '' + Result = PTest:' at the ':WOMatQARec:' is incomplete' + + Case TestSig = '' + Result = PTest:' at the ':WOMatQARec:' is unsigned' + + Case TestResult < TestMin Or TestResult > TestMax + Result = PTest:' at the ':WOMatQARec:' is out of spec' + + End Case + + End ;* End check for Same WOStep + Next I + RETURN + diff --git a/LSL2/STPROC/PSN_SERVICES.txt b/LSL2/STPROC/PSN_SERVICES.txt index e325155..a56fb83 100644 --- a/LSL2/STPROC/PSN_SERVICES.txt +++ b/LSL2/STPROC/PSN_SERVICES.txt @@ -535,6 +535,7 @@ Service UpdateAllQAMetrologyRecord(WOMatQAKey, stageToUpdate) WOMatQARec<1,vPos> = SpecQAMetData<1,vPos> if SpecQAMetData<2,vPos> EQ 'ADE' then SpecQAMetData<2,vPos> = '1ADE' if SpecQAMetData<2,vPos> EQ 'THICK_ONLY' then SpecQAMetData<2,vPos> = '1THICK_ONLY' + if SpecQAMetData<2,vPos> EQ 'CRES' then SpecQAMetData<2,vPos> = '1CRES' WOMatQARec<2,vPos> = SpecQAMetData<2,vPos> WOMatQARec<3,vPos> = SpecQAMetData<3,vPos> WOMatQARec<4,vPos> = SpecQAMetData<4,vPos> @@ -549,7 +550,7 @@ Service UpdateAllQAMetrologyRecord(WOMatQAKey, stageToUpdate) Next SpecTest - Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAKey, WOMatQARec) + Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAKey, WOMatQARec, True$, True$, True$) end else ErrorMsg = 'Null WOMatQAKey passed into service.' end @@ -948,3 +949,4 @@ CheckAdHoc: return +