Merged PR 20879: Initial commit.
Initial commit.
This commit is contained in:
parent
804b590773
commit
b53e805929
@ -72,6 +72,7 @@ $insert WM_OUT_EQUATES
|
||||
$insert WO_LOG_EQUATES
|
||||
$insert ROTR_EQUATES
|
||||
$insert WO_MAT_EQUATES
|
||||
$Insert IFX_EQUATES
|
||||
|
||||
Equ Comma$ to ','
|
||||
|
||||
@ -802,12 +803,12 @@ WRITE_RECORD:
|
||||
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
||||
Stage = Record<CLEAN_INSP_STAGE$>
|
||||
If Stage EQ 'LWI' then
|
||||
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'UpdatePostCISampleQty':@VM:Name)
|
||||
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'UpdatePostCISampleQty':SD$:Name)
|
||||
end
|
||||
If NonEpiPro then
|
||||
WOMatKey = {WO_MAT_KEY}
|
||||
Service_Services('PostProcedure', 'QA_SERVICES', 'UpdateFailedWafers':@VM:WOMatKey)
|
||||
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'PushSigProfileToWoMat':@VM:Name)
|
||||
Service_Services('PostProcedure', 'QA_SERVICES', 'UpdateFailedWafers':SD$:WOMatKey)
|
||||
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'PushSigProfileToWoMat':SD$:Name)
|
||||
end
|
||||
|
||||
return
|
||||
@ -865,3 +866,4 @@ Restore_System_Variables:
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
@ -74,6 +74,7 @@ $Insert ORDER_DET_EQU
|
||||
$Insert RLIST_EQUATES
|
||||
$Insert WO_STEP_EQUATES
|
||||
$Insert RDS_EQUATES
|
||||
$Insert IFX_EQUATES
|
||||
|
||||
EQU COL$QUOTE_DESC TO 1
|
||||
EQU COL$SETUP_CHG TO 4
|
||||
@ -119,6 +120,7 @@ EQU COMMA$ to ','
|
||||
Declare subroutine Errmsg, Btree.Extract, Set_Status, Logging_Services, Work_Order_Services, Start_Window, obj_WO_Log
|
||||
Declare subroutine obj_Notes, Comm_Customer_Epi, Print_WO, obj_WO_Mat, obj_WM_In, obj_WO_Mat, obj_RDS, Msg
|
||||
Declare subroutine Security_Err_Msg, obj_WM_Out, Database_Services, End_Window, Print_Shelf_Label, Signature_Services
|
||||
Declare Subroutine Service_Services
|
||||
Declare function obj_WO_Log, Work_Order_Services, Environment_Services, Logging_Services, Memberof, NextKey
|
||||
Declare function Database_Services, Unassigned, obj_WO_Mat, obj_RDS, Security_Check, obj_WM_Out, Error_Services
|
||||
|
||||
@ -1237,32 +1239,41 @@ Event PUB_REM_CASS.CLICK()
|
||||
If WOReactType EQ 'EPP' then
|
||||
CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_WM_IN')
|
||||
If CassettesToVoid NE '' then
|
||||
WmInKeys = ''
|
||||
for each CassetteToVoid in CassettesToVoid using @FM
|
||||
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
|
||||
WmInKeys<1, -1> = CassetteToVoid<1,4>
|
||||
//Work_Order_Services('SignVoidWMI', WMIToVoid, @USER4)
|
||||
Next CassetteToVoid
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'SignVoidWMI':SD$:WmInKeys:SD$:WoNo:SD$:@USER4, True$)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'No cassettes were selected.'
|
||||
end
|
||||
|
||||
end else
|
||||
CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_RDS')
|
||||
WoMatKeyList = ''
|
||||
for each CassetteToVoid in CassettesToVoid using @FM
|
||||
|
||||
RDSToVoid = CassetteToVoid<1,4>
|
||||
WONo = XLATE('RDS', RDSToVoid, RDS_WO$, 'X')
|
||||
CassNo = XLATE('RDS', RDSToVoid, RDS_CASS_NO$, 'X')
|
||||
WOMatKey = WONo : '*' : CassNo
|
||||
Work_Order_Services('SignVoidNonEPP', WOMatKey, @USER4)
|
||||
WoMatKeyList<1, -1> = WoMatKey
|
||||
//Work_Order_Services('SignVoidNonEPP', WOMatKey, @USER4)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
Until ErrorMessage NE ''
|
||||
end
|
||||
Next CassetteToVoid
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'SignVoidNonEPP':SD$:WoMatKeyList:SD$:WoNo:SD$:@USER4, True$)
|
||||
if Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'No eligible lots from this work order found to void.'
|
||||
@ -1296,6 +1307,7 @@ Event PUB_REM_CASS.CLICK()
|
||||
Msg('Error in voiding lots process : ' : ErrorMessage)
|
||||
end
|
||||
GoSub PopulateControls
|
||||
|
||||
end event
|
||||
|
||||
Event PUB_REM_WM_OUT.CLICK()
|
||||
@ -1323,15 +1335,6 @@ Event PUB_REM_WM_OUT.CLICK()
|
||||
CassId = Cass
|
||||
UnConvCurrStatus = XLATE('WM_OUT',CassId,'CURR_STATUS','X')
|
||||
CassCurrStatus = OCONV(UnConvCurrStatus,'[WM_OUT_CURR_STATUS_CONV]')
|
||||
|
||||
* Display<1,DispLine,1> = CassNo
|
||||
* Display<1,DispLine,2> = WOMatRec<WO_MAT_LOT_NO$>
|
||||
* Display<1,DispLine,3> = WOMatRec<WO_MAT_WAFER_QTY$>
|
||||
* 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<1,DispLine,1> = CassNo
|
||||
Display<1,DispLine,2> = CassCurrStatus
|
||||
@ -1343,14 +1346,15 @@ Event PUB_REM_WM_OUT.CLICK()
|
||||
TypeOver<PDISPLAY$> = Display
|
||||
CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_WM_OUT')
|
||||
If CassettesToVoid NE '' then
|
||||
WmOutKeys = ''
|
||||
for each CassetteToVoid in CassettesToVoid using @FM
|
||||
WMOToVoid = CassetteToVoid<1,3>
|
||||
Work_Order_Services('SignVoidWMO', WMOToVoid, @USER4)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
WmOutKeys<1, -1> = CassetteToVoid<1,3>
|
||||
Until ErrorMessage NE ''
|
||||
Next CassetteToVoid
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'SignVoidWMO':SD$:WmInKeys:SD$:WoNo:SD$:@USER4, True$)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'No lots were selected to void.'
|
||||
end
|
||||
@ -2170,3 +2174,4 @@ StartStopDate:
|
||||
END
|
||||
|
||||
return
|
||||
|
||||
|
@ -59,13 +59,14 @@ $Insert PRS_STAGE_EQUATES
|
||||
$Insert WO_MAT_EQUATES
|
||||
$Insert WO_MAT_QA_EQUATES
|
||||
$Insert LOT_EVENT_EQUATES
|
||||
$Insert IFX_EQUATES
|
||||
|
||||
Equ COMMA$ to ','
|
||||
|
||||
Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services
|
||||
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services
|
||||
Declare function Rds_Services, SRP_DateTime, SRP_Math, obj_WO_Mat, Lot_Services, SRP_Array
|
||||
Declare function Lot_Event_Services, GetTickCount
|
||||
Declare function Lot_Event_Services, GetTickCount, Work_Order_Services
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Service_Services, Mona_Services
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS'
|
||||
@ -868,7 +869,12 @@ WRITE_RECORD:
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'WriteRecord'
|
||||
|
||||
Service_Services('PostProcedure', 'RDS_SERVICES', 'PushSigProfileToWoMat':@VM:Name)
|
||||
LotVoided = Lot_Services('GetLotIdByLegacyLotIdAndType', {SEQ}, 'RDS')
|
||||
IsLotVoided = Work_Order_Services('IsLotVoided', LotId)
|
||||
|
||||
If Not(IsLotVoided) then
|
||||
Service_Services('PostProcedure', 'RDS_SERVICES', 'PushSigProfileToWoMat':SD$:Name)
|
||||
end
|
||||
|
||||
WONo = Record<RDS_WO$>
|
||||
OrigDateOut = OrigRecord<RDS_DATE_OUT$>
|
||||
@ -883,18 +889,18 @@ WRITE_RECORD:
|
||||
WMIKeys = {WM_IN_KEY}
|
||||
For each WMIKey in WMIKeys using @VM setting vPos
|
||||
CassNo = Field(WMIKey, '*', 3)
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut)
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':SD$:WONo:SD$:CassNo:SD$:DatetimeOut)
|
||||
Next WMIKey
|
||||
end else
|
||||
CassNo = Record<RDS_CASS_NO$>
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:DatetimeOut)
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':SD$:WONo:SD$:CassNo:SD$:DatetimeOut)
|
||||
end
|
||||
end
|
||||
|
||||
OrigPocketChar = OrigRecord<RDS_POCKET_CHAR$>
|
||||
NewPocketChar = Record<RDS_POCKET_CHAR$>
|
||||
If (OrigPocketChar NE NewPocketChar) then
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'UpdateScrappedQty':@VM:WONo)
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'UpdateScrappedQty':SD$:WONo)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
@ -980,3 +986,4 @@ Restore_System_Variables:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -34,6 +34,7 @@ $Insert RLIST_EQUATES
|
||||
$Insert SQL_REQUESTS_EQUATES
|
||||
$Insert PROC_QUEUE_EQUATES
|
||||
$Insert PROC_QUEUE_FAILED_EQUATES
|
||||
$Insert IFX_EQUATES
|
||||
|
||||
Equ Comma$ to ','
|
||||
|
||||
@ -210,7 +211,7 @@ end service
|
||||
|
||||
|
||||
Service ProcessRequest(RequestKeyID)
|
||||
|
||||
|
||||
If RequestKeyID NE '' then
|
||||
Server = Environment_Services('GetServer')
|
||||
InvalidRequest = False$
|
||||
@ -227,10 +228,11 @@ Service ProcessRequest(RequestKeyID)
|
||||
SysprogKey = '$':Procedure
|
||||
If RowExists('SYSOBJ', LSL2Key) or RowExists('SYSOBJ', FrameworksKey) or RowExists('SYSOBJ', SysprogKey) then
|
||||
Dim ProcParams(11)
|
||||
For each Param in Params using @VM setting pPos
|
||||
swap SD$ with @FM in Params
|
||||
For each Param in Params using @FM setting pPos
|
||||
ProcParams(pPos) = Param
|
||||
Next Param
|
||||
NumArguments = DCount(Params, @VM)
|
||||
NumArguments = DCount(Params, @FM)
|
||||
Begin Case
|
||||
Case NumArguments EQ 0 ; Call @Procedure()
|
||||
Case NumArguments EQ 1 ; Call @Procedure(ProcParams(1))
|
||||
@ -451,3 +453,4 @@ end service
|
||||
/// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
@ -54,6 +54,7 @@ $insert ACTION_SETUP
|
||||
$insert WM_IN_EQUATES
|
||||
$insert RLIST_EQUATES
|
||||
$insert SCHED_DET_NG_EQUATES
|
||||
$insert IFX_EQUATES
|
||||
|
||||
Equ Comma$ to ','
|
||||
|
||||
@ -164,7 +165,7 @@ WRITE_RECORD:
|
||||
CassNo = Field(Name, '*', 3)
|
||||
ProcessedDTM = Datetime()
|
||||
// This service will determine if the cassette needs to be marked as complete.
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:ProcessedDtm)
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':SD$:WONo:SD$:CassNo:SD$:ProcessedDtm)
|
||||
|
||||
WfrCount = DCount(Record<WM_IN_SLOT_NO$>, @VM)
|
||||
If WfrCount LT 25 then
|
||||
@ -247,3 +248,4 @@ Restore_System_Variables:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -46,15 +46,16 @@ $insert COMPANY_EQUATES
|
||||
$Insert NOTIFICATION_EQUATES
|
||||
$Insert WM_IN_EQUATES
|
||||
$Insert WM_OUT_EQUATES
|
||||
$Insert VOIDED_LOT_EQUATES
|
||||
|
||||
Declare subroutine Error_Services, Work_Order_Services, Memory_Services, RList, Database_Services, SRP_JSON
|
||||
Declare subroutine Btree.Extract, Set_Status, obj_WO_Log, obj_Notes, Print_Wo_Mat_In_Labels, Print_Wo_Mat_Out_Labels
|
||||
Declare subroutine Print_Wmi_Labels, Print_Wmo_Labels, ErrMsg, Print_Cass_Labels, Logging_Services, Service_Services
|
||||
Declare subroutine obj_WO_Mat_Log, WO_Mat_Services, Work_Order_Services, Transaction_Services, Extract_Si_Keys
|
||||
Declare subroutine Mona_Services
|
||||
Declare subroutine Mona_Services, Lot_Event_Services, RDS_Services, Lot_Services, WM_In_Services, WM_Out_Services
|
||||
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 Environment_Services, Logging_Services, Hold_Services, Signature_Services
|
||||
Declare function Environment_Services, Logging_Services, Hold_Services, Signature_Services, Lot_Services, RTI_CreateGUID
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_LOG'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
@ -1296,78 +1297,222 @@ Service RemoveWoMatCassetteFromWO(WoMatKey, Username)
|
||||
|
||||
end service
|
||||
|
||||
Service CreateVoidedLotRecord(LotId, LegacyLotId, LegacyLotType, WoMatKey, UserId)
|
||||
//Todo: Move to Lot_Services
|
||||
ErrorMessage = ''
|
||||
|
||||
Service SignVoidNonEpp(WOMatKey, Username)
|
||||
If LotId NE '' OR LegacyLotId NE '' then
|
||||
If LotId EQ '' then
|
||||
//Determine NG Lot id if none was passed to routine.
|
||||
if LegacyLotType NE '' then
|
||||
if LegacyLotType EQ 'RDS' OR LegacyLotType EQ 'WM_IN' OR LegacyLotType EQ 'WM_OUT' then
|
||||
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', LegacyLotId, LegacyLotType)
|
||||
If Error_Services('NoError') then
|
||||
If LotID EQ '' then
|
||||
//No Lot ID was found, lets create one.
|
||||
LotId = Lot_Services('CreateNewLot', 'RDS', '', '', '', '', '', UserId, '', LegacyLotId)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Invalid Legacy Lot Type passed to routine.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'A Legacy lot ID was passed to the routine, but the legacy lot type was null.'
|
||||
end
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
If RowExists('LOT', LotId) then
|
||||
NewVoidedLotId = RTI_CreateGUID()
|
||||
NewVoidedLotRec = ''
|
||||
NewVoidedLotRec<VOIDED_LOT_WORK_ORDER_LOG_ID$> = Field(WoMatKey, '*', 1)
|
||||
NewVoidedLotRec<VOIDED_LOT_VOID_BY$> = UserId
|
||||
NewVoidedLotRec<VOIDED_LOT_VOID_DTM$> = Datetime()
|
||||
NewVoidedLotRec<VOIDED_LOT_ENTITY_TYPE$> = LegacyLotType
|
||||
NewVoidedLotRec<VOIDED_LOT_LOT_ID$> = LotId
|
||||
NewVoidedLotRec<VOIDED_LOT_LEGACY_LOT_ID$> = LegacyLotId
|
||||
NewVoidedLotRec<VOIDED_LOT_WO_MAT_KEY$> = WoMatKey
|
||||
Database_Services('WriteDataRow', 'VOIDED_LOT', NewVoidedLotId, NewVoidedLotRec)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to find lot record.'
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Both the lot id and the legacy lot id were null.'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service IsLotVoided(LotId)
|
||||
|
||||
//Todo: Move to Lot_Services
|
||||
ErrorMessage = ''
|
||||
VoidLotRecords = ''
|
||||
Open 'DICT.VOIDED_LOT' to hVoidTable then
|
||||
|
||||
SearchString = 'LOT_ID':@VM:LotId:@FM
|
||||
Btree.Extract(SearchString, 'VOIDED_LOTS', hVoidTable, VoidLotRecord)
|
||||
end else
|
||||
ErrorMessage = 'Unable to open VOIDED_LOT table.'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
Response = VoidLotRecords
|
||||
|
||||
end service
|
||||
|
||||
Service SignVoidNonEpp(WOMatKeys, WONo, Username)
|
||||
|
||||
ErrorMessage = ''
|
||||
WONo = Field(WOMatKey, '*', 1)
|
||||
CassNo = Field(WoMatKey, '*', 2)
|
||||
ReactType = XLATE('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X')
|
||||
If ReactType EQ 'ASM' OR ReactType EQ 'ASM+' OR ReactType EQ 'HTR' then
|
||||
RDSNo = Database_Services('ReadDataColumn', 'WO_MAT', WoMatKey, WO_MAT_RDS_NO$, True$, 0, False$)
|
||||
If Error_Services('NoError') then
|
||||
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey, True$, 0, False$)
|
||||
IsVoided = WoMatRec<WO_MAT_VOID$>
|
||||
If Not(IsVoided) then
|
||||
IsOnHold = Hold_Services('CheckForHold', WoMatKey)
|
||||
If Not(IsOnHold) then
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'RemoveWoMatCassetteFromWO':@vm:WOMatKey:@vm:Username)
|
||||
If Error_Services('NoError') then
|
||||
Service_Services('PostProcedure', 'WO_MAT_SERVICES', 'SetWoMatVoidFlag':@vm:WOMatKey:@VM:Username)
|
||||
if Error_Services('NoError') then
|
||||
Service_Services('PostProcedure', 'RDS_SERVICES', 'DetachRDSFromWO':@vm:RDSNo)
|
||||
If Error_Services('NoError') then
|
||||
LotEventParams = ''
|
||||
LotEventParams<1,1> = 'CreateLotEvent' ; //Service Module
|
||||
LotEventParams<1,2> = ''; //Legacy Lot Id, set below
|
||||
LotEventParams<1,3> = DateTime(); //Datetime
|
||||
LotEventParams<1,4> = 'VOID'; //Event Type
|
||||
LotEventParams<1,5> = 'Lot voided by ' : Username; //Event Note
|
||||
LotEventParams<1,6> = ''; //Equipment id
|
||||
LotEventParams<1,7> = Username ;//User Id
|
||||
LotEventParams<1,8> = True$; //IsLegacyLotId
|
||||
LotEventParams<1,9> = ''; //Legacy Lot Type, set below
|
||||
If RDSNo NE '' then
|
||||
LotEventParams<1,2> = RDSNo
|
||||
LotEventParams<1,9> = 'RDS'; //Legacy Lot Type
|
||||
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
|
||||
|
||||
WOLogRecord = Database_Services('ReadDataRow', 'WO_LOG', WONo, True$, 0, False$)
|
||||
if Error_Services('NoError') then
|
||||
for each WoMatKey in WOMatKeys using @VM
|
||||
if WoMatKey NE '' then
|
||||
CassNo = Field(WoMatKey, '*', 2)
|
||||
ReactType = XLATE('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X')
|
||||
If ReactType EQ 'ASM' OR ReactType EQ 'ASM+' OR ReactType EQ 'HTR' then
|
||||
RDSNo = Database_Services('ReadDataColumn', 'WO_MAT', WoMatKey, WO_MAT_RDS_NO$, True$, 0, False$)
|
||||
If Error_Services('NoError') then
|
||||
If WoLogRecord<WO_LOG_WO_MAT_KEY$> NE '' then
|
||||
Locate WoMatKey in WoLogRecord<WO_LOG_WO_MAT_KEY$> using @VM setting CassPos then
|
||||
WoLogRecord<WO_LOG_WO_MAT_KEY$> = Delete(WOLogRecord<WO_LOG_WO_MAT_KEY$>, 1, CassPos, 0)
|
||||
WO_Mat_Services('SetWoMatVoidFlag', WOMatKey, Username)
|
||||
if Error_Services('NoError') then
|
||||
RDS_Services('DetachRDSFromWO', RDSNo)
|
||||
If Error_Services('NoError') then
|
||||
//Create a voided LOT record then record an event.
|
||||
Work_Order_Services('CreateVoidedLotRecord', '', RDSNo, 'RDS', WoMatKey, Username)
|
||||
Lot_Event_Services('CreateLotEvent', RDSNo, DateTime, 'VOID', 'Lot voided by ' : Username, '', Username, True$, 'RDS')
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
LotEventParams<1,2> = WoMatKey
|
||||
LotEventParams<1,9> = 'WO_MAT'
|
||||
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
If Error_Services('NoError') then
|
||||
//Add inventory transaction
|
||||
|
||||
end else
|
||||
ErrorMessage = 'WO_MAT key not found in WO_LOG record.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'No WO_MAT keys exist in WO_LOG record.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Cannot use this routine to void EpiPro lots.'
|
||||
end
|
||||
end
|
||||
Next WoMatKey
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
//Commit work order changes all at once here.
|
||||
Database_Services('WriteDataRow', 'WO_LOG', WONo, WoLogRecord)
|
||||
if Error_Services('NoError') then
|
||||
Work_Order_Services('UpdateReceivedQty', WONo)
|
||||
Work_Order_Services('UpdateReleasedQty', WONo)
|
||||
Work_Order_Services('UpdateUnscheduledQuantities')
|
||||
end else
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service SignVoidWMI(WMInKeys, WONo, Username)
|
||||
|
||||
ErrorMessage = ''
|
||||
|
||||
WOLogRecord = Database_Services('ReadDataRow', 'WO_LOG', WONo, True$, 0, False$)
|
||||
if Error_Services('NoError') then
|
||||
for each WmInKey in WMInKeys using @VM
|
||||
if WmInKey NE '' then
|
||||
WONo = Field(WMInKey, '*', 1)
|
||||
CassNo = Field(WMInKey, '*', 3)
|
||||
WoStepKey = Xlate('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||
WoMatKey = WONo : '*' : CassNo
|
||||
ReactType = WOLogRecord<WO_LOG_REACT_TYPE$>
|
||||
If ReactType EQ 'EPP' then
|
||||
WMInRec = Database_Services('ReadDataRow', 'WM_IN', WMInKey, True$, 0, False$)
|
||||
IsVoided = WMInRec<WM_IN_VOID$>
|
||||
If Not(IsVoided) then
|
||||
IsOnHold = Hold_Services('CheckForHold', WoMatKey)
|
||||
If Not(IsOnHold) then
|
||||
WM_In_Services('SetVoidFlag', WmInKey, Username)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Event_Services('CreateLotEvent', WmInKey, DateTime(), 'VOID', 'Lot voided by ' : Username, '', Username, True$, 'WM_IN')
|
||||
Work_Order_Services('CreateVoidedLotRecord', '', WmInKey, 'WM_IN', WoMatKey, Username)
|
||||
if Error_Services('NoError') then
|
||||
//Check if WMO is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
|
||||
WMOKey = WMInKey; //the paired WMO key is the same as the WMIKey
|
||||
IsWMOVoided = Database_Services('ReadDataColumn', 'WM_OUT', WMOKey, WM_OUT_VOID$)
|
||||
If IsWMOVoided then
|
||||
Locate WoMatKey in WoLogRecord<WO_LOG_WO_MAT_KEY$> using @VM setting CassPos then
|
||||
WoLogRecord<WO_LOG_WO_MAT_KEY$> = Delete(WOLogRecord<WO_LOG_WO_MAT_KEY$>, 1, CassPos, 0)
|
||||
WO_Mat_Services('SetWoMatVoidFlag', WoMatKey, Username)
|
||||
end else
|
||||
ErrorMessage = 'Unable to locate WO_MAT key in WO_LOG record.'
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to void lot as it is already voided.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to void lot as it is already voided.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Cannot use this routine to void non EpiPro lots.'
|
||||
end
|
||||
end
|
||||
Next WoMatKey
|
||||
end else
|
||||
ErrorMessage = 'Cannot use this routine to void EpiPro lots.'
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
//Commit work order changes all at once here.
|
||||
Database_Services('WriteDataRow', 'WO_LOG', WONo, WoLogRecord)
|
||||
if Error_Services('NoError') then
|
||||
Work_Order_Services('UpdateReceivedQty', WONo)
|
||||
Work_Order_Services('UpdateReleasedQty', WONo)
|
||||
Work_Order_Services('UpdateUnscheduledQuantities')
|
||||
end else
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = Username
|
||||
LogData<3> = WOMatKey
|
||||
LogData<3> = WoNo
|
||||
LogData<4> = ErrorMessage
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
@ -1375,84 +1520,7 @@ Service SignVoidNonEpp(WOMatKey, Username)
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = Username
|
||||
LogData<3> = WOMatKey
|
||||
LogData<4> = 'Void queued successfully.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service SignVoidWMI(WMInKey, Username)
|
||||
|
||||
ErrorMessage = ''
|
||||
WONo = Field(WMInKey, '*', 1)
|
||||
CassNo = Field(WMInKey, '*', 3)
|
||||
WoStepKey = Xlate('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||
WoMatKey = WONo : '*' : CassNo
|
||||
ReactType = XLATE('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X')
|
||||
If ReactType EQ 'EPP' then
|
||||
WMInRec = Database_Services('ReadDataRow', 'WM_IN', WMInKey, True$, 0, False$)
|
||||
IsVoided = WMInRec<WM_IN_VOID$>
|
||||
If Not(IsVoided) then
|
||||
IsOnHold = Hold_Services('CheckForHold', WoMatKey)
|
||||
If Not(IsOnHold) then
|
||||
Service_Services('PostProcedure', 'WM_IN_SERVICES', 'SetVoidFlag':@vm:WMInKey:@VM:Username)
|
||||
If Error_Services('NoError') then
|
||||
LotEventParams = ''
|
||||
LotEventParams<1,1> = 'CreateLotEvent'
|
||||
LotEventParams<1,2> = WMInKey
|
||||
LotEventParams<1,3> = DateTime()
|
||||
LotEventParams<1,4> = 'VOID'
|
||||
LotEventParams<1,5> = 'Lot voided by ' : Username
|
||||
LotEventParams<1,6> = ''
|
||||
LotEventParams<1,7> = Username
|
||||
LotEventParams<1,8> = True$
|
||||
LotEventParams<1,9> = 'WM_IN'
|
||||
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
|
||||
If Error_Services('NoError') then
|
||||
//Check if WMO is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
|
||||
WMOKey = WMInKey; //the paired WMO key is the same as the WMIKey
|
||||
IsWMOVoided = Database_Services('ReadDataColumn', 'WM_OUT', WMOKey, WM_OUT_VOID$)
|
||||
If IsWMOVoided then
|
||||
Service_Services('PostProcedure', 'WO_MAT_SERVICES', 'SetWoMatVoidFlag':@VM:WoMatKey:@VM:Username)
|
||||
If Error_Services('NoError') then
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES','RemoveWoMatCassetteFromWO':@VM:WoMatKey:@VM:Username)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to void lot as it is already voided.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Cannot use this routine to void EpiPro lots.'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = Username
|
||||
LogData<3> = WMInKey
|
||||
LogData<4> = ErrorMessage
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end else
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = Username
|
||||
LogData<3> = WMInKey
|
||||
LogData<3> = WoNo
|
||||
LogData<4> = 'Void queued successfully.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
@ -1461,67 +1529,89 @@ Service SignVoidWMI(WMInKey, Username)
|
||||
end service
|
||||
|
||||
|
||||
Service SignVoidWMO(WMOutKey, Username)
|
||||
|
||||
Service SignVoidWMO(WMOutKeys, WONo, Username)
|
||||
|
||||
ErrorMessage = ''
|
||||
WONo = Field(WMOutKey, '*', 1)
|
||||
CassNo = Field(WMOutKey, '*', 3)
|
||||
WoStepKey = Xlate('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||
WoMatKey = WONo : '*' : CassNo
|
||||
ReactType = XLATE('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X')
|
||||
If ReactType EQ 'EPP' then
|
||||
WMOutRec = Database_Services('ReadDataRow', 'WM_OUT', WMOutKey, True$, 0, False$)
|
||||
IsVoided = WMOutRec<WM_OUT_VOID$>
|
||||
If Not(IsVoided) then
|
||||
IsOnHold = Hold_Services('CheckForHold', WoMatKey)
|
||||
If Not(IsOnHold) then
|
||||
Service_Services('PostProcedure', 'WM_OUT_SERVICES', 'SetVoidFlag':@vm:WMOutKey:@VM:Username)
|
||||
If Error_Services('NoError') then
|
||||
LotEventParams = ''
|
||||
LotEventParams<1,1> = 'CreateLotEvent'
|
||||
LotEventParams<1,2> = WMOutKey
|
||||
LotEventParams<1,3> = DateTime()
|
||||
LotEventParams<1,4> = 'VOID'
|
||||
LotEventParams<1,5> = 'Lot voided by ' : Username
|
||||
LotEventParams<1,6> = ''
|
||||
LotEventParams<1,7> = Username
|
||||
LotEventParams<1,8> = True$
|
||||
LotEventParams<1,9> = 'WM_OUT'
|
||||
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
|
||||
If Error_Services('NoError') then
|
||||
//Check if WMI is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
|
||||
WMIKey = WMOutKey; //the paired WMO key is the same as the WMIKey
|
||||
IsWMIVoided = Database_Services('ReadDataColumn', 'WM_IN', WMIKey, WM_IN_VOID$)
|
||||
If IsWMIVoided then
|
||||
Service_Services('PostProcedure', 'WO_MAT_SERVICES', 'SetWoMatVoidFlag':@VM:WoMatKey:@VM:Username)
|
||||
|
||||
WOLogRecord = Database_Services('ReadDataRow', 'WO_LOG', WONo, True$, 0, False$)
|
||||
if Error_Services('NoError') then
|
||||
for each WmOutKey in WMOutKeys using @VM
|
||||
if WmOutKey NE '' then
|
||||
WONo = Field(WmOutKey, '*', 1)
|
||||
CassNo = Field(WmOutKey, '*', 3)
|
||||
WoStepKey = Xlate('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||
WoMatKey = WONo : '*' : CassNo
|
||||
ReactType = WOLogRecord<WO_LOG_REACT_TYPE$>
|
||||
If ReactType EQ 'EPP' then
|
||||
WMOutRec = Database_Services('ReadDataRow', 'WM_OUT', WmOutKey, True$, 0, False$)
|
||||
IsVoided = WMInRec<WM_OUT_VOID$>
|
||||
If Not(IsVoided) then
|
||||
IsOnHold = Hold_Services('CheckForHold', WoMatKey)
|
||||
If Not(IsOnHold) then
|
||||
WM_Out_Services('SetVoidFlag', WmOutKey, Username)
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If Error_Services('NoError') then
|
||||
Service_Services('PostProcedure', 'WORK_ORDER_SERVICES','RemoveWoMatCassetteFromWO':@VM:WoMatKey:@VM:Username)
|
||||
If Error_Services('HasError') then
|
||||
If Error_Services('NoError') then
|
||||
Lot_Event_Services('CreateLotEvent', WmOutKey, DateTime(), 'VOID', 'Lot voided by ' : Username, '', Username, True$, 'WM_OUT')
|
||||
Work_Order_Services('CreateVoidedLotRecord', '', WmOutKey, 'WM_OUT', WoMatKey, Username)
|
||||
if Error_Services('NoError') then
|
||||
//Check if WMI is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
|
||||
WMIKey = WmOutKey; //the paired WMO key is the same as the WMIKey
|
||||
IsWMIVoided = Database_Services('ReadDataColumn', 'WM_IN', WMOKey, WM_IN_VOID$)
|
||||
If IsWMIVoided then
|
||||
Locate WoMatKey in WoLogRecord<WO_LOG_WO_MAT_KEY$> using @VM setting CassPos then
|
||||
WoLogRecord<WO_LOG_WO_MAT_KEY$> = Delete(WOLogRecord<WO_LOG_WO_MAT_KEY$>, 1, CassPos, 0)
|
||||
WO_Mat_Services('SetWoMatVoidFlag', WoMatKey, Username)
|
||||
end else
|
||||
ErrorMessage = 'Unable to locate WO_MAT key in WO_LOG record.'
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to void lot as it is already voided.'
|
||||
end
|
||||
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to void lot as it is already voided.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Cannot use this routine to void non EpiPro lots.'
|
||||
end
|
||||
end
|
||||
Next WoMatKey
|
||||
end else
|
||||
ErrorMessage = 'Cannot use this routine to void EpiPro lots.'
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
//Commit work order changes all at once here.
|
||||
Database_Services('WriteDataRow', 'WO_LOG', WONo, WoLogRecord)
|
||||
if Error_Services('NoError') then
|
||||
Work_Order_Services('UpdateReceivedQty', WONo)
|
||||
Work_Order_Services('UpdateReleasedQty', WONo)
|
||||
Work_Order_Services('UpdateUnscheduledQuantities')
|
||||
end else
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = Username
|
||||
LogData<3> = WMOutKey
|
||||
LogData<3> = WONo
|
||||
LogData<4> = ErrorMessage
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
@ -1529,8 +1619,8 @@ Service SignVoidWMO(WMOutKey, Username)
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = Username
|
||||
LogData<3> = WMOutKey
|
||||
LogData<4> = 'Void queued successfully.'
|
||||
LogData<3> = ''
|
||||
LogData<4> = 'Void processed successfully.'
|
||||
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
@ -1836,3 +1926,4 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -53,6 +53,7 @@ $insert WO_LOG_EQUATES
|
||||
$insert WO_STEP_EQUATES
|
||||
$insert MAKEUP_WAFERS_EQUATES
|
||||
$insert RLIST_EQUATES
|
||||
$insert IFX_EQUATES
|
||||
|
||||
Equ Comma$ to ','
|
||||
|
||||
@ -865,7 +866,7 @@ WRITE_RECORD:
|
||||
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
|
||||
If CurrWaferCount EQ 0 then
|
||||
// This should catch cases where the entire cassette is "peeled off", NCR'ed, or used for destructive testing.
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':@VM:WONo:@VM:CassNo:@VM:Datetime())
|
||||
Service_Services('PostProcedure', 'SCHEDULE_SERVICES', 'MarkCassProcessed':SD$:WONo:SD$:CassNo:SD$:Datetime())
|
||||
end
|
||||
|
||||
return
|
||||
@ -929,3 +930,4 @@ Restore_System_Variables:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
3
LSL2/STPROCINS/IFX_EQUATES.txt
Normal file
3
LSL2/STPROCINS/IFX_EQUATES.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Compile insert IFX_EQUATES
|
||||
|
||||
EQU SD$ TO '%SERVICECALLDELIM%'
|
@ -1,7 +1,7 @@
|
||||
compile insert VOIDED_LOT_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 26/03/2025
|
||||
Written : 11/07/2025
|
||||
Description : Insert for Table VOIDED_LOT
|
||||
----------------------------------------*/
|
||||
#ifndef __VOIDED_LOT_EQUATES__
|
||||
@ -13,5 +13,6 @@ compile insert VOIDED_LOT_EQUATES
|
||||
equ VOIDED_LOT_ENTITY_TYPE$ to 4
|
||||
equ VOIDED_LOT_LOT_ID$ to 5
|
||||
equ VOIDED_LOT_LEGACY_LOT_ID$ to 6
|
||||
equ VOIDED_LOT_WO_MAT_KEY$ to 7
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user