Merged PR 15044: Created a routine to determine lot eligible to be peeled off. Modified form l...
Created a routine to determine lot eligible to be peeled off. Modified form logic to allow for lots to be selected out of order. Related work items: #252918
This commit is contained in:
parent
32df3e6816
commit
781274c395
@ -73,6 +73,7 @@ $Insert ORDER_EQU
|
|||||||
$Insert ORDER_DET_EQU
|
$Insert ORDER_DET_EQU
|
||||||
$Insert RLIST_EQUATES
|
$Insert RLIST_EQUATES
|
||||||
$Insert WO_STEP_EQUATES
|
$Insert WO_STEP_EQUATES
|
||||||
|
$Insert RDS_EQUATES
|
||||||
|
|
||||||
EQU COL$QUOTE_DESC TO 1
|
EQU COL$QUOTE_DESC TO 1
|
||||||
EQU COL$SETUP_CHG TO 4
|
EQU COL$SETUP_CHG TO 4
|
||||||
@ -1185,153 +1186,97 @@ Event PUB_REFRESH_SIG_PROFILE.CLICK()
|
|||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event PUB_REM_CASS.CLICK()
|
Event PUB_REM_CASS.CLICK()
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT')
|
WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT')
|
||||||
WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
|
||||||
IF WONo NE '' then
|
IF WONo NE '' then
|
||||||
|
WOReactType = Xlate('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X')
|
||||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
Begin Case
|
||||||
WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
Case WOReactType EQ 'EPP'
|
||||||
WMInKeys = XLATE('WO_STEP', WOStepKey, WO_STEP_WM_IN_KEYS$, 'X')
|
CassList = Work_Order_Services('GetEligiblePeelOffLotsByWOAndEntityType', WONo, 'WM_IN')
|
||||||
WMInTestSTring = WMInKeys
|
Case WOReactType EQ 'ASM' OR WOReactType EQ 'HTR' OR WOReactType EQ 'ASM+'
|
||||||
|
CassList = Work_Order_Services('GetEligiblePeelOffLotsByWOAndEntityType', WONo, 'RDS')
|
||||||
CONVERT @VM TO '' IN WMInTestString
|
Case Otherwise$
|
||||||
|
ErrorMessage = 'Unsupported or null reactor type for this work order.'
|
||||||
WMInCnt = COUNT(WMInKeys,@VM) + (WMinKeys NE '')
|
End Case
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
RDSNos = ''
|
If CassList NE '' then
|
||||||
CassNos = ''
|
Display = ''
|
||||||
|
DispLine = 1
|
||||||
WMIData = ''
|
For each Cass in CassList using @VM
|
||||||
RDSData = ''
|
Begin Case
|
||||||
|
Case WOReactType EQ 'EPP'
|
||||||
Display = ''
|
WOMatKey = Field(Cass, '*', 1) : '*' : Field(Cass, '*', 3)
|
||||||
DispLine = 1
|
Case WOReactType EQ 'ASM' OR WOReactType EQ 'HTR' OR WOReactType EQ 'ASM+'
|
||||||
|
WOMatKey = Cass
|
||||||
IF WMInTestString NE '' THEN
|
End Case
|
||||||
//EPP Case for WMI
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey, True$, 0, False$)
|
||||||
FOR I = WMInCnt TO 1 STEP -1
|
If WOReactType EQ 'EPP' then
|
||||||
WMIRec = XLATE('WM_IN',WMInKeys<1,I>,'','X')
|
CassNo = Field(Cass, '*', 3)
|
||||||
WMIRdsNos = WMIRec<WM_IN_RDS_NO$>
|
CassId = Cass
|
||||||
WMINCRNos = WMIRec<WM_IN_SLOT_NCR$>
|
UnConvCurrStatus = XLATE('WM_IN',CassId,'CURR_STATUS','X')
|
||||||
CONVERT @VM TO '' IN WMIRdsNos
|
CassCurrStatus = OCONV(UnConvCurrStatus,'[WM_IN_CURR_STATUS_CONV]')
|
||||||
CONVERT @VM TO '' IN WMINCRNos
|
end else
|
||||||
UNTIL WMIRdsNos NE '' OR WMINCRNos NE ''
|
CassNo = Field(Cass, '*', 2)
|
||||||
Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2)
|
CassId = WOMatRec<WO_MAT_RDS_NO$>
|
||||||
Display<1,DispLine,2> = XLATE('WO_MAT',WOMatKeys<1,I>,WO_MAT_LOT_NO$,'X')
|
UnConvCurrStatus = obj_WO_Mat('CurrStatus',CassId:@RM:WOMatRec)
|
||||||
Display<1,DispLine,3> = XLATE('WO_MAT',WOMatKeys<1,I>,WO_MAT_WAFER_QTY$,'X')
|
CassCurrStatus = OConv(UnConvCurrStatus, '[WO_MAT_CURR_STATUS_CONV]')
|
||||||
Display<1,DispLine,4> = WMInKeys<1,I>
|
end
|
||||||
Display<1,DispLine,5> = OCONV(XLATE('WM_IN',WMInKeys<1,I>,'CURR_STATUS','X'),'[WM_IN_CURR_STATUS_CONV]')
|
Display<1,DispLine,1> = CassNo
|
||||||
DispLine += 1
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
IF Display NE '' THEN
|
|
||||||
TypeOver = ''
|
|
||||||
TypeOver<PDISPLAY$> = Display
|
|
||||||
WMIData = Popup(@WINDOW,TypeOver,'UNUSED_WM_IN')
|
|
||||||
|
|
||||||
WMIDCnt = COUNT(WMIData,@FM) + (WMIData NE '')
|
|
||||||
FOR N = 1 TO WMIDCnt
|
|
||||||
IF WMIData<N,1> NE Display<1,N,1> THEN
|
|
||||||
ErrMsg('You must pick cassettes from the top line downward in sequence.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
NEXT N
|
|
||||||
|
|
||||||
IF WMIData = '' OR WMIData = CHAR(27) THEN
|
|
||||||
RETURN ;* Cancelled out
|
|
||||||
END
|
|
||||||
END ELSE
|
|
||||||
ErrMsg('All cassettes on this Work Order have started processing.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
DelWMInKeys = ''
|
|
||||||
FOR I = 1 TO COUNT(WMIData,@FM) + (WMIData NE '')
|
|
||||||
CassNos<1,I> = WMIData<I,1>
|
|
||||||
DelWMInKeys<1,I> = WMIData<I,4>
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
TestWMInKeys = DelWMInKeys
|
|
||||||
|
|
||||||
IF TestWMInKeys NE '' THEN
|
|
||||||
Set_Status(0)
|
|
||||||
for each DelWMInKey in DelWMInKeys using @VM
|
|
||||||
Work_Order_Services('SignVoidWMI', DelWMInKey, @USER4)
|
|
||||||
Next DelWMInKey
|
|
||||||
END
|
|
||||||
END ELSE
|
|
||||||
//Non-EPP Case for RDS
|
|
||||||
CassCnt = COUNT(WOMatKeys,@VM) + (WOMatKeys NE '')
|
|
||||||
|
|
||||||
FOR I = CassCnt TO 1 STEP -1
|
|
||||||
|
|
||||||
WOMatKey = WOMatKeys<1,I>
|
|
||||||
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
|
||||||
|
|
||||||
WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey:@RM:WOMatRec)
|
|
||||||
|
|
||||||
WOMatSigs = WOMatRec<WO_MAT_SIGNATURE$>
|
|
||||||
CONVERT @VM TO '' IN WOMatSigs
|
|
||||||
|
|
||||||
UNTIL WOMatSigs NE ''
|
|
||||||
If WoMatCurrStatus NE 'VOID' then
|
|
||||||
Display<1,DispLine,1> = WOMatKeys<1,I>[-1,'B*']
|
|
||||||
Display<1,DispLine,2> = WOMatRec<WO_MAT_LOT_NO$>
|
Display<1,DispLine,2> = WOMatRec<WO_MAT_LOT_NO$>
|
||||||
Display<1,DispLine,3> = WOMatRec<WO_MAT_WAFER_QTY$>
|
Display<1,DispLine,3> = WOMatRec<WO_MAT_WAFER_QTY$>
|
||||||
Display<1,DispLine,4> = WOMatRec<WO_MAT_RDS_NO$>
|
Display<1,DispLine,4> = CassId
|
||||||
Display<1,DispLine,5> = OCONV(WOMatCurrStatus,'[WO_MAT_CURR_STATUS_CONV]')
|
Display<1,DispLine,5> = CassCurrStatus
|
||||||
DispLine += 1
|
DispLine += 1
|
||||||
end
|
Next Cass
|
||||||
NEXT I
|
CassettesToVoid = ''
|
||||||
IF Display NE '' THEN
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = Display
|
TypeOver<PDISPLAY$> = Display
|
||||||
UnusedData = Popup(@WINDOW,TypeOver,'UNUSED_RDS')
|
If WOReactType EQ 'EPP' then
|
||||||
END ELSE
|
CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_WM_IN')
|
||||||
ErrMsg('All cassettes on this Work Order have started processing.')
|
If CassettesToVoid NE '' then
|
||||||
RETURN
|
for each CassetteToVoid in CassettesToVoid using @FM
|
||||||
END
|
WMIToVoid = CassetteToVoid<1,4>
|
||||||
|
Work_Order_Services('SignVoidWMI', WMIToVoid, @USER4)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
Until ErrorMessage NE ''
|
||||||
|
Next CassetteToVoid
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'No cassettes were selected.'
|
||||||
|
end
|
||||||
|
|
||||||
IF UnusedData = '' OR UnusedData = CHAR(27) THEN
|
end else
|
||||||
RETURN ;* Cancelled out
|
CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_RDS')
|
||||||
END
|
for each CassetteToVoid in CassettesToVoid using @FM
|
||||||
|
|
||||||
UnusedCnt = COUNT(UnusedData,@FM) + (UnusedData NE '')
|
RDSToVoid = CassetteToVoid<1,4>
|
||||||
|
WONo = XLATE('RDS', RDSToVoid, RDS_WO$, 'X')
|
||||||
FOR I = 1 TO UnusedCnt
|
CassNo = XLATE('RDS', RDSToVoid, RDS_CASS_NO$, 'X')
|
||||||
IF Display<1,I,1> = UnusedData<I,1> THEN
|
WOMatKey = WONo : '*' : CassNo
|
||||||
CassNos<1,I> = UnusedData<I,1>
|
Work_Order_Services('SignVoidNonEPP', WOMatKey, @USER4)
|
||||||
RDSNos<1,I> = UnusedData<I,4>
|
If Error_Services('HasError') then
|
||||||
END ELSE
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
Msg(@WINDOW,'','WO_MAT_REMOVAL')
|
end
|
||||||
RETURN
|
Until ErrorMessage NE ''
|
||||||
END
|
Next CassetteToVoid
|
||||||
NEXT I
|
|
||||||
|
|
||||||
VoidStatusMessage = ''
|
|
||||||
for each CassNo in CassNos using @VM
|
|
||||||
WoMatKey = WONo : '*' : CassNo
|
|
||||||
Work_Order_Services('SignVoidNonEpp', WoMatKey, @USER4)
|
|
||||||
If Error_Services('HasError') then
|
|
||||||
VoidStatusMessage = Error_Services('GetMessage')
|
|
||||||
end
|
end
|
||||||
Next CassNo
|
end else
|
||||||
If VoidStatusMessage EQ '' then
|
ErrorMessage = 'No eligible lots from this work order found to void.'
|
||||||
VoidStatusMessage = 'All cassettes have been queued for void.'
|
|
||||||
end
|
end
|
||||||
Msg(@Window, VoidStatusMessage)
|
end
|
||||||
END
|
end else
|
||||||
|
Msg(@Window, ErrorMessage)
|
||||||
IF Display = '' THEN
|
return
|
||||||
ErrMsg('All cassettes on this Work Order have started processing.')
|
end
|
||||||
RETURN
|
If ErrorMessage EQ '' then
|
||||||
END
|
//Now send a message
|
||||||
|
|
||||||
Recipients = XLATE('NOTIFICATION','WO_ENTRY',NOTIFICATION_USER_ID$,'X')
|
Recipients = XLATE('NOTIFICATION','WO_ENTRY',NOTIFICATION_USER_ID$,'X')
|
||||||
SentFrom = @USER4
|
SentFrom = @USER4
|
||||||
Subject = 'Unprocessed Cassettes removed from WO ':WONo
|
Subject = 'Cassettes removed from WO ':WONo
|
||||||
Message = 'Cassettes removed from WO.'
|
Message = 'Cassettes removed from WO.'
|
||||||
NewForm = Xlate('APP_INFO', 'NEW_WO_FORM', '', 'X')
|
NewForm = Xlate('APP_INFO', 'NEW_WO_FORM', '', 'X')
|
||||||
If NewForm then
|
If NewForm then
|
||||||
@ -1345,90 +1290,177 @@ Event PUB_REM_CASS.CLICK()
|
|||||||
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
||||||
obj_Notes('Create',Parms)
|
obj_Notes('Create',Parms)
|
||||||
|
|
||||||
GoSub PopulateControls
|
Msg(@Window, 'All selected lots queued for void.')
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
ErrMsg(errCode)
|
|
||||||
END
|
|
||||||
|
|
||||||
|
end else
|
||||||
|
Msg('Error in voiding lots process : ' : ErrorMessage)
|
||||||
end
|
end
|
||||||
|
GoSub PopulateControls
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event PUB_REM_WM_OUT.CLICK()
|
Event PUB_REM_WM_OUT.CLICK()
|
||||||
|
ErrorMessage = ''
|
||||||
WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT')
|
WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT')
|
||||||
WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
|
||||||
IF WONo NE '' then
|
IF WONo NE '' then
|
||||||
|
WOReactType = Xlate('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X')
|
||||||
|
Begin Case
|
||||||
|
Case WOReactType EQ 'EPP'
|
||||||
|
CassList = Work_Order_Services('GetEligiblePeelOffLotsByWOAndEntityType', WONo, 'WM_OUT')
|
||||||
|
Case WOReactType EQ 'ASM' OR WOReactType EQ 'HTR' OR WOReactType EQ 'ASM+'
|
||||||
|
ErrorMessage = 'Non EpiPro work order types do not utilize WM_OUT cassettes. Nothing to void.'
|
||||||
|
Case Otherwise$
|
||||||
|
ErrorMessage = 'Unsupported or null reactor type for this work order.'
|
||||||
|
End Case
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
If CassList NE '' then
|
||||||
|
Display = ''
|
||||||
|
DispLine = 1
|
||||||
|
For each Cass in CassList using @VM
|
||||||
|
WOMatKey = Field(Cass, '*', 1) : '*' : Field(Cass, '*', 3)
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey, True$, 0, False$)
|
||||||
|
CassNo = Field(Cass, '*', 3)
|
||||||
|
CassId = Cass
|
||||||
|
UnConvCurrStatus = XLATE('WM_OUT',CassId,'CURR_STATUS','X')
|
||||||
|
CassCurrStatus = OCONV(UnConvCurrStatus,'[WM_OUT_CURR_STATUS_CONV]')
|
||||||
|
|
||||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
* Display<1,DispLine,1> = CassNo
|
||||||
WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
* Display<1,DispLine,2> = WOMatRec<WO_MAT_LOT_NO$>
|
||||||
WMOutKeys = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_OUT_KEYS$, True$, 0, False$)
|
* Display<1,DispLine,3> = WOMatRec<WO_MAT_WAFER_QTY$>
|
||||||
WMOutCnt = COUNT(WMOutKeys,@VM) + (WMOutKeys NE '')
|
* Display<1,DispLine,4> = CassId
|
||||||
|
* Display<1,DispLine,5> = CassCurrStatus
|
||||||
|
* Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2)
|
||||||
|
* Display<1,DispLine,2> = OCONV(obj_WM_Out('CurrStatus',WOMatKeys<1,I>:@RM:WMORec),'[WO_MAT_CURR_STATUS_CONV]')
|
||||||
|
* Display<1,DispLine,3> = WMOutKeys<1,I>
|
||||||
|
|
||||||
Display = ''
|
Display<1,DispLine,1> = CassNo
|
||||||
DispLine = 1
|
Display<1,DispLine,2> = CassCurrStatus
|
||||||
|
Display<1,DispLine,3> = CassId
|
||||||
IF WMOutCnt > 0 THEN
|
DispLine += 1
|
||||||
|
Next Cass
|
||||||
FOR I = WMOutCnt TO 1 STEP -1
|
CassettesToVoid = ''
|
||||||
WMORec = XLATE('WM_OUT',WMOutKeys<1,I>,'','X')
|
|
||||||
WMO_RdsNos = WMORec<WM_OUT_RDS$>
|
|
||||||
WMO_NCRNos = WMORec<WM_OUT_SLOT_NCR$>
|
|
||||||
WMO_UMWCassIDs = WMORec<WM_OUT_UMW_CASS_ID$>
|
|
||||||
CONVERT @VM TO '' IN WMO_RdsNos
|
|
||||||
CONVERT @VM TO '' IN WMO_NCRNos
|
|
||||||
CONVERT @VM TO '' IN WMO_UMWCassIDs
|
|
||||||
|
|
||||||
UNTIL WMO_RdsNos NE '' OR WMO_NCRNos NE '' OR WMO_UMWCassIDs NE ''
|
|
||||||
Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2)
|
|
||||||
Display<1,DispLine,2> = OCONV(obj_WM_Out('CurrStatus',WOMatKeys<1,I>:@RM:WMORec),'[WO_MAT_CURR_STATUS_CONV]')
|
|
||||||
Display<1,DispLine,3> = WMOutKeys<1,I>
|
|
||||||
DispLine += 1
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
IF Display NE '' THEN
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = Display
|
TypeOver<PDISPLAY$> = Display
|
||||||
TypeOver<PTITLE$> = 'Unused WM_OUT Cassettes'
|
CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_WM_OUT')
|
||||||
WMOData = Popup(@WINDOW,TypeOver,'UNUSED_WM_OUT')
|
If CassettesToVoid NE '' then
|
||||||
IF WMOData = '' OR WMOData = CHAR(27) THEN RETURN ;* Cancelled out
|
for each CassetteToVoid in CassettesToVoid using @FM
|
||||||
END ELSE
|
WMOToVoid = CassetteToVoid<1,3>
|
||||||
ErrMsg('All cassettes on this Work Order have started processing.')
|
Work_Order_Services('SignVoidWMO', WMOToVoid, @USER4)
|
||||||
RETURN
|
If Error_Services('HasError') then
|
||||||
END
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
DelWMOutKeys = ''
|
Until ErrorMessage NE ''
|
||||||
FOR I = 1 TO COUNT(WMOData,@FM) + (WMOData NE '')
|
Next CassetteToVoid
|
||||||
DelWMOutKeys<1,I> = WMOData<I,3>
|
end else
|
||||||
NEXT I
|
ErrorMessage = 'No lots were selected to void.'
|
||||||
|
|
||||||
TestWMOutKeys = DelWMOutKeys
|
|
||||||
|
|
||||||
IF TestWMOutKeys NE '' THEN
|
|
||||||
for each WMOutKey in TestWMOutKeys using @VM
|
|
||||||
Work_Order_Services('SignVoidWMO', WMOutKey, @USER4)
|
|
||||||
Next WMOutKey
|
|
||||||
If Error_Services('HasError') then
|
|
||||||
Msg(@Window, Error_Services('GetMessage'))
|
|
||||||
end
|
end
|
||||||
END
|
end else
|
||||||
END
|
ErrorMessage = 'No eligible lots from this work order found to void.'
|
||||||
|
end
|
||||||
IF Display = '' THEN
|
end else
|
||||||
ErrMsg('All cassettes on this Work Order have had wafers placed in them.')
|
Msg(@Window, ErrorMessage)
|
||||||
RETURN
|
return
|
||||||
END
|
end
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
ErrMsg(errCode)
|
|
||||||
END
|
|
||||||
|
|
||||||
GoSub PopulateControls
|
|
||||||
end
|
end
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
//Now send a message
|
||||||
|
Recipients = XLATE('NOTIFICATION','WO_ENTRY',NOTIFICATION_USER_ID$,'X')
|
||||||
|
SentFrom = @USER4
|
||||||
|
Subject = 'Cassettes removed from WO ':WONo
|
||||||
|
Message = 'Cassettes removed from WO.'
|
||||||
|
NewForm = Xlate('APP_INFO', 'NEW_WO_FORM', '', 'X')
|
||||||
|
If NewForm then
|
||||||
|
AttachWindow = 'NDW_WO_LOG'
|
||||||
|
end else
|
||||||
|
AttachWindow = 'WO_LOG2'
|
||||||
|
end
|
||||||
|
AttachKey = WONo
|
||||||
|
SendToGroup = ''
|
||||||
|
|
||||||
|
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
||||||
|
obj_Notes('Create',Parms)
|
||||||
|
|
||||||
|
Msg(@Window, 'All selected lots queued for void.')
|
||||||
|
|
||||||
|
end else
|
||||||
|
Msg('Error in voiding lots process : ' : ErrorMessage)
|
||||||
|
end
|
||||||
|
GoSub PopulateControls
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
* Event PUB_REM_WM_OUT.CLICK()
|
||||||
|
* WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT')
|
||||||
|
* WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||||
|
* IF WONo NE '' then
|
||||||
|
*
|
||||||
|
* WORec = XLATE('WO_LOG',WONo,'','X')
|
||||||
|
* WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
||||||
|
* WMOutKeys = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_OUT_KEYS$, True$, 0, False$)
|
||||||
|
* WMOutCnt = COUNT(WMOutKeys,@VM) + (WMOutKeys NE '')
|
||||||
|
*
|
||||||
|
* Display = ''
|
||||||
|
* DispLine = 1
|
||||||
|
*
|
||||||
|
* IF WMOutCnt > 0 THEN
|
||||||
|
*
|
||||||
|
* FOR I = WMOutCnt TO 1 STEP -1
|
||||||
|
* WMORec = XLATE('WM_OUT',WMOutKeys<1,I>,'','X')
|
||||||
|
* WMO_RdsNos = WMORec<WM_OUT_RDS$>
|
||||||
|
* WMO_NCRNos = WMORec<WM_OUT_SLOT_NCR$>
|
||||||
|
* WMO_UMWCassIDs = WMORec<WM_OUT_UMW_CASS_ID$>
|
||||||
|
* CONVERT @VM TO '' IN WMO_RdsNos
|
||||||
|
* CONVERT @VM TO '' IN WMO_NCRNos
|
||||||
|
* CONVERT @VM TO '' IN WMO_UMWCassIDs
|
||||||
|
*
|
||||||
|
* UNTIL WMO_RdsNos NE '' OR WMO_NCRNos NE '' OR WMO_UMWCassIDs NE ''
|
||||||
|
* Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2)
|
||||||
|
* Display<1,DispLine,2> = OCONV(obj_WM_Out('CurrStatus',WOMatKeys<1,I>:@RM:WMORec),'[WO_MAT_CURR_STATUS_CONV]')
|
||||||
|
* Display<1,DispLine,3> = WMOutKeys<1,I>
|
||||||
|
* DispLine += 1
|
||||||
|
* NEXT I
|
||||||
|
*
|
||||||
|
* IF Display NE '' THEN
|
||||||
|
* TypeOver = ''
|
||||||
|
* TypeOver<PDISPLAY$> = Display
|
||||||
|
* TypeOver<PTITLE$> = 'Unused WM_OUT Cassettes'
|
||||||
|
* WMOData = Popup(@WINDOW,TypeOver,'UNUSED_WM_OUT')
|
||||||
|
* IF WMOData = '' OR WMOData = CHAR(27) THEN RETURN ;* Cancelled out
|
||||||
|
* END ELSE
|
||||||
|
* ErrMsg('All cassettes on this Work Order have started processing.')
|
||||||
|
* RETURN
|
||||||
|
* END
|
||||||
|
*
|
||||||
|
* DelWMOutKeys = ''
|
||||||
|
* FOR I = 1 TO COUNT(WMOData,@FM) + (WMOData NE '')
|
||||||
|
* DelWMOutKeys<1,I> = WMOData<I,3>
|
||||||
|
* NEXT I
|
||||||
|
*
|
||||||
|
* TestWMOutKeys = DelWMOutKeys
|
||||||
|
*
|
||||||
|
* IF TestWMOutKeys NE '' THEN
|
||||||
|
* for each WMOutKey in TestWMOutKeys using @VM
|
||||||
|
* Work_Order_Services('SignVoidWMO', WMOutKey, @USER4)
|
||||||
|
* Next WMOutKey
|
||||||
|
* If Error_Services('HasError') then
|
||||||
|
* Msg(@Window, Error_Services('GetMessage'))
|
||||||
|
* end
|
||||||
|
* END
|
||||||
|
* END
|
||||||
|
*
|
||||||
|
* IF Display = '' THEN
|
||||||
|
* ErrMsg('All cassettes on this Work Order have had wafers placed in them.')
|
||||||
|
* RETURN
|
||||||
|
* END
|
||||||
|
*
|
||||||
|
* IF Get_Status(errCode) THEN
|
||||||
|
* ErrMsg(errCode)
|
||||||
|
* END
|
||||||
|
*
|
||||||
|
* GoSub PopulateControls
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* end event
|
||||||
|
|
||||||
|
|
||||||
Event PUB_RECALL.CLICK()
|
Event PUB_RECALL.CLICK()
|
||||||
|
|
||||||
@ -2138,7 +2170,3 @@ StartStopDate:
|
|||||||
END
|
END
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ Declare subroutine Print_Wmi_Labels, Print_Wmo_Labels, ErrMsg, Print_Cass_Label
|
|||||||
Declare subroutine obj_WO_Mat_Log, WO_Mat_Services, Work_Order_Services
|
Declare subroutine obj_WO_Mat_Log, WO_Mat_Services, Work_Order_Services
|
||||||
Declare function SRP_Array, Work_Order_Services, Memory_Services, Database_Services, SRP_Sort_Array, SRP_JSON
|
Declare function SRP_Array, Work_Order_Services, Memory_Services, Database_Services, SRP_Sort_Array, SRP_JSON
|
||||||
Declare function Company_Services, obj_Prod_Spec, Schedule_Services, Datetime, obj_WO_Log, obj_WO_Step, Memberof
|
Declare function Company_Services, obj_Prod_Spec, Schedule_Services, Datetime, obj_WO_Log, obj_WO_Step, Memberof
|
||||||
Declare function Environment_Services, Logging_Services, Hold_Services
|
Declare function Environment_Services, Logging_Services, Hold_Services, Signature_Services
|
||||||
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_LOG'
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_LOG'
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
@ -1442,6 +1442,108 @@ Service SignVoidWMO(WMOutKey, Username)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
Service GetEligiblePeelOffLotsByWOAndEntityType(WONo, EntityType)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
EligibleCassIds = ''
|
||||||
|
|
||||||
|
If RowExists('WO_LOG', WONo) then
|
||||||
|
Begin Case
|
||||||
|
Case EntityType EQ 'RDS'
|
||||||
|
CassIds = Database_Services('ReadDataColumn', 'WO_LOG', WONo, WO_LOG_WO_MAT_KEY$, True$, 0, False$)
|
||||||
|
for each CassId in CassIds using @VM
|
||||||
|
RDSNo = XLATE('WO_MAT', CassId, WO_MAT_RDS_NO$, 'X')
|
||||||
|
Signatures = Signature_Services('GetSigProfile', CassId, 0, RDSNo)
|
||||||
|
Eligible = True$
|
||||||
|
for each Signature in Signatures<1> using @VM setting SigPos
|
||||||
|
SignatureDtm = Signatures<3, SigPos>
|
||||||
|
If SignatureDtm NE '' then
|
||||||
|
Eligible = False$
|
||||||
|
end
|
||||||
|
Until Eligible EQ False$
|
||||||
|
Next Signature
|
||||||
|
If Eligible then EligibleCassIds<1, -1> = CassId
|
||||||
|
Next CassId
|
||||||
|
Case EntityType EQ 'WM_OUT'
|
||||||
|
//WM_OUTS can be voided when
|
||||||
|
//1. There are no RDS Nos associated
|
||||||
|
//2. There have never been any wafers in them
|
||||||
|
WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||||
|
CassIds = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_OUT_KEYS$, True$, 0, False$)
|
||||||
|
for each CassId in CassIds using @VM
|
||||||
|
WMORec = Database_Services('ReadDataRow', 'WM_OUT', CassId, True$, 0, False);//XLATE('WM_OUT',WMOutKeys<1,I>,'','X')
|
||||||
|
WMO_RdsNos = WMORec<WM_OUT_RDS$>
|
||||||
|
WMO_NCRNos = WMORec<WM_OUT_SLOT_NCR$>
|
||||||
|
WMO_UMWCassIDs = WMORec<WM_OUT_UMW_CASS_ID$>
|
||||||
|
Eligible = True$
|
||||||
|
//Loop through RDS list to see if there is an RDS attached. If there are any RDS No's attached it is not eligible.
|
||||||
|
for each RDSNo in WMO_RDSNos using @VM
|
||||||
|
If RDSNo NE '' then
|
||||||
|
Eligible = False$
|
||||||
|
end
|
||||||
|
Until Eligible EQ False$
|
||||||
|
Next RDSNo
|
||||||
|
//Loop through NCR list to see if there are any NCR's associated. If there are any NCR No's attached it is not eligible.
|
||||||
|
If Eligible then
|
||||||
|
For Each NCRNo in WMO_NCRNos using @VM
|
||||||
|
If NCRNo NE '' then
|
||||||
|
Eligible = False$
|
||||||
|
end
|
||||||
|
Until Eligible EQ False$
|
||||||
|
Next NCR
|
||||||
|
end
|
||||||
|
//Loop through MU Wafer Usage list to see if there are any MU wafer's taken from this lot. If there are any Makeup Wafers attached it is not eligible.
|
||||||
|
If Eligible then
|
||||||
|
For Each UMWCass in WMO_UMWCassIDs using @VM
|
||||||
|
If UMWCass NE '' then
|
||||||
|
Eligible = False$
|
||||||
|
end
|
||||||
|
Until Eligible EQ False$
|
||||||
|
Next UMWCass
|
||||||
|
end
|
||||||
|
If Eligible then EligibleCassIds<1, -1> = CassId
|
||||||
|
Next CassId
|
||||||
|
Case EntityType EQ 'WM_IN'
|
||||||
|
WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||||
|
CassIds = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_IN_KEYS$, True$, 0, False$)
|
||||||
|
for each CassId in CassIds using @VM
|
||||||
|
Eligible = True$
|
||||||
|
WMIRec = Database_Services('ReadDataRow', 'WM_IN', CassId, True$, 0, False);//XLATE('WM_OUT',WMOutKeys<1,I>,'','X')
|
||||||
|
WMI_RdsNos = WMIRec<WM_IN_RDS_NO$>
|
||||||
|
WMI_NCRNos = WMIRec<WM_IN_NCR_NO$>
|
||||||
|
Eligible = True$
|
||||||
|
//Loop through RDS list to see if there is an RDS attached. If there are any RDS No's attached it is not eligible.
|
||||||
|
for each RDSNo in WMI_RDSNos using @VM
|
||||||
|
If RDSNo NE '' then
|
||||||
|
Eligible = False$
|
||||||
|
end
|
||||||
|
Until Eligible EQ False$
|
||||||
|
Next RDSNo
|
||||||
|
//Loop through NCR list to see if there are any NCR's associated. If there are any NCR No's attached it is not eligible.
|
||||||
|
If Eligible then
|
||||||
|
For Each NCRNo in WMI_NCRNos using @VM
|
||||||
|
If NCRNo NE '' then
|
||||||
|
Eligible = False$
|
||||||
|
end
|
||||||
|
Until Eligible EQ False$
|
||||||
|
Next NCR
|
||||||
|
end
|
||||||
|
If Eligible then EligibleCassIds<1, -1> = CassId
|
||||||
|
Next CassId
|
||||||
|
Case EntityType EQ ''
|
||||||
|
ErrorMessage = 'Entity type parameter was invalid.'
|
||||||
|
Case Otherwise$
|
||||||
|
ErrorMessage = 'Entity type parameter was null.'
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'WO# ' : WONo : ' not found in WO_LOG table.'
|
||||||
|
end
|
||||||
|
If ErrorMessage NE '' then
|
||||||
|
Error_Services('Add', 'Error in ' : Service : '. ' : ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = EligibleCassIds
|
||||||
|
end service
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
@ -1455,3 +1557,4 @@ ClearCursors:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user