COMPILE SUBROUTINE EXPORT_MU_INV(dummy) #pragma precomp SRP_PreCompiler * Makeup Wafer Inventory Report - Excel * 10/3/2014 John C. Henry, J.C. Henry & Co., Inc. Initial coding DECLARE SUBROUTINE ErrMsg, Btree.Extract, Set_Status, SetInitDirOptions, RList, Make.List, Msg, SRP_Stopwatch DECLARE FUNCTION Msg, Get_Status, obj_Calendar, Utility, SetInitDirOptions, Dialog_Box, obj_WO_Log, DECLARE FUNCTION Popup, obj_WM_Out, obj_WO_Mat, Collect.IXVals, obj_Export, Msg $INSERT WO_LOG_EQUATES $INSERT WO_MAT_EQUATES $INSERT WM_OUT_EQUATES $INSERT PROD_VER_EQUATES $INSERT RDS_EQUATES $INSERT RLIST_EQUATES $INSERT EXCEL_EQU $INSERT MSG_EQUATES EQU COL$SAP_BATCH_NO TO 1 EQU COL$SAP_CASS_ID TO 2 EQU COL$WAFER_CNT TO 3 EQU COL$$EPI_PART_NO TO 4 EQU COL$WO_NO TO 5 EQU COL$CASS_NO TO 6 EQU COL$PROD_ORD_NO TO 7 EQU COL$SHIP_PSN TO 8 EQU COL$CUST_NO TO 9 ;* Added -dkk per eng request 10/13/14 EQU COL$WAFER_INCHES TO 10 ;* Added -dkk per eng request 10/13/14 EQU COL$FINAL_QA_DTM TO 11 EQU COL$CURR_LOCATION_DESC TO 12 ;* Added -dkk per quality request 3/30/15 EQU TAB$ TO \09\ EQU CRLF$ TO \0D0A\ OPEN 'WO_MAT' TO WOMatTable ELSE ErrMsg('Unable to open WO_MAT for Export') RETURN END OPEN 'DICT.WO_MAT' TO WOMatDict ELSE ErrMsg('Unable to open DICT.WO_MAT for index read') RETURN END OPEN 'DICT.WM_OUT' TO WMOutDict ELSE ErrMsg('Unable to open DICT.WM_OUT for index read') RETURN END TypeOver = "" TypeOver = "Building Export..." TypeOver = "U" MsgUp = Msg(@WINDOW, TypeOver) ;* display the processing message WOMatKeys = '' WMOutKeys = '' Options = '' Flag = '' SRP_Stopwatch('Reset') SRP_Stopwatch('Start', 'SlowIndex') SearchString = 'MAKEUP_BOX':@VM:'1':@FM TempWOMatKeys = '' Btree.Extract(SearchString, 'WO_MAT', WOMatDict, TempWOMatKeys, Options, Flag) WOMatKeys = '' For Each WOMatKey in TempWOMatKeys using @VM CurrStatus = Xlate('WO_MAT', WOMatKey, 'CURR_STATUS', 'X') If CurrStatus EQ 'RTU' then WOMatKeys := WOMatKey : @VM Next WOMatKey WOMatKeys[-1, 1] = '' SearchString = 'MAKEUP_BOX':@VM:'1':@FM Btree.Extract(SearchString, 'WM_OUT', WMOutDict, TempWMOutKeys, Options, Flag) WMOutKeys = '' For Each WMOutKey in TempWMOutKeys using @VM CurrStatus = Xlate('WM_OUT', WMOutKey, 'CURR_STATUS', 'X') If CurrStatus EQ 'RTU' then WMOutKeys := WMOutKey : @VM Next WMOutKey WMOutKeys[-1, 1] = '' NumWOMatKeys = DCount(WOMatKeys, @VM) NumWMOutKeys = DCount(WMOutKeys, @VM) SRP_Stopwatch('Stop', 'SlowIndex') wmoCnt = COUNT(WMOutKeys,@VM) + (WMOutKeys NE '') FOR I = 1 TO wmoCnt WMOutKey = WMOutKeys<1,I> WONo = WMOutKey[1,'*'] CassNo = WMOutKey[-1,'B*'] WOMatKey = WONo:'*':CassNo LOCATE WOMatKey IN WOMatKeys USING @VM SETTING Pos ELSE WOMatKeys = INSERT(WOMatKeys,1,Pos,0,WOMatKey) END NEXT I CONVERT @VM TO @FM IN WOMatKeys Cursor = 0 Make.List(Cursor, WOMatKeys, WOMatTable, WOMatDict) IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END SelectSent = "SELECT WO_MAT WITH MAKEUP_BOX EQ '1' BY EPI_PART_NO BY WO_NO" RList(SelectSent,TARGET_ACTIVELIST$,'','','') IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END TextColNos = '' FOR I = 1 TO COL$FINAL_QA_DTM TextColNos<1,I> = I NEXT I ColHeads = '' ColHeads<1,COL$SAP_BATCH_NO> = 'SAP Batch No' ColHeads<1,COL$SAP_CASS_ID> = 'SAP Cass ID' ColHeads<1,COL$WAFER_CNT> = 'Wafer Cnt' ColHeads<1,COL$$EPI_PART_NO> = 'Epi Part No' ColHeads<1,COL$WO_NO> = 'WO No' ColHeads<1,COL$CASS_NO> = 'Cass No ' ColHeads<1,COL$PROD_ORD_NO> = 'Prod Ord No' ColHeads<1,COL$SHIP_PSN> = 'Ship PSN' ColHeads<1,COL$CUST_NO> = 'Cust No' ;* Added -dkk per eng request 10/13/14 ColHeads<1,COL$WAFER_INCHES> = 'Wafer Size' ;* Added -dkk per eng request 10/13/14 ColHeads<1,COL$FINAL_QA_DTM> = 'Final QA Dtm' ColHeads<1,COL$CURR_LOCATION_DESC> = 'Location' ;* Added -dkk per quality request 3/30/15 ExportText = ColHeads Done = 0 ExportLine = 2 MULoc = '' LOOP READNEXT WOMatKey ELSE Done = 1 UNTIL Done READ WOMatRec FROM WOMatTable,WOMatKey THEN SAPBatchNo = WOMatRec SAPCassID = XLATE('WO_MAT',WOMatKey,'CASS_ID_SAP','X') IF WOMatRec NE '' THEN WafersOut = XLATE('WM_OUT',WOMatRec,'WFRS_OUT','X') END ELSE WafersOut = XLATE('WO_MAT',WOMatKey,'CURR_WFR_CNT','X') END WONo = WOMatKey[1,'*'] CassNo = WOMatKey[COL2()+1,'*'] WORec = XLATE('WO_LOG',WONo,'','X') EpiPartNo = WORec ProdOrdNo = WORec ProdVerNo = WORec ProdVerPSNs = XLATE('PROD_VER',ProdVerNo,PROD_VER_PROC_STEP_PSN$,'X') ShipPSN = ProdVerPSNs[-1,'B':@VM] CustNo = WORec ;* Added -dkk per eng request 10/13/14 WaferSize = XLATE('PROD_SPEC', ShipPSN, 'SUB_WAFER_SIZE', 'X')<1,1> ;* Added -dkk per eng request 10/13/14 SigProfile = WOMatRec profCnt = COUNT(SigProfile,@VM) + (SigProfile NE '') *debug qaIdx = Index(WOMatRec, 'QA', 1) //FinalQADtm = ReactRunRec ; FinalQADtm = WOMatRec ;* Final QA is always the last entry in the Sig Profile //FinalQADtm = WOMatRec MULoc = Xlate('WO_MAT',WOMatKey,'CURR_LOCATION_DESC', 'X' ) ;* Added -dkk per quality request 3/30/15 DataLine = '' DataLine<1,COL$SAP_BATCH_NO> = SAPBatchNo DataLine<1,COL$SAP_CASS_ID> = SAPCassID DataLine<1,COL$WAFER_CNT> = WafersOut DataLine<1,COL$$EPI_PART_NO> = EpiPartNo DataLine<1,COL$WO_NO> = WONo DataLine<1,COL$CASS_NO> = CassNo DataLine<1,COL$PROD_ORD_NO> = ProdOrdNo DataLine<1,COL$SHIP_PSN> = ShipPSN DataLine<1,COL$CUST_NO> = CustNo ;* Added -dkk per eng request 10/13/14 DataLine<1,COL$WAFER_INCHES> = WaferSize ;* Added -dkk per eng request 10/13/14 DataLine<1,COL$FINAL_QA_DTM> = OCONV(FinalQADtm,'DT4/^S') DataLine<1,COL$CURR_LOCATION_DESC> = MULoc ;* Added -dkk per quality request 3/30/15 ExportText = DataLine ExportLine += 1 END ;* End of WOMatRec read REPEAT Msg(@WINDOW, MsgUp) ;* take down the processing message * * * * * * SWAP @VM WITH CHAR(9) IN ExportText SWAP @FM WITH CRLF$ IN ExportText CALL Set_Property('CLIPBOARD', 'TEXT', ExportText) If @USER4 EQ 'DANIEL_ST' then OSWrite ExportText to 'D:\FITemp\MUInv.csv' end ExportColCnt = 12 ;* Orginally 11 Changed -dkk per quality request 3/30/15 * * * Paste it into a blank Excel Sheet xlApp = OleCreateInstance("excel.Application") IF OleStatus() THEN ErrorMsg = 'Excel failed to start.':CRLF$:CRLF$ ErrorMsg := 'The data from this export is on your clipboard and can be pasted into Excel on your local machine using .' ErrMsg(ErrorMsg) RETURN END xlWorkBooks = OleGetProperty(xlApp, "Workbooks") xlWorkBook = OleCallMethod(xlWorkBooks,'Add') * * * wait a second Now = Time() LOOP CALL Yield() WHILE Time() EQ Now REPEAT OlePutProperty(XlApp, 'Visible', xlSheetVisible) void = OleCallMethod(xlWorkBook,'Activate') xlActiveSheet = OleGetProperty(xlWorkBook,'ActiveSheet') void = OleCallMethod(xlActiveSheet,'Paste') eXcelCols = obj_Export('ExcelCol',TextColNos) ;* Returns alpha Excel columns from numeric columns FirstLastCols = obj_Export('ExcelCol',1:@VM:ExportColCnt) FirstColumn = FirstLastCols[1,@VM] LastColumn = FirstLastCols[COL2()+1,@VM] range = OleGetProperty(xlActiveSheet,'Range',FirstColumn:'1:':LastColumn:'1') font = OleGetProperty(range,'Font') OlePutProperty(font,'FontStyle','Bold') OlePutProperty(font,'UnderLine',xlUnderlineStyleSingle) column = OleGetProperty(xlActiveSheet,'Columns',FirstColumn:':':LastColumn) void = OleCallMethod(column,'AutoFit') RETURN