COMPILE SUBROUTINE Export_Passdown(Type,Yesterday,ReactNo) DECLARE FUNCTION Msg, Dialog_Box, Utility, obj_Export, UTF8_UNICODE DECLARE FUNCTION Set_Printer, Get_Printer, obj_Install, obj_OEE DECLARE SUBROUTINE Btree.Extract, RList, END_Dialog, Make.List, Msg, ErrMsg, Set_Status $INSERT LSL_USERS_EQU $INSERT MSG_EQUATES $INSERT RLIST_EQUATES $INSERT OIPRINT_EQUATES $INSERT REACT_EVENT_EQUATES $INSERT DICT_EQUATES $INSERT EXCEL_EQU CRLF$ = \0D0A\ LF$ = \0A\ TAB$ = \09\ ErrorTitle = 'Error in Store Procedure Export_Passdown' OPEN 'REACT_EVENT' TO ReactEventTable ELSE ErrorMsg = 'Unable to Open "REACT_EVENT" table!' Set_Status(1,ErrorTitle:@SVM:ErrorMsg) RETURN END OPEN 'DICT.REACT_EVENT' TO @DICT ELSE ErrorMsg = 'Unable to Open "DICT.REACT_EVENT" table!' Set_Status(1,ErrorTitle:@SVM:ErrorMsg) RETURN END IF NOT(Assigned(Yesterday)) THEN Yesterday = '' IF NOT(Assigned(ReactNo)) THEN ReactNo = '' IF NOT(Assigned(Type)) THEN ErrMsg('Undefined Type passed to Export_Passdown routine.') END IF Type = 'Last24'THEN Yesterday = OCONV(Date()-1,'D4/') END * Generate list of EventKeys to export * IF Yesterday NE '' THEN IF ReactNo NE '' THEN SelectString = 'SELECT REACT_EVENT WITH EVENT_DT GE ':QUOTE(Yesterday):'AND WITH REACT_NO EQ ':QUOTE(ReactNo):' BY-DSND EVENT_DTM' END ELSE SelectString = 'SELECT REACT_EVENT WITH EVENT_DT GE ':QUOTE(Yesterday):'BY REACT_NO BY-DSND EVENT_DTM' END RList(SelectString,TARGET_ACTIVELIST$,'','','') IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END EventKeys = '' Done = 0 LOOP READNEXT EventKey ELSE Done = 1 UNTIL Done EventKeys := EventKey:@VM REPEAT EventKeys[-1,1] = '' ReactNos = ReactNo StartDt = Yesterday EndDt = OCONV(Date(),'D4/') RptHeader = 'Reactor Events Since ':Yesterday:' 00:00:01AM' END ELSE ReportParms = Dialog_Box('DIALOG_PASSDOWN_RPT',@WINDOW) EventKeys = ReportParms<1> ReactNos = ReportParms<2> StartDt = ReportParms<3> EndDt = ReportParms<4> RptHeader = ' Reactor Passdown Report ' END Today = OCONV(Date(),'D4/') * Begin building export data by building column headings * ExportCols = 'EVENT_DTM' ExportCols<1,2> = 'TYPE_DESC' ExportCols<1,3> = 'REACT_NO' ExportCols<1,4> = 'REACT_ESC_HRS' ExportCols<1,5> = 'EVENT_USER' ExportCols<1,6> = 'REACT_MODE' ExportCols<1,7> = 'LAST_READ_WFRS_VAL' ExportCols<1,8> = 'LAST_READ_WFRS_DTM' ExportCols<1,9> = 'REACT_PROB_CAT' ExportCols<1,10> = 'REACT_SERV_DESC' ExportCols<1,11> = 'WO_NO' ExportCols<1,12> = 'TYPE_NOTE' ExportColCnt = COUNT(ExportCols,@VM ) + (ExportCols NE '') BytePos = 0 PasteOut = '' PasteBlob = '' ColNames = ExportCols CONVERT @VM TO @FM IN ColNames ColHeads = XLATE( 'DICT.REACT_EVENT', ColNames, DICT_DISPLAY$, 'X' ) ;* Get column headings CONVERT @VM TO ' ' IN ColHeads ;* Convert multi-lined headings to single line ExportData = '' ;* Used when writing export data to DOS DataCols = '' FOR I = 1 TO ExportColCnt PasteOut<1,I> = ColHeads DataCols<1,I> = I NEXT I PasteBlob<-1> = PasteOut RecCnt = COUNT(EventKeys,@VM) + (EventKeys NE '') FOR RecNo = 1 TO RecCnt @ID = EventKeys<1,RecNo> READ @RECORD FROM ReactEventTable,@ID THEN ReactNo = @ID[1,'*'] EventDtm = OCONV(@ID[COL2()+1,'*'],'DT4/^HS') EventType = {EVENT_TYPE} EventTypeDesc = {TYPE_DESC} EventUser = {EVENT_USER} ReactMode = OCONV(@RECORD,'[REACT_MODE_CONV]') ReactEscHrs = OCONV(@RECORD,'MD2,') ReactWfrCnt = OCONV(@RECORD,'MD0,') ReactWfrCntDtm = OCONV(@RECORD,'DT4/^HS') ReactProbCat = {REACT_PROB_CAT_DESC} ;* This is only the first value ReactServID = {REACT_SERV_DESC} ;* This is only the first value WONo = @RECORD TypeNote = {TYPE_NOTE} SWAP 'CRLF$' WITH @TM IN TypeNote SWAP @TM WITH ' | ' IN TypeNote PasteOut = EventDtm PasteOut<1,2> = EventTypeDesc PasteOut<1,3> = ReactNo PasteOut<1,4> = ReactEscHrs PasteOut<1,5> = EventUser PasteOut<1,6> = ReactMode PasteOut<1,7> = ReactWfrCnt PasteOut<1,8> = ReactWfrCntDtm PasteOut<1,9> = ReactProbCat PasteOut<1,10> = ReactServID PasteOut<1,11> = WONo PasteOut<1,12> = TypeNote PasteBlob<-1> = PasteOut END ;* End of READ NEXT RecNo SWAP @VM WITH CHAR(9) IN PasteBlob SWAP @FM WITH CRLF$ IN PasteBlob CALL Set_Property('CLIPBOARD', 'TEXT', PasteBlob) * * * Paste it into a blank Excel Sheet TextColNos = 1:@VM 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) 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',DataCols) ;* Returns alpha Excel columns from numeric columns FirstLastCols = obj_Export('ExcelCol',1:@VM:ExportColCnt) FirstColumn = FirstLastCols[1,@VM] LastColumn = FirstLastCols[COL2()+1,@VM] SecondColumn = FIELD(eXcelCols,@VM,2) NextToLastColumn = FIELD(eXcelCols,@VM,ExportColCnt - 1) * Format the column headings range = OleGetProperty(xlActiveSheet,'Range',FirstColumn:'1:':LastColumn:'1') font = OleGetProperty(range,'Font') OlePutProperty(font,'FontStyle','Bold') OlePutProperty(font,'UnderLine',xlUnderlineStyleSingle) * Set all columns to "Center" alignemnt column = OleGetProperty(xlActiveSheet,'Columns',FirstColumn:':':LastColumn) OlePutProperty(column,'VerticalAlignment',xlCenter) * Autofit columns in the middle column = OleGetProperty(xlActiveSheet,'Columns',SecondColumn:':':NextToLastColumn) void = OleCallMethod(column,'AutoFit') * Set the first column with the Timestamp so it is wrapped into two lines column = OleGetProperty(xlActiveSheet,'Columns','A:A') OlePutProperty(column,'ColumnWidth',11) OlePutProperty(column,'WrapText',xlTrue) * Set the last column (notes) to width and word wrap it column = OleGetProperty(xlActiveSheet,'Columns',LastColumn:':':LastColumn) OlePutProperty(column,'ColumnWidth',50) OlePutProperty(column,'WrapText',xlTrue) RETURN