added LSL2 stored procedures
This commit is contained in:
272
LSL2/STPROC/EXPORT_WO_LOG.txt
Normal file
272
LSL2/STPROC/EXPORT_WO_LOG.txt
Normal file
@ -0,0 +1,272 @@
|
||||
COMPILE SUBROUTINE Export_WO_Log( Dummy )
|
||||
|
||||
DECLARE FUNCTION Msg, Dialog_Box, Utility, obj_Export, obj_WO_Log
|
||||
DECLARE FUNCTION Set_Printer, Get_Printer, obj_Install, Utility, obj_MUWafers, Database_Services
|
||||
|
||||
DECLARE SUBROUTINE Btree.Extract, RList, END_Dialog, Make.List, Msg, ErrMsg, SetInitDirOptions
|
||||
|
||||
$INSERT LSL_USERS_EQU
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT RLIST_EQUATES
|
||||
$INSERT OIPRINT_EQUATES
|
||||
$INSERT WO_LOG_EQUATES
|
||||
$INSERT WO_STEP_EQU
|
||||
$INSERT WO_MAT_EQUATES
|
||||
$INSERT COMPANY_EQU
|
||||
$INSERT QUOTE_EQU
|
||||
$INSERT QUOTE_SPEC_EQU
|
||||
$INSERT RECIPE_EQU
|
||||
$INSERT ORDER_DET_EQU
|
||||
$INSERT PROD_SPEC_EQUATES
|
||||
$insert PROD_VER_EQUATES
|
||||
$INSERT EXCEL_EQU
|
||||
|
||||
CRLF$ = \0D0A\
|
||||
|
||||
OPEN 'WO_STEP' TO WOStepTable ELSE
|
||||
ErrMsg('Unable to open "WO_STEP" table in EXPORT_WO_LOG routine.')
|
||||
RETURN
|
||||
END
|
||||
|
||||
OPEN 'DICT.WO_STEP' TO DictWOStep ELSE
|
||||
ErrMsg('Unable to open "DICT.WO_STEP" table in EXPORT_WO_LOG routine.')
|
||||
RETURN
|
||||
END
|
||||
|
||||
Def = ""
|
||||
Def<MTEXT$> = "Selecting Uncheduled Work Orders..."
|
||||
Def<MTYPE$> = "U"
|
||||
|
||||
MsgUp = Msg(@window, Def)
|
||||
|
||||
* SelectSent = 'SELECT WO_STEP WITH SCHEDULED NE "Yes" '
|
||||
Declare subroutine SRP_Stopwatch
|
||||
SRP_Stopwatch('Reset')
|
||||
SRP_Stopwatch('Start', 'StartDate')
|
||||
StartDate = Oconv(Date() - 182, 'D4/')
|
||||
SelectSent = 'SELECT WO_LOG WITH ENTRY_DATE GE ' : Quote(StartDate)
|
||||
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
||||
SRP_Stopwatch('Stop', 'StartDate')
|
||||
SRP_Stopwatch('Start', 'Schedule')
|
||||
SelectSent = 'SELECT WO_LOG WITH SCHEDULED NE "Yes" '
|
||||
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
||||
SRP_Stopwatch('Stop', 'Schedule')
|
||||
* SRP_Stopwatch('ShowAll')
|
||||
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS NE "CL" "COMP" '
|
||||
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS = "NEW" "RTP" "RTS" "RX" "INPR" '
|
||||
*RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
||||
|
||||
WOLogKeys = ''
|
||||
Done = 0
|
||||
LOOP
|
||||
READNEXT WOLogKey ELSE Done = 1
|
||||
UNTIL Done
|
||||
WOLogKeys<-1> = WOLogKey
|
||||
REPEAT
|
||||
|
||||
CONVERT @VM TO @FM IN WOLogKeys
|
||||
|
||||
IF WOLogKeys = '' THEN
|
||||
Msg(@window, MsgUp)
|
||||
ErrMsg('No Work Orders remain unscheduled.')
|
||||
RETURN
|
||||
END
|
||||
|
||||
|
||||
Make.List('',WOLogKeys,'','')
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrMsg(errCode)
|
||||
END
|
||||
|
||||
Results = ''
|
||||
Results<1,1> = 'Spec Type'
|
||||
Results<1,2> = 'WO'
|
||||
Results<1,3> = 'Customer'
|
||||
Results<1,4> = 'Qty'
|
||||
Results<1,5> = 'PSN'
|
||||
Results<1,6> = 'Cust Part Numbers'
|
||||
Results<1,7> = 'Reactor Type'
|
||||
Results<1,8> = 'Sched Reacts'
|
||||
Results<1,9> = 'Inch'
|
||||
Results<1,10> = 'Tube Press Type'
|
||||
Results<1,11> = 'Epi Gases'
|
||||
Results<1,12> = 'Dopant L1'
|
||||
Results<1,13> = 'Cap/Burst Gases'
|
||||
Results<1,14> = 'Thick Target'
|
||||
Results<1,15> = 'Res Target'
|
||||
Results<1,16> = 'Expected Rx Dt'
|
||||
Results<1,17> = 'Received Date'
|
||||
Results<1,18> = 'Promised Ship'
|
||||
Results<1,19> = 'Qual'
|
||||
Results<1,20> = 'Blkd'
|
||||
Results<1,21> = 'MU Wfrs'
|
||||
|
||||
Done = 0
|
||||
LineCnt = 1
|
||||
LOOP
|
||||
READNEXT WOLogKey ELSE Done = 1
|
||||
UNTIL Done
|
||||
|
||||
WONo = WOLogKey
|
||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
||||
WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
||||
|
||||
CassCustPNs = XLATE('WO_MAT',WOMatKeys,WO_MAT_CUST_PART_NO$,'X')
|
||||
CustPNs = ''
|
||||
FOR I = 1 TO COUNT(CassCustPNs,@VM) + (CassCustPNs NE '')
|
||||
LOCATE CassCustPNs<1,I> IN CustPNs USING @VM SETTING POS ELSE
|
||||
CustPNs = INSERT(CustPNs,1,Pos,0,CassCustPNs<1,I>)
|
||||
END
|
||||
NEXT I
|
||||
|
||||
CompanyName = XLATE( 'COMPANY', WORec<WO_LOG_CUST_NO$>,COMPANY_CO_NAME$,'X')
|
||||
SWAP ',' WITH '-' IN CompanyName
|
||||
|
||||
WaferQty = SUM(XLATE('WO_MAT',WOMatKeys,WO_MAT_WAFER_QTY$,'X'))
|
||||
IF WaferQty > 0 THEN
|
||||
ExpectedRxDts = ''
|
||||
END ELSE
|
||||
OrderNo = WORec<WO_LOG_ORDER_NO$>
|
||||
OrderItems = WORec<WO_LOG_ORDER_ITEM$>
|
||||
OrderDetKeys = ''
|
||||
FOR N = 1 TO COUNT(OrderItems,@VM) + (OrderItems NE '')
|
||||
OrderDetKeys<1,N> = OrderNo:'*':OrderItems<1,N>
|
||||
NEXT N
|
||||
WaferQty = SUM(XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_ITEM_QTY$,'X'))
|
||||
ExpectedRxDts = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_EXP_RX_DT$,'X')
|
||||
END
|
||||
|
||||
MUWafers = obj_MUWafers('AvailWafers',WONo:@RM:WORec:@RM:0:@RM:1)
|
||||
ShipThickTarget = XLATE('WO_LOG',WONo,'SHIP_THICK_TARGET','X')
|
||||
ShipResTarget = XLATE('WO_LOG',WONo,'SHIP_RES_TARGET','X')
|
||||
|
||||
CustPSNs = XLATE('WO_STEP',WORec<34>,1,'X')
|
||||
|
||||
SWAP @VM WITH '\' IN CustPNs
|
||||
|
||||
* PSNo = WOStepRec<WO_STEP_PROD_SPEC_ID$>
|
||||
ProdVerNo = WORec<WO_LOG_PROD_VER_NO$>
|
||||
ProdVerRow = Database_Services('ReadDataRow', 'PROD_VER', ProdVerNo)
|
||||
PSNo = ProdVerRow<PROD_VER_PROC_STEP_PSN$>
|
||||
|
||||
PSReactType = OCONV(XLATE('PROD_SPEC',PSNo,PROD_SPEC_REACTOR_TYPE$,'X'),'[REACT_TYPE_CONV]')
|
||||
|
||||
WaferSize = xlate( 'PROD_SPEC', PSNo, 'SUB_WAFER_SIZE', 'X' )
|
||||
SWAP 75 WITH '' IN WaferSize
|
||||
SWAP 100 WITH '' IN WaferSize
|
||||
SWAP 125 WITH '' IN WaferSize
|
||||
SWAP 150 WITH '' IN WaferSize
|
||||
SWAP 200 WITH '' IN WaferSize
|
||||
SWAP 'mm' WITH '' IN WaferSize
|
||||
WaferSize = trim( WaferSize )
|
||||
|
||||
RecipeId = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO_L1', 'X' )
|
||||
EPIGases = XLATE( 'RECIPE', RecipeId, RECIPE_EPI_GASES$, 'X' )
|
||||
|
||||
* Reactors = WOStepRec<WO_STEP_REACTORS$>
|
||||
Reactors = Xlate('PROD_SPEC', PSNo, PROD_SPEC_QUAL_REACTS$, 'X')
|
||||
* BlockedReactors = WOStepRec<WO_STEP_BLOCKED_REACTORS$>
|
||||
BlockedReactors = Xlate('PROD_SPEC', PSNo, PROD_SPEC_BLOCKED_REACTS$, 'X')
|
||||
SchedReactors = XLATE('WO_LOG',WONo,'SCHED_REACTS','X')
|
||||
|
||||
CONVERT @VM TO ',' IN Reactors
|
||||
CONVERT @VM TO ',' IN BlockedReactors
|
||||
|
||||
IF WaferQty > 0 THEN
|
||||
LineCnt += 1
|
||||
Results<LineCnt,1> = OCONV(XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ),'[SPEC_TYPE_CONV]') ;* Spec Type
|
||||
Results<LineCnt,2> = OCONV(WONo,'MD0') ;* WO
|
||||
Results<LineCnt,3> = CompanyName ;* Company Name
|
||||
Results<LineCnt,4> = OCONV(WaferQty,'MDO') ;* Wafer Qty
|
||||
Results<LineCnt,5> = OCONV(PSNo,'MD0') ;* Prod Spec ID
|
||||
Results<LineCnt,6> = CustPNs ;* Customer Part Numbers
|
||||
Results<LineCnt,7> = PSReactType ;* Reactor type for Prod Spec
|
||||
Results<LineCnt,8> = SchedReactors
|
||||
Results<LineCnt,9> = WaferSize ;* Wafer Size
|
||||
Results<LineCnt,10> = XLATE( 'PROD_SPEC', PSNo, 'TUBE_PRESSURE_TYPE', 'X' ) ;* Tube Pressure Type
|
||||
Results<LineCnt,11> = EPIGases
|
||||
Results<LineCnt,12> = XLATE( 'PROD_SPEC', PSNo, 'DOPANT_L1', 'X' ) ;* Dopant L1
|
||||
Results<LineCnt,13> = XLATE( 'RECIPE', RecipeId, RECIPE_CAP_BURST_GASES$, 'X' ) ;* Cap Burst Gases
|
||||
Results<LineCnt,14> = ShipThickTarget
|
||||
Results<LineCnt,15> = ShipResTarget
|
||||
Results<LineCnt,16> = OCONV(ExpectedRxDts<1,1>,'D4/')
|
||||
Results<LineCnt,17> = OCONV(XLATE('WO_MAT',WONo:'*1',WO_MAT_RX_DTM$,'X')[1,'.'],'D4/')
|
||||
Results<LineCnt,18> = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D4/')
|
||||
Results<LineCnt,19> = Reactors
|
||||
Results<LineCnt,20> = BlockedReactors
|
||||
Results<LineCnt,21> = MUWafers
|
||||
TempLine = Results<LineCnt>
|
||||
CONVERT '"' TO '' IN TempLine
|
||||
Results<LineCnt> = TempLine
|
||||
END
|
||||
REPEAT
|
||||
|
||||
PasteBlob = Results
|
||||
|
||||
* * * * * *
|
||||
|
||||
SWAP @VM WITH CHAR(9) IN PasteBlob
|
||||
SWAP @FM WITH CRLF$ IN PasteBlob
|
||||
CALL Set_Property('CLIPBOARD', 'TEXT', PasteBlob)
|
||||
|
||||
|
||||
ExportColCnt = 20
|
||||
|
||||
|
||||
* * * Paste it into a blank Excel Sheet
|
||||
|
||||
xlApp = OleCreateInstance("excel.Application")
|
||||
|
||||
IF OleStatus() THEN
|
||||
|
||||
Msg(@window, MsgUp)
|
||||
|
||||
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 <Ctrl><V> .'
|
||||
|
||||
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')
|
||||
|
||||
Msg(@window, MsgUp)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user