diff --git a/LSL2/STPROC/COMM_WO_MAT.txt b/LSL2/STPROC/COMM_WO_MAT.txt index 3db538d..a869d8d 100644 --- a/LSL2/STPROC/COMM_WO_MAT.txt +++ b/LSL2/STPROC/COMM_WO_MAT.txt @@ -7,7 +7,7 @@ COMPILE FUNCTION Comm_WO_Mat(Instruction, Parm1,Parm2) 10/18/2006 - John C. Henry, J.C. Henry & Co., Inc. */ -DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message +DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message, Wo_Mat_Services DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, obj_WO_Mat, obj_Tables, SAP_Services, Hold_Services @@ -627,6 +627,7 @@ MakeUpClick: LotId = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X') end else LotId = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X') + RDSNo = LotID end If LotId NE '' then @@ -636,12 +637,22 @@ MakeUpClick: Parms<3> = 'MU' ; // Wafer counter tool location Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms) If Proceed EQ True$ then - Set_Property(@WINDOW,'SAVEWARN', False$) - Send_Event(@WINDOW,'CLEAR') - obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) - IF Get_Status(errCode) THEN - ErrMsg(errCode) - END + obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) + If EpiPro EQ False$ then + IF Get_Status(errCode) THEN + ErrMsg('Unable to set makeup flag until Unload stage is signed.') + InvalidRequest = True$ + END else + Set_Property(@WINDOW,'SAVEWARN', False$) + Send_Event(@WINDOW,'CLEAR') + If (CheckValue EQ True$) then + Wo_Mat_Services('MakeupFlagOn', RDSNo) + end + end + end else + Set_Property(@WINDOW,'SAVEWARN', False$) + Send_Event(@WINDOW,'CLEAR') + end end else InvalidRequest = True$ end diff --git a/LSL2/STPROC/COMM_WO_MAT_WFR.txt b/LSL2/STPROC/COMM_WO_MAT_WFR.txt index 074e668..f6915b4 100644 --- a/LSL2/STPROC/COMM_WO_MAT_WFR.txt +++ b/LSL2/STPROC/COMM_WO_MAT_WFR.txt @@ -17,11 +17,11 @@ DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindo DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, Post_Event, obj_WO_Mat, obj_WO_Mat_Log, obj_WO_Wfr, obj_Tables DECLARE SUBROUTINE SRP_Stopwatch, Update_Index, Database_Services, obj_RDS, Create_Dialog, Dialog_Box -DECLARE SUBROUTINE Sleepery +DECLARE SUBROUTINE Sleepery, Wo_Mat_Services DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists DECLARE FUNCTION Dialog_Box, obj_WO_Log, obj_NCR, Check_Notes, obj_MUWafers, obj_WO_Mat, Signature_Services DECLARE FUNCTION MemberOf, obj_Tables, obj_RDS, Environment_Services, Logging_Services, Material_Services -DECLARE FUNCTION Database_Services, RetStack, Datetime, Error_Services +DECLARE FUNCTION Database_Services, RetStack, Datetime, Error_Services, Rds_Services $INSERT POPUP_EQUATES $INSERT LOGICAL @@ -830,8 +830,18 @@ AddMakeup: FieldNo = WO_MAT_MAKEUP_BOX$ CheckValue = 1 + EpiCheck = Rds_Services('IsEpiPro', RDSNo) obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) + + If EpiCheck EQ False$ then + IF Get_Status(errCode) THEN + ErrMsg('Unable to set makeup flag until Unload stage is signed.') + Return + END else + Wo_Mat_Services('MakeupFlagOn', RDSNo) + end + end SlotWaferIDs = Xlate('WO_MAT', WOMatKey, 'SLOT_WAFER_ID', 'X') Convert @VM to '' in SlotWaferIDs @@ -1057,6 +1067,7 @@ MakeUpLot: If Not(InvalidRequest) then RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT') + EpiCheck = Rds_Services('IsEpiPro', RDSNo) If RDSNo NE '' then Parms = '' Parms<1> = RDSNo ; // Cassette to verify wafer count of. @@ -1064,12 +1075,22 @@ MakeUpLot: Parms<3> = 'MU' ; // Wafer counter tool location Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms) If Proceed EQ True$ then - Set_Property(@WINDOW,'SAVEWARN', False$) - Send_Event(@WINDOW,'CLEAR') obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) - IF Get_Status(errCode) THEN - ErrMsg(errCode) - END + If EpiCheck EQ False$ then + IF Get_Status(errCode) THEN + ErrMsg('Unable to set makeup flag until Unload stage is signed.') + InvalidRequest = True$ + END else + Set_Property(@WINDOW,'SAVEWARN', False$) + Send_Event(@WINDOW,'CLEAR') + If (CheckValue EQ True$) then + Wo_Mat_Services('MakeupFlagOn', RDSNo) + end + end + end else + Set_Property(@WINDOW,'SAVEWARN', False$) + Send_Event(@WINDOW,'CLEAR') + end end else InvalidRequest = True$ end diff --git a/LSL2/STPROC/LOT_EVENT_SERVICES.txt b/LSL2/STPROC/LOT_EVENT_SERVICES.txt index 986406d..a6a9b72 100644 --- a/LSL2/STPROC/LOT_EVENT_SERVICES.txt +++ b/LSL2/STPROC/LOT_EVENT_SERVICES.txt @@ -11,7 +11,7 @@ $Insert LOT_EVENT_EQUATES $Insert LOT_EQUATES $Insert LOT_OPERATION_EQUATES -Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE' +Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE', 'SIGN_FQA', 'UNSIGN_FQA' Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN', 'WO_MAT', 'LOT' Options LEGACY_LOT_TYPES = 'RDS', 'WM_OUT', 'WM_IN' Options BOOLEAN = 'True', 'False' diff --git a/LSL2/STPROC/LOT_SERVICES.txt b/LSL2/STPROC/LOT_SERVICES.txt index 1925035..ae2cfcf 100644 --- a/LSL2/STPROC/LOT_SERVICES.txt +++ b/LSL2/STPROC/LOT_SERVICES.txt @@ -35,7 +35,7 @@ LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' T Headers = 'Logging DTM' : @FM : 'Lot Id' : @FM : 'Operator' : @FM : 'Message' objLotClosureLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) -Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE' +Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE', 'SIGN_FQA', 'UNSIGN_FQA' Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN', 'WO_MAT', 'LOT' IsProd = Environment_Services('IsProd') diff --git a/LSL2/STPROC/OBJ_WO_MAT.txt b/LSL2/STPROC/OBJ_WO_MAT.txt index 96e238f..f4eac09 100644 --- a/LSL2/STPROC/OBJ_WO_MAT.txt +++ b/LSL2/STPROC/OBJ_WO_MAT.txt @@ -1834,11 +1834,13 @@ ChangeFlag: WMTableParms = FieldStore(WMTableParms,@RM,4,0,WOMatRec) ;* Put record in 4th field of OtParms obj_Tables('WriteRec',WMTableParms) - IF Get_Status(errCode) THEN - * Logging - + If FieldNo EQ WO_MAT_MAKEUP_BOX$ then + IF Get_Status(errCode) THEN + ErrorMsg = 'Makeup flag cannot be set until Unload is signed.' + END + end LogRec = 'obj_WO_Mat':TAB$:'Change Flag: Error':TAB$:WOMatKey:TAB$:FieldName:TAB$:Value:TAB$:'Unable to WRITE WO_MAT record. ':errCode LogRec := TAB$:@STATION:TAB$:@USER4:TAB$:OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') diff --git a/LSL2/STPROC/QA_SERVICES.txt b/LSL2/STPROC/QA_SERVICES.txt index eae6a25..6f68e0b 100644 --- a/LSL2/STPROC/QA_SERVICES.txt +++ b/LSL2/STPROC/QA_SERVICES.txt @@ -118,6 +118,7 @@ $insert EXCEL_EQU $insert ROTR_REQUESTS_EQUATES $insert ROTR_EQUATES $insert REACT_LL_EQUATES +$Insert WAFER_COUNTER_EQUATES * Clean Insp Actions EQU ACTION$ACTIONS TO 1 @@ -143,8 +144,8 @@ Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_ Declare subroutine Set_Status, Sleepery, Winyield, Yield, SRP_COM, QA_Services, Logging_Services, Obj_RDS Declare subroutine Validate, obj_WO_Mat, obj_WO_Mat_Log, obj_React_Status, Record_Lock, obj_React_State, obj_Post_Log Declare subroutine RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch -Declare subroutine Override_Services, Reactor_Services, Lot_Services, Mona_Services -Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services +Declare subroutine Override_Services, Reactor_Services, Lot_Services, Obj_Notes, Mona_Services +Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services, Wafer_Counter_Services Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services Declare function Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClient_Services, Obj_RDS, SQL_Services Declare function SRP_Encode, SRP_Decode, SRP_COM, QA_Services, RDS_Services, Obj_NCR, Logging_Services, Obj_Reactor diff --git a/LSL2/STPROC/RDS_POST_EPI_EVENTS.txt b/LSL2/STPROC/RDS_POST_EPI_EVENTS.txt index b9f5cf8..0d200ed 100644 --- a/LSL2/STPROC/RDS_POST_EPI_EVENTS.txt +++ b/LSL2/STPROC/RDS_POST_EPI_EVENTS.txt @@ -89,7 +89,7 @@ EQU APPRED$ TO 255 + (128*256) + (128*65536) EQU APPORANGE$ TO 255 + (176*256) + (0*65536) Declare subroutine ErrMsg, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, obj_RDS, RDS_Services, Signature_Services, obj_Notes -Declare subroutine Comm_RDS, WO_Mat_QA_Services, Wafer_Counter_Services, Dialog_Box +Declare subroutine Comm_RDS, WO_Mat_QA_Services, Wafer_Counter_Services, Dialog_Box, Lot_Event_Services Declare function Dialog_Box, Msg, MemberOf, obj_WO_Mat, Database_Services, QA_Services, Signature_Services Declare function RDS_Services, Wafer_Counter_Services, Datetime, Supplement_Services @@ -603,6 +603,9 @@ Event SIGN_BUTTON.CLICK() Set_Property(@Window : '.POST_EPI_SUP_SIG_DATE', 'TEXT', SigDt) Set_Property(@Window : '.POST_EPI_SUP_SIG_TIME', 'TEXT', SigTmPlusOne) + ** Create LOT_EVENT ** + Lot_Event_Services('CreateLotEvent', RDSNo, Datetime(), 'SIGN_FQA', '', '', @USER4, True$, 'RDS') + /* Sync up the RDS record with WO_MAT */ IOOptions = Get_Property(@Window, 'IOOPTIONS') IOOptions<6> = True$ diff --git a/LSL2/STPROC/RDS_SERVICES.txt b/LSL2/STPROC/RDS_SERVICES.txt index 144c9e3..9c9a925 100644 --- a/LSL2/STPROC/RDS_SERVICES.txt +++ b/LSL2/STPROC/RDS_SERVICES.txt @@ -1722,6 +1722,84 @@ Service UnsignLoadExtra2(RDSNo, LSLUserName) end service +Service ApplyQA100PercentADE(RDSNo) + + Result = False$ + ErrorMsg = '' + If RDSNo NE '' then + // Change the QA metrology requirements to all wafers + WoNo = Xlate('RDS', RDSNo, RDS_WO$, 'X') + CassNo = Xlate('RDS', RDSNo, 'CASS_NO', 'X') + WoMatQaKey = WoNo : '*' : CassNo + WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X') + EpiCheck = Rds_Services('IsEpiPro', RDSNo) + If EpiCheck EQ True$ then + WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X') + end else + WoWaferQty = Xlate('RDS', RDSNo, 'WFRS_OUT', 'X') + end + + WoMatQaStages = WoMatQaRec + WoMatQaProfiles = WoMatQaRec + WoMatQaSlots = WoMatQaRec + WoMatQaWfrQtys = WoMatQaRec + WoMatQaProps = WoMatQaRec + WoMatQaToolClasses = WoMatQaRec + WoMatQaRecipes = WoMatQaRec + WoMatQaRecipePatterns = WoMatQaRec + WoMatQaMin = WoMatQaRec + WoMatQaMax = WoMatQaRec + WoMatQaOOS = WoMatQaRec + StageCount = DCount(WoMatQaStages, @VM) + For stageIdx = 1 to StageCount + If (WoMatQaStages<0, stageIdx> _EQC 'QA') and (WoMatQaProfiles<0, stageIdx> _EQC '1ADE') then + Slot = WoMatQaSlots<0, stageIdx> + If (Slot _NEC 'L') then + WoMatQaSlots<0, stageIdx> = 'A' + WoMatQaWfrQtys<0, stageIdx> = WoWaferQty + end + If (Slot _EQC 'L') then + WoMatQaStages<0, stageIdx> = '' + WoMatQaProfiles<0, stageIdx> = '' + WoMatQaSlots<0, stageIdx> = '' + WoMatQaWfrQtys<0, stageIdx> = '' + WoMatQaProps<0, stageIdx> = '' + WoMatQaToolClasses<0, stageIdx> = '' + WoMatQaRecipes<0, stageIdx> = '' + WoMatQaRecipePatterns<0, stageIdx> = '' + WoMatQaMin<0, stageIdx> = '' + WoMatQaMax<0, stageIdx> = '' + WoMatQaOOS<0, stageIdx> = '' + end + end + Next stageIdx + WoMatQaRec = WoMatQaStages + WoMatQaRec = WoMatQaProfiles + WoMatQaRec = WoMatQaSlots + WoMatQaRec = WoMatQaWfrQtys + WoMatQaRec = WoMatQaProps + WoMatQaRec = WoMatQaToolClasses + WoMatQaRec = WoMatQaRecipes + WoMatQaRec = WoMatQaRecipePatterns + WoMatQaRec = WoMatQaMin + WoMatQaRec = WoMatQaMax + WoMatQaRec = WoMatQaOOS + WoMatQaRec = '' + WoMatQaRec = '' + WoMatQaRec = '' + Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$) + If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') + end else + ErrorMsg = 'Error in ':Service:' service. Null RdsKey passed into service!' + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end else + Result = True$ + end + +end service Service ApplyAbortMetrology(RdsKeys) @@ -1740,58 +1818,8 @@ Service ApplyAbortMetrology(RdsKeys) Database_Services('WriteDataRow', 'CLEAN_INSP', CleanInspKey, CIRec, True$, False$, False$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') - If ErrorMsg EQ '' then - // Change the QA metrology requirements to all wafers - CassNo = Xlate('RDS', RdsKey, 'CASS_NO', 'X') - WoMatQaKey = WoNo : '*' : CassNo - WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X') - WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X') - WoMatQaStages = WoMatQaRec - WoMatQaProfiles = WoMatQaRec - WoMatQaSlots = WoMatQaRec - WoMatQaWfrQtys = WoMatQaRec - WoMatQaProps = WoMatQaRec - WoMatQaToolClasses = WoMatQaRec - WoMatQaRecipes = WoMatQaRec - WoMatQaRecipePatterns = WoMatQaRec - WoMatQaMin = WoMatQaRec - WoMatQaMax = WoMatQaRec - WoMatQaOOS = WoMatQaRec - StageCount = DCount(WoMatQaStages, @VM) - For stageIdx = 1 to StageCount - If (WoMatQaStages<0, stageIdx> _EQC 'QA') and (WoMatQaProfiles<0, stageIdx> _EQC '1ADE') then - Slot = WoMatQaSlots<0, stageIdx> - If (Slot _NEC 'L') then - WoMatQaSlots<0, stageIdx> = 'A' - WoMatQaWfrQtys<0, stageIdx> = WoWaferQty - end - If (Slot _EQC 'L') then - WoMatQaStages<0, stageIdx> = '' - WoMatQaProfiles<0, stageIdx> = '' - WoMatQaSlots<0, stageIdx> = '' - WoMatQaWfrQtys<0, stageIdx> = '' - WoMatQaProps<0, stageIdx> = '' - WoMatQaToolClasses<0, stageIdx> = '' - WoMatQaRecipes<0, stageIdx> = '' - WoMatQaRecipePatterns<0, stageIdx> = '' - WoMatQaMin<0, stageIdx> = '' - WoMatQaMax<0, stageIdx> = '' - WoMatQaOOS<0, stageIdx> = '' - end - end - Next stageIdx - WoMatQaRec = WoMatQaStages - WoMatQaRec = WoMatQaProfiles - WoMatQaRec = WoMatQaSlots - WoMatQaRec = WoMatQaWfrQtys - WoMatQaRec = WoMatQaProps - WoMatQaRec = WoMatQaToolClasses - WoMatQaRec = WoMatQaRecipes - WoMatQaRec = WoMatQaRecipePatterns - WoMatQaRec = WoMatQaMin - WoMatQaRec = WoMatQaMax - WoMatQaRec = WoMatQaOOS - Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$) + If ErrorMsg EQ '' then + Result = Rds_Services('ApplyQA100PercentADE', RDSKey) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') end @@ -1855,7 +1883,3 @@ return - - - - diff --git a/LSL2/STPROC/SIGNATURE_SERVICES.txt b/LSL2/STPROC/SIGNATURE_SERVICES.txt index 790fe7c..43d601a 100644 --- a/LSL2/STPROC/SIGNATURE_SERVICES.txt +++ b/LSL2/STPROC/SIGNATURE_SERVICES.txt @@ -62,10 +62,11 @@ Equ COL$TAGS to 9 Equ COL$TOOL_ID to 10 Declare function obj_Prod_Spec, RDS_Services, Error_Services, Signature_Services, Memory_Services, obj_RDS_Test +Declare function SRP_Array Declare function Database_Services, obj_WO_Mat, Dialog_Box, MemberOf, Msg, QA_Services, Datetime, Supplement_Services Declare function Environment_Services, GetTickCount Declare subroutine Error_Services, Popup, Memory_Services, SRP_Stopwatch, Set_Status, Database_Services, obj_WO_Mat -Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg, Mona_Services +Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg, Obj_Rds, Lot_Event_Services, Mona_Services PSNKey = ServiceKeyID ReactorKey = ServiceKeyID @@ -2841,6 +2842,64 @@ Service SignSupplement(RDSNo, User) end service +Service UnsignFQAStage(RDSNo) + + IsEPP = Rds_Services('IsEpiPro', RDSNo) + If IsEpp EQ False$ then + Database_Services('ActivateRecord', 'RDS', RDSNo) + If Error_Services('NoError') then + Valid = '' + CurRdsNo = RDSNo + WONo = {WO} + CassNo = {CASS_NO} + WOStep = {WO_STEP} + WOMatKey = WONo:'*':CassNo + WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') + // Unsign WO_MAT + InvWH = WOMatRec + InvLoc = WOMatRec + InvAction = WOMatRec + InvDTM = WOMatRec + InvUser = WOMatRec + // Get List of keys to delete + InvCount = Dcount(InvWH, @VM) + DeleteList = '' + For I = 1 to InvCount + ThisLoc = InvAction<1,I> + If ThisLoc EQ '1QA' or ThisLoc EQ 'POST' then + DeleteList<-1> = I + end + Next I + // Reverse array to work backwards through deletions + DeleteList = SRP_Array('Reverse', DeleteList, @FM) + If DeleteList NE '' then + For Each Item in DeleteList Using @FM + WOMatRec = Delete(WOMatRec, WO_MAT_INV_WH$, Item, 0) + WOMatRec = Delete(WOMatRec, WO_MAT_INV_LOCATION$, Item, 0) + WOMatRec = Delete(WOMatRec, WO_MAT_INV_ACTION$, Item, 0) + WOMatRec = Delete(WOMatRec, WO_MAT_INV_DTM$, Item, 0) + WOMatRec = Delete(WOMatRec, WO_MAT_INV_USER$, Item, 0) + Next Item + Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, False$) + end + + // Unsign RDS + {SUP_VER_SIG} = '' + {SUP_VER_SIG_DATE} = '' + {SUP_VER_SIG_TIME} = '' + Database_Services('WriteDataRow', 'RDS', RDSNo, @Record, True$, False$, False$) + ** Create LOT_EVENT ** + Lot_Event_Services('CreateLotEvent', RDSNo, Datetime(), 'UNSIGN_FQA', '', '', @USER4, True$, 'RDS') + end else + Error_Services('Add', 'Error accessing RDS.') + end + end else + Error_Services('Add', 'This service is currently only available for non-EpiPro lots.') + end + +end service + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -2858,3 +2917,7 @@ GetMostRecentSig: return + + + + diff --git a/LSL2/STPROC/WO_MAT_ACTIONS.txt b/LSL2/STPROC/WO_MAT_ACTIONS.txt index 3a18e98..5a164dc 100644 --- a/LSL2/STPROC/WO_MAT_ACTIONS.txt +++ b/LSL2/STPROC/WO_MAT_ACTIONS.txt @@ -58,7 +58,7 @@ Equ Comma$ to ',' Declare function Error_Services, Database_Services, Environment_Services, Logging_Services, obj_WO_Mat, Max Declare function GaN_Services, Signature_Services, obj_WO_LOG, SRP_Array, MemberOf, Datetime Declare subroutine Error_Services, Database_Services, Environment_Services, Logging_Services, Obj_SAP, obj_Notes -Declare subroutine SAP_Services, Material_Services, RList, Work_Order_Services, Service_Services +Declare subroutine SAP_Services, Material_Services, RList, Work_Order_Services, Service_Services, Set_Status LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_Mat' LogDate = Oconv(Date(), 'D4/') @@ -406,6 +406,18 @@ WRITE_RECORD_PRE: Record = SlotNCRs SaveRecord = Record end + NewMUFlag = Record + OrigMUFlag = OrigRecord + UnloadCheck = Signature_Services('GetStageSummary', WOMatKeyID, 'UNLOAD')<2> + If (NewMUFlag EQ True$) AND (OrigMUFlag NE True$) then + If UnloadCheck NE True$ then + OrigFileError = 104:': Cassette ineligible to be converted to makeup wafer until unload is signed.' + Status = 0 + Record = '' + ActionFlow = ACTION_STOP$ + end + end + End Case TWChangeDetected = (OrigRecord NE Record) @@ -486,7 +498,8 @@ WRITE_RECORD_PRE: Record = RecordCopy Record = SlotMetNos SaveRecord = Record - end + end + End Case end diff --git a/LSL2/STPROC/WO_MAT_SERVICES.txt b/LSL2/STPROC/WO_MAT_SERVICES.txt index 6617f08..35fd64f 100644 --- a/LSL2/STPROC/WO_MAT_SERVICES.txt +++ b/LSL2/STPROC/WO_MAT_SERVICES.txt @@ -2,9 +2,9 @@ Compile function WO_MAT_Services(@Service, @Params) #pragma precomp SRP_PreCompiler Declare function Database_Services, Error_Services, SRP_Json, SRP_Com, Environment_Services, Logging_Services -Declare function Datetime, GetTickCount +Declare function Datetime, Rds_Services, GetTickCount Declare subroutine Error_Services, SRP_Json, SRP_Com, Wo_Mat_Services, Database_Services, Logging_Services -Declare subroutine obj_wo_mat_log, Set_Status, Mona_Services +Declare subroutine obj_wo_mat_log, Set_Status, Rds_Services, Signature_Services, Mona_Services $insert LOGICAL $Insert APP_INSERTS @@ -487,3 +487,36 @@ end service +Service MakeupFlagOn(RDSNo) + + EpiCheck = Rds_Services('IsEpiPro', RDSNo) + BioRadDown = False$ + Bio4Down = False$ + Bio5Down = False$ + Bio4LogKey = Xlate('TOOL', 'BIORAD4', 'CURR_MODE_KEY', 'X') + Bio5LogKey = Xlate('TOOL', 'BIORAD5', 'CURR_MODE_KEY', 'X') + Bio4Mode = Xlate('TOOL_LOG', Bio4LogKey, 'TOOL_MODE', 'X') + Bio5Mode = Xlate('TOOL_LOG', Bio5LogKey, 'TOOL_MODE', 'X') + + If (Bio4Mode NE 'PROD') AND (Bio4Mode NE 'LIM') then Bio4Down = True$ + If (Bio5Mode NE 'PROD') AND (Bio5Mode NE 'LIM') then Bio5Down = True$ + + If (Bio4Down) AND (Bio5Down) then BioRadDown = True$ + + If EpiCheck EQ False$ then + WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X') + WOMatQARec = XLATE('WO_MAT_QA',WOMatKey,'','X') + PropRow = WOMatQARec<3> + If (Count(PropRow, 'THICK') NE 0) AND (BioRadDown EQ False$) then + CurrentStage = Rds_Services('GetCurrentStage', RDSNo) + If CurrentStage EQ 'COMP' then + Signature_Services('UnsignFQAStage', RDSNo) + end + Rds_Services('ApplyQA100PercentADE', RDSNo) + end + end + +end service + + +