pre cutover push

This commit is contained in:
Infineon\StieberD
2024-09-04 20:33:41 -07:00
parent 6ea6969f4b
commit 7762b129af
2072 changed files with 130000 additions and 95295 deletions

View File

@ -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