COMPILE FUNCTION obj_TW_Use(Method,Parms) /* Methods for TW_USE table 07/21/2010 JCH - Initial Coding Properties: Methods: Load(DataStruct) ;* Loads TW_USE table from RDS_TES */ DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, obj_Notes, ErrMsg, RList, Send_Dyn, Send_Info DECLARE SUBROUTINE Btree.Extract $INSERT RDS_TEST_EQUATES $INSERT TW_USE_EQUATES $INSERT RLIST_EQUATES EQU COL$TW_QTY TO 1 ;* Used for conversion process from RDS_TEST EQU COL$TW_CODE TO 2 EQU COL$TW_USAGE_DESC TO 3 EQU COL$TW_TOOL TO 4 EQU COL$TW_TYPE TO 5 EQU COL$TW_SIG TO 6 EQU COL$TW_SIG_DTM TO 7 EQU COL$TW_HRS_SINCE_PROD TO 8 EQU COL$TW_HRS_ESC TO 9 EQU COL$TW_WAFER_ID TO 10 EQU COL$TW_USE_ID TO 11 ErrTitle = 'Error in Stored Procedure "obj_TW_Use"' ErrorMsg = '' IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine' IF NOT(ASSIGNED(Parms)) THEN Parms = '' IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END Result = '' BEGIN CASE CASE Method = 'Copy' ; GOSUB Copy CASE Method = 'Load' ; GOSUB Load CASE Method = 'Convert' ; GOSUB Convert CASE 1 END CASE IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END RETURN Result * * * * * * * Copy: * * * * * * * MetNo = Parms[1,@RM] NewTWUseNo = Parms[COL2()+1,@RM] OrgTWUseNo = Parms[COL2()+1,@RM] IF MetNo = '' THEN ErrorMsg = 'Null Parameter "MetNo" passed to routine. (':Method:')' IF NewTWUseNo = '' THEN ErrorMsg = 'Null Parameter "NewTWUseNo" passed to routine. (':Method:')' IF OrgTWUseNo = '' THEN ErrorMsg = 'Null Parameter "OrgTWUseNo" passed to routine. (':Method:')' IF ErrorMsg NE '' THEN RETURN OrgRec = XLATE('TW_USE',MetNo:'*':OrgTWUseNo,'','X') IF OrgRec ='' THEN ErrorMsg = 'Original TW_USE Record not found ':QUOTE(MetNo:'*':OrgTWUseNo):'.' RETURN END OrgRec = '' OrgRec = '' TWUseKey = MetNo:'*':NewTWUseNo obj_Tables('WriteRec','TW_USE':@RM:TWUseKey:@RM:@RM:OrgRec) RETURN * * * * * * * Load: * * * * * * * OPEN 'RDS_TEST' TO MetTable ELSE DEBUG RETURN END OPEN 'TW_USE' TO TestWfrTable ELSE DEBUG RETURN END *SelectSent = 'SELECT RDS_TEST 512775' SelectSent = 'SELECT RDS_TEST WITH TW_SIG_DT FROM "3/28/2011" TO "4/2/2011"' RList(SelectSent,TARGET_ACTIVELIST$,'','','') debug IF Get_Status(ErrCode) THEN DEBUG TotRecCnt = @RECCOUNT RecCnt = 0 Done = 0 LOOP READNEXT MetNo ELSE Done = 1 UNTIL Done READ MetRec FROM MetTable,MetNo THEN RecCnt += 1 TWCnt = COUNT(MetRec,@VM) + (MetRec NE '') TWList = '' FOR Line = 1 TO TWCnt TWList = MetRec TWList = MetRec TWList = '' TWList = MetRec TWList = MetRec TWList = MetRec TWList = OCONV(MetRec,'DT/^S') TWList = MetRec TWList = MetRec TWList = MetRec TWList = MetRec NEXT Line GOSUB Convert MetRec = Result WRITE MetRec ON MetTable,MetNo THEN Send_Info(RecCnt:'/':TotRecCnt:' ':MetNo:' - Written') END END ;* End of MetRec read REPEAT RETURN * * * * * * * Convert: * * * * * * * IF NOT(Assigned(MetNo)) THEN MetNo = Parms[1,@RM] END IF NOT(Assigned(TWList)) THEN TWList = Parms[COL2()+1,@RM] END ListCnt = COUNT(TWList,@FM) + (TWList NE '') RowCnt = ListCnt LOOP TWLine = TWList CONVERT @VM TO '' IN TWLine UNTIL TWLine NE '' OR TWList = '' TWList = DELETE(TWList,RowCnt,0,0) ;* Strip empty lines from display List RowCnt -= 1 REPEAT TWArray = '' FOR I = 1 TO RowCnt FOR N = COL$TW_QTY TO COL$TW_USE_ID TWArray = TWList ;* Build an 'ARRAY' from the 'LIST' NEXT N NEXT I UseIDs = TWArray TWCodes = TWArray LastSeq = 0 Pos = 1 Flag = "" LOOP REMOVE UseID FROM UseIds AT Pos SETTING Flag WHILE Flag SeqNo = UseID[-1,'B*'] IF SeqNo > LastSeq THEN LastSeq = SeqNo REPEAT NextSeq = LastSeq + 1 ;* Highest number used in keys (Position in the array doesn't count) OPEN 'DICT.TW_USE' TO DictTWUse ELSE ErrorMsg = 'Unable to open DICT.TW_USE in obj_TW_Use Convert method.' RETURN END OPEN 'TW_USE' TO TWUseFile ELSE ErrorMsg = 'Unable to open TW_USE in obj_TW_Use Convert method.' RETURN END SearchString = 'MET_NO':@VM:MetNo:@FM Option = '' Flag = '' Set_Status(0) Btree.Extract(SearchString,'TW_USE',DictTWUse,CurrUseIDs,Option,Flag) IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END BuildKeys = '' DeleteKeys = '' FOR I = 1 TO RowCnt UseID = UseIDs<1,I> IF CurrUseIDs = '' THEN BuildKeys<1,I> = MetNo:'*':NextSeq NextSeq += 1 END ELSE LOCATE UseID IN CurrUseIDs USING @VM SETTING Pos THEN BuildKeys<1,I> = '' READ TWUseRec FROM TWUseFile,UseID THEN OrgTWUseRec = TWUseRec TWUseRec = TWArray TWUseRec = TWArray TWUseRec = TWArray TWUseRec = TWArray TWUseRec = TWArray TWUseRec = ICONV(TWArray,'DT') TWUseRec = TWArray TWUseRec = TWArray ProdWafers = TWArray CONVERT ',' TO @VM IN ProdWafers CONVERT ' ' TO '' IN ProdWafers TWUseRec = ProdWafers IF TWUseRec NE OrgTWUseRec THEN WRITE TWUseRec ON TWUseFile,UseID THEN NULL END END END ELSE BuildKeys<1,I> = MetNo:'*':NextSeq NextSeq += 1 END END NEXT I DelCnt = 0 FOR I = 1 TO RowCnt CurrUseID = CurrUseIDs<1,I> IF CurrUseID NE '' THEN LOCATE CurrUseID IN UseIDs USING @VM SETTING Pos ELSE DeleteKeys<1,-1> = CurrUseID DelCnt += 1 END END NEXT I IF DelCnt > 0 THEN FOR I = 1 TO DelCnt DeleteKey = DeleteKeys<1,I> Set_Status(0) obj_Tables('DeleteRec','TW_USE':@RM:DeleteKey:@RM) IF Get_Status(errCode) THEN ErrMsg(errCode) END NEXT I END LineCnt = COUNT(TWArray,@VM) + (TWArray NE '') FOR I = 1 TO LineCnt IF BuildKeys<1,I> NE '' THEN NewKey = BuildKeys<1,I> IF TWArray NE '' THEN TWUseRec = '' TWUseRec = TWArray TWUseRec = TWArray TWUseRec = TWArray TWUseRec = TWArray TWUseRec = TWArray TWUseRec = ICONV(TWArray,'DT') TWUseRec = TWArray TWUseRec = TWArray TWUseRec = TWArray obj_Tables('WriteRec','TW_USE':@RM:NewKey:@RM:@RM:TWUseRec) NextSeq += 1 Result<1,I> = NewKey END END ELSE Result<1,I> = TWArray END NEXT I IF LineCnt < ListCnt THEN Result := STR(@VM,ListCnt - LineCnt) END RETURN Result