diff --git a/.gitignore b/.gitignore index 69b4cc3..e1c03b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ LSL2/STPROC/TEST_DANIEL*.txt LSL2/STPROC/TEST_DAKOTA.txt +LSL2/STPROC/JONATHAN_SERVICES.txt diff --git a/LSL2/STPROC/JONATHAN_SERVICES.txt b/LSL2/STPROC/JONATHAN_SERVICES.txt deleted file mode 100644 index 74b1a11..0000000 --- a/LSL2/STPROC/JONATHAN_SERVICES.txt +++ /dev/null @@ -1,1665 +0,0 @@ -Compile function JONATHAN_Services(@Service, @Params) -#pragma precomp SRP_PreCompiler - -Declare function Gan_Services, Obj_Notes_Sent, msg, Check_Notes, Jonathan_Services, Database_Services, SRP_Datetime, Datetime -Declare function Lsl_Users_Services, SRP_Time, RList, Error_Services, Obj_Wo_Mat, Pm_Services, Date_Services, Test_Run_Services -Declare function Reactor_Services, Reactor_Log_Services, Environment_Services, Logging_Services, Obj_Wm_out, Obj_wo_mat -Declare function Test_Wafer_Prod_Services, RDS_Services, SRP_Sort_Array, Return_To_Fab_Services, Lot_Services -DECLARE FUNCTION obj_WO_Mat , obj_WO_Mat_QA, Active_Directory_Services, SRP_Array, obj_vendor_code, obj_wm_out -Declare subroutine Start_Window, RList, Set_Status, Database_Services, Obj_Sap, Sap_Services, Btree.Extract -Declare subroutine Reactor_Services, Logging_Services, Extract_SI_Keys, Get_Status, obj_notes, obj_wo_react -Declare subroutine OBJ_WO_MAT_QA, PSN_Services, Print_Shipment_dev, obj_shipment, SRP_Run_Command - -$insert LOGICAL -$insert NOTE_PTRS_EQU -$insert MSG_EQUATES -$Insert APP_INSERTS -$Insert RLIST_EQUATES -$Insert WO_LOG_EQUATES -$Insert RDS_EQUATES -$Insert WO_STEP_EQUATES -$Insert WO_MAT_QA_EQUATES -$Insert REACT_RUN_EQUATES -$Insert RDS_LAYER_EQUATES -$Insert RDS_TEST_EQUATES -$Insert PM_EQUATES -$Insert PM_SPEC_EQUATES -$Insert WO_MAT_EQUATES -$Insert WM_OUT_EQUATES -$Insert ICAR_EQUATES -$Insert LSL_USERS_EQUATES -$Insert TEST_WAFER_PROD_EQUATES -$Insert PRODUCT_OPERATION_EQUATES -$Insert WO_REACT_EQUATES -$Insert COMPANY_EQUATES -$Insert CUST_EPI_PART_EQUATES -$Insert EPI_PART_EQUATES -/*$Insert TEST_RUN_EQUATES -$Insert TEST_RUN_WAFER_EQUATES -$Insert TEST_WAFER_PROD_EQUATES -$Insert TEST_RUN_TYPE_EQUATES -*/ -$Insert REACTOR_EQUATES - - -GoToService - -Return Response or "" - -//----------------------------------------------------------------------------- -// SERVICES -//----------------------------------------------------------------------------- - -Service GetWMONextOpenSlots() - debug - test = obj_wm_out('NextOpenSlots', '173330':@RM:1) -end service - -Service PrintReactorLabel(ReactNo, LoadLockSide) - - If ( (ReactNo NE '') and (LoadLockSide NE '') ) then - BaseZpl = '^XA^LH10,10^FO35,5^BY2^B3N,,80,N^FD10SR{ReactNo}.{LoadLockSidePrefix}^FS^FO10,105^A045,90^FB400,1,,C^FDR{ReactNo} {LoadLockSide}^FS^XZ' - Convert 'R' to '' in ReactNo - If LoadLockSide _EQC 'Both' then - LoadLockSidePrefix = 'L' - ZplLeft = BaseZpl - Swap '{ReactNo}' with ReactNo in ZplLeft - Swap '{LoadLockSidePrefix}' with LoadLockSidePrefix in ZplLeft - Swap '{LoadLockSide}' with 'Left' in ZplLeft - ZplRight = BaseZpl - LoadLockSidePrefix = 'R' - Swap '{ReactNo}' with ReactNo in ZplRight - Swap '{LoadLockSidePrefix}' with LoadLockSidePrefix in ZplRight - Swap '{LoadLockSide}' with 'Right' in ZplRight - Zpl = ZplLeft:ZplRight - end else - LoadLockSidePrefix = LoadLockSide[1, 1] - Zpl = BaseZpl - Swap '{ReactNo}' with ReactNo in Zpl - Swap '{LoadLockSidePrefix}' with LoadLockSidePrefix in Zpl - Swap '{LoadLockSide}' with LoadLockSide in Zpl - end - //Labeling_Services('PrintLabel', Zpl, '\\messp1003.infineon.com\MESZBRPRT008') - OSWrite ZPL to 'C:\Users\MESOuellette\Desktop\ReactorLabel' : ReactNo : '.zpl' - end else - Error_Services('Add', 'Error in ':Service:' service. Null ReactNo or LoadLockSide passed in.') - end - -end service - -Service DeleteTWUseKeyByRDS(RDSNo) - Debug - Response = 0 - ErrorMessage = '' - TestRunKeys = Test_Run_Services('GetTestRunKeysByRDS', RDSNo) - for each testrunkey in testrunkeys using @VM - Table = 'TEST_RUN' - KeyID = testrunkey - Resp = Database_Services('UnlockKeyID', Table, KeyID) - If Resp then - Database_Services('DeleteDataRow', 'TEST_RUN', testrunkey) - if error_services('NoError') then - Response = 1 - end else - errorMessage = Error_Services('GetMessage') - Response = 0 - end - end else - errorMessage = 'Error: unable to unlock record' - Response = 0 - end - - Next testrunkey - -end service - -Service PrintRDSLabel(RDSNo) - WONo = XLATE('RDS', RDSNo, RDS_WO$, 'X') - CustNo = XLATE( 'WO_LOG', WONo, wo_log_cust_no$, 'X' ) - PrintCompany = XLATE('COMPANY', CustNo, COMPANY_CO_NAME$, 'X') - PrintRONum = XLATE('RDS', RDSNo, RDS_CASS_NO$, 'X') - - EpiPartNo = XLATE('WO_LOG', WONo, WO_LOG_EPI_PART_NO$, 'X') - CustEpiPartSpecNo = XLATE('EPI_PART', EpiPartNo, CUST_EPI_PART_SPEC_NO$,'X')[-1,'B':@VM] ;* Last (current) Customer Spec Number - - PrintPSN = XLATE( 'RDS', RdsIds, rds_prod_spec_id$, 'X' ) - - PrintSpecType = OCONV( XLATE( 'RDS', RDSNo, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' ) - PrintLotNum = XLATE( 'RDS', RDSNo, rds_lot_num$, 'X' ) - - PrintQty = XLATE( 'RDS', RDSNo, 'WAFERS_SCHEDULED', 'X' ) - - PrintRDSId = RDSNo - - PrintSubPartNum = XLATE( 'RDS', RDSNo, 'SUB_PART_NUM', 'X' ) - - WOMatRec = WONo : '*' : PrintRONum - SubSupplier = obj_Vendor_Code('SemiToEpi',WOMatRec) - VendCd = XLATE('COMPANY',CustNo,COMPANY_VEND_CD$,'X') - IF VendCd NE '' THEN - SubSupplier = VendCd ;* Substrate supplier code found in the EPI_PART window. 12/9/2011 for cust 7067 - END - PrintSuppCd = SubSupplier - PSStageKey = PrintPSN:'*QA' - PrintRecipe = XLATE('PRS_STAGE',PSStageKey,'MET_RECIPE','X') - PrintQARecipe = FIELD(PrintRecipe, @VM, 1) - Str = '' - Str := '^XA' - Str := '^LH0,0' - Str := '^PR1' ;* Print speed 2 inches per second - Str := '^LL406' ;* Label length @203 dpi - Str := '^PW900' - Str := '^MD22' ;* Media darkness - Str := '^MMT' ;* Media mode t=tear off mode - *Str := '^PQ2' ;* Print 2 labels for each pass through here - - ****** First Line, Cust, WO and RO - Str := '^FO25,25^AC,18^FDCust: ^FS':CRLF$ - Str := '^FO95,14^A045,35^FD':PrintCompany:'^FS':CRLF$ - Str := '^FO570,25^AC18^FDWO: ^FS':CRLF$ - Str := '^FO610,14^A045,35^FD':WONo:'^FS':CRLF$ - Str := '^FO730,25^AC18^FDRO: ^FS':CRLF$ - Str := '^FO770,14^A045,35^FD':PrintRONum:'^FS':CRLF$ - - ****** Second Line, Cust Spec, PSN and Type - Str := '^FO25,75^AC18^FD(P)Cust Spec: ^FS':CRLF$ - Str := '^FO185,65^A045,35^FD':CustEpiPartSpecNo:'^FS':CRLF$ - Str := '^FO25,95^BY2,2.0^B3,,50,N^FDP':CustEpiPartSpecNo:'^FS':CRLF$ - Str := '^FO640,75^AC18^FDPSN:^FS':CRLF$ - Str := '^FO690,65^A045,35^FD':PrintPSN:'^FS':CRLF$ - Str := '^FO630,125^AC18^FDType:^FS':CRLF$ - Str := '^FO690,115^A045,30^FD':PrintSpecType:'^FS':CRLF$ - - ****** Third Line, Sub Lot, Qty and RDS - Str := '^FO25,175^AC18^FD(2T)Sub Lot:^FS':CRLF$ - Str := '^FO175,165^A045,35^FD':PrintLotNum:'^FS':CRLF$ - Str := '^FO25,195^BY1,3.0^B3,,50,N^FD2T':PrintLotNum:'^FS':CRLF$ - Str := '^FO400,175^AC18^FD(Q)Qty:^FS':CRLF$ - Str := '^FO500,165^A045,35^FD':PrintQty:'^FS':CRLF$ - Str := '^FO400,195^B3,,50,N^FDQ':PrintQty:'^FS':CRLF$ - Str := '^FO590,175^AC18^FD(1T)RDS: ^FS':CRLF$ - Str := '^FO690,165^A045,35^FD':PrintRDSId:'^FS':CRLF$ - Str := '^FO630,195^B3,,50,N^FD1T':PrintRDSId:'^FS':CRLF$ - - ****** Fourth Line, SubPN, Vendor and QA Metrology recipe - Str := '^FO25,275^AC18^FD(S)Sub PN:^FS':CRLF$ - Str := '^FO145,265^A045,35^FD':PrintSubPartNum:'^FS':CRLF$ - Str := '^FO25,295^B3,,50,N^FDS':PrintSubPartNum:'^FS':CRLF$ - Str := '^FO400,275^AC18^FD(1V)Vend:^FS':CRLF$ - Str := '^FO510,265^A045,35^FD':PrintSuppCd:'^FS':CRLF$ - Str := '^FO400,295^B3,,50,N^FD1V':PrintSuppCd:'^FS':CRLF$ - Str := '^FO590,275^AC18^FD':PrintQARecipe:'^FS':CRLF$ - - ****** Fifth Line, Motto and Data Matrix barcode - Str := '^FO25,370^A045,28':CRLF$ - Str := "^FDWe do what we promise. That's quality made by Infineon.^FS":CRLF$ - Str := '^FO725,320^CI28':CRLF$ - Str := '^BXN,2,200^FDP':CustEpiPartSpecNo:'|S':PrintSubPartNum:'|1T':PrintRDSId:'|2T':PrintLotNum:'|':PrintPSN:'|Q':PrintQty:'|1V':PrintSuppCd:'|SEQ':1:'^FS':CRLF$ - - ****** End the print job (ZPL script) - Str:= '^XZ' - - OSWrite Str to 'C:\Users\mesouellette\Desktop\' : RDSNo : 'zpl.zpl' -end service - -Service GetTestRunKeyByRDS(RDSNo) - Debug - Response = Test_Run_Services('GetTestRunKeysByRDS', RDSNo) -end service - - -Service ReactorAssignmentHistoryByWO(ReactorNo, WO) - debug - table = "RDS" - ErrorMessage = '' - RDSRecords = '' - RDSSortedByAssignmentDTM = '' - Open "DICT ":table To @DICT Else - ErrorMessage = 'Error opening RDS dictionary' - End - If ErrorMessage EQ '' then - srch_strng = "WO":@VM:WO:@FM:"REACTOR":@VM:ReactorNo:@FM - option = "" - flag = "" - Btree.Extract(srch_strng, table, @DICT, RDSRecords, option, flag) - end - RDSRecordsWithPreEpiSig = '' - for each RDSKey in RDSRecords using @VM setting RDSPos - ThisRDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey, True$, 0, False$) - ThisRDSPreEpiDT = ThisRDSRec - ThisRDSPreEpiTM = ThisRDSRec - ThisRDSPreEpiDTM = SRP_Datetime('Combine', ThisRDSPreEpiDT, ThisRDSPreEpiTM) - RDSRecordsWithPreEpiSig<1, RDSPos> = RDSKey - RDSRecordsWithPreEpiSig<2, RDSPos> = ThisRDSPreEpiDTM - Next RDSKey - - RDSSortedByAssignmentDTM = SRP_Sort_Array(RDSRecordsWithPreEpiSig, 'AN2', 0) - FinalRDSSortedByAssignmentDTM = '' - - for each RDS in RDSSortedByAssignmentDTM<1> using @VM setting SortedRDSPos - ThisRDSDtm = RDSSortedByAssignmentDTM<2, SortedRDSPos> - if ThisRDSDtm GT 0 then - FinalRDSSortedByAssignmentDTM<1, -1> = RDS - FinalRDSSortedByAssignmentDTM<2, -1> = OConv(ThisRDSDtm, 'DT') - end - Next RDS - - Response = FinalRDSSortedByAssignmentDTM<1> -end service - -* Service ReactorLoadHistoryByWO(ReactNo, WO) -* Response = '' -* If ( (ReactNo NE '') and (StartDTM NE '') and (StopDTM NE '')) then -* Open 'RDS' to RDSTable then -* OPEN 'DICT.RDS' TO @DICT then -* SelectSent = 'SELECT RDS WITH REACTOR EQ ':ReactNo:' AND WITH WO EQ ':WO:' BY-DSND PRE_EPI_SIG_DT' -* Set_Status(0) -* errCode = '' -* RList(SelectSent, TARGET_ACTIVELIST$, "", "", "") -* If Not(Get_Status(errCode)) then -* @RecCount = 0 -* EOF = False$ -* Loop -* Readnext @ID else EOF = True$ -* While EOF EQ False$ -* READO @RECORD FROM RDSTable,@ID then -* @RecCount += 1 -* RDSNo = {SEQ} -* DateIn = OCONV({DATETIME_IN},'DT2/^HS') -* DateOut = OCONV({DATETIME_OUT},'DT2/^HS') -* LoadOperator = {OPERATOR_IN} -* UnLoadOperator = {OPERATOR_OUT} -* -* Response<@RecCount, 1> = RDSNo -* Response<@RecCount, 2> = DateIn -* Response<@RecCount, 3> = DateOut -* Response<@RecCount, 4> = LoadOperator -* Response<@RecCount, 5> = UnLoadOperator -* end -* Repeat -* end else -* ErrMsg = 'Error in service ':Service:'. Error code: ':errCode:'.' -* Error_Services('Add', ErrorMsg) -* end -* end else -* ErrorMsg = 'Unable to Open "DICT.RDS" table!' -* Error_Services('Add', ErrorMsg) -* end -* end else -* ErrorMsg = 'Unable to Open "RDS" table!' -* Error_Services('Add', ErrorMsg) -* end -* end -* -* -* end service - -Service GetMetroReqd(RdsNo) - - IsTWReqd = False$ - RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) - WONo = RDSRec<6> - WoStepNo = 1 - ReactNo = RDSRec<2> - ThisReactorRunOrder = 0 - - //This gets all the RDS's for this WO that have run on the same reactor in the order that they were assgined to that reactor. - ReactRDSNos = Jonathan_Services('ReactorAssignmentHistoryByWO', ReactNo, WONo) - RDSNosMetroData = '' - //Row 1 is RDS No - //Row 2 is Layer 1 THICK - //Row 3 is Layer 1 SheetRho - //Row 4 is Layer 1 CRES - //Row 5 is Layer 2 THICK - //Row 6 is Layer 2 SheetRho - //Row 7 is Layer 2 CRES - - for each RDSId in ReactRDSNos using @VM setting iPos - RDSNosMetroData<1, iPos> = RDSId - ThisRDSLayerKeys = XLATE('RDS', RDSId, 150, 'X') - for each RDSLayerKey in ThisRDSLayerKeys using @VM - MetRecIds = XLATE('RDS_LAYER', RDSLayerKey, 3, 'X') - for each MetRecId in MetRecIds using @VM - ThisMetRecLayerRec = Database_Services('ReadDataRow', 'RDS_TEST', MetRecId, True$, 0, False$) - ThisMetRecLayerId = ThisMetRecLayerRec<2> - ThisMetRecThickDtm = ThisMetRecLayerRec<144> - ThisMetRecSheetRhoDtm = ThisMetRecLayerRec<145> - ThisMetRecHgcvDtm = ThisMetRecLayerRec<146> - Begin Case - Case ThisMetRecLayerId EQ 'L1' - RDSNosMetroData<2, iPos> = ThisMetRecThickDtm - RDSNosMetroData<3, iPos> = ThisMetRecSheetRhoDtm - RDSNosMetroData<4, iPos> = ThisMetRecHgcvDtm - Case ThisMetRecLayerId EQ 'L2' - RDSNosMetroData<5, iPos> = ThisMetRecThickDtm - RDSNosMetroData<6, iPos> = ThisMetRecSheetRhoDtm - RDSNosMetroData<7, iPos> = ThisMetRecHgcvDtm - End Case - Next MetRecId - Next RDSLayerKey - Next RDSId - LOCATE RdsNo IN ReactRDSNos USING @VM SETTING ThisReactorRunOrder ELSE Return - PSNo = RDSRec<114> - PSRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo) - PRSLayerKeys = PSRec<145> - for each PRSLayerKey in PRSLayerKeys using @VM - PRSPropKeys = Database_Services('ReadDataColumn', 'PRS_LAYER', PRSLayerKey, 5) - for each PRSPropKey in PRSPropKeys using @VM - PRSPropRec = Database_Services('ReadDataRow', 'PRS_PROP', PRSPropKey) - WaferType = PRSPropRec<6> - TestType = Field(PRSPropKey, '*', 3) - Layer = Field(PRSPropKey, '*', 2) - MeasureFreq = PRSPropRec<8> - Start = PRSPropRec<17> - If WaferType NE 'Product' AND WaferType NE 'Prod' then - BEGIN CASE - CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; IsTWReqd = 1 - CASE ThisReactorRunOrder = Start ; IsTWReqd = 1 - CASE NUM(MeasureFreq) - //FindLastEntryArray = SRP_Array('Reverse', RDSNosMetroData, @VM) - Begin Case - Case TestType EQ 'CRES' - LastCresEntryRDS = '' - Case TestType EQ 'RES' - ///////////////////////////// - if Layer EQ 1 then - LastResEntryLayer1RDS = '' - for each resEntry in RDSNosMetroData<3> using @VM setting tPos - if resEntry NE '' then - LastResEntryLayer1RDS = RDSNosMetroData<1, tPos> - end - Until RDSNosMetroData<1, tPos> EQ RDSNo - Next resEntry - If LastResEntryLayer1RDS NE '' then - Locate LastResEntryLayer1RDS in ReactRDSNos using @VM setting LastMeasurePos then - RunsSinceLastTest = ThisReactorRunOrder - LastMeasurePos - If RunsSinceLastTest GE MeasureFreq OR RunsSinceLastTest EQ 0 then - IsTWReqd = true$ - end - end - end else - IsTWReqd = true$ - end - end - if Layer EQ 2 then - LastResEntryLayer2RDS = '' - for each resEntry in RDSNosMetroData<6> using @VM setting tPos - if resEntry NE '' then - LastResEntryLayer2RDS = RDSNosMetroData<1, tPos> - end - Until RDSNosMetroData<1, tPos> EQ RDSNo - Next resEntry - If LastResEntryLayer2RDS NE '' then - Locate LastResEntryLayer2RDS in ReactRDSNos using @VM setting LastMeasurePos then - RunsSinceLastTest = ThisReactorRunOrder - LastMeasurePos - If RunsSinceLastTest GE MeasureFreq OR RunsSinceLastTest EQ 0 then - IsTWReqd = true$ - end - end - end else - IsTWReqd = true$ - end - end - - ////////////////////////////////////////// - Case TestType EQ 'THICK' - if Layer EQ 1 then - - LastThickEntryLayer1RDS = '' - for each thickEntry in RDSNosMetroData<2> using @VM setting tPos - if thickEntry NE '' then - LastThickEntryLayer1RDS = RDSNosMetroData<1, tPos> - end - Until RDSNosMetroData<1, tPos> EQ RDSNo - Next thickEntry - If LastThickEntryLayer1RDS NE '' then - Locate LastThickEntryLayer1RDS in ReactRDSNos using @VM setting LastMeasurePos then - RunsSinceLastTest = ThisReactorRunOrder - LastMeasurePos - If RunsSinceLastTest GE MeasureFreq OR RunsSinceLastTest EQ 0 then - IsTWReqd = true$ - end - end - end else - IsTWReqd = true$ - end - end - if Layer EQ 2 then - LastThickEntryLayer2RDS = '' - for each thickEntry in RDSNosMetroData<5> using @VM setting tPos - if thickEntry NE '' then - LastThickEntryLayer2RDS = RDSNosMetroData<1, tPos> - end - Until RDSNosMetroData<1, tPos> EQ RDSNo - Next thickEntry - If LastThickEntryLayer2RDS NE '' then - Locate LastThickEntryLayer2RDS in ReactRDSNos using @VM setting LastMeasurePos then - RunsSinceLastTest = ThisReactorRunOrder - LastMeasurePos - If RunsSinceLastTest GE MeasureFreq OR RunsSinceLastTest EQ 0 then - IsTWReqd = true$ - end - end - end else - IsTWReqd = true$ - end - end - - End Case - - END CASE - end - Until IsTWReqd EQ True$ - Next PRSPropKey - Until IsTWReqd EQ True$ - Next PRSLayerKey - Response = IsTWReqd -end service - -* Service UnlockRecord() -* Response = Database_Services('ReleaseKeyIDLock', 'WO_MAT', '172548*2') -* end service -* -* -* Service LaunchOIWizardEdge() -* Command = 'explorer https://goto.infineon.com/oiwizard/returntofab' -* SRP_Run_Command(Command) -* end service -* -* Service CheckOIWizardValid(OIWizardId) -* -* Valid = XLATE('OI_WIZARD', OIWizardId, 'VALID', 'X') -* Response = Valid -* end service -* -* Service DeleteAllRTFRecords() -* AllRTFRecord = Return_To_Fab_Services('GetAllReturnToFabRecords', False$) -* for each RTFRecordId in AllRTFRecord using @VM -* Database_Services('DeleteDataRow', 'RETURN_TO_FAB_LOTS', RTFRecordId, True$, False$) -* Next RTFRecordId -* end service -* -* Service GetWMORDSNos(WMOKeyId) -* debug -* //AllRDSNos = XLATE('WM_OUT',WMOutKeys,WM_OUT_RDS$,'X') -* Response = XLATE('WM_OUT',WMOKeyId,WM_OUT_RDS$,'X') -* end service -* -* Service SendShipDoc() -* debug -* ShipNo = 171117 -* ShipNo = 171497 -* ShipRec = Database_Services('ReadDataRow', 'COC', ShipNo) -* Print_Shipment_Dev(ShipNo,ShipRec,1) -* end service -* -* Service GetReactPMKeys() -* debug -* PMKeyList = Database_Services('ReadDataRow', 'SYSLISTS', 'REACT_PM_KEYS_TO_CHECK') -* Data = '' -* for i = 2 to DCOUNT(PMKEYLIST, @FM) -* thisId = PMKeyList -* ReactorPMRec = Database_Services('ReadDataRow', 'REACTOR_PM', thisId) -* Reactor = ReactorPMRec<4> -* ReactorServId = ReactorPMRec<1> -* ServDesc = XLATE('REACT_SERVS', ReactorServId, 1, 'X') -* LineToAdd = Reactor : ',' : ServDesc : ',' : thisId : CRLF$ -* Data := LineToAdd -* Next i -* OSWrite Data to 'C:\Users\mesouellette.INFINEON\Desktop\reactpms.csv' -* end service -* -* Service ClearEmailBox() -* debug -* emailList = Database_Services('ReadDataRow', 'SYSLISTS', 'EMAIL_RECS') -* for each email in emailList using @FM -* Database_Services('DeleteDataRow', 'EMAIL_BOX', email) -* Next email -* end service -* -* Service TestDelimiters() -* debug -* String = 'TWUPDATE|TW123456|2' -* Operation = Field(String, '|', 1) -* TWLotId = Field(String, '|', 2) -* TWLotQuantity = Field(String, '|', 3) -* end service -* -* Service SetupTestWaferProds() -* debug -* ProdIdList = Test_Wafer_Prod_Services('GetAllTestWaferProdIDs') -* for each ProdId in ProdIdList using @FM -* //Create TW_CREATE LotOperation Record -* TWCreateID = ProdId : '*TW_CREATE' -* TWProdOperationCreateRec = '' -* TWProdOperationCreateRec = ProdID -* TWProdOperationCreateRec = 'TW_CREATE' -* TWProdOperationCreateRec = 1 -* TWProdOperationCreateRec = ProdId -* Database_Services('WriteDataRow', 'PRODUCT_OPERATION', TWCreateId, TWProdOperationCreateRec) -* //Create TW_READY_TO_USE LotOperation Record -* TWRTUID = ProdId : '*TW_READY_TO_USE' -* TWProdOperationCreateRec = '' -* TWProdOperationCreateRec = ProdID -* TWProdOperationCreateRec = 'TW_READY_TO_USE' -* TWProdOperationCreateRec = 2 -* TWProdOperationCreateRec = ProdId -* Database_Services('WriteDataRow', 'PRODUCT_OPERATION', TWRTUID, TWProdOperationCreateRec) -* //Create TW_IN_USE LotOperation Record -* TWInUseId = ProdId : '*TW_IN_USE' -* TWProdOperationCreateRec = '' -* TWProdOperationCreateRec = ProdID -* TWProdOperationCreateRec = 'TW_IN_USE' -* TWProdOperationCreateRec = 3 -* TWProdOperationCreateRec = ProdId -* Database_Services('WriteDataRow', 'PRODUCT_OPERATION', TWInUseId, TWProdOperationCreateRec) -* //Create TW_CLOSE LotOperation Record -* TWCloseId = ProdId : '*TW_CLOSE' -* TWProdOperationCreateRec = '' -* TWProdOperationCreateRec = ProdID -* TWProdOperationCreateRec = 'TW_CLOSE' -* TWProdOperationCreateRec = 4 -* TWProdOperationCreateRec = ProdId -* Database_Services('WriteDataRow', 'PRODUCT_OPERATION', TWCloseId, TWProdOperationCreateRec) -* Next ProdId -* end service -* -* Service TestLotNumberGeneration() -* LotNums = '' -* SRP_Stopwatch('Reset') -* SRP_Stopwatch('Start', 'LotNumGen') -* for i = 1 to 96 -* LotNum = Lot_Services('GenerateNewLotId', 'TW') -* LotNums<1,-1> = LotNum -* Database_Services('WriteDataRow', 'LOT', LotNum, '') -* Next i -* SRP_Stopwatch('Stop', 'LotNumGen') -* debug -* Result = SRP_Stopwatch("GetBenchmark", "LotNumGen") -* -* end service -* -* -* Service UpdateICARRecs() -* debug -* ICARList = Database_Services('ReadDataRow', 'SYSLISTS', 'ICAR_UPDATE') -* For each IcarKey in ICARList using @FM -* ICARRec = Database_Services('ReadDataRow', 'ICAR', IcarKey) -* ThisShift = ICARRec -* NewShift = '' -* Begin Case -* Case ThisShift = '1' -* NewShift = 'A' -* Case ThisShift = '2' -* NewShift = 'B' -* Case ThisShift = '3' -* NewShift = 'C' -* Case ThisShift = '4' -* NewShift = 'D' -* End Case -* If NewShift NE '' then -* ICARRec = NewShift -* Database_Services('WriteDataRow', 'ICAR', IcarKey, ICARRec) -* end -* Next IcarKey -* end service -* -* Service UpdateNCRs() -* for i = 204484 to 204535 -* NCRRecord = Database_Services('ReadDataRow', 'NCR', i) -* NCRRecordShift = NCRRecord -* NewNCRShift = '' -* Begin Case -* Case NCRRecordShift EQ 1 -* NewNCRShift = 'A' -* Case NCRRecordShift EQ 2 -* NewNCRShift = 'B' -* Case NCRRecordShift EQ 3 -* NewNCRShift = 'C' -* Case NCRRecordShift EQ 4 -* NewNCRShift = 'D' -* End Case -* NCRRecord = NewNCRShift -* Database_Services('WriteDataRow', 'NCR', i, NCRRecord) -* Next i -* end service -* -* Service FixWMOQAStatus() -* debug -* WOMatData = Database_Services('ReadDataRow', 'SYSLISTS', 'WMO_FIX_UP_QA') -* for each WOMatKey in WOMatData using @FM -* If RowExists('WO_MAT', WOMatKey) then -* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey) -* LastTranIndex = Dcount(WOMatRec, @VM) -* LastInvWH = WOMatRec -* LastInvLoc = WOMatRec -* LastInvAction = WOMatRec -* //LastInvTag = WOMatRec -* -* NewIndex = LastTranIndex + 1 -* WOMatRec = LastInvWH -* WOMatRec = LastInvLoc -* WOMatRec = LastInvAction -* //New Data -* WOMatRec = SRP_DateTime('Now') -* WOMatRec = 'OI_ADMIN' -* WOMatRec = 'Duplicating Last Transaction to update Fabtime Reporting.' -* Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec) -* end -* Next WOMatKey -* -* end service -* -* Service MatchOItoFabtime() -* OIRTSList = Database_Services('ReadDataRow', 'SYSLISTS', 'OI_RTS') -* FabtimeRTSList = Database_Services('ReadDataRow', 'SYSLISTS', 'FABTIME_RTS') -* MissingLots = '' -* for each WOMatKey in OIRTSList using @FM -* Locate WOMatKey in FabtimeRTSList using @FM setting iPos else -* MissingLot = '' -* MissingLot<1, 1> = WOMatKey -* InvDTMs = XLATE('WO_MAT', WoMatKey, 9, 'X') -* LastInvDtmIndex = Dcount(InvDTMs, @VM) -* LastInvDtm = InvDTMs<1,LastInvDtmIndex> -* MissingLot<1, 2> = Oconv(LastInvDtm, 'DT') -* MissingLots<-1> = MissingLot -* end -* Next WOMatKey -* swap @FM with CRLF$ in MissingLots -* swap @VM with ',' in MissingLots -* OSWrite MissingLots on 'C:\Users\mesouellette.INFINEON\Desktop\OIFabtimeRTSCompare.csv' -* end service -* -* Service GetCurrStatus(WOMatKey) -* Response = Xlate('WO_MAT', WOMatKey, 'CURR_STATUS', 'X') -* end service -* -* Service TestPrintingShipLabels(WONo, StepNo, CassNo) -* debug -* //Cassette1 variable is the cassette id, WMO Key for EPP and RDS for non epp -* //RDSType is either EPP or SIC. derives from whether it is a WMO key or an RDS key -* //EPP Input would be ex: 172123.1.23 -* //Non-Epp Input would be ex: 1T456789 -* ReactType = XLATE('WO_LOG', WONo, 67, 'X') -* If ReactType NE 'EPP' then -* WOMatKey = WONo : '*' : CassNo -* Cassette1 = Xlate('WO_MAT', WOMatKey, 12, 'X') -* RDSType = 'SIC' -* end else -* Cassette1 = WONo : '*1*' : CassNo -* RDSType = 'EPP' -* end -* -* -* Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType) -* end service -* -* Service UpdateEPIParts() -* debug -* DataList = Database_Services('ReadDataRow', 'SYSLISTS', 'LIST_EPI_PART_SPECTRUM') -* for each EpiPart in DataList using @FM -* if RowExists('EPI_PART', EpiPart) then -* EpiPartRec = Database_Services('ReadDataRow', 'EPI_PART',EpiPart) -* EpiPartRec = True$ -* Database_Services('WriteDataRow', 'EPI_PART', EpiPart, EpiPartRec) -* end -* Next EpiPart -* end service -* -* Service UpdateToVarmPartNumsSecond() -* debug -* DataList = Database_Services('ReadDataRow', 'SYSLISTS', 'AFFECTED_PSN_VARM') -* For each PSN in DataList using @FM -* PSNRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSN) -* ProdVers = XLATE('PROD_SPEC', PSN, 'PROD_VER_NO', 'X') -* for each ProdVer in ProdVers using @VM -* ProdVerActive = XLATE('PROD_VER', ProdVer, 33, 'X') -* If ProdVerActive EQ 'A' then -* ProdVerEpiPartNo = XLATE('PROD_VER', ProdVer, 2, 'X') -* //Now Create a new Epi Part rec based on the VARM Part No -* CurrEpiPartRec = Database_Services('ReadDataRow', 'EPI_PART', ProdVerEpiPartNo) -* VMPartNumber = CurrEpiPartRec -* If VMPartNumber NE ProdVerEpiPartNo AND VMPartNumber NE '' then -* NewEpiPartKey = VMPartNumber -* NewEpiPartRec = CurrEpiPartRec -* NewEpiPartRec = ProdVerEpiPartNo -* Database_Services('WriteDataRow', 'EPI_PART', NewEpiPartKey, NewEpiPartRec) -* //Now create new Customer Epi Part -* CustNo = XLATE('PROD_VER', ProdVer, PROD_VER_CUST_NO$, 'X') -* OldCustEpiPartKey = CustNo : '*' : ProdVerEpiPartNo -* NewCustEpiPartKey = CustNo : '*' : VMPartNumber -* OldCustEpiPartRec = Database_Services('ReadDataRow', 'CUST_EPI_PART', OldCustEpiPartKey) -* -* NewCustEpiPartRec = OldCustEpiPartRec -* NewCustEpiPartRec = VMPartNumber -* Database_Services('WriteDataRow', 'CUST_EPI_PART', NewCustEpiPartKey, NewCustEpiPartRec) -* -* //Update Prod Ver to have the new VM Part Number -* ProdVerRec = Database_Services('ReadDataRow', 'PROD_VER', ProdVer) -* ProdVerRec = VMPartNumber -* Database_Services('WriteDataRow', 'PROD_VER', ProdVer, ProdVerRec) -* UpdatePSNRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSN) -* UpdatePSNRec = Insert(UpdatePSNRec, PROD_SPEC_CUST_PART_NO$, -1, 0, VMPartNumber) -* Database_Services('WriteDataRow', 'PROD_SPEC', PSN, UpdatePSNRec) -* end -* end -* Next ProdVer -* Next PSN -* end service -* -* Service UpdateSinglePSN(PSN) -* PSNRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSN) -* ProdVers = XLATE('PROD_SPEC', PSN, 'PROD_VER_NO', 'X') -* for each ProdVer in ProdVers using @VM -* ProdVerActive = XLATE('PROD_VER', ProdVer, 33, 'X') -* If ProdVerActive EQ 'A' then -* ProdVerEpiPartNo = XLATE('PROD_VER', ProdVer, 2, 'X') -* //Now Create a new Epi Part rec based on the VARM Part No -* CurrEpiPartRec = Database_Services('ReadDataRow', 'EPI_PART', ProdVerEpiPartNo) -* VMPartNumber = CurrEpiPartRec -* If VMPartNumber NE ProdVerEpiPartNo AND VMPartNumber NE '' then -* NewEpiPartKey = VMPartNumber -* NewEpiPartRec = CurrEpiPartRec -* NewEpiPartRec = ProdVerEpiPartNo -* Database_Services('WriteDataRow', 'EPI_PART', NewEpiPartKey, NewEpiPartRec) -* //Now create new Customer Epi Part -* CustNo = XLATE('PROD_VER', ProdVer, PROD_VER_CUST_NO$, 'X') -* OldCustEpiPartKey = CustNo : '*' : ProdVerEpiPartNo -* NewCustEpiPartKey = CustNo : '*' : VMPartNumber -* OldCustEpiPartRec = Database_Services('ReadDataRow', 'CUST_EPI_PART', OldCustEpiPartKey) -* -* NewCustEpiPartRec = OldCustEpiPartRec -* NewCustEpiPartRec = VMPartNumber -* Database_Services('WriteDataRow', 'CUST_EPI_PART', NewCustEpiPartKey, NewCustEpiPartRec) -* -* //Update Prod Ver to have the new VM Part Number -* ProdVerRec = Database_Services('ReadDataRow', 'PROD_VER', ProdVer) -* ProdVerRec = VMPartNumber -* Database_Services('WriteDataRow', 'PROD_VER', ProdVer, ProdVerRec) -* UpdatePSNRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSN) -* UpdatePSNRec = Insert(UpdatePSNRec, PROD_SPEC_CUST_PART_NO$, -1, 0, VMPartNumber) -* Database_Services('WriteDataRow', 'PROD_SPEC', PSN, UpdatePSNRec) -* end -* end -* Next ProdVer -* end service -* -* Service UpdateToVarmPartNums() -* debug -* NewVarmMappingData = Database_Services('ReadDataRow', 'SYSLISTS', 'NEW_VARM_MAPPING') -* -* For each NewVarmMapping in NewVarmMappingData using @FM -* swap ',' with @VM in NewVarmMapping -* OldEpiPartNo = NewVarmMapping<1,1> -* NewEpiPartNo = NewVarmMapping<1,2> -* -* //Get Old Epi Part Rec -* OldEpiPartRec = Database_Services('ReadDataRow', 'EPI_PART', OldEpiPartNo) -* //Add the old part number in the description -* OldEpiPartRec = OldEpiPartNo -* //Write the OldEpiPartRec -* Database_Services('WriteDataRow', 'EPI_PART', OldEpiPartNo, OldEpiPartRec) -* -* //Get Fresh version of old record -* NewEpiPartRec = Database_Services('ReadDataRow', 'EPI_PART', OldEpiPartNo, True$, 0) -* //Write new record with new VARM Part # -* Database_Services('WriteDataRow', 'EPI_PART', NewEpiPartNo, NewEpiPartRec) -* -* //Get Old Customer Epi Part Key -* OldCustEpiPartkEY = NewEpiPartRec -* //Get Old Customer Epi Part Rec -* OldCustEpiPartRec = Database_Services('ReadDataRow', 'CUST_EPI_PART', OldCustEpiPartkEY) -* NewCustEpiPartKey = OldCustEpiPartkEY -* swap OldEpiPartNo with NewEpiPartNo in NewCustEpiPartKey -* NewCustEpiPartRec = OldCustEpiPartRec -* NewCustEpiPartRec = NewEpiPartNo -* Database_Services('WriteDataRow', 'EPI_PART', NewCustEpiPartKey, NewCustEpiPartRec) -* -* //Update Prod ver record with the new Epi Part Number. -* CurrProdVerKey = NewEpiPartRec -* CurrProdVerRec = Database_Services('ReadDataRow', 'PROD_VER', CurrProdVerKey) -* CurrProdVerRec = NewEpiPartNo -* Database_Services('WriteDataRow', 'PROD_VER', CurrProdVerKey, CurrProdVerRec) -* -* -* swap ',' with @VM in NewVarmMapping -* EpiPartNo = NewVarmMapping<1,1> -* NewVarmPartNum = NewVarmMapping<1,2> -* EpiPartRec = Database_Services('ReadDataRow', 'EPI_PART', EpiPartNo) -* EpiPartRec = NewVarmPartNum -* Database_Services('WriteDataRow', 'EPI_PART', EpiPartNo, EpiPartRec) -* Next NewVarmMapping -* -* end service -* -* Service UpdateVARmPartMapping() -* debug -* NewVarmMappingData = Database_Services('ReadDataRow', 'SYSLISTS', 'NEW_VARM_MAPPING') -* -* For each NewVarmMapping in NewVarmMappingData using @FM -* swap ',' with @VM in NewVarmMapping -* EpiPartNo = NewVarmMapping<1,1> -* NewVarmPartNum = NewVarmMapping<1,2> -* EpiPartRec = Database_Services('ReadDataRow', 'EPI_PART', EpiPartNo) -* EpiPartRec = NewVarmPartNum -* Database_Services('WriteDataRow', 'EPI_PART', EpiPartNo, EpiPartRec) -* Next NewVarmMapping -* end service -* -* Service GetRDSwithMultipleRDSTestKeys() -* debug -* LotsWithBadRDSTestKeys = '' -* RDSList = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_JONATHAN') -* for each RDS in RDSList using @FM setting rPos -* RDSLayerKeys = XLATE('REACT_RUN', RDS, 5, 'X') -* for each RDSLayerKey in RDSLayerKeys using @Fm -* RDSTestKeys = XLATE('RDS_LAYER', RDSLayerKey, 3, 'X') -* IF Dcount(RDSTestKeys, @VM) GE 2 then -* LotsWithBadRDSTestKeys<-1> = RDSLayerKey -* end -* Next RDSLayerKey -* Next RDS -* end service -* -* Service GetWOMatRepStatus() -* debug -* WONo = 173078 -* CassNo = 5 -* ID = WONo : '*' : CassNo -* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', ID) -* test = obj_WO_Mat('ReportStatus',ID:@RM:WOMatRec) -* end service -* -* Service GetWMOutRepStatus() -* debug -* WONo = 173078 -* CassNo = 5 -* RepStatus = XLATE('WO_MAT',WONo:'*':CassNo,'REP_STATUS','X')[-1,'B':@VM] -* IF RepStatus = '' OR RepStatus[1,3] NE 'WMO' THEN -* CurrStatus = Jonathan_Services('GetWMOutCurrStatus') -* test = OCONV(CurrStatus,'[WM_OUT_CURR_STATUS_CONV]') -* end else -* test = RepStatus -* END -* end service -* -* Service GetWMOutCurrStatus() -* debug -* RecID = '173078*1*5' -* Record = Database_Services('ReadDataRow', 'WM_OUT', RecID) -* CurrStatus = OBJ_WM_OUT('CurrStatus', RecID:@RM:Record) -* Response = CurrStatus -* end service -* -* Service Get5SType() -* Datalist = Database_Services('ReadDataRow', 'SYSLISTS', 'TEST_JONATHAN') -* PMSpecs = '' -* for each data in datalist using @FM setting iPos -* PMSpecs = data -* Is5S = Xlate('PM_SPEC', data, PM_SPEC_FIVE_S_FLAG$, 'X') -* PMSpecs = Is5S -* Next data -* debug -* end service -* -* Service TestLogging() -* Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log' -* ColumnWidths = 20 : @FM : 15 : @FM : 300 -* LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\JonathansTest' -* LogDate = Oconv(Date(), 'D4/') -* LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_ReactorLogPM.csv' -* objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$) -* -* LogData = '' -* LogData<1> = '' -* LogData<2> = '' -* LogData<3> = 'This is a test' -* Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) -* end service -* -* -* Service UpdateYesterdayAvail() -* Today = 20702 -* DataArray = '' -* //ASM Reactors -* ASMRecordKey = 'ASM*': Today -* ASMUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'ASM') -* Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', ASMRecordKey, ASMUptimeRec, True$, False$, True$) -* //HTR Reactors -* HTRRecordKey = 'HTR*': Today -* HTRUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'HTR') -* Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', HTRRecordKey, HTRUptimeRec, True$, False$, True$) -* //EPP Reactors -* EPPRecordKey = 'EPP*': Today -* EPPUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'EPP') -* Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', EPPRecordKey, EPPUptimeRec, True$, False$, True$) -* //All Reactors -* ALLRecordKey = 'ALL*': Today -* ALLUptimeRec = Reactor_Services('GetReactorUptimeMetricsByTypeAndTimeSpan', Today, Today + 1, 'ALL') -* Database_Services('WriteDataRow', 'REACTOR_DAILY_UPTIME', ALLRecordKey, ALLUptimeRec, True$, False$, True$) -* end service -* -* -* -* Service SetReactorMetrics() -* Reactors = Reactor_Services('GetReactorNumbers') -* table = 'REACTOR_LOG' -* for each ReactorNo in Reactors using @FM setting rPos -* LatestTubeChangeRLIDASM = '' -* LatestTubeChangeASMDTM = '' -* LatestSuscChangRLIDASM = '' -* LatestArmChangeIDASM = '' -* LatestSuscChangRLIDHTR = '' -* LatestArmChangeIDHTR = '' -* ReactorType = XLATE('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X') -* -* //Reset all metrics to 0 -* ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* ReactorRec = 0; -* ReactorRec = 0; -* ReactorRec = 0; -* ReactorRec = 0; -* ReactorRec = 0; -* ReactorRec = 0; -* ReactorRec = 0; -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, ReactorRec) -* -* -* Begin Case -* Case ReactorType EQ 'ASM' OR ReactorType EQ 'ASM+' -* //Susceptor 699 -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '699')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* -* CurrTubeBellJarThk = OldReactorRec -* CurrTubeBellJarCnt = OldReactorRec -* CurrSuscThk = OldReactorRec -* CurrSuscWfrCnt = OldReactorRec -* CurrLowerQuartzThk = OldReactorRec -* CurrLowerQuartzWfr = OldReactorRec -* -* // Set values to 0 if blank -* If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 -* If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 -* If CurrSuscThk = '' then CurrSuscThk = 0 -* If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 -* If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0 -* If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0 -* -* RDSNo = RDSRow<1,1> -* TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') -* TargetThickness = OConv(TargetThickness, 'MD3') -* WaferCount = XLATE('RDS', RDSNo, RDS_WAFERS_IN$, 'X') -* ThkAddition = WaferCount * TargetThickness -* NewReactorRec = OldReactorRec -* NewReactorRec = CurrSuscThk + ThkAddition -* NewReactorRec = CurrSuscWfrCnt + WaferCount -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* -* //TubeChange 240 -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '240')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* -* CurrTubeBellJarThk = OldReactorRec -* CurrTubeBellJarCnt = OldReactorRec -* -* // Set values to 0 if blank -* If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 -* If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 -* -* RDSNo = RDSRow<1,1> -* TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') -* TargetThickness = OConv(TargetThickness, 'MD3') -* WaferCount = XLATE('RDS', RDSNo, RDS_WAFERS_IN$, 'X') -* ThkAddition = WaferCount * TargetThickness -* NewReactorRec = OldReactorRec -* NewReactorRec = CurrTubeBellJarThk + ThkAddition -* NewReactorRec = CurrTubeBellJarCnt + WaferCount -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* //Arms 21 -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '21')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* CurrArmsWfrCnt = OldReactorRec -* If CurrArmsWfrCnt = '' then CurrArmsWfrCnt = 0 -* RDSNo = RDSRow<1,1> -* WaferCount = XLATE('RDS', RDSNo, RDS_WAFERS_IN$, 'X') -* NewReactorRec = OldReactorRec -* NewReactorRec = CurrArmsWfrCnt + WaferCount -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* Case ReactorType EQ 'HTR' -* //Susceptor 699 -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '699')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* -* CurrSuscThk = OldReactorRec -* CurrSuscWfrCnt = OldReactorRec -* -* // Set values to 0 if blank -* If CurrSuscThk = '' then CurrSuscThk = 0 -* If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 -* -* RDSNo = RDSRow<1,1> -* TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') -* TargetThickness = OConv(TargetThickness, 'MD3') -* WaferCount = XLATE('RDS', RDSNo, RDS_WAFERS_IN$, 'X') -* CntAddition = (WaferCount / 5) -* ThkAddition = (WaferCount / 5) * TargetThickness -* NewReactorRec = OldReactorRec -* NewReactorRec = CurrSuscThk + ThkAddition -* NewReactorRec = CurrSuscWfrCnt + CntAddition -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* -* //TubeChange 1280 -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '1280')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* -* CurrTubeBellJarThk = OldReactorRec -* CurrTubeBellJarCnt = OldReactorRec -* -* // Set values to 0 if blank -* If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 -* If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 -* -* RDSNo = RDSRow<1,1> -* TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') -* TargetThickness = OConv(TargetThickness, 'MD3') -* WaferCount = XLATE('RDS', RDSNo, RDS_WAFERS_IN$, 'X') -* CntAddition = (WaferCount / 5) -* ThkAddition = (WaferCount / 5) * TargetThickness -* NewReactorRec = OldReactorRec -* NewReactorRec = CurrTubeBellJarThk + ThkAddition -* NewReactorRec = CurrTubeBellJarCnt + CntAddition -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* -* //Arms 21 -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '21')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* CurrArmsWfrCnt = OldReactorRec -* If CurrArmsWfrCnt = '' then CurrArmsWfrCnt = 0 -* RDSNo = RDSRow<1,1> -* WaferCount = XLATE('RDS', RDSNo, RDS_WAFERS_IN$, 'X') -* NewReactorRec = OldReactorRec -* NewReactorRec = CurrArmsWfrCnt + WaferCount -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* -* Case ReactorType EQ 'EPP' -* -* //BellJar 1092 -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '1092')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* RDSNo = RDSRow<1,1> -* TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') -* TargetThickness = OConv(TargetThickness, 'MD3') -* NewReactorRec = OldReactorRec -* CurrTubeBellJarThk = OldReactorRec -* CurrTubeBellJarCnt = OldReactorRec -* -* // Set values to 0 if blank -* If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 -* If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 -* NewReactorRec = CurrTubeBellJarThk + TargetThickness -* NewReactorRec = CurrTubeBellJarCnt + 1 -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* -* -* //1067 Lower Quartz -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '1067')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* RDSNo = RDSRow<1,1> -* TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') -* TargetThickness = OConv(TargetThickness, 'MD3') -* NewReactorRec = OldReactorRec -* CurrLowerQuartzThk = OldReactorRec -* CurrLowerQuartzCnt = OldReactorRec -* -* // Set values to 0 if blank -* If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0 -* If CurrLowerQuartzCnt = '' then CurrLowerQuartzCnt = 0 -* NewReactorRec = CurrLowerQuartzThk + TargetThickness -* NewReactorRec = CurrLowerQuartzCnt + 1 -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* -* //699 Susceptor -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '699')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* -* for each RDSRow in RDSList using @FM -* OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) -* RDSNo = RDSRow<1,1> -* TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') -* TargetThickness = OConv(TargetThickness, 'MD3') -* NewReactorRec = OldReactorRec -* CurrSuscThk = OldReactorRec -* CurrSuscCnt = OldReactorRec -* -* // Set values to 0 if blank -* If CurrSuscThk = '' then CurrSuscThk = 0 -* If CurrSuscCnt = '' then CurrSuscCnt = 0 -* NewReactorRec = CurrSuscThk + TargetThickness -* NewReactorRec = CurrSuscCnt + 1 -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* Next RDSRow -* LatestSusceptorChangeRLID = Reactor_Log_Services('GetLogsByReactorAndServID', ReactorNo, '699')<1,4> -* RLDTM = XLATE('REACTOR_LOG', LatestSusceptorChangeRLID, 'END_DTM', 'X') -* RDSList = Reactor_Services('GetReactorCassLoadHistoryRange', ReactorNo, RLDTM, SRP_Datetime('Now')) -* NewReactorRec = CurrSuscThk + TargetThickness -* NewReactorRec = CurrSuscWfrCnt + 1 -* Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec) -* End Case -* Next ReactorNo -* end service -* -* Service LaunchWindow() -* Start_Window('NDW_VIEW_TEST_RUN','', '10000001') -* end service -* -* Service GetTestRunObj(TestRunID) -* debug -* TestRunObj = '' -* TestRunRec = Test_Run_Services('GetTestRunById', TestRunID) -* //Start getting translated values for object -* RunDTM = OConv(TestRunRec, 'DT') -* ReasonForTest = Xlate('TEST_RUN_TYPE', TestRunRec, TEST_RUN_TYPE_RUN_TYPE$, 'X') -* RelatedRDS = TestRunRec -* RelatedPSN = TestRunRec -* EqpType = TestRunRec -* EqpID = TestRunRec -* TWKeys = TestRunRec -* TWUsageProds = '' -* TWUsageQtys = '' -* for each TWKey in TWKeys using @VM setting tPos -* TRWRec = Test_Run_Services('GetTestRunWaferByID', TWKey) -* TestWaferProdName = XLATE('TEST_WAFER_PROD', TRWRec, TEST_WAFER_PROD_PART_NAME$, 'X') -* Locate TestWaferProdName in TWUsageProds setting iPos then -* TWUsageProds<1,iPos> = TestWaferProdName -* TWUsageQtys<1,iPos> = TWUsageQtys<1,iPos> + 1 -* end else -* TWUsageProds<1,-1> = TestWaferProdName -* TWUsageQtys<1,-1> = 1 -* end -* Next TWKey -* end service -* -* Service WFR_STATUS(WMOKey) -* -* Result = '' -* WfrStatus = '' -* WMOSlots = Xlate('WM_OUT', WMOKey, 'RDS', 'X') -* WMOZoneProfile = Xlate('WM_OUT', WMOKey, WM_OUT_ZONE$, 'X') -* WMORDSTestKeys = XLATE('WM_OUT', WMOKey, 'CASS_RDS_MET_KEYS', 'X') -* for each RDSNo in WMOSlots using @VM setting sPos -* -* ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo) -* SlotZone = Xlate('WM_OUT', WMOKey, WM_OUT_ZONE$, 'X')<1, sPos> -* //Get the RDS_Test for this slot. -* //Find the right RDS Test Key -* ThisSlotRDSTestKeys = '' -* for each RDSTestKey in WMORDSTestKeys using @VM -* RDSTestRec = Database_Services('ReadDataRow', 'RDS_TEST', RDSTestKey) -* If RDSTestRec EQ SlotZone AND RDSTestRec EQ RDSNo then -* ThisSlotRDSTestKeys<1, -1> = RDSTestKey -* -* end -* -* Next RDSTestKey -* RDSTestDataEntered = XLATE('RDS_TEST', ThisSlotRDSTestKeys, 'MET_ENTERED', 'X') -* If RDSTestDataEntered NE '' then -* Locate False$ in RDSTestDataEntered using @VM setting iPos then Result = 'ULMET' else -* MetOutOfSpec = Sum(Xlate('RDS_TEST', ThisSlotRDSTestKeys, 'OUT_OF_SPEC', 'X')) -* If MetOutOfSpec then -* //Check for an NCR -* SlotNcr = Xlate('WM_OUT', WMOKey, 'WM_OUT_SLOT_NCR', 'X')<1, sPos> -* If SlotNcr NE '' then -* MetOutOfSpec = False$ -* end -* end -* If MetOutOfSpec then -* Result = 'SPEC' -* end else -* Result = 'ULOAD' -* end -* end -* end else -* Result = 'ULMET' -* end -* -* WfrStatus = Result -* Next RDSNo -* debug -* end service -* -* Service Test() -* Debug -* RDSTestKeys = XLATE('WM_OUT', '172172*1*10', 'CASS_RDS_MET_KEYS', 'X') -* TestDataEntered = XLATE('RDS_TEST', RDSTestKeys, 'MET_ENTERED', 'X') -* //WMOWafers = XLATE('WM_OUT', '172172*1*10', 'WFR_STATUS', 'X') -* end service -* -* Service TestEquates() -* debug -* test = WO_MAT_MAKEUP_BOX$ -* end service -* -* Service GetWWInfo() -* debug -* WWInfo = Date_Services('GetWeekNum', '20345.12345') -* end service -* -* Service PMINformation() -* -* end service -* -* Service RGBToInt() -* debug -* R = 242 -* G = 156 -* B = 63 -* IntegerVal = (B * 65536) + (G * 256) + R -* end service -* -* Service TestPMMFS() -* Debug -* -* PMRec = Database_Services('ReadDataRow', 'PM', '10115') -* Late = XLATE('PM', '10115', 'LATE', 'X') -* SchedQty = XLATE('PM_SPEC', PMRec, 'LATE_START_QTY', 'X') -* CompQty = PMRec -* -* end service -* -* Service AddComments() -* debug -* Response = Dialog_Box('NDW_ADD_COMMENT', @WINDOW) -* end service -* -* Service Get5SPMs() -* test = Pm_Services('Get5SPMs', True$) -* end service -* -* -* Service GetOnShiftSupervisor() -* debug -* Response = Lsl_Users_Services('GetShiftByDate', '8/23/2023 06:00') -* end service -* -* Service TriggerCassComp(WOMatKey) -* debug -* SAP_Services('AddCassCompTransaction', WOMatKey) -* end service -* -* Service TestGRProps(WOMatKey) -* *172174 -* *1 -* debug -* WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey) -* GRProps = obj_WO_Mat('GetGRProps',WOMatKey:@RM:WOMatRec) -* -* end service -* -* Service TriggerScrap(WorkOrderNo, CassNo, TransQty) -* //172172 -* //1 -* //2 -* obj_SAP('AddTransaction','SCRAP_IN':@RM:WorkOrderNo:@RM:CassNo:@RM:TransQty) -* end service -* -* Service TriggerBatchMove -* -* end service -* -* Service TestOEE -* keyId = '20259*35*5117*U442' -* stopDTM = XLATE('DAILY_PERFORMANCE_REPORT', keyId, 'STOP_DTM', 'X') -* OEE = XLATE('DAILY_PERFORMANCE_REPORT', keyId, 'OEE_CALCULATION', 'X') -* Response = OEE -* end service -* -* Service TestZero() -* debug -* ShouldBeZero = 1 - 1 -* end service -* -* Service IsRDSMetOutOfSpec(RDSNo) -* debug -* *RDSNo = '586181' -* RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) -* RDSWaferZones = RDSRec -* ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X') -* IsEpiPro = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X') EQ 'EPP' -* LSKeys = XLATE('REACT_RUN',RDSNo, REACT_RUN_RDS_LAYER_KEYS$, 'X') -* for each LayerSpecKey in LSKeys using @VM setting lPos -* LSRec = Database_Services('ReadDataRow', 'RDS_LAYER', LayerSpecKey) -* IsMetOOS = XLATE('RDS_LAYER',LayerSpecKey,'TEST_OUT_OF_SPEC','X')<1, lPos> -* IF IsMetOOS then -* If IsEpiPro then -* RDSTestKey = LSRec -* RDSTestZone = XLate('RDS_TEST', RDSTestKey, RDS_TEST_ZONE$, 'X') -* RDSTestLayer = XLate('RDS_TEST', RDSTestKey, RDS_TEST_LS_ID$, 'X') -* WafersInZone = '' -* -* for each WaferZone in RDSWaferZones using @VM setting wPos -* If WaferZone EQ RDSTestZone then -* WafersInZone<-1> = wPos -* end -* Next WaferZone -* Response = RDSTestLayer : ' Zone ' : RDSTestZone : ' Out of Spec' -* end else -* Response = 'Out of Spec' -* end -* end -* -* Next LayerSpec -* TestOutOfSpec = XLATE('RDS_LAYER',LSKeys,'TEST_OUT_OF_SPEC','X') -* MetOutOfSpec = SUM(XLATE('RDS_LAYER',LSKeys,'TEST_OUT_OF_SPEC','X')) -* -* -* -* end service -* -* -* Service TestCOMB_Status() -* debug -* -* -* RDSNo = '586181' -* RDSWOMatKey = XLATE('RDS', RDSNo, 'WO_MAT_KEY', 'X') -* WOMatRepStatus = XLATE('WO_MAT',RDSWOMatKey,'REP_STATUS','X') -* RunStatus = XLATE('REACT_RUN',RDSNo,'RUN_STATUS','X') -* RunStatus = OCONV(RunStatus,'[RUN_STATUS_CONV]') -* Ans = '' -* BEGIN CASE -* CASE WOMatRepStatus NE '' AND RunStatus NE '' -* Ans = WOMatRepStatus -* -* CASE WOMatRepStatus = '' AND RunStatus NE '' -* Ans = RunStatus -* -* CASE WOMatRepStatus NE '' AND RunStatus = '' -* Ans = WOMatRepStatus -* -* CASE 1 -* Ans = '' -* END CASE -* CombStatus = Xlate('RDS', RDSNo, 'COMB_STATUS', 'X') -* Response = CombStatus -* end service -* -* Service TestChatGPT() -* Stop -* end service -* -* Service getWOMat() -* debug -* effectedCassettes = '' -* for WONo = 171809 to 172010 -* for CassNo = 1 to 99 -* WOMatKey = WONo : '*' : CassNo -* WOMatQaRec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatKey) -* Profiles = WOMatQaRec -* DataPoints = WOMatQARec -* For each Profile in Profiles using @VM setting ProfIndex -* If Profile EQ '1THICK_ONLY' then -* -* List = DataPoints<1, ProfIndex> -* IF DCOUNT(List, @SVM) LT 5 AND DCOUNT(List, @SVM) GT 0 then -* debug -* EffectedCassettes<-1> = WOMatKey : ',' : XLATE('WO_MAT', WOMatKey, 'RDS_NO', 'X') : CRLF$ -* end -* end -* -* Next Profile -* -* -* Next CassNo -* Next WONo -* OSWrite effectedCassettes To 'C:\users\ecouellette\desktop\effectedCassettes.csv' -* end service -* -* Service ChangeCustNoByWO(WONo, NewCustNo, NewProdVerNo, NewPSNo) -* // Update WO_LOG record -* WOLogRec = Database_Services('ReadDataRow', 'WO_LOG', WONo) -* If Error_Services('NoError') then -* WOLogRec = NewCustNo -* WOLogRec = NewProdVerNo -* Database_Services('WriteDataRow', 'WO_LOG', WONo, WOLogRec, True$, False$, True$) -* If Error_Services('NoError') then -* WOStepKey = WONo:'*1' -* // Update WO_STEP record -* WOStepRec = Database_Services('ReadDataRow', 'WO_STEP', WOStepKey) -* If Error_Services('NoError') then -* WOStepRec = NewPSNo -* Database_Services('WriteDataRow', 'WO_STEP', WOStepKey, WOStepRec, True$, False$, True$) -* If Error_Services('NoError') then -* // Update RDS Keys -* RDSKeys = Xlate('WO_STEP', WOStepKey, 'RDS_KEY', 'X') -* If RDSKeys NE '' then -* For each RDSKey in RDSKeys using @VM setting vPos -* RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey) -* If Error_Services('NoError') then -* RDSRec = NewCustNo -* RDSRec = NewPSNo -* Database_Services('WriteDataRow', 'RDS', RDSKey, RDSRec, True$, False$, True$) -* end -* Until Error_Services('HasError') -* Next RDSKey -* end -* end -* end -* end -* end -* If Error_Services('HasError') then -* Error_Services('DisplayError') -* end -* -* return -* end service -* -* Service GetRDSMovesByDays(Day, FilePath) -* -* SelectSent = 'SELECT RDS WITH DATE_OUT EQ ':QUOTE(Day) -* Set_Status(0) -* RList(SelectSent, TARGET_ACTIVELIST$, "", "", "") -* -* -* rdsArray = '' -* IF @RecCount then -* EoF = 0 -* NumKeys = @RecCount -* Cnt = 0 -* -* Loop -* ReadNext rds Else EoF = 1 -* until EoF -* rdsMoves = XLATE('RDS', rds, 'WAFERS_IN', 'X') -* rdsArray := rds : ',' : rdsMoves : CRLF$ -* Repeat -* -* end -* OSWrite rdsArray to FilePath -* ClearSelect TARGET_ACTIVELIST$ -* end service -* -* Service DetermineNearShiftChange -* debug -* -* CurrTime = 64320 -* CurrHour = SRP_TIME('Hour', CurrTime) -* end service -* -* Service OutPutSchedule(StartDate, EndDate) -* debug -* OutputData = '' -* StartDateConv = IConv(StartDate, 'D') -* EndDateConv = IConv(EndDate, 'D') -* -* for i = StartDateConv to EndDateConv -* //DayStartDTM = i : '.' : 21600 -* //NightStartDTM = i : '.' : 64800 -* DayStartDTM = SRP_Datetime('AddHours', i, 7) -* NightStartDTM = SRP_Datetime('AddHours', i, 18) -* -* DayShift = Lsl_Users_Services('GetShiftByDate', OCONV(DayStartDTM, 'DT'))<1,1> -* NightShift = Lsl_Users_Services('GetShiftByDate', OCONV(NightStartDTM, 'DT'))<1,1> -* OutputData := OConv(i, 'D4/H') : ',' : DayShift : ' and ' : NightShift : CRLF$ -* Next i -* OSWrite OutputData to 'C:\Users\MESOuellette\Desktop\ShiftCalendar.csv' -* end service -* -* Service TestMassDates() -* OutputData = '' -* ExpectedCalRec = Database_Services('ReadDataRow', 'SYSLISTS', 'CAL_EXPECTED') -* for i = 1 to DCOUNT(ExpectedCalRec<1>, @VM) -* Dtm = ExpectedCalRec<1, i> -* ExpectedShift = ExpectedCalRec<2, i> -* ReturnedShift = Lsl_Users_Services('GetShiftByDate', Dtm)<1,1> -* Pass = (ExpectedShift EQ ReturnedShift) -* -* ExpectedCalRec<3,i> = ReturnedShift -* ExpectedCalRec<4,i> = Pass -* OutputData := Dtm : ',' : ExpectedShift : ',' : ReturnedShift : ',' : Pass : CRLF$ -* Next i -* OSWrite OutputData to 'C:\Users\MESOuellette\Desktop\CalDataTestResults.csv' -* end service -* -* Service TestShiftCalendar -* debug -* shiftCalData = '' -* for date = 20090 to 20454 -* -* DayShift = SRP_Datetime('AddHours', date, 12) -* NightShift = SRP_Datetime('AddHours', DayShift, 11) -* -* OnShiftDay = Lsl_Users_Services('GetShiftByDate', OCONV(DayShift, 'DT'), 1) -* OnShiftNight = Lsl_Users_Services('GetShiftByDate', OCONV(NightShift, 'DT'), 1) -* ShiftCalData := OCONV(DayShift, 'DT') : ',' : OnShiftDay<1,1> : ',' : OnShiftNight : CRLF$ -* Next date -* -* OSWrite shiftCalData to 'C:\Users\MESOuellette\Desktop\CalData.csv' -* end service -* -* Service GetInboundPending -* debug -* rv = Set_Status(0) -* LookBack = 15 /* Days */ -* StartDate = OCONV(Date()-LookBack, 'D4/') -* SelectStatement = "SELECT WO_MAT WITH SAP_TX_DT >= ": Quote(StartDate) :" AND WITHOUT SAP_BATCH_NO" -* RowCount = 0 -* SelectStatement = "SELECT WO_MAT WITH SAP_BATCH_NO EQ ''" -* RList(SelectStatement, 5) -* If @List_Active EQ 3 then -* SelectStatement = "SELECT WO_MAT WITH SAP_TX_DT >= ": Quote(StartDate) -* RList(SelectStatement, 5) -* If @List_Active EQ 3 then -* EOF = False$ -* Loop -* ReadNext KeyID else EOF = True$ -* Until EOF -* WOMatRow = Database_Services('ReadDataRow', 'WO_MAT', KeyID) -* If WOMatRow<87> EQ '' then RowCount += 1 -* Repeat -* end -* end -* end service -* -* Service CheckForNew() -* -* Response = True$ -* if xlate( 'NOTE_PTRS', @user4, 'NEW_MESSAGES', 'X' ) then -* NotePtrRec = xlate( 'NOTE_PTRS', @user4, '', 'X' ) -* LOCATE 'Yes' in NotePtrRec using @VM setting mPos then -* * the top one is new meaning they got a new one -* Response = True$ -* end else -* Response = False$ -* end -* end -* end service -* -* Service GetNewNotes() -* debug -* void = Jonathan_Services('CheckForNew') -* end service -* -* Service TestGit() -* debug -* end service -* -* Service TestMessages() -* debug -* if xlate( 'NOTE_PTRS', @user4, 'NEW_MESSAGES', 'X' ) then -* NotePtrRec = xlate( 'NOTE_PTRS', @user4, '', 'X' ) -* if NotePtrRec = 'Yes' then -* * the top one is new meaning they got a new one -* MsgInfo = '' -* MsgInfo = '!' -* Mtext = 'You have a new message from ':NotePtrRec:'.' -* MsgInfo = MText -* MsgInfo = -2 -* MsgInfo = -2 -* Void = msg( '', MsgInfo ) -* end -* end -* -* NotesSent = obj_Notes_Sent('GetUserKeys','LEHRICH') -* NewMessages = XLATE('NOTE_PTRS','LEHRICH','NEW_MESSAGES','X') -* //NotesSent = obj_Notes_Sent('GetUserKeys','JONATHAN_O') -* IF NotesSent NE '' OR NewMessages > 0 THEN -* Start_Window( 'NOTE_PTRS', @WINDOW, '*CENTER', '', '' ) -* END -* end service -* -* Service GetSAPYield -* debug -* counts = Gan_Services('GetYieldInfo', 223271 , '') -* end service -* -* Service DoSomething() -* -* Response = "Hello, World!" -* -* End Service -* -* Service DoSomethingWithParameters(Input, Ref Output) -* -* Output = Input:", World!" -* -* End Service - - - - - - diff --git a/LSL2/STPROC/RDS_ACTIONS.txt b/LSL2/STPROC/RDS_ACTIONS.txt index 25be014..c1f4f99 100644 --- a/LSL2/STPROC/RDS_ACTIONS.txt +++ b/LSL2/STPROC/RDS_ACTIONS.txt @@ -65,8 +65,7 @@ Equ COMMA$ to ',' Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services Declare function Rds_Services, SRP_DateTime, SRP_Math, obj_WO_Mat, Lot_Services, SRP_Array -Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services -Declare subroutine Work_Order_Services, Material_Services, Set_FSError +Declare subroutine Error_Services, Database_Services, Logging_Services, Service_Services LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS' LogDate = Oconv(Date(), 'D4/') @@ -577,6 +576,7 @@ READ_RECORD: return + READONLY_RECORD_PRE: // In order to stop a record from being read in this action these lines of code must be used: // @@ -586,6 +586,7 @@ READONLY_RECORD_PRE: // ActionFlow = ACTION_STOP$ return + READONLY_RECORD: // In order to stop a record from being read in this action these lines of code must be used: // @@ -848,6 +849,7 @@ WRITE_RECORD_PRE: return + WRITE_RECORD: WONo = Record @@ -953,16 +955,17 @@ WRITE_RECORD: WMIKeys = {WM_IN_KEY} For each WMIKey in WMIKeys using @VM setting vPos CassNo = Field(WMIKey, '*', 3) - Schedule_Services('MarkCassProcessed', WONo, CassNo, DatetimeOut) + Service_Services('PostProcedure', 'SCHEDULE_SERVICES':@VM:'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut) Next WMIKey end else CassNo = Record - Schedule_Services('MarkCassProcessed', WONo, CassNo, DatetimeOut) + Service_Services('PostProcedure', 'SCHEDULE_SERVICES':@VM:'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut) end end return + DELETE_RECORD_PRE: Notes = RetStack() @@ -976,11 +979,11 @@ DELETE_RECORD_PRE: return + DELETE_RECORD: return - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1040,4 +1043,3 @@ Restore_System_Variables: return - diff --git a/LSL2/STPROC/WM_IN_ACTIONS.txt b/LSL2/STPROC/WM_IN_ACTIONS.txt index 395db72..4831109 100644 --- a/LSL2/STPROC/WM_IN_ACTIONS.txt +++ b/LSL2/STPROC/WM_IN_ACTIONS.txt @@ -59,7 +59,7 @@ Equ Comma$ to ',' Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, Datetime Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services -Declare subroutine Logging_Services, obj_Notes, Schedule_Services +Declare subroutine Logging_Services, obj_Notes, Service_Services LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WM_IN' LogDate = Oconv(Date(), 'D4/') @@ -123,17 +123,17 @@ READ_RECORD_PRE: // ActionFlow = ACTION_STOP$ return + READ_RECORD: // In order to stop a record from being read in this action these lines of code must be used: // // OrigFileError = 100 : @FM : KeyID // Status = 0 // Record = '' - * LockOwner = Record - * If LockOwner EQ '' then Record = @User4 return + READONLY_RECORD_PRE: // In order to stop a record from being read in this action these lines of code must be used: // @@ -143,6 +143,7 @@ READONLY_RECORD_PRE: // ActionFlow = ACTION_STOP$ return + READONLY_RECORD: // In order to stop a record from being read in this action these lines of code must be used: // @@ -151,9 +152,11 @@ READONLY_RECORD: // Record = '' return + WRITE_RECORD_PRE: return + WRITE_RECORD: // Look for schedule events that may need to be updated. @@ -161,7 +164,7 @@ WRITE_RECORD: CassNo = Field(Name, '*', 3) ProcessedDTM = Datetime() // This service will determine if the cassette needs to be marked as complete. - Schedule_Services('MarkCassProcessed', WONo, CassNo, ProcessedDtm) + Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:ProcessedDtm) WfrCount = DCount(Record, @VM) If WfrCount LT 25 then @@ -179,34 +182,12 @@ WRITE_RECORD: return + DELETE_RECORD_PRE: - - // Log which user and computer station attempted to delete the record - * LogData = '' - * LogData<1> = LoggingDTM - * LogData<2> = Name - * LogData<3> = @User4 - * Logging_Services('AppendLog', objDeleteLog, LogData, @RM, @FM) - * - * // Send an LSL message to FI admins to alert them - * Recipients = Xlate('SEC_GROUPS', 'OI_ADMIN', 'USER', 'X') - * SentFrom = 'SYSTEM' - * Subject = 'WM_IN Delete Attempt' - * Message = 'An attempt to delete WM_IN record ':Name:' was made by ':@User4:'.' - * AttachWindow = '' - * AttachKey = '' - * SendToGroup = '' - * - * Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup - * obj_Notes('Create',Parms) - - // Stop the system from deleting the record - * ActionFlow = ACTION_STOP$ - return + DELETE_RECORD: - return @@ -218,6 +199,7 @@ ClearCursors: Next counter return + Initialize_System_Variables: // Save these for restoration later SaveDict = @DICT @@ -252,12 +234,16 @@ Initialize_System_Variables: end end @RECORD = Record + return + Restore_System_Variables: + Transfer SaveDict to @DICT Transfer SaveID to @ID Transfer SaveRecord to @RECORD @FILE.ERROR = OrigFileError + return diff --git a/LSL2/STPROC/WO_MAT_ACTIONS.txt b/LSL2/STPROC/WO_MAT_ACTIONS.txt index aae5ec9..72710c5 100644 --- a/LSL2/STPROC/WO_MAT_ACTIONS.txt +++ b/LSL2/STPROC/WO_MAT_ACTIONS.txt @@ -58,7 +58,7 @@ Equ Comma$ to ',' Declare function Error_Services, Database_Services, Environment_Services, Logging_Services, obj_WO_Mat, Max Declare function GaN_Services, Signature_Services, obj_WO_LOG, SRP_Array, MemberOf, Datetime Declare subroutine Error_Services, Database_Services, Environment_Services, Logging_Services, Obj_SAP, obj_Notes -Declare subroutine SAP_Services, Work_Order_Services, Material_Services, RList, Schedule_Services +Declare subroutine SAP_Services, Material_Services, RList, Service_Services LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_Mat' LogDate = Oconv(Date(), 'D4/') @@ -244,6 +244,7 @@ READ_RECORD: // Record = '' return + READONLY_RECORD_PRE: // In order to stop a record from being read in this action these lines of code must be used: // @@ -253,6 +254,7 @@ READONLY_RECORD_PRE: // ActionFlow = ACTION_STOP$ return + READONLY_RECORD: // In order to stop a record from being read in this action these lines of code must be used: // @@ -261,6 +263,7 @@ READONLY_RECORD: // Record = '' return + WRITE_RECORD_PRE: WOMatKeyID = Name @@ -814,21 +817,23 @@ WRITE_RECORD: end If OrigRecord NE Record then - Work_Order_Services('UpdateReceivedQty', WONo) - Work_Order_Services('UpdateReleasedQty', WONo) + Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'UpdateReceivedQty':@VM:WONo) + Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'UpdateReleasedQty':@VM:WONo) end CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID) If CurrWaferCount EQ 0 then // This should catch cases where the entire cassette is "peeled off", NCR'ed, or used for destructive testing. - Schedule_Services('MarkCassProcessed', WONo, CassNo, Datetime()) + Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:Datetime()) end return + DELETE_RECORD_PRE: return + DELETE_RECORD: return @@ -878,3 +883,4 @@ Restore_System_Variables: @FILE.ERROR = OrigFileError return +