pre cutover push
This commit is contained in:
@ -17,12 +17,13 @@ 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, obj_WO_Mat_Log
|
||||
DECLARE SUBROUTINE Send_Message, Print_Cass_Out, obj_WM_Out, obj_Notes, obj_WO_Mat, obj_Tables, Set_Property, obj_WO_Wfr
|
||||
DECLARE SUBROUTINE Start_Window, Obj_RDS, Database_Services, Rds_Services, Signature_Services, Wm_Out_Services
|
||||
DECLARE SUBROUTINE Logging_Services, Wo_Mat_Qa_Services
|
||||
DECLARE SUBROUTINE Logging_Services, Wo_Mat_Qa_Services, Error_Services, Post_Event, Wafer_Counter_Services
|
||||
|
||||
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists, obj_Tables
|
||||
DECLARE FUNCTION Dialog_Box, obj_WO_Log, MemberOf, obj_NCR, Send_Message, MemberOf, obj_WM_Out, NextKey, obj_MUWafers
|
||||
DECLARE FUNCTION Start_Window, Database_Services, Error_Services, Obj_WO_Mat, Obj_RDS, obj_Clean_Insp,SRP_Array
|
||||
DECLARE FUNCTION Signature_Services, Environment_Services, Logging_Services, obj_Clean_Insp, Wm_Out_Services
|
||||
DECLARE FUNCTION Wafer_Counter_Services, Datetime
|
||||
|
||||
$INSERT POPUP_EQUATES
|
||||
$INSERT LOGICAL
|
||||
@ -47,6 +48,7 @@ $INSERT WO_LOG_EQUATES
|
||||
$INSERT COMPANY_EQUATES
|
||||
$INSERT CLEAN_INSP_EQUATES
|
||||
$INSERT REACT_RUN_EQUATES
|
||||
$INSERT WAFER_COUNTER_EQUATES
|
||||
|
||||
EQU FONT_FACE_NAME$ TO 1
|
||||
EQU FONT_HEIGHT$ TO 2
|
||||
@ -146,6 +148,7 @@ BEGIN CASE
|
||||
CASE Instruction = 'Create' ; GOSUB Create
|
||||
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||
CASE Instruction = 'Read' ; GOSUB Read
|
||||
CASE Instruction = 'Page' ; GOSUB Page
|
||||
CASE Instruction = 'Write' ; GOSUB Write
|
||||
CASE Instruction = 'Clear' ; GOSUB Clear
|
||||
CASE Instruction = 'Delete' ; GOSUB Delete
|
||||
@ -153,7 +156,6 @@ BEGIN CASE
|
||||
CASE Instruction = 'WONoLF' ; GOSUB WONoLF
|
||||
CASE Instruction = 'FirstSurfscan' ; GOSUB FirstSurfscan
|
||||
CASE Instruction = 'PostCleanSurfscan' ; GOSUB PostCleanSurfscan
|
||||
CASE Instruction = 'SignPostEpi' ; GOSUB SignPostEpi
|
||||
CASE Instruction = 'SignSupVer' ; GOSUB SignSupVer
|
||||
CASE Instruction = 'SignSAP' ; GOSUB SignSAP
|
||||
CASE Instruction = 'RejMat' ; GOSUB RejMat
|
||||
@ -306,6 +308,15 @@ Write:
|
||||
WOStep = Get_Property(@WINDOW:'.PROC_STEP_NO','DEFPROP')
|
||||
CassNo = Get_Property(@WINDOW:'.OUT_CASS_NO','DEFPROP')
|
||||
|
||||
WMOKey = WONo:'*':WOStep:'*':CassNo
|
||||
If WMOKey NE '**' then
|
||||
OrigFqaWCQty = Get_Property(@Window, '@ORIG_WFR_CTR_QTY')
|
||||
CurrFqaWCQty = Get_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'TEXT')
|
||||
If OrigFqaWCQty NE CurrFqaWCQty then
|
||||
Wafer_Counter_Services('AddScan', WMOKey, CurrFqaWCQty, Datetime(), '', @User4, 'QA', '')
|
||||
end
|
||||
end
|
||||
|
||||
Forward_Event()
|
||||
|
||||
Set_Status(0)
|
||||
@ -454,7 +465,8 @@ Refresh:
|
||||
Set_Property(@WINDOW:'.CLEAR_LOAD','VISIBLE',0)
|
||||
END
|
||||
|
||||
IF ( (MemberOf(@USER4,'MASTER_SCHED')) OR (MemberOf(@USER4,'SUPERVISOR')) OR (MemberOf(@USER4,'ENGINEERING')) OR (MemberOf(@USER4,'LEAD')) OR (MemberOf(@USER4,'OI_ADMIN')) ) THEN
|
||||
WONo = Get_Property(@Window:'.WO_NO', 'TEXT')
|
||||
IF ( (MemberOf(@USER4,'MASTER_SCHED')) OR (MemberOf(@USER4,'SUPERVISOR')) OR (MemberOf(@USER4,'ENGINEERING')) OR (MemberOf(@USER4,'LEAD')) OR (MemberOf(@USER4,'OI_ADMIN')) ) AND (WONo NE 172758) AND (WONo NE 172739) AND (WONo NE 172767) THEN
|
||||
Set_Property(@WINDOW:'.MAKEUP_BOX','ENABLED',1)
|
||||
END ELSE
|
||||
Set_Property(@WINDOW:'.MAKEUP_BOX','ENABLED',0)
|
||||
@ -617,53 +629,7 @@ Refresh:
|
||||
Set_Property(@WINDOW:'.SIGN_SAP','VISIBLE',0)
|
||||
END
|
||||
|
||||
****************************************
|
||||
* Refreshing Wafer Counter Information *
|
||||
****************************************
|
||||
|
||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
||||
If WCCheckEnabled then
|
||||
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
|
||||
WONo = Get_Property(@Window : '.WO_NO', 'TEXT')
|
||||
Cassette = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
|
||||
WOLogRow = Xlate('WO_LOG', WONo, '', 'X')
|
||||
EpiPartNo = WOLogRow<WO_LOG_EPI_PART_NO$>
|
||||
WaferSize = Xlate('EPI_PART', EpiPartNo, 'SUB_WAFER_SIZE', 'X')
|
||||
WaferSizeInch = Field(WaferSize, ' ', 3, 1)
|
||||
|
||||
WCToolID = 'WC':WaferSizeInch:'INCH'
|
||||
WCCurrMode = ''
|
||||
If RowExists('TOOL', WCToolID) then
|
||||
WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
|
||||
WCCurrMode = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
|
||||
end
|
||||
|
||||
If WCCurrMode EQ 'PROD' then
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', False$)
|
||||
end else
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', True$)
|
||||
end
|
||||
|
||||
WafersFilled = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
|
||||
WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
|
||||
QtyBackColor = GREEN$
|
||||
************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
|
||||
end else
|
||||
If (WONo NE '') then QtyBackColor = ORANGE$
|
||||
end
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
||||
|
||||
end else
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
||||
end
|
||||
GoSub RefreshWaferCounterData
|
||||
|
||||
IF OutOfSpec THEN
|
||||
Set_Property(@WINDOW:'.SIGN_SUP_VER','ENABLED',0)
|
||||
@ -942,32 +908,21 @@ RdsDC:
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
SignPostEpi:
|
||||
SignSupVer:
|
||||
* * * * * * *
|
||||
|
||||
PostEpiSig = Get_Property(@WINDOW:'.POST_EPI_SIG','TEXT')
|
||||
WMOKey = Get_Property(@WINDOW,'ID')
|
||||
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||
CassNo = Get_Property(@WINDOW:'.OUT_CASS_NO','DEFPROP')
|
||||
WOStep = Get_Property(@WINDOW:'.PROC_STEP_NO','DEFPROP')
|
||||
SupVerSig = Get_Property(@WINDOW:'.SUP_VER_SIG','TEXT')
|
||||
WMOutKey = WONo:'*':WOStep:'*':CassNo
|
||||
|
||||
PSNo = Get_Property(@WINDOW:'.PS_NO)','TEXT')
|
||||
VerInst = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_INST$,'X')
|
||||
|
||||
IF VerInst NE '' THEN
|
||||
Yes = Dialog_Box( 'RDS_VER', @WINDOW, VerInst )
|
||||
IF NOT(Yes) THEN
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
// Begin
|
||||
// Date: 2019-05-20 by Francois
|
||||
// Change: Do not allow Post Epi Clean & Inspection signature unless the metrology thickness and resistivity
|
||||
// information has been completed.
|
||||
|
||||
*******************************************
|
||||
* Verify RDS Metrology has been completed *
|
||||
*******************************************
|
||||
AllRDSNos = Xlate('WM_OUT', WMOKey, 'RDS', 'X')
|
||||
*********************************************
|
||||
* Moved from Post-Epi signature event code *
|
||||
*********************************************
|
||||
AllRDSNos = Xlate('WM_OUT', WMOutKey, 'RDS', 'X')
|
||||
MetNotCompList = ''
|
||||
|
||||
For each RDSNo in AllRDSNos using @VM
|
||||
@ -989,34 +944,6 @@ SignPostEpi:
|
||||
ErrMsg(ErrorMessage)
|
||||
return 0
|
||||
end
|
||||
|
||||
// End Change 2019-05-20
|
||||
|
||||
Valid = Dialog_Box( 'QUOTE_SIG_PWD_ENTRY', @WINDOW, @USER4:@VM:XLATE( 'LSL_USERS', @USER4, LSL_USERS_PASSWORD$, 'X' ) )
|
||||
|
||||
ScanUser = @USER4
|
||||
ScanDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTHS')
|
||||
|
||||
IF Valid THEN
|
||||
Set_Property(@WINDOW:'.POST_EPI_SIG','TEXT',ScanUser)
|
||||
Set_Property(@WINDOW:'.POST_EPI_SIG_DTM','TEXT',ScanDTM)
|
||||
Set_Property(@WINDOW:'.POST_EPI_SIG_NAME','TEXT',OCONV( @USER4, '[XLATE_CONV,LSL_USERS*FIRST_LAST]' ))
|
||||
END
|
||||
|
||||
GOSUB Refresh
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
SignSupVer:
|
||||
* * * * * * *
|
||||
|
||||
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||
CassNo = Get_Property(@WINDOW:'.OUT_CASS_NO','DEFPROP')
|
||||
WOStep = Get_Property(@WINDOW:'.PROC_STEP_NO','DEFPROP')
|
||||
SupVerSig = Get_Property(@WINDOW:'.SUP_VER_SIG','TEXT')
|
||||
WMOutKey = WONo:'*':WOStep:'*':CassNo
|
||||
|
||||
*********************************************
|
||||
* Verify if the FQA has already been signed *
|
||||
@ -1082,6 +1009,7 @@ SignSupVer:
|
||||
**********************************************
|
||||
* Verify if Final QA has already been signed *
|
||||
**********************************************
|
||||
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
Signature_Services('CheckSigOrder', WOMatKey, 'MO_QA')
|
||||
If Error_Services('HasError') then
|
||||
@ -1122,25 +1050,7 @@ SignSupVer:
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
******************************************
|
||||
* Verify if the Post-EPI has been signed *
|
||||
******************************************
|
||||
IF (PostEpiSig = '') THEN
|
||||
ErrMsg('Post Epi for this material has not been signed.')
|
||||
RETURN
|
||||
END
|
||||
|
||||
**************************************************************************
|
||||
* Verify if the FQA signature is a different signature than the Post-EPI *
|
||||
**************************************************************************
|
||||
IF (PostEpiSig = @USER4) THEN
|
||||
ErrorMesg = 'User ':QUOTE(PostEpiSig):' signed this Material as Operator Out.':CRLF$:CRLF$
|
||||
ErrorMesg := 'Another qualified user must sign verification'
|
||||
ErrMsg(ErrorMesg)
|
||||
RETURN
|
||||
END
|
||||
|
||||
|
||||
*******************************************
|
||||
* Verify RDS Metrology has been completed *
|
||||
*******************************************
|
||||
@ -1163,8 +1073,14 @@ SignSupVer:
|
||||
MetList = Get_Property(CtrlName,'LIST')
|
||||
MLCnt = COUNT(MetList,@FM) + (MetList NE '')
|
||||
FOR Line = 1 TO MLCnt
|
||||
Buffer = MetList<Line,COL$MET_SIG>
|
||||
IF MetList<Line,COL$MET_TEST> NE '' THEN
|
||||
BEGIN CASE
|
||||
Case ( ( MetList<Line,COL$MET_SIG> NE '') and (MetList<Line,COL$MET_SIG> NE @User4) )
|
||||
ErrMsg('Process Error':@SVM:'QA Metrology results were signed by another technician. QA Metrology results must be signed by FQA technician.')
|
||||
WO_Mat_QA_Services('ClearResultsByStage', WONo:'*':CassNo, 'MO_QA')
|
||||
Post_Event(@Window, 'READ')
|
||||
RETURN
|
||||
CASE ((MetList<Line,COL$MET_MIN> = '') AND (MetList<Line,COL$MET_MAX> = ''))
|
||||
NULL
|
||||
CASE (MetList<Line,COL$MET_RESULT> = '')
|
||||
@ -1192,9 +1108,10 @@ SignSupVer:
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
||||
If WCCheckEnabled then
|
||||
|
||||
****************************************
|
||||
* Verify the Wafer Counter information *
|
||||
****************************************
|
||||
@ -1219,74 +1136,84 @@ SignSupVer:
|
||||
**************************
|
||||
* Verify user's password *
|
||||
**************************
|
||||
Valid = Dialog_Box( 'QUOTE_SIG_PWD_ENTRY', @WINDOW, @USER4:@VM:XLATE( 'LSL_USERS', @USER4, LSL_USERS_PASSWORD$, 'X' ) )
|
||||
Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
|
||||
IF NOT(Valid) THEN
|
||||
RETURN ;* User is not worthy or can't type
|
||||
|
||||
END ELSE
|
||||
|
||||
ScanUser = @USER4
|
||||
ScanDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTHS')
|
||||
ScanDTM1 = OCONV(Date(),'D4/'):' ':OCONV(Time()+1,'MTHS')
|
||||
ScanDTM2 = OCONV(Date(),'D4/'):' ':OCONV(Time()+2,'MTHS')
|
||||
|
||||
* Following 2 lines moved ahead of the QA signature add
|
||||
|
||||
WMOKey = WONo:'*':WOStep:'*':CassNo
|
||||
OrgMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X') ;* Added 10/13/2010
|
||||
CurrToolID = 'R':Get_Property(@WINDOW:'.EPI_REACT_NO','DEFPROP') ;* Added 08/13/2013 JCH
|
||||
StatusStage = 'MO_QA'
|
||||
|
||||
LogFile = 'WO_MAT' ; WOMLParms = LogFile:@RM
|
||||
LogDTM = ScanDTM1 ; WOMLParms := LogDTM:@RM
|
||||
Action = WOStep:StatusStage ; WOMLParms := Action:@RM
|
||||
WhCd = 'CR' ; WOMLParms := WhCd:@RM
|
||||
LocCd = 'QA' ; WOMLParms := LocCd:@RM
|
||||
WONos = WONo ; WOMLParms := WONos:@RM
|
||||
CassNos = CassNo ; WOMLParms := CassNos:@RM
|
||||
UserID = @USER4 ; WOMLParms := UserID:@RM
|
||||
Tags = '' ; WOMLParms := Tags:@RM
|
||||
ToolID = CurrToolID ; WOMLParms := ToolID
|
||||
Signature_Services('SignPostEpiStage', '', ScanUser, WMOKey)
|
||||
|
||||
obj_WO_Mat_Log('Create',WOMLParms) ;* Log MO_QA in INV_ACTIONS
|
||||
If Error_Services('NoError') then
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrMsg(errCode)
|
||||
RETURN
|
||||
ScanDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTHS')
|
||||
ScanDTM1 = OCONV(Date(),'D4/'):' ':OCONV(Time()+1,'MTHS')
|
||||
ScanDTM2 = OCONV(Date(),'D4/'):' ':OCONV(Time()+2,'MTHS')
|
||||
|
||||
* Following 2 lines moved ahead of the QA signature add
|
||||
|
||||
|
||||
OrgMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X') ;* Added 10/13/2010
|
||||
CurrToolID = 'R':Get_Property(@WINDOW:'.EPI_REACT_NO','DEFPROP') ;* Added 08/13/2013 JCH
|
||||
StatusStage = 'MO_QA'
|
||||
|
||||
LogFile = 'WO_MAT' ; WOMLParms = LogFile:@RM
|
||||
LogDTM = ScanDTM1 ; WOMLParms := LogDTM:@RM
|
||||
Action = WOStep:StatusStage ; WOMLParms := Action:@RM
|
||||
WhCd = 'CR' ; WOMLParms := WhCd:@RM
|
||||
LocCd = 'QA' ; WOMLParms := LocCd:@RM
|
||||
WONos = WONo ; WOMLParms := WONos:@RM
|
||||
CassNos = CassNo ; WOMLParms := CassNos:@RM
|
||||
UserID = @USER4 ; WOMLParms := UserID:@RM
|
||||
Tags = '' ; WOMLParms := Tags:@RM
|
||||
ToolID = CurrToolID ; WOMLParms := ToolID
|
||||
|
||||
obj_WO_Mat_Log('Create',WOMLParms) ;* Log MO_QA in INV_ACTIONS
|
||||
|
||||
END ELSE
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:StatusStage:@RM:ScanUser:@RM:ScanDTM:@RM:ToolID:@RM:WHCd:@RM:LocCD:@RM:Tags ;* 4/30/2013 JCH added parms for merging of two methods
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrMsg(errCode)
|
||||
RETURN
|
||||
END
|
||||
|
||||
Set_Property(@WINDOW:'.SUP_VER_SIG','TEXT',ScanUser)
|
||||
Set_Property(@WINDOW:'.SUP_VER_SIG_DTM','TEXT',ScanDTM)
|
||||
Set_Property(@WINDOW:'.SUP_VER_SIG_NAME','TEXT',OCONV( @USER4, '[XLATE_CONV,LSL_USERS*FIRST_LAST]' ))
|
||||
|
||||
Send_Event(@WINDOW,'WRITE')
|
||||
|
||||
NewMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
|
||||
IndexTransactionRow = 'MU_PART_NO':@FM:WMOKey:@FM:OrgMUPart:@FM:NewMUPart:@FM
|
||||
|
||||
OPEN "!WM_OUT" TO BangTable THEN
|
||||
LOCK BangTable, 0 THEN
|
||||
READ PendingTrans FROM BangTable, 0 ELSE PendingTrans = '0':@FM
|
||||
PendingTrans := IndexTransactionRow
|
||||
WRITE PendingTrans ON BangTable, 0 ELSE
|
||||
ErrMsg('Unable to write index transaction to !WM_OUT. ':WMOutKey)
|
||||
END
|
||||
UNLOCK BangTable, 0 ELSE ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END ELSE
|
||||
ErrMsg('Unable to Lock !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END
|
||||
|
||||
END ELSE
|
||||
ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey)
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:StatusStage:@RM:ScanUser:@RM:ScanDTM:@RM:ToolID:@RM:WHCd:@RM:LocCD:@RM:Tags ;* 4/30/2013 JCH added parms for merging of two methods
|
||||
IF Get_Status(errCode) THEN
|
||||
RETURN
|
||||
END
|
||||
|
||||
Set_Property(@WINDOW:'.SUP_VER_SIG','TEXT',ScanUser)
|
||||
Set_Property(@WINDOW:'.SUP_VER_SIG_DTM','TEXT',ScanDTM)
|
||||
Set_Property(@WINDOW:'.SUP_VER_SIG_NAME','TEXT',OCONV( @USER4, '[XLATE_CONV,LSL_USERS*FIRST_LAST]' ))
|
||||
|
||||
Send_Event(@WINDOW,'WRITE')
|
||||
|
||||
NewMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
|
||||
IndexTransactionRow = 'MU_PART_NO':@FM:WMOKey:@FM:OrgMUPart:@FM:NewMUPart:@FM
|
||||
|
||||
OPEN "!WM_OUT" TO BangTable THEN
|
||||
LOCK BangTable, 0 THEN
|
||||
READ PendingTrans FROM BangTable, 0 ELSE PendingTrans = '0':@FM
|
||||
PendingTrans := IndexTransactionRow
|
||||
WRITE PendingTrans ON BangTable, 0 ELSE
|
||||
ErrMsg('Unable to write index transaction to !WM_OUT. ':WMOutKey)
|
||||
END
|
||||
UNLOCK BangTable, 0 ELSE ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END ELSE
|
||||
ErrMsg('Unable to Lock !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END
|
||||
END ELSE
|
||||
ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END
|
||||
|
||||
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey)
|
||||
END
|
||||
|
||||
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey)
|
||||
END
|
||||
END
|
||||
|
||||
end else
|
||||
Error_Services('DisplayError')
|
||||
end
|
||||
end
|
||||
|
||||
RETURN
|
||||
|
||||
@ -1713,15 +1640,12 @@ AddMakeup:
|
||||
|
||||
NEXT I
|
||||
|
||||
|
||||
|
||||
|
||||
Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ True$
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
AvailMU_WOMatKeys = ''
|
||||
AvailMU_WMOKeys = ''
|
||||
UserResp = Response
|
||||
MakeupBox = ''
|
||||
Case Response EQ ''
|
||||
@ -1729,16 +1653,44 @@ AddMakeup:
|
||||
Return
|
||||
Case Otherwise$
|
||||
// User has selected a makeup box to use and backfill.
|
||||
AvailMU_WOMatKeys = Response
|
||||
MakeupBox = Response
|
||||
AvailMU_WMOKeys = Response
|
||||
MakeupBox = Response
|
||||
MuWfrsNeeded = SelCnt
|
||||
If AvailMU_WMOKeys NE '' then
|
||||
// Wafer counter check - Account for the possibility of selecting more than one makeup box.
|
||||
For each MuWmoKey in AvailMU_WMOKeys using @FM
|
||||
MuWoMatKey = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
|
||||
QtyAdj = MuWfrsNeeded
|
||||
CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
|
||||
If MuWfrsNeeded GT CurrMuWfrCnt then
|
||||
QtyAdj = CurrMuWfrCnt
|
||||
MuWfrsNeeded -= CurrMuWfrCnt
|
||||
end
|
||||
Parms = ''
|
||||
Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = QtyAdj ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then return
|
||||
Next MuWmoKey
|
||||
end
|
||||
End Case
|
||||
If Response EQ True$ then
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
// Verify the quantity before proceeding.
|
||||
If WMOutKey NE '' then
|
||||
Parms = ''
|
||||
Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then return
|
||||
end else
|
||||
ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
|
||||
end
|
||||
end
|
||||
|
||||
* AvailMU_WOMatKeys = obj_MUWafers('AvailWafers',WONo:@RM:@RM:1:@RM:1)
|
||||
|
||||
IF AvailMU_WOMatKeys = '' THEN
|
||||
|
||||
IF AvailMU_WMOKeys = '' THEN
|
||||
|
||||
UserResp = Msg(@WINDOW,'','MAKEUP_WAFERS') ;* This box is being made into m/u wafers message
|
||||
|
||||
@ -1761,11 +1713,10 @@ AddMakeup:
|
||||
|
||||
* Signature block added 10/6/2010 JCH *
|
||||
|
||||
Valid = Dialog_Box( 'QUOTE_SIG_PWD_ENTRY', @WINDOW, @USER4:@VM:XLATE( 'LSL_USERS', @USER4, LSL_USERS_PASSWORD$, 'X' ) )
|
||||
Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
|
||||
|
||||
IF NOT(Valid) THEN RETURN ;* User is not worthy or can't type
|
||||
|
||||
|
||||
Send_Event(@WINDOW,'WRITE')
|
||||
|
||||
obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
|
||||
@ -1781,8 +1732,9 @@ AddMakeup:
|
||||
Msg(@Window, '', 'OK', '', 'Error':@FM:ErrorMessage)
|
||||
RETURN
|
||||
end
|
||||
|
||||
* * * * * * *
|
||||
|
||||
|
||||
* * * * * * *
|
||||
RemMakeup:
|
||||
* * * * * * *
|
||||
GoSub FQAVerify
|
||||
@ -1889,12 +1841,12 @@ RETURN
|
||||
MakeupClick:
|
||||
************
|
||||
|
||||
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||
CassNo = Get_Property(@WINDOW:'.OUT_CASS_NO','DEFPROP')
|
||||
ProcStepNo = Get_Property(@WINDOW:'.PROC_STEP_NO','DEFPROP')
|
||||
CtrlEnt = @WINDOW:'.MAKEUP_BOX'
|
||||
CheckValue = Get_Property(CtrlEnt,'DEFPROP')
|
||||
InvalidRequest = 0
|
||||
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||
CassNo = Get_Property(@WINDOW:'.OUT_CASS_NO','DEFPROP')
|
||||
ProcStepNo = Get_Property(@WINDOW:'.PROC_STEP_NO','DEFPROP')
|
||||
CtrlEnt = @WINDOW:'.MAKEUP_BOX'
|
||||
CheckValue = Get_Property(CtrlEnt,'DEFPROP')
|
||||
InvalidRequest = False$
|
||||
|
||||
IF (WONo NE '') AND (CassNo NE '') AND (ProcStepNo NE '') THEN
|
||||
|
||||
@ -1904,96 +1856,88 @@ MakeupClick:
|
||||
|
||||
IF OnHold NE True$ then
|
||||
IF (MemberOf(@USER4,'MASTER_SCHED')) |
|
||||
OR (MemberOf(@USER4,'SUPERVISOR')) |
|
||||
OR (MemberOf(@USER4,'ENGINEERING')) |
|
||||
OR (MemberOf(@USER4,'LEAD')) |
|
||||
OR (MemberOf(@USER4,'SUPERVISOR')) |
|
||||
OR (MemberOf(@USER4,'ENGINEERING')) |
|
||||
OR (MemberOf(@USER4,'LEAD')) |
|
||||
OR (MemberOf(@USER4,'OI_ADMIN')) THEN
|
||||
|
||||
|
||||
|
||||
Send_Event(CtrlEnt,'GOTFOCUS')
|
||||
|
||||
|
||||
OrgMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
|
||||
|
||||
// Log the makeup flag change
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = WONo:'*':ProcStepNo:'*':CassNo
|
||||
LogData<3> = CheckValue
|
||||
LogData<4> = @User4
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
|
||||
Send_Event(@WINDOW,'WRITE') ;************* 6/30/2010
|
||||
|
||||
FieldNo = WO_MAT_EPO_MAKEUP_BOX$
|
||||
|
||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
||||
|
||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||
|
||||
* Added 10/11/2010 JCH
|
||||
|
||||
NewMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
|
||||
|
||||
IndexTransactionRow = 'MU_PART_NO':@FM:WMOKey:@FM:OrgMUPart:@FM:NewMUPart:@FM
|
||||
|
||||
/*
|
||||
OPEN 'JCH_LOG' TO LogFile THEN
|
||||
LogKey = NextKey('JCH_LOG')
|
||||
LogRec = 'COMM_WM_OUT':@FM:'MakeUp Click':@FM:@USERNAME:@FM:TimeDate():@FM:IndexTransactionRow
|
||||
WRITE LogRec ON LogFile,LogKey ELSE NULL
|
||||
END
|
||||
*/
|
||||
|
||||
OPEN "!WM_OUT" TO BangTable THEN
|
||||
|
||||
LOCK BangTable, 0 THEN
|
||||
If WMOKey NE '' then
|
||||
Parms = ''
|
||||
Parms<1> = WMOKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed EQ True$ then
|
||||
Send_Event(CtrlEnt,'GOTFOCUS')
|
||||
OrgMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
|
||||
// Log the makeup flag change
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = WONo:'*':ProcStepNo:'*':CassNo
|
||||
LogData<3> = CheckValue
|
||||
LogData<4> = @User4
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
|
||||
READ PendingTrans FROM BangTable, 0 ELSE PendingTrans = '0':@FM
|
||||
Send_Event(@WINDOW,'WRITE') ;************* 6/30/2010
|
||||
|
||||
PendingTrans := IndexTransactionRow
|
||||
FieldNo = WO_MAT_EPO_MAKEUP_BOX$
|
||||
|
||||
WRITE PendingTrans ON BangTable, 0 ELSE
|
||||
ErrMsg('Unable to write index transaction to !WM_OUT. ':WMOutKey)
|
||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
||||
|
||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||
|
||||
* Added 10/11/2010 JCH
|
||||
NewMUPart = XLATE('WM_OUT',WMOKey,'MU_PART_NO','X')
|
||||
IndexTransactionRow = 'MU_PART_NO':@FM:WMOKey:@FM:OrgMUPart:@FM:NewMUPart:@FM
|
||||
OPEN "!WM_OUT" TO BangTable THEN
|
||||
LOCK BangTable, 0 THEN
|
||||
READ PendingTrans FROM BangTable, 0 ELSE PendingTrans = '0':@FM
|
||||
PendingTrans := IndexTransactionRow
|
||||
WRITE PendingTrans ON BangTable, 0 ELSE
|
||||
ErrMsg('Unable to write index transaction to !WM_OUT. ':WMOutKey)
|
||||
END
|
||||
UNLOCK BangTable, 0 ELSE ErrMsg('Unable to Unlock !WM_OUT while adding index transaction. ':WMOutKey)
|
||||
END ELSE
|
||||
ErrMsg('Unable to Lock !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END
|
||||
END ELSE
|
||||
ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END
|
||||
UNLOCK BangTable, 0 ELSE ErrMsg('Unable to Unlock !WM_OUT while adding index transaction. ':WMOutKey)
|
||||
END ELSE
|
||||
ErrMsg('Unable to Lock !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END
|
||||
END ELSE
|
||||
ErrMsg('Unable to Open !WM_OUT to add index transaction. ':WMOutKey)
|
||||
END
|
||||
|
||||
* End of 10/11/2010 update
|
||||
|
||||
* End of 10/11/2010 update
|
||||
end else
|
||||
InvalidRequest = True$
|
||||
end
|
||||
end else
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Error starting wafer counter check. WM_OUT key is missing.')
|
||||
end
|
||||
END ELSE
|
||||
InvalidRequest = 1
|
||||
InvalidRequest = True$
|
||||
ErrMsg('INFO: This function is limited to authorized users only.')
|
||||
END
|
||||
END else
|
||||
InvalidRequest = 1
|
||||
InvalidRequest = True$
|
||||
ErrMsg('INFO: The lot is currently on hold and may not be modified.')
|
||||
end
|
||||
|
||||
END ELSE
|
||||
InvalidRequest = 1
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Work Order/Cassette/Step information is missing.')
|
||||
END
|
||||
|
||||
IF (InvalidRequest = 1) then
|
||||
If (InvalidRequest EQ True$) then
|
||||
/* Toggle back the checkbox flag */
|
||||
IF (CheckValue = 0) THEN
|
||||
Set_Property(CtrlEnt, 'DEFPROP', 1)
|
||||
END ELSE
|
||||
Set_Property(CtrlEnt, 'DEFPROP', 0)
|
||||
END
|
||||
END
|
||||
If (CheckValue EQ False$) then
|
||||
Set_Property(CtrlEnt, 'DEFPROP', True$)
|
||||
end else
|
||||
Set_Property(CtrlEnt, 'DEFPROP', False$)
|
||||
end
|
||||
end
|
||||
|
||||
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
************
|
||||
SendMessage:
|
||||
************
|
||||
@ -2182,5 +2126,75 @@ FQAVerify:
|
||||
return
|
||||
|
||||
|
||||
Page:
|
||||
|
||||
Page = Parm1
|
||||
|
||||
IF Page = '' THEN
|
||||
Page = Get_Property(@WINDOW:'.TAB_MAIN','VALUE')
|
||||
END ELSE
|
||||
Set_Property(@WINDOW:'.TAB_MAIN','VALUE',Page)
|
||||
END
|
||||
|
||||
Set_Property(@WINDOW,'VPOSITION', Page)
|
||||
|
||||
return
|
||||
|
||||
|
||||
RefreshWaferCounterData:
|
||||
|
||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
||||
If WCCheckEnabled then
|
||||
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
QtyBackColor = GREEN$
|
||||
WONo = Get_Property(@Window : '.WO_NO', 'TEXT')
|
||||
Cassette = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
|
||||
WMOKey = WONo:'*1*':Cassette
|
||||
If WMOKey NE '*1*' then
|
||||
FqaWcRec = Wafer_Counter_Services('GetLastScan', WMOKey, 'QA')
|
||||
WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
|
||||
Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
|
||||
WafersFilled = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
|
||||
|
||||
************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
|
||||
end else
|
||||
QtyBackColor = ORANGE$
|
||||
end
|
||||
WaferSize = Xlate('WM_OUT', WMOKey, 'WAFER_SIZE', 'X')
|
||||
WaferSize = Field(WaferSize, ' ', 3, 1)
|
||||
If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
|
||||
WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
|
||||
If Error_Services('NoError') then
|
||||
WCCurrMode = ''
|
||||
If RowExists('TOOL', WCToolID) then
|
||||
WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
|
||||
WCCurrMode = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
|
||||
end
|
||||
end else
|
||||
ErrMsg(Error_Services('GetMessage'))
|
||||
end
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for WMO "':WMOKey:'".')
|
||||
end
|
||||
end
|
||||
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
||||
|
||||
end else
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user