open-insight/LSL2/STPROC/TEST_DANIEL2.txt

1567 lines
66 KiB
Plaintext

Function Test_Daniel2(Param1)
#pragma precomp SRP_PreCompiler
*
* Declare subroutine Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message, Logging_Services
* Declare subroutine Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window, FTP_Services
* Declare subroutine EditCell, obj_NCR, obj_Notes, Post_Event, obj_WO_Mat, obj_WO_Mat_Log, obj_WO_Wfr, obj_Tables, obj_RDS
* Declare subroutine Error_Services, RDS_Services, Dialog_Box, Insert, Unlock, QA_Services, Validate, Development_Services
* Declare subroutine Update_Index, Database_Services, Obj_WO_Mat_QA, Fmt, Yield, WinYield, Sleepery, Qa_Services,
* Declare subroutine Obj_Post_Log, GaN_Services, Excel_Services, obj_WO_React, Activate_Save_Select, Reduce, FSMsg
* Declare subroutine SRP_Stopwatch, Copy_Record_To_SQL, SQL_Services, Material_Services, Messaging_Services
* Declare subroutine Reactor_Services, Reactor_Services_Dev, SRP_Stopwatch, Btree.Extract, Set_Env, Test_Daniel3
* Declare subroutine obj_WO_Log, SAP_Services, PSN_Services
Declare subroutine set_env, Get_Env
* Declare function Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists, Utility
* Declare function Dialog_Box, obj_WO_Log, obj_NCR, Check_Notes, obj_MUWafers, obj_WO_Mat, Error_Services, RDS_Services
* Declare function MemberOf, obj_Tables, obj_RDS, Environment_Services, Logging_Services, Material_Services, ErrMsg
* Declare function Work_Order_Services, RetStack, Min, Max, Obj_Prod_Spec, Insert, SRP_Trim, Xlate, Obj_Wo_Mat
* Declare function Security_Services, QA_Services, Database_Services, RowExists, Rti_Lh_Info, UNICODE_ANSI, UNICODE_UTF8
* Declare function index, Httpclient_Services, SRP_Encode, SRP_Decode, DirList, Obj_Rds_Test, Tool_Parms_Services
* Declare function SQL_Services, RDS_Services, Obj_WM_out, Schedule_Services, Obj_Tool, SRP_Sort_Array, ICONV
* Declare function Development_Services, Obj_WO_Mat_QA, SRP_Join_Arrays, NextKey, Obj_Prod_Spec, FTP_Services, SQL_Format
* Declare function DateTime, GaN_Services, SRP_Array, Excel_Services, EpiPro_Services, Repository, RTI_Task_Submit
* Declare function RTI_Task_Status, Rds_Services, StartDotNet, Reactor_Services, SRP_Get_FileVersion, Epi_Part_Services
* Declare function Schedule_Services, List_Users, rti_lh_info_DEBUG, RTI_Lock_Owner, Popup_Services
Declare function GetCurrentProcessID, GetTickCount, Get_Env
*
$INSERT ENVIRON_CONSTANTS
* $INSERT POPUP_EQUATES
* $INSERT MSG_EQUATES
* $INSERT APPCOLORS
* $INSERT WM_IN_EQUATES
* $Insert WM_OUT_EQUATES
* $INSERT WO_LOG_EQU
* $INSERT WO_STEP_EQU
* $INSERT WO_MAT_EQUATES
* $INSERT ORDER_EQU
* $INSERT RDS_EQUATES
* $INSERT PROD_SPEC_EQUATES
* $INSERT NOTIFICATION_EQU
* $INSERT LSL_USERS_EQU
* $INSERT SECURITY_RIGHTS_EQU
* $INSERT LOGICAL
* $INSERT RTI_LH_INFO_EQUATES
* $INSERT WO_MAT_QA_EQUATES
* $INSERT CUST_EPI_PART_EQUATES
* $INSERT PRS_STAGE_EQUATES
* $Insert RLIST_EQUATES
* $Insert CLEAN_INSP_EQUATES
* $Insert TOOL_PARMS_EQUATES
* $Insert SCHEDULE_EQU
* $Insert SCHED_DET_EQUATES
* $Insert SCHEDULER_EQUATES
* $Insert NCR_EQUATES
* $Insert REACT_RUN_EQUATES
* $Insert TOOL_EQUATES
* $Insert TOOL_LOG_EQUATES
* $Insert PM_EQUATES
* $Insert WO_WFR_EQUATES
* $Insert REVDOTNETEQUATES
* $Insert REACTOR_EQUATES
* $Insert RDS_TEST_EQUATES
* $Insert RUN_STAGE_WFR_EQUATES
*
* // Reduce modes (for Select statement)
* Equ NEW_EXIST$ To 0
* Equ NEXT_CUR$ To 1
* Equ ADD_EXIST$ To 2
*
* EQU COL$QA_MET_PHASE_MIN TO 17
*
* Equ Tab$ to \09\
* Equ CRLF$ to \0D0A\
* Equ LF$ to \0A\
* Equ Comma$ to ','
*
* $INSERT PRINTSETUP_EQUATES
Testing:
* RTI_Set_Debugger(1, '')
* on_off = 1
* t_flag = 1
* set_env(ENV_DEBUGGER_ENABLED$, on_off, t_flag)
* debug
* AttributeList = ENV_DEBUGGER_ENABLED$
* DebuggerOn = Get_Env(AttributeList)
* DebuggerOn = AttributeList
* TickCount = GetTickCount()
* Response = 'Hello World2! Ticks: ':TickCount:' Debugger is off'
* OSWrite Response on 'D:\tmp\HelloWorld2.txt'
*
* Response = Param1
return
* Testing:
*
* TickCount = GetTickCount()
* Response = 'Hello World2! Ticks: ':TickCount
* OSWrite Response on 'D:\tmp\HelloWorld2.txt'
*
* return Response
*
* LHInfo:
*
* Start_Window('MANAGE_REVLH_SERVER_DEBUG', '', '', '', '')
* rslt = rti_lh_info(CMD_SESSION_INFO$)
* Stack = Retstack()
* Yield()
* WinYield()
*
* return
*
* SpecType:
*
* Messaging_Services('SendMessage', 'RunProcedure', 'Request', '', 'All', 'RTP27,COPY_RECORD_TO_SQL', '', '', '')
* debug
* Copy_Record_To_Sql('RDS_LAYER', '575735*L1', 1, 'RDS_LAYER*575735*L1*WRITE*20128*51623')
* debug
* Table = 'WO_LOG'
* ID = 171828
*
* Open 'DICT.SQL_PENDING' to pDict then
* Query = 'TABLE':@VM:Table:@FM:'RECORD':@VM:ID
* PendingKeys = ''
* Option = ''
* Flag = ''
* Btree.Extract(Query, 'SQL_PENDING', pDict, PendingKeys, Option, Flag)
* If Flag EQ 0 then
* If PendingKeys NE '' then
* debug
* Skip = True$
* end
* end
* end
*
* Encoded = SRP_Encode('616735*L1', 'BASE64')
* Key = SRP_Decode(Encoded, 'BASE64')
* Open 'DICT.SQL_PENDING' to Dictionary then
* Keys = ''
* Flag = ''
* Btree.Extract('TABLE':@VM:'WO_LOG':@FM:'RECORD':@VM:171887, 'SQL_PENDING', Dictionary, Keys, '', Flag)
*
* end
*
* WaferSize = XLATE( 'PROD_SPEC', 3511, 'SUB_WAFER_SIZE', 'X' )
* SubOrientation = XLATE('PROD_SPEC',3511,'SUB_ORIENTATION','X')
* hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
* Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
*
* Lock hSysLists, 'Copy_Pending_Records_To_SQL' then
* Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
* end
*
*
* return
*
*
* Wait:
*
* debug
* KeyList = Xlate('SYSLISTS', 'TEST_DANIEL2', '', 'X')
*
* Counter = 0
* Def = ""
* Def<MCAPTION$> = "Pushing WM_OUT data..."
* Def<MTYPE$ > = "GC"
* Def<MEXTENT$ > = DCount(KeyList, @FM)
* Def<MTEXTWIDTH$> = 800
* MsgUp = Msg(@window, Def)
*
* For each Key in KeyList using @FM
* Counter += 1
* Msg(@window, MsgUp, Counter, MSGINSTUPDATE$)
* WMOKeys = Xlate('RDS', Key, 'WM_OUT_KEY', 'X')
* If WMOKeys NE '' then
* For each WMOKey in WMOKeys using @VM
* Copy_Record_To_Sql('WM_OUT', WMOKey, 1)
* Next WMOKey
* end
* Next Key
* Msg(@window, MsgUp) ;* take down the gauge
*
* return
*
*
* FixRDSTestLimits:
*
* WONo = 171301
* For CassNo = 41 to 70
* WOMatKey = WONo:'*':CassNo
* RDSNo = Xlate('WO_MAT', WONo:'*':CassNo, 'RDS_NO', 'X')
* If RDSNo NE '' then
* PSN_Services('UpdateRDSMetrologyLimits', RDSNo)
* end else
* Msg(@Window, '', 'OK', '', 'Process Error':@FM:'Null RDSNo returned for WO_MAT record ':WOMatKey)
* end
*
* Next CassNo
*
* Return
*
*
* FixGaNRDS:
* debug
* // Fix REACT_RUN records
* RDSList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL_BAD')
*
* Def = ""
* Def<MCAPTION$> = "Fixing RDS records..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = DCount(RDSList, @FM)
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
*
* For each RDSNo in RDSList using @FM setting fPos
* WriteRow = False$
* RRRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo)
* WfrStages = RRRec<REACT_RUN_WFR_STAGE$>
* Locate 'PLATO' in WfrStages using @VM setting PlatoPos then
* Locate 'CAN_PRE' in WfrStages using @VM setting CanPrePos then
* If PlatoPos LT CanPrePos then
* // Move PLATO after CAN_PRE
* WfrStages = Insert(WfrStages, 0, CanPrePos + 1, 0, 'PLATO')
* WfrStages = Delete(WfrStages, 0, PlatoPos, 0)
* RRRec<REACT_RUN_WFR_STAGE$> = WfrStages
* WriteRow = True$
* end
* end
* end
* GaNStageRoute = RRRec<REACT_RUN_GAN_STAGE_ROUTE$>
* Locate 'PLATO' in GaNStageRoute using @VM setting PlatoPos then
* Locate 'CAN_PRE' in GaNStageRoute using @VM setting CanPrePos then
* If PlatoPos LT CanPrePos then
* // Move PLATO after CAN_PRE
* GaNStageRoute = Insert(GaNStageRoute, 0, CanPrePos + 1, 0, 'PLATO')
* GaNStageRoute = Delete(GaNStageRoute, 0, PlatoPos, 0)
* RRRec<REACT_RUN_GAN_STAGE_ROUTE$> = GaNStageRoute
* WriteRow = True$
* end
* end
* end
* If WriteRow EQ True$ then Database_Services('WriteDataRow', 'REACT_RUN', RDSNo, RRRec, True$, False$, True$)
* Running = Msg(@WINDOW, MsgUp, fPos, MSGINSTUPDATE$) ;* Update message
* Next RDSNo
*
* Msg(@WINDOW,MsgUp)
*
* return
*
* FixGaNPSNs:
*
* debug
* // Fix PROD_SPEC records
* PSNList = Database_Services('ReadDataRow', 'SYSLISTS', 'GAN_PSNS')
*
* Def = ""
* Def<MCAPTION$> = "Fixing PROD_SPEC records..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = DCount(PSNList, @FM)
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
*
* For each PSNo in PSNList using @FM setting fPos
* PSNRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo)
* PRSRoute = PSNRec<PROD_SPEC_PRS_STAGE_ROUTE$>
* Locate 'PLATO' in PRSRoute using @VM setting PlatoPos then
* Locate 'CAN_PRE' in PRSRoute using @VM setting CanPrePos then
* If PlatoPos LT CanPrePos then
* // Move PLATO after CAN_PRE
* PRSRoute = Insert(PRSRoute, 0, CanPrePos + 1, 0, 'PLATO')
* PRSRoute = Delete(PRSRoute, 0, PlatoPos, 0)
* PSNRec<PROD_SPEC_PRS_STAGE_ROUTE$> = PRSRoute
* Database_Services('WriteDataRow', 'PROD_SPEC', PSNo, PSNRec, True$, False$, True$)
* end
* end
* end
* Running = Msg(@WINDOW, MsgUp, fPos, MSGINSTUPDATE$) ;* Update message
* Next PSNo
*
* Msg(@WINDOW,MsgUp)
*
* return
*
*
* CleanRepMan:
*
* Open 'REPLICATION_QUEUE_GLOBAL_PUBLIC' to TableHandle then
* Select TableHandle
* EOF = False$
* Loop
* ReadNext @ID else EOF = True$
* Until EOF
* If Not(Num(@ID)) and Not(Index(@ID, '%', 1)) then
* Delete TableHandle, @ID then Null
* end
* Repeat
* end
*
*
* return
*
* Process:
*
* TableName = 'RDS_QUEUE'
* CursorVar = ''
* Flag = ''
* SortList = '#RDS_NO'
* ReduceScript = 'WITH {RDS_NO} FROM 460000 TO 479999'
* Mode = 1 ; // Use next cursor available
* EOF = False$
*
* Reduce(ReduceScript, SortList, Mode, TableName, CursorVar, Flag)
* If Flag then
* Select TableName By SortList Using CursorVar then
* Loop
* Readnext KeyID using CursorVar by AT else EOF = True$
* Until EOF
* Material_Services('UpdateRDSStatus', KeyID)
* If Error_Services('NoError') then
* // Successfully updated the current status, so delete the request from the queue.
* Database_Services('DeleteDataRow', 'RDS_QUEUE', KeyID, True$, True$)
* end
* Repeat
* End else
* status = Set_FSError()
* end
* end
*
* return
*
*
* ScratchPad:
*
*
* BadList = ''
* StartRDSKey = 400000
* StopRDSKey = Xlate('DICT.RDS', '%SK%', '', 'X') - 1
* NumKeys = StopRDSKey - StartRDSKey
* Counter = 0
*
* Def = ""
* Def<MCAPTION$> = "Scanning RDS records..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = NumKeys
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
*
* For RDSNo = StartRDSKey to StopRDSKey
* Counter += 1
* WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
* MakeupBox = Xlate('WO_MAT', WOMatKey, 'MAKEUP_BOX', 'X')
* ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X')
* SAPBatchNo = Xlate('WO_MAT', WOMatKey, 'SAP_BATCH_NO', 'X')
* FullBoxReject = (SAPBatchNo[-2, 2] EQ '.R')
* If ( (MakeupBox NE True$) and (ReactorType NE 'EPP') and (ReactorType NE 'GAN') and (FullBoxReject EQ False$) ) then
* InvLocs = Xlate('WO_MAT', WOMatKey, 'INV_LOCATION', 'X')
* InvActions = Xlate('WO_MAT', WOMatKey, 'INV_ACTION', 'X')
* Locate 'PTO' in InvLocs using @VM setting vPos else
* QASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
* If QASig NE '' then
* BadList<-1> = RDSNo
* end
* end
* end
* Running = Msg(@WINDOW, MsgUp, Counter, MSGINSTUPDATE$) ;* Update message
* Next RDSNo
* Database_Services('WriteDataRow', 'SYSLISTS', 'TEST_DANIEL5', BadList)
*
* Msg(@WINDOW,MsgUp) ;* Take message down
*
* return
*
*
* debug
* WOMatQAKey = '170194*1'
* TypeOver = ''
* TypeOver<PDISPLAY$, 1> = WOMatQAKey
* TypeOver<PDISPLAY$, 2> = WO_MAT_QA_SLOT$
* TypeOver<PMODE$> = 'F'
* SelKey = Popup(@Window, TypeOver, 'WO_MAT_QA_QUERY')
*
** Code Generated from UI Workspace **
*
* Popup_Rec = ''
* Popup_Rec<PCOL$> = -1
* Popup_Rec<PROW$> = -1
* Popup_Rec<PWIDTH$> = -1
* Popup_Rec<PHEIGHT$> = -1
* Popup_Rec<PBKCOLOR$> = 16777215
* Popup_Rec<PFONT$> = 'Tahoma':@Svm:'-11':@Svm:'400':@Svm:'0':@Svm:'0':@Svm:'5':@Svm:'0':@Svm:'39':@Svm:'0':@Svm:'0':@Svm:'0':@Svm:'0':@Svm:'11':@Svm:'2':@Svm:'0':@Svm:'21'
* Popup_Rec<PFILE$> = ''
* DisplayText = ''
* DisplayText := '1':@Vm:'L'
* Popup_Rec<PDISPLAY$> = DisplayText
* Popup_Rec<PFORMAT$> = '1':@Svm:'5':@Svm:'C':@Svm:'C':@Svm:'':@Svm:'Slot':@Vm:'':@Svm:'':@Svm:'':@Svm:'':@Svm:'':@Svm:''
* Popup_Rec<PMODE$> = 'L'
* Popup_Rec<PSELECT$> = 1
* Popup_Rec<PTITLE$> = 'QA Metrology Lookup'
* Popup_Rec<PFIELD$> = ''
* Popup_Rec<PTYPE$> = "F"
* Popup_Rec<PCOLHDR$> = 1
* Popup_Rec<PROWNUM$> = 1
* Popup_Rec<PROWBTN$> = 1
* Popup_Rec<PHGRID$> = 1
* Popup_Rec<PVGRID$> = 1
* Popup_Rec<PRESIZE$> = 1
* Popup_Rec<PBORDER$> = 1
* Popup_Rec<PBTNSBELOW$> = 0
* Popup_Rec<PSEARCH$> = 0
* Popup_Rec<PSORT$> = 0
* Popup_Rec<PLOCK$> = 0
* Popup_Rec<PSHOWMISSING$> = 0
* Popup_Rec<PPRINTABLE$> = 0
* Popup_Rec<PSHOWGAUGE$> = 1
* Popup_Rec<PCAPTUREESC$> = 0
* Popup_Rec<PGREENBAR$> = 0
*
* x = Popup(@Window, Popup_Rec, '')
* RetVal = Popup_Services('DisplayPopupLiteral', 'Select QA Met Slot', 'Slot', '1':@VM:'L', 1)
* debug
* return
*
*
* CleanSched:
*
* For ReactNo = 40 to 52 Step 2
* debug
* ReactRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
* SchedList = ReactRec<REACTOR_SCHED_EVENTS$>
* For each SchedKey in SchedList using @VM setting vPos
* Database_Services('DeleteDataRow', 'SCHED_DET_NG', SchedKey)
* Next SchedKey
* SchedList = ''
* ReactRec<REACTOR_SCHED_EVENTS$> = SchedList
* Database_Services('WriteDataRow', 'REACTOR', ReactNo, ReactRec)
* Next ReactNo
*
*
*
* return
*
*
* Compare:
*
* Headers = 'Reactor Type':@VM:'PSN#':@VM:'Prod Ver No':@VM:'PSN MPW':@VM:'Epi Part No':@VM:'Epi Part MPW'
* ReportList = Headers
* KeyList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL2')
* Def = ""
* Def<MCAPTION$> = "Building Report..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = DCount(KeyList, @FM)
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
* KeyCounter = 0
* RowIndex = 1
* For each PSNo in KeyList using @FM setting KeyCounter
* ReactType = ''
* ProdVerNo = ''
* PSNMPW = ''
* EpiPartNo = ''
* EpiPartMPW = ''
* Running = Msg(@WINDOW, MsgUp, KeyCounter, MSGINSTUPDATE$) ;* Update message
* ReactType = Xlate('PROD_SPEC', PSNo, 'REACTOR_TYPE', 'X')
* Locate ReactType in 'ASM,ASM+,HTR,EPP,GAN' using ',' setting vPos else
* vPos = 0
* end
* PSNMPW = OConv(Xlate('PROD_SPEC', PSNo, 'MINUTES_PER_WAFER', 'X'), 'MD3')
* ProdVerNos = Xlate('PROD_SPEC', PSNo, 'PROD_VER_NO', 'X')
* If ProdVerNos NE '' then
* For each ProdVerNo in ProdVerNos using @VM setting Dummy
* EpiPartNo = Xlate('PROD_VER', ProdVerNo, 'EPI_PART_NO', 'X')
* EpiPartMPW = OConv(Xlate('EPI_PART', EpiPartNo, 'MINUTES_PER_WAFER_SCHEDULER', 'X'), 'MD3')
* If vPos GT 0 then
* EpiPartMPW = EpiPartMPW<0, vPos>
* end else
* EpiPartMPW = ''
* end
* RowIndex += 1
* ReportList<RowIndex, 1> = ReactType
* ReportList<RowIndex, 2> = PSNo
* ReportList<RowIndex, 3> = ProdVerNo
* ReportList<RowIndex, 4> = PSNMPW
* ReportList<RowIndex, 5> = EpiPartNo
* ReportList<RowIndex, 6> = EpiPartMPW
* Next ProdVerNo
* end else
* RowIndex += 1
* ReportList<RowIndex, 1> = ReactType
* ReportList<RowIndex, 2> = PSNo
* ReportList<RowIndex, 3> = ProdVerNo
* ReportList<RowIndex, 4> = PSNMPW
* ReportList<RowIndex, 5> = EpiPartNo
* ReportList<RowIndex, 6> = EpiPartMPW
* end
* Next PSNo
*
* Swap @VM with ',' in ReportList
* Swap @FM with CRLF$ in ReportList
* Filepath = 'C:\Users\StieberD\Desktop\report.csv'
* OSWrite ReportList on Filepath
* Msg(@WINDOW,MsgUp) ;* Take message down
*
* return
*
*
* Script:
*
* Headers = 'Reactor':@VM:'Work Order':@VM:'Start':@VM:'Stop':@VM:'Cassettes':@VM:'Wafer Size':@VM
* Headers := 'PSN Target Thickness':@VM:'PSN#':@VM:'PSN MPW':@VM:'Epi Part MPW':@VM:'Epi WPD':@VM:'Epi WPDA':@VM:'Availablility'
* ReportList = Headers
* BadKeyList = ''
* Query = 'SELECT SCHED_DET_NG WITH STOP_DTM GT "11/03/2021"'
* Set_Status(0)
* RList(Query, TARGET_ACTIVELIST$, '', '', '')
* NumKeys = @RecCount
* EOF = False$
* RowIndex = 1
* Def = ""
* Def<MCAPTION$> = "Building Report..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = NumKeys
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
* KeyCounter = 0
* If Not(Get_Status(ErrCode)) then
* Loop
* ReadNext KeyID else EOF = True$
* Until EOF
* KeyCounter += 1
* Running = Msg(@WINDOW, MsgUp, KeyCounter, MSGINSTUPDATE$) ;* Update message
* Database_Services('ActivateRecord', 'SCHED_DET_NG', KeyID)
* ReactNo = {REACT_NO}
* WONo = {WO_NO}
* If WONo NE '' then
* ReactType = Xlate('REACTOR', ReactNo, 'REACT_TYPE', 'X')
* If ReactType EQ 'HTR' then
* RowIndex += 1
* StartDTM = OConv({START_DTM}, 'DT2/^H')
* StopDTM = OConv({STOP_DTM}, 'DT2/^H')
* Cassettes = ((Xlate('WO_LOG', WONo, 'QTY', 'X'))/25)
* WaferSize = Xlate('WO_LOG', WONo, 'WAFER_SIZE', 'X')
* PSNo = Xlate('WO_STEP', WONo:'*1', 'PROD_SPEC_ID', 'X')
* PSNTargetThick = OConv(Sum(Xlate('PROD_SPEC', PSNo, 'THICK_TARGET_ALL', 'X')), 'MD3')
* PSNMPW = OConv(Xlate('PROD_SPEC', PSNo, 'MINUTES_PER_WAFER', 'X'), 'MD3')
* EpiPartNo = Xlate('PROD_SPEC', PSNo, 'EPI_PART_NO', 'X')
* EpiPartMPW = OConv(Xlate('EPI_PART', EpiPartNo, 'MINUTES_PER_WAFER_SCHEDULER', 'X'), 'MD3')
* EpiPartMPW = EpiPartMPW<0, 3>
* If EpiPartMPW NE '' then
* EpiWPD = Epi_Part_Services('GetIdealWafersPerDayScheduler', EpiPartNo, ReactType, EpiPartMPW)
* EpiWPDA = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, ReactType, EpiPartMPW)
* end else
* EpiWPD = ''
* EpiWPDA = ''
* end
* Availability = Epi_Part_Services('GetReactorUtilization', 'HTR')
* ReportList<RowIndex, -1> = 'R':ReactNo
* ReportList<RowIndex, -1> = WONo
* ReportList<RowIndex, -1> = StartDTM
* ReportList<RowIndex, -1> = StopDTM
* ReportList<RowIndex, -1> = Cassettes
* ReportList<RowIndex, -1> = WaferSize
* ReportList<RowIndex, -1> = PSNTargetThick
* ReportList<RowIndex, -1> = PSNo
* ReportList<RowIndex, -1> = PSNMPW
* ReportList<RowIndex, -1> = EpiPartMPW
* ReportList<RowIndex, -1> = EpiWPD
* ReportList<RowIndex, -1> = EpiWPDA
* ReportList<RowIndex, -1> = Availability
* end
* end else
* BadKeyList<-1> = KeyID
* end
* Repeat
* end
*
* Swap @VM with ',' in ReportList
* Swap @FM with CRLF$ in ReportList
* Filepath = 'C:\Users\StieberD\Desktop\report.csv'
* OSWrite ReportList on Filepath
* Database_Services('WriteDataRow', 'SYSLISTS', 'TEST_DANIEL3', BadKeyList)
* Msg(@WINDOW,MsgUp) ;* Take message down
*
* return
*
* Set_Env(ENV_DEBUGGER_INTERCEPT_PROC$, 'TEST_DANIEL3', 1)
* Set_Env(ENV_DEBUGGER_ENABLED$, 2, 1)
* Result = 4/0
*
*
* // cleanup
* Set_Env(ENV_DEBUGGER_ENABLED$, 1, 1)
*
* return
*
*
* Open 'REPLICATION_QUEUE_LSL2_WO_MAT' to TableHandle then
* Select TableHandle
* EOF = False$
* Loop
* ReadNext @ID else EOF = True$
* Until EOF
* TransType = Field(@ID, '*', 1)
* If TransType EQ 'WRITE' then
* Delete TableHandle, @ID then Null
* end
* Repeat
* end
*
*
*
*
*
*
*
* return
*
* WONo = 170528
* CassNo = 29
* WOMatKey = WONo:'*':CassNo
* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
* GRProps = obj_WO_Mat('GetGRProps', WOMatKey:@RM:WOMatRec)
* GRWfrQty
* ScrapQty
* ProdTWQty
* AvailMUWfrQty
* MUCassIDs
* MUCassQtys
*
* return
*
*
* 483953
* BadList = ''
* NextRDSKey = 475000
* StartRDSKey = 400000
* StopRDSKey = Xlate('DICT.RDS', '%SK%', '', 'X') - 1
* NumKeys = StopRDSKey - StartRDSKey
* Counter = 0
*
* Def = ""
* Def<MCAPTION$> = "Scanning RDS records..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = NumKeys
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
*
* For RDSNo = StartRDSKey to StopRDSKey
* Counter += 1
* WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
* MakeupBox = Xlate('WO_MAT', WOMatKey, 'MAKEUP_BOX', 'X')
* If MakeupBox NE True$ then
* InvLocs = Xlate('WO_MAT', WOMatKey, 'INV_LOCATION', 'X')
* InvActions = Xlate('WO_MAT', WOMatKey, 'INV_ACTION', 'X')
* Locate 'PTO' in InvLocs using @VM setting vPos else
* QASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
* If QASig NE '' then
* BadList<-1> = RDSNo
* end
* end
* end
* Running = Msg(@WINDOW, MsgUp, Counter, MSGINSTUPDATE$) ;* Update message
* Next RDSNo
* Database_Services('WriteDataRow', 'SYSLISTS', 'TEST_DANIEL5', BadList)
*
* Msg(@WINDOW,MsgUp) ;* Take message down
*
* return
*
*
* Fixit:
* debug
* Timestamp = Datetime()
* ErrorList = ''
* KeyList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL4')
* NumKeys = DCount(KeyList, @FM)
*
* Def = ""
* Def<MCAPTION$> = "Fixing Material Log Entries..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = NumKeys
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
*
* For each RDSNo in KeyList using @FM setting fPos
* RDSNo = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
* WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
* If WOMatKey NE '' then
* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
* InvActions = WOMatRec<WO_MAT_INV_ACTION$>
* Locate '1QA' in InvActions using @VM setting vPos else
* Locate 'LBLCHK' in InvActions using @VM setting vPos then
* QASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
* QASigTime = Xlate('RDS', RDSNo, 'SUP_VER_SIG_TIME', 'X')
* QASigDate = Xlate('RDS', RDSNo, 'SUP_VER_SIG_DATE', 'X')
* QASigDTM = QASigDate + (QASigTime/86400)
* WOMatRec<WO_MAT_INV_ACTION$> = Insert(WOMatRec<WO_MAT_INV_ACTION$>, 0, vPos, 0, '1QA')
* WOMatRec<WO_MAT_INV_WH$> = Insert(WOMatRec<WO_MAT_INV_WH$>, 0, vPos, 0, 'CR')
* WOMatRec<WO_MAT_INV_LOCATION$> = Insert(WOMatRec<WO_MAT_INV_LOCATION$>, 0, vPos, 0, 'QA')
* WOMatRec<WO_MAT_INV_USER$> = Insert(WOMatRec<WO_MAT_INV_USER$>, 0, vPos, 0, 'OI ADMIN')
* WOMatRec<WO_MAT_INV_DTM$> = Insert(WOMatRec<WO_MAT_INV_DTM$>, 0, vPos, 0, Timestamp)
* WOMatRec<WO_MAT_INV_TAG$> = Insert(WOMatRec<WO_MAT_INV_TAG$>, 0, vPos, 0, '')
* WOMatRec<WO_MAT_INV_TOOL_ID$> = Insert(WOMatRec<WO_MAT_INV_TOOL_ID$>, 0, vPos, 0, '')
*
* * WOMatRec<WO_MAT_INV_ACTION$, -1> = 'PLACE'
* * WOMatRec<WO_MAT_INV_WH$, -1> = '1K'
* * WOMatRec<WO_MAT_INV_LOCATION$, -1> = 'PTI'
* * WOMatRec<WO_MAT_INV_USER$, -1> = 'OI_ADMIN'
* * WOMatRec<WO_MAT_INV_DTM$, -1> = Timestamp
* * WOMatRec<WO_MAT_INV_TAG$, -1> = RDSNo
* * WOMatRec<WO_MAT_INV_TOOL_ID$, -1> = ''
*
* Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
* If Error_Services('HasError') then
* ErrorList<-1> = RDSNo
* end
* end
* end
* end else
* ErrorList<-1> = RDSNo
* end
* Running = Msg(@WINDOW, MsgUp, fPos, MSGINSTUPDATE$) ;* Update message
* Next WOMatKey
*
* Database_Services('WriteDataRow', 'SYSLISTS', 'TEST_DANIEL_ERROR', ErrorList)
*
* Msg(@WINDOW,MsgUp) ;* Take message down
*
* return
*
* debug
* WOMatKey = '170542*30'
* // Write success packaging
* LogFile = 'WO_MAT'
* Action = 'PACK'
* WhCd = 'CR'
* LocCd = 'PACK'
* UserID = @User4
* Tag = 'Packaging complete'
* ToolID = ''
*
* WONo = Field(WOMatKey, '*', 1, 1)
* CassNo = Field(WOMatKey, '*', 2, 1)
*
* InvDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
* Set_Status(0)
* aiParms = 'WO_MAT':@RM:WONo:@RM:CassNo:@RM:WhCd:'*':LocCd:@RM:Action:@RM:InvDTM:@RM:UserID:@RM:Tag:@RM:ToolID
* obj_WO_Mat('AddInvTrans', aiParms)
* If Get_Status(errCode) then
* debug
* Null
* end
*
* return
*
* Script:
*
* WOMatKey = '170599*2'
* LogFile = 'WO_MAT'
* Action = 'PLACE'
* WhCd = 'CR'
* LocCd = 'QA'
* UserID = @User4
* Tag = '170599.2'
* ToolID = ''
* errCode = ''
* WONo = Field(WOMatKey, '*', 1, 1)
* CassNo = Field(WOMatKey, '*', 2, 1)
* InvDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
*
* WOMLParms = LogFile:@RM
* WOMLParms := InvDTM:@RM
* WOMLParms := Action:@RM
* WOMLParms := WhCd:@RM
* WOMLParms := LocCd:@RM
* WOMLParms := WONo:@RM
* WOMLParms := CassNo:@RM
* WOMLParms := UserID:@RM
* WOMLParms := Tag:@RM
* WOMLParms := ToolID
*
* Set_Status(0)
* obj_WO_Mat_Log('Create',WOMLParms)
*
* aiParms = 'WO_MAT':@RM:WONo:@RM:CassNo:@RM:WhCd:'*':LocCd:@RM:Action:@RM:InvDTM:@RM:UserID:@RM:Tag:@RM:ToolID
* obj_WO_Mat('AddInvTrans', aiParms)
*
* errCode = ''
*
* IF Get_Status(errCode) THEN
* debug
* end
*
* return
*
* Script:
* debug
* BadList = ''
* RDSNos = 482815:@FM ; //Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL_LIST')
* For each RDSNo in RDSNos using @FM setting fPos
* WfrIDs = Xlate('REACT_RUN', RDSNo, 'IN_WFR_ID', 'X')
* For each WfrID in WfrIDs using @VM setting vPos
* GaN_Services('WithdrawWfr', RDSNo, WfrID)
* Next WfrID
* GaN_Services('SplitSelection', RDSNo)
* ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo)
* If Error_Services('NoError') then
* ReactRunRec<REACT_RUN_DISP_COMPLETE$> = ''
* Database_Services('WriteDataRow', 'REACT_RUN', RDSNo, ReactRunRec, True$, False$, True$)
* If Error_Services('HasError') then
* BadList<-1> = RDSNo
* end
* end else
* BadList<-1> = RDSNo
* end
* Next RDSNo
*
* Database_Services('WriteDataRow', 'SYSLISTS', 'TEST_DANIEL_ERROR', BadList)
*
*
* return
*
*
*
* return
*
* OPEN 'SCHED_DET_NG' TO SchedDetTable then
* OPEN 'DICT.SCHED_DET_NG' TO @DICT then
* Today = Datetime()
* SchedDetKeys = ''
* SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE ':Today:' BY REACT_NO'
*
* RList(SelectSent,TARGET_ACTIVELIST$,'','','')
* IF Get_Status(errCode) THEN
* ErrMsg(errCode)
* RETURN
* END
*
* Done = 0
* @ID = ''
* LOOP
* PrevSchedDetKey = @ID
* READNEXT @ID ELSE Done = 1
* UNTIL Done
* SchedDetKeys<-1> = @ID
* REPEAT
* Database_Services('WriteDataRow', 'SYSLISTS', 'TEST_DANIEL2', SchedDetKeys)
* end
* end
*
*
* return
*
* WONo = 170326
* For CassNo = 1 to 76 step 1
* WOMatKey = WONo:'*':CassNo
* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
* WOMatRec<WO_MAT_WMI_KEY$> = WONo:'*1*':CassNo
* WOMatRec<WO_MAT_WMO_KEY$> = WONo:'*1*':CassNo
* Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
* Next CassNo
*
*
* KeyList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL4')
* For each RDSNo in KeyList using @FM
*
* RDSTestKeys = Xlate('RDS', RDSNo, 'RDS_TEST_KEYS', 'X')
* If RDSTestKeys NE '' then
* For each RDSTestKey in RDSTestKeys using @VM
* RDSTestRec = Database_Services('ReadDataRow', 'RDS_TEST', RDSTestKey)
* RDSTestRec<RDS_TEST_SPEC_RES_MRECIPE$> = 'LSL_8IN'
* Database_Services('WriteDataRow', 'RDS_TEST', RDSTestKey, RDSTestRec)
* Next RDSTestKey
* end
*
* Next RDSNo
*
* CtrlVer = 1.2
* Msg(@Window, '', 'OK', '', 'Control Version':@FM:CtrlVer)
* *Version = SRP_Get_FileVersion("D:\apps\OICurrent\SRPControls.ocx")
* Version = SRP_Get_FileVersion("C:\Program Files (x86)\RevSoft\OIClient\SRPControls.ocx")
*
* return
*
* CutoffDate = Date() - 912 ; // 2.5 years
* RemoveList = ''
* KeyList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL')
* For each WOMatKey in KeyList using @FM setting fPos
*
* WONo = Field(WOMatKey, '*', 1)
* WOEntryDt = Xlate('WO_LOG', WONo, 'ENTRY_DATE', 'X')
* If WOEntryDt LT CutoffDate then
* RemoveList<-1> = WOMatKey
* end
*
* ReactType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE', 'X')
* If ReactType EQ 'EPP' then
*
* end else
* RDSNo = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
* DateOut = Xlate('RDS', RDSNo, 'DATE_OUT', 'X')
* CutoffDate = Date() - 730
* If ( (DateOut LT CutoffDate) or (DateOut EQ '') ) then
* // Old makeup cassette
* end
* end
*
* Next WOMatKey
*
* Database_Services('WriteDataRow', 'SYSLISTS', 'TEST_DANIEL2', RemoveList)
*
* return
*
*
* WOMatKey = '170484*9'
* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
* debug
* GRProps = obj_WO_Mat('GetGRProps',WOMatKey:@RM:WOMatRec)
*
* WMOKey = '170328*1*62'
* WMORec = Database_Services('ReadDataRow', 'WM_OUT', WMOKey)
* CurrStatus = obj_WM_Out('CurrStatus', WMOKey:@RM:WMORec)
* RepStatus = Xlate('WM_OUT', WMOKey, 'REP_STATUS', 'X')
*
*
* WOMatKey = '170328*62'
* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
* RepStatus = obj_WO_Mat('ReportStatus', WOMatKey:@RM:WOMatRec)
*
* WOStepKey = '170422*1'
* LoadCount = Sum(Xlate('WO_STEP', WOStepKey, 'ALL_RDS_WFRS_EPI_LOAD', 'X'))
* WONo = 170328
* EventWfrs = 444
* WOQty = Xlate('WO_LOG', WONo, 'QTY', 'X')
* FirstWfr = (WOQty - EventWfrs) / 25
* FirstWfr = FirstWfr[-1, 'B.']
* FirstWfr = (FirstWfr * .25) + 1
*
* return
*
*
* StartDate = Date() - 1
* EndDate = Date() - 1
*
* For Date = StartDate to EndDate Step 1
*
* Reactor_Services('ClearWafersExpected', OConv(Date, 'D'))
* Reactor_Services('ClearWafersProcessed', OConv(Date, 'D'))
* Reactor_Services('CreatePerformanceTrackers', OConv(Date, 'D'), True$)
* Reactor_Services('UpdatePerformanceTrackers', OConv(Date, 'D'), True$)
*
* Next Date
*
*
* For Date = StartDate to EndDate Step 1
*
* Reactor_Services_Dev('ClearWafersExpectedDev', OConv(Date, 'D'))
* Reactor_Services_Dev('ClearWafersProcessedDev', OConv(Date, 'D'))
* Reactor_Services_Dev('CreatePerformanceTrackersDev', OConv(Date, 'D'), True$)
* Reactor_Services_Dev('UpdatePerformanceTrackersDev', OConv(Date, 'D'), True$)
*
* Next Date
*
* ZombieList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL')
* For each EventID in ZombieList using @FM setting fPos
* Database_Services('DeleteDataRow', 'SCHED_DET_NG', EventID, True$, False$)
* Next EventID
*
*
*
* RDSList = ''
* RDSList<-1> = 469318
* RDSList<-1> = 469320
* RDSKey = Dialog_Box('NDW_RDS_QUERY', @Window, RDSList)
* Debug
* Messaging_Services('SendMessage', 'RefreshSchedule', 'Response', '', 'All', '', 'EventHandler', 'SCHEDULER_DEV' : ',OMNIEVENT,@MESSAGE,@ARGUMENTS')
* EOF = False$
* Query = 'SELECT WO_SCHEDULE_NG WITH UNSCHED_QTY EQ 0'
* RList(Query, TARGET_ACTIVELIST$, '', '', '')
* Loop
* Readnext WOLogKeyID else EOF = True$
* Until EOF = True$
* Database_Services('DeleteDataRow', 'WO_SCHEDULE_NG', WOLogKeyID)
* Repeat
*
*
* WOMatKey = Xlate('RDS', 469320, 'WO_MAT_KEY', 'X')
* WOMatKey = Xlate('RDS', 469318, 'WO_MAT_KEY', 'X')
*
* RType = Xlate('RDS', 469320, 'REACTOR_TYPE', 'X')
* RType = Xlate('RDS', 469318, 'REACTOR_TYPE', 'X')
*
* RxList = Reactor_Services('GetReactorNumbers')
* For each Reactor in RxList using @FM setting vPos
*
* ReactRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
* If ReactRec NE '' then
* ReactRec<REACTOR_SCHED_EVENTS$> = ''
* Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactRec, True$, False$, True$)
* end
*
* Next Reactor
*
* return
*
* KeyList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_DANIEL')
*
* Def = ""
* Def<MCAPTION$> = "Populating Test Wafer Data..."
* Def<MTYPE$> = "GC"
* Def<MEXTENT$> = Dcount(KeyList, @FM)
* Def<MTEXTWIDTH$> = 600
* MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
*
* For each RDSNo in KeyList using @FM setting fPos
*
* ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo)
* Database_Services('WriteDataRow', 'REACT_RUN', RDSNo, ReactRunRec, True$, False$, True$)
* Running = Msg(@WINDOW, MsgUp, fPos, MSGINSTUPDATE$) ;* Update message
* Next RDSNo
*
* Msg(@WINDOW,MsgUp) ;* Take message down
*
* return
*
*
* TestRevDotNetCommon:
*
* //Define the dotNet version
* RevDotNetCommon = ''
* DotNetHandle = StartDotNet("", '', RevDotNetCommon)
*
* DotNetDir = CheckDotNet('4.0'):'\'
* SqlClientDLLPath = DotNetDir:'System.Data.dll'
* ConnectionString = 'Password=mesa@1234@IQSDMS1!0987;Persist Security Info=True;User ID=IQSDMS1;Initial Catalog=G4Wafers_01;Data Source=messv01ec.ec.local\PROD1,53959'
* //Specify the DLL
* rv = Set_Property.NET(DotNetHandle, "AssemblyName", SqlClientDLLPath, RevDotNetCommon)
* //Define the classes
* SqlConnectionObj = Create_Class.NET(DotNetHandle, "System.Data.SqlClient.SqlConnection", 0, ConnectionString, 'System.String', RevDotNetCommon)
* IF Get_Status(errCode) THEN
* ErrMsg(errCode)
* END else
* mthds = Get_Info.Net(SqlConnectionObj, REVDOTNET_INFO_METHODS, RevDotNetCommon)
* Set_Status(0)
* rv = Send_Message.Net(SqlConnectionObj, "Open", RevDotNetCommon)
*
* IF Not(Get_Status(errCode)) THEN
* ConnectionState = Get_Property.Net(SqlConnectionObj, "State", RevDotNetCommon)
*
* If ConnectionState EQ 'Open' then
* SQLStatement = "select [Probe_Key] from [G4Wafers_01].[dbo].[Probe3]"
* Params = SQLStatement:@FM:SqlConnectionObj
* ParamTypes = 'System.String':@FM:'RevDotNet'
* Set_Status(0)
* SqlCommandObj = Create_Class.NET(DotNetHandle, "System.Data.SqlClient.SqlCommand", 0, Params, ParamTypes, RevDotNetCommon)
* If Not(Get_Status(errCode)) then
* SqlCommandMethods = Get_Info.Net(SqlCommandObj, REVDOTNET_INFO_METHODS)
* Set_Status(0)
* ProbeKey = Send_Message.Net(SqlCommandObj, "ExecuteScalar", RevDotNetCommon)
* If Not(Get_Status(errCode)) then
* If ( (ProbeKey NE 0) and (ProbeKey NE '') ) then
* NewProbeKey = ProbeKey + 1
* SQLStatement = 'update [G4Wafers_01].[dbo].[Probe3] set [Probe_Key] = ':NewProbeKey:' where [Probe_Key] = ':ProbeKey
* Set_Status(0)
* rv = Set_Property.NET(SqlCommandObj, "CommandText", SQLStatement, RevDotNetCommon)
* If Not(Get_Status(errCode)) then
* Set_Status(0)
* rv = Send_Message.Net(SqlCommandObj, "ExecuteNonQuery", RevDotNetCommon)
* If Not(Get_Status(errCode)) then
* // Verify Probe Key was updated
* SQLStatement = "select [Probe_Key] from [G4Wafers_01].[dbo].[Probe3]"
* Set_Status(0)
* rv = Set_Property.NET(SqlCommandObj, "CommandText", SQLStatement, RevDotNetCommon)
* If Not(Get_Status(errCode)) then
* Set_Status(0)
* VerifyProbeKey = Send_Message.Net(SqlCommandObj, "ExecuteScalar", RevDotNetCommon)
* If Not(Get_Status(errCode)) then
* If VerifyProbeKey NE NewProbeKey then
* // Log error
* end
* end
* end
* end
* end
* end else
* // Log error
* end
* end
* end
* rv = Send_Message.Net(SqlConnectionObj, 'Close', RevDotNetCommon)
* ConnectionState = Get_Property.Net(SqlConnectionObj, "State", RevDotNetCommon)
* end
* end
* end
* Free_Class.Net('', RevDotNetCommon)
*
* return
*
*
* Main:
*
*
* objConnection = SQL_Services('GetConnectionObject', 'SPC')
*
* If objConnection then
*
* Query = "select [Probe_Key] from [G4Wafers_01].[dbo].[Probe2]"
* SQL_Services('ExecuteQuery', objConnection, Query, True$)
*
* SQL_Services('DestroyConnectionObject', objConnection)
* end
*
*
*
* return
*
*
*
*
* Test5:
*
* ConnString = Database_Services('ReadDataRow', 'SERVERS', 'SPC')
* ConnString = Delete(ConnString, 2, 0, 0)
* ProviderIdx = IndexC(ConnString, 'Provider', 1)
* ConnString = ConnString[(ProviderIdx + 1), 999]
* ProviderEndIdx = Index(ConnString, ';', 1)
* ConnString = ConnString[(ProviderEndIdx + 1), 999]
* CIKey = 2409742
* InspReq = Xlate('CLEAN_INSP', CIKey, 'SPEC_INSP_REQ', 'X')
* If InspReq EQ '' then InspReq = Xlate('CLEAN_INSP', CIKey, 'INSP_REQ', 'X')
*
* InspFreq = Xlate('CLEAN_INSP', CIKey, 'INSP_INTERVAL', 'X')
* If InspFreq NE '' then
* // Use the stored interval
* RDSNo = Xlate('CLEAN_INSP', CIKey, 'RDS_NO', 'X')
* PSNo = Xlate('CLEAN_INSP', CIKey, 'PS_NO', 'X')
* WONo = Xlate('CLEAN_INSP', CIKey, 'WO_NO', 'X')
* WOQty = Xlate('WO_LOG', WONo, 'QTY', 'X')
* RunNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
* StageKey = PSNo:'*LWI'
* InspInterval = Xlate('PRS_STAGE', StageKey, 'INSP_INTERVAL', 'X')
* LastRun = ( (RunNo * 25) EQ WOQty )
* InspReq = ( (Mod((RunNo - 1), InspInterval) EQ 0) or LastRun )
* end else
* // Use the current PRS_STAGE interval
* InspReq = Xlate('CLEAN_INSP', CIKey, 'INSP_REQ', 'X')
* end
*
* return
*
*
* Export:
*
* NonEppList = ''
* WOMatList = Database_Services('ReadDataRow', 'SYSLISTS', 'NULL_RDS_NON_EPP')
*
* For each WOMatKey in WOMatList using @FM setting fPos
*
* ReactorType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE', 'X')
* If ReactorType NE 'EPP' and ReactorType NE 'GAN' then
* NonEppList<-1> = WOMatKey
* end
* Next WOMatKey
*
* Database_Services('WriteDataRow', 'SYSLISTS', 'NULL_RDS_NON_EPP', NonEppList)
*
* NonEppList = Database_Services('ReadDataRow', 'SYSLISTS', 'NULL_RDS_NON_EPP')
* Swap @FM with CRLF$ in NonEppList
* OSWrite NonEppList on 'C:\Users\StieberD\Desktop\null-rds-non-epp.csv'
*
*
*
* return
*
*
*
*
* WOMatPush:
*
* * WOMatKeyList = Database_Services('ReadDataRow', 'SYSLISTS', 'FABTIME_PUSH')
* *
* * NumWOMatKeys = DCount(WOMatKeyList, @FM)
* *
* * Def = ""
* * Def<MCAPTION$> = "Updating WO_MAT..."
* * Def<MTYPE$> = "GC"
* * Def<MEXTENT$> = NumWOMatKeys
* * Def<MTEXTWIDTH$> = 600
* * MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
* * Table = 'WO_MAT'
* * WOMatKeyListIndex = 1
* * NewWOMatKeyList = WOMatKeyList
* * Loop
* * ID = WOMatKeyList<WOMatKeyListIndex>
* * Copy_Record_To_SQL(Table, ID, 1)
* * NewWOMatKeyList = Delete(NewWOMatKeyList, 1, 0, 0)
* * WOMatKeyListIndex += 1
* * Database_Services('WriteDataRow', 'SYSLISTS', 'FABTIME_PUSH', NewWOMatKeyList)
* * Running = Msg(@WINDOW, MsgUp, WOMatKeyListIndex, MSGINSTUPDATE$) ;* Update message
* * Until WOMatKeyListIndex GE NumWOMatKeys
* * Repeat
* *
* * Msg(@WINDOW,MsgUp) ;* Take message down
*
* return
*
*
* TaskSubmit:
*
* TaskID = RTI_Task_Submit('', 'TEST_DANIEL', '', '', '', '')
*
* If TaskID NE 0 then
* Done = False$
* TaskResponse = ''
* Loop
* Status = RTI_Task_Status(TaskID, TaskResponse)
* If (Status EQ 'COMPLETED') OR (Status EQ 'ERROR') then Done = True$
* Until Done
* Repeat
* end else
* // Track if task id wasn't created at all.
* end
* StatusError = Get_Status(errCode)
* If (Index(errCode, 'SHELLEXECUTE', 1)) NE 0 then StatusError = 0
*
*
* return
*
* retval = Utility("PRINTSETUP")
*
* IF NOT(ASSIGNED(PrinterID)) THEN PrinterID = ''
* IF NOT(ASSIGNED(RetDefault)) THEN RetDefault = ''
*
* Printers = ''
* Default = ''
*
* //PrintCount = PrintSetupNew(Printers,Default) ;* OI routine returns printer names, driver, port information
* //end else
* PrintCount = PrintSetup(PRN_GET$,'',Printers,Default) ;* OI routine returns printer names, driver, port information
* //end
*
* DefPrinter = Default[1,',']
* DefPort = FIELD(Default,',',3)
* DefLine = DefPrinter:' on ':DefPort
*
* If Default NE 'Microsoft XPS Document Writer,winspool,Ne00:' then
* Null
* PrintSetup(PRN_SET$, 'Microsoft XPS Document Writer,winspool,Ne00:')
* end
*
* return
*
*
* // Import 6 inch Excel spreadsheet
*
* RetainFilepath = 'D:\Apps\Temp\6in-IFEPI GaN Retain Inventory.xlsx'
* RetainFilepath = 'D:\Apps\Temp\8in-IFEpi GaN Retain Inventory.xlsx'
* RetainFilepath = 'D:\Apps\Temp\Sample.xlsx'
* RetainExcelHandle = Excel_Services('OpenDocument', RetainFilepath)
* RetainWorksheet = 'Sheet1'
* NumExcelRows = Excel_Services('GetNumRows', RetainExcelHandle, RetainWorksheet)
*
* Open 'DICT.REACT_RUN' to @DICT then
* For ExcelRow = 2 to NumExcelRows
*
* RunID = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'A', ExcelRow) )
* Convert @Upper.Case to @Lower.Case in RunID
* RDSNo = ''
* Column = 'GAN_RUN_ID'
* SearchString = Column:@VM:RunID:@FM
* Btree.Extract(SearchString, 'REACT_RUN', @DICT, RDSNo)
* If RDSNo NE '' then
* ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo)
* If Error_Services('NoError') then
* RRRecipe = ReactRunRec<REACT_RUN_GAN_RECIPE$>
* RRPart = Xlate('REACT_RUN', RDSNo, 'EPI_PART_NO', 'X')
* RRScribes = Xlate('REACT_RUN', RDSNo, 'WFR_SCRIBES', 'X')
* InWfrIDs = ReactRunRec<REACT_RUN_IN_WFR_ID$>
*
* * Read the data from the Excel retain spreadsheet *
* Recipe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'B', ExcelRow) )
* Pocket = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'C', ExcelRow) )
* If Pocket _NEC 'ref' then
* Scribe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'D', ExcelRow) )
* Grade = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'E', ExcelRow) )
* Part = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'F', ExcelRow) )
* WorkOrder = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'G', ExcelRow) )
* RetainBox = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'H', ExcelRow) )
* RetainSlot = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'I', ExcelRow) )
* Operator = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'J', ExcelRow) )
* RetainDTM = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'K', ExcelRow) )
* CurrLoc = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'L', ExcelRow) )
* Status = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'M', ExcelRow) )
* Comment = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'N', ExcelRow) )
*
* Begin Case
* Case Operator _EQC 'AH'
* RetainSig = 'ANTHONY_H'
* Case Operator _EQC 'SB'
* RetainSig = 'SYEDA_B'
* Case Operator _EQC 'PM'
* RetainSig = 'PEYTON_M'
* Case Operator _EQC 'JL'
* RetainSig = 'JAVIER_L'
* Case Operator _EQC 'PS'
* RetainSig = 'PRISCILA_S'
* Case Operator _EQC 'NC'
* RetainSig = 'NIKOLAS_C'
* Case Operator _EQC 'HG'
* RetainSig = 'HECTOR_G'
* Case Operator _EQC 'ES'
* RetainSig = 'ESTEBAN_S'
* Case Operator _EQC 'AD'
* RetainSig = 'ALIYAH_D'
* Case Operator _EQC 'LB'
* RetainSig = 'LACEY_B'
* Case Operator _EQC 'IP'
* RetainSig = 'IAN_P'
* Case Operator _EQC 'RC'
* RetainSig = 'RYAN_C'
* Case Operator _EQC 'GR'
* RetainSig = 'GEORGE_R'
* Case Operator _EQC 'AH/JL'
* RetainSig = 'ANTHONY_H'
* Case Operator _EQC 'NC/JL'
* RetainSig = 'NIKOLAS_C'
* Case Operator _EQC 'SW'
* RetainSig = 'STEVEN_W'
* Case Otherwise$
* RetainSig = ''
* End Case
*
* // Truncate DTM to just the date, then convert to internal format
* RetainDate = RetainDTM[1, 'F ']
* RetainDate = IConv(RetainDate, 'D')
*
* * Clean the data *
* // Format the Recipe
* Convert @Lower.Case to @Upper.Case in Recipe
* // Format the Pocket
* If Pocket[1, 1] NE '0' then Pocket = '0':Pocket
* // Format the Scribe
* Convert @Lower.Case to @Upper.Case in Scribe
* // Format the Grade
* Begin Case
* Case Grade _EQC 'aborted'
* Grade = 'Aborted'
* Case Grade _EQC 'CT'
* Grade = 'CT'
* Case ( (Grade _EQC 'Eng test') or (Grade _EQC 'Eng test') or (Grade _EQC 'Engtest') or (Grade _EQC 'Test') )
* Grade = 'Eng Test'
* Case Grade _EQC 'Eq Failure'
* Grade = 'EQ Failure'
* Case Grade _EQC 'Mechanical'
* Grade = 'Mechanical'
* Case Grade _EQC 'NA'
* Grade = 'NA'
* Case Grade _EQC 'retain'
* Grade = 'Retain'
* Case Grade _EQC 'scrap'
* Grade = 'Scrap'
* Case Grade _EQC 'Terminated'
* Grade = 'Terminated'
* Case Grade _EQC ''
* Grade = ''
* Case Otherwise$
* Null
* End Case
* // Format the Part No
* Convert @Lower.Case to @Upper.Case in Part
* // Format the Current Location
* Begin Case
* Case CurrLoc _EQC 'Cleanroom'
* CurrLoc = 'Cleanroom'
* Case ( (CurrLoc _EQC 'Wafer Destroyed') or (CurrLoc _EQC 'Wafers Destroyed') or (CurrLoc _EQC 'Wasfer Destroyed') )
* CurrLoc = 'Wafer Destroyed'
* Case CurrLoc _EQC 'Warehouse'
* CurrLoc = 'Warehouse'
* End Case
*
* * Write the data to the WO_WFR record *
* WfrIndex = Pocket + 0 ; // Convert string to integer and trim 0 padding
*
* RRScribe = RRScribes<0, WfrIndex>
* WfrID = InWfrIDs<0, WfrIndex>
* WOWfrRec = Database_Services('ReadDataRow', 'WO_WFR', WfrID)
* If Error_Services('NoError') then
* WOWfrRec<WO_WFR_GRADE$> = Grade
* WOWfrRec<WO_WFR_GAN_RUN_ID$> = RunID
* WOWfrRec<WO_WFR_POCKET$> = Pocket
* WOWfrRec<WO_WFR_SCRIBE$> = Scribe
* WOWfrRec<WO_WFR_RETAIN_BOX$> = RetainBox
* WOWfrRec<WO_WFR_RETAIN_SLOT$> = RetainSlot
* WOWfrRec<WO_WFR_RETAIN_LOC$> = CurrLoc
* WOWfrRec<WO_WFR_RETAIN_COMMENT$> = Comment
* WOWfrRec<WO_WFR_RETAIN_STATUS$> = Status
* WOWfrRec<WO_WFR_RETAIN_SIG$> = RetainSig
* WOWfrRec<WO_WFR_RETAIN_DT$> = RetainDate
* Database_Services('WriteDataRow', 'WO_WFR', WfrID, WOWfrRec, True$, False$, True$)
* end
* end
* end
* end
* Next ExcelRow
* end
* Excel_Services('CloseDocument', RetainExcelHandle)
*
* // Import 8 inch Excel spreadsheet
*
* RetainFilepath = 'D:\Apps\Temp\8in-IFEpi GaN Retain Inventory.xlsx'
* RetainExcelHandle = Excel_Services('OpenDocument', RetainFilepath)
* RetainWorksheet = 'Sheet1'
* NumExcelRows = Excel_Services('GetNumRows', RetainExcelHandle, RetainWorksheet)
*
* Open 'DICT.REACT_RUN' to @DICT then
* For ExcelRow = 2 to NumExcelRows
*
* RunID = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'A', ExcelRow) )
* Convert @Upper.Case to @Lower.Case in RunID
* RDSNo = ''
* Column = 'GAN_RUN_ID'
* SearchString = Column:@VM:RunID:@FM
* Btree.Extract(SearchString, 'REACT_RUN', @DICT, RDSNo)
* If RDSNo NE '' then
* ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo)
* If Error_Services('NoError') then
* RRRecipe = ReactRunRec<REACT_RUN_GAN_RECIPE$>
* RRPart = Xlate('REACT_RUN', RDSNo, 'EPI_PART_NO', 'X')
* RRScribes = Xlate('REACT_RUN', RDSNo, 'WFR_SCRIBES', 'X')
* InWfrIDs = ReactRunRec<REACT_RUN_IN_WFR_ID$>
*
* * Read the data from the Excel retain spreadsheet *
* Recipe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'B', ExcelRow) )
* Pocket = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'C', ExcelRow) )
* If Pocket _NEC 'ref' then
* Scribe = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'D', ExcelRow) )
* Grade = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'E', ExcelRow) )
* Part = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'F', ExcelRow) )
* WorkOrder = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'G', ExcelRow) )
* RetainBox = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'H', ExcelRow) )
* RetainSlot = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'I', ExcelRow) )
* Operator = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'J', ExcelRow) )
* RetainDate = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'K', ExcelRow) )
* CurrLoc = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'L', ExcelRow) )
* Status = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'M', ExcelRow) )
* Comment = Trim( Excel_Services('GetCellValue', RetainExcelHandle, RetainWorksheet, 'N', ExcelRow) )
*
* Begin Case
* Case Operator _EQC 'AH'
* RetainSig = 'ANTHONY_H'
* Case Operator _EQC 'SB'
* RetainSig = 'SYEDA_B'
* Case Operator _EQC 'PM'
* RetainSig = 'PEYTON_M'
* Case Operator _EQC 'JL'
* RetainSig = 'JAVIER_L'
* Case Operator _EQC 'PS'
* RetainSig = 'PRISCILA_S'
* Case Operator _EQC 'NC'
* RetainSig = 'NIKOLAS_C'
* Case Operator _EQC 'HG'
* RetainSig = 'HECTOR_G'
* Case Operator _EQC 'ES'
* RetainSig = 'ESTEBAN_S'
* Case Operator _EQC 'AD'
* RetainSig = 'ALIYAH_D'
* Case Operator _EQC 'LB'
* RetainSig = 'LACEY_B'
* Case Operator _EQC 'IP'
* RetainSig = 'IAN_P'
* Case Operator _EQC 'RC'
* RetainSig = 'RYAN_C'
* Case Operator _EQC 'GR'
* RetainSig = 'GEORGE_R'
* Case Operator _EQC 'AH/JL'
* RetainSig = 'ANTHONY_H'
* Case Operator _EQC 'NC/JL'
* RetainSig = 'NIKOLAS_C'
* Case Operator _EQC 'SW'
* RetainSig = 'STEVEN_W'
* Case Otherwise$
* RetainSig = ''
* End Case
*
* // Truncate DTM to just the date, then convert to internal format
* RetainDate = RetainDTM[1, 'F ']
* RetainDate = IConv(RetainDate, 'D')
*
* * Clean the data *
* // Format the Recipe
* Convert @Lower.Case to @Upper.Case in Recipe
* // Format the Pocket
* If Pocket[1, 1] NE '0' then Pocket = '0':Pocket
* // Format the Scribe
* Convert @Lower.Case to @Upper.Case in Scribe
* // Format the Grade
* Begin Case
* Case Grade _EQC 'aborted'
* Grade = 'Aborted'
* Case Grade _EQC 'CT'
* Grade = 'CT'
* Case ( (Grade _EQC 'Eng test') or (Grade _EQC 'Eng test') or (Grade _EQC 'Engtest') or (Grade _EQC 'Test') )
* Grade = 'Eng Test'
* Case Grade _EQC 'Eq Failure'
* Grade = 'EQ Failure'
* Case Grade _EQC 'Mechanical'
* Grade = 'Mechanical'
* Case Grade _EQC 'NA'
* Grade = 'NA'
* Case Grade _EQC 'retain'
* Grade = 'Retain'
* Case Grade _EQC 'scrap'
* Grade = 'Scrap'
* Case Grade _EQC 'Terminated'
* Grade = 'Terminated'
* Case Grade _EQC ''
* Grade = ''
* Case Otherwise$
* Null
* End Case
* // Format the Part No
* Convert @Lower.Case to @Upper.Case in Part
* // Format the Current Location
* Begin Case
* Case CurrLoc _EQC 'Cleanroom'
* CurrLoc = 'Cleanroom'
* Case ( (CurrLoc _EQC 'Wafer Destroyed') or (CurrLoc _EQC 'Wafers Destroyed') or (CurrLoc _EQC 'Wasfer Destroyed') )
* CurrLoc = 'Wafer Destroyed'
* Case CurrLoc _EQC 'Warehouse'
* CurrLoc = 'Warehouse'
* End Case
*
* * Write the data to the WO_WFR record *
* WfrIndex = Pocket + 0 ; // Convert string to integer and trim 0 padding
*
* RRScribe = RRScribes<0, WfrIndex>
* WfrID = InWfrIDs<0, WfrIndex>
* WOWfrRec = Database_Services('ReadDataRow', 'WO_WFR', WfrID)
* If Error_Services('NoError') then
* WOWfrRec<WO_WFR_GRADE$> = Grade
* WOWfrRec<WO_WFR_GAN_RUN_ID$> = RunID
* WOWfrRec<WO_WFR_POCKET$> = Pocket
* WOWfrRec<WO_WFR_SCRIBE$> = Scribe
* WOWfrRec<WO_WFR_RETAIN_BOX$> = RetainBox
* WOWfrRec<WO_WFR_RETAIN_SLOT$> = RetainSlot
* WOWfrRec<WO_WFR_RETAIN_LOC$> = CurrLoc
* WOWfrRec<WO_WFR_RETAIN_COMMENT$> = Comment
* WOWfrRec<WO_WFR_RETAIN_STATUS$> = Status
* WOWfrRec<WO_WFR_RETAIN_SIG$> = RetainSig
* WOWfrRec<WO_WFR_RETAIN_DT$> = RetainDate
* Database_Services('WriteDataRow', 'WO_WFR', WfrID, WOWfrRec, True$, False$, True$)
* end
* end
* end
* end
* Next ExcelRow
* end
* Excel_Services('CloseDocument', RetainExcelHandle)
*
* return