425 lines
18 KiB
Plaintext
425 lines
18 KiB
Plaintext
Function Retain_Manager_Services(@Service, @Params)
|
|
/***********************************************************************************************************************
|
|
|
|
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
|
permission from SRP Computer Solutions, Inc.
|
|
|
|
Name : Retain_Manager_Services
|
|
|
|
Description : Handler program for all Retain Wafer services.
|
|
|
|
Notes : Application errors should be logged using the Error Services module. There are a few methodological
|
|
assumptions built into way errors are managed which are important to understand in order to properly
|
|
work with Error Services:
|
|
|
|
Parameters :
|
|
Service [in] -- Name of the service being requested
|
|
Param1-10 [in/out] -- Additional request parameter holders
|
|
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
|
|
|
|
Metadata :
|
|
|
|
History : (Date, Initials, Notes)
|
|
04/29/20 cn Original programmer
|
|
|
|
***********************************************************************************************************************/
|
|
#pragma precomp SRP_PreCompiler
|
|
|
|
$Insert APP_INSERTS
|
|
$Insert SERVICE_SETUP
|
|
$Insert SERVICES_EQUATES
|
|
$Insert MSG_EQUATES
|
|
$Insert NCR_EQUATES
|
|
$Insert WO_WFR_EQUATES
|
|
$Insert REACT_RUN_EQUATES
|
|
$Insert RETAINED_WAFERS_EQUATES
|
|
|
|
// APP_INFO RETAINED_WAFER Fields
|
|
Equ RETAIN_WAFER_RUN_ID$ To 1
|
|
Equ RETAIN_WAFER_RECIPE$ To 2
|
|
Equ RETAIN_WAFER_POCKET$ To 3
|
|
Equ RETAIN_WAFER_SCRIBE$ To 4
|
|
Equ RETAIN_WAFER_GRADE$ To 5
|
|
Equ RETAIN_WAFER_PART$ To 6
|
|
Equ RETAIN_WAFER_WO_NO$ To 7
|
|
Equ RETAIN_WAFER_RETAIN_BOX$ To 8
|
|
Equ RETAIN_WAFER_RETAIN_SLOT$ To 9
|
|
Equ RETAIN_WAFER_RETAIN_LOC$ To 10
|
|
Equ RETAIN_WAFER_STATUS$ To 11
|
|
Equ RETAIN_WAFER_COMMENT$ To 12
|
|
Equ RETAIN_WAFER_OPERATOR$ To 13
|
|
Equ RETAIN_WAFER_RETAIN_DATE$ To 14
|
|
Equ RETAIN_WAFER_DESTROY_SIG$ To 15
|
|
Equ RETAIN_WAFER_DESTROY_DATE$ To 16
|
|
Equ RETAIN_WAFER_WAFER_ID$ To 17
|
|
|
|
Declare Function SRP_FastArray, SRP_Array, Database_Services, Retain_Manager_Services, Environment_Services
|
|
Declare Function SRP_Run_Command
|
|
Declare Subroutine SRP_FastArray
|
|
|
|
GoToService else
|
|
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
|
|
end
|
|
|
|
Return Response OR ''
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Service Parameter Options
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
Options BOOLEAN = True$, False$
|
|
Options WAFER_SIZES = '150 mm 6 in,200 mm 8 in'
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Services
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetWaferCount
|
|
//
|
|
// Input:
|
|
// SRPFastArrayHandle. - [Required]
|
|
// Filters. - [Required]
|
|
//
|
|
// Output:
|
|
// Response - Returns count of total wafers for the given dataset.
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service GetWaferCount(SRPFastArrayHandle, Filter)
|
|
If Filter EQ '' then
|
|
WaferCount = SRP_FastArray('Count', SRPFastArrayHandle, @FM)
|
|
end else
|
|
ReduceHandle = SRP_FastArray('Reduce', SRPFastArrayHandle, Filter, 'MatchAll')
|
|
WaferCount = SRP_FastArray('Count', ReduceHandle, @FM)
|
|
end
|
|
|
|
Response = WaferCount
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetWaferData
|
|
//
|
|
// Input:
|
|
// WaferSize - [Required]
|
|
//
|
|
// Output:
|
|
// Response - Returns Wafer List for given wafer size.
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service GetWaferData(WaferSize)
|
|
|
|
Begin Case
|
|
Case WaferSize EQ '150 mm 6 in'
|
|
FullWaferList = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_6IN')
|
|
|
|
Case WaferSize EQ '200 mm 8 in'
|
|
FullWaferList = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_8IN')
|
|
|
|
End Case
|
|
|
|
Response = FullWaferList
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetWaferDataWithFilter
|
|
//
|
|
// Input:
|
|
// WaferSize - [Required]
|
|
// ShowDestroyed - [Optional]
|
|
//
|
|
// Output:
|
|
// Response - Returns Wafer List for given wafer size and filter.
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service GetWaferDataWithFilter(WaferSize, ShowDestroyed)
|
|
|
|
Begin Case
|
|
Case WaferSize EQ '150 mm 6 in' AND ShowDestroyed EQ False$
|
|
WaferList = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_6IN')
|
|
WaferListHandle = SRP_FastArray('Create', WaferList)
|
|
Locationfilters = 'Warehouse' : @FM : 'Cleanroom'
|
|
WaferList = Retain_Manager_Services('UpdateRetainList', WaferListHandle, LocationFilters)
|
|
SRP_FastArray('Release', WaferListHandle)
|
|
|
|
Case WaferSize EQ '200 mm 8 in' AND ShowDestroyed EQ False$
|
|
WaferList = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_8IN')
|
|
WaferListHandle = SRP_FastArray('Create', WaferList)
|
|
Locationfilters = 'Warehouse' : @FM : 'Cleanroom'
|
|
WaferList = Retain_Manager_Services('UpdateRetainList', WaferListHandle, LocationFilters)
|
|
SRP_FastArray('Release', WaferListHandle)
|
|
|
|
Case WaferSize EQ '150 mm 6 in' AND ShowDestroyed EQ True$
|
|
WaferList = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_6IN')
|
|
WaferList = SRP_Array('Rotate', WaferList, @FM, @VM)
|
|
|
|
Case WaferSize EQ '200 mm 8 in' AND ShowDestroyed EQ True$
|
|
WaferList = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_8IN')
|
|
WaferList = SRP_Array('Rotate', WaferList, @FM, @VM)
|
|
End Case
|
|
|
|
Response = WaferList
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// UpdateRetainList
|
|
//
|
|
// SRPFastArrayHandle. Handle of SRP_FastArray data.
|
|
// SelectedFilters. List of filters to be applied against SRP_FrastArrray data.
|
|
//
|
|
// Applies a filter to a SRP_FastArray.
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service UpdateRetainList(SRPFastArrayHandle, SelectedFilters)
|
|
FilteredArray = ''
|
|
|
|
If SelectedFilters EQ '' then
|
|
FilteredArray = SRP_FastArray('GetVariable', SRPFastArrayHandle)
|
|
end else
|
|
For Each Filter in SelectedFilters using @FM
|
|
ReduceHandle = SRP_FastArray('Reduce', SRPFastArrayHandle, Filter, 'MatchAll')
|
|
FilteredList = SRP_FastArray('GetVariable', ReduceHandle)
|
|
FilteredArray := FilteredList : @FM
|
|
Next FilterItem
|
|
end
|
|
|
|
FilteredArray[-1, 1] = ''
|
|
FilteredArray = SRP_Array('Rotate', FilteredArray, @FM, @VM)
|
|
SRP_FastArray('Release', ReduceHandle)
|
|
Response = FilteredArray
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetRetainServiceLastRunTime
|
|
//
|
|
// Returns the date and time stamp from when the last time the Update Retain Wafers service ran.
|
|
//---------------------------------------------------------------------------------------------------------------------
|
|
Service GetRetainServiceLastRunTime()
|
|
LastRunDTM = Database_Services('ReadDataRow', 'SERVICES', 'Update Retained Wafers')
|
|
LastRunDTM = OConv(LastRunDTM, 'DT2/^HS')<SERVICES.LAST_RUN_DTM$>
|
|
Response = LastRunDTM
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetRetentionPeriod
|
|
//
|
|
// Returns the recorded retention period.
|
|
//---------------------------------------------------------------------------------------------------------------------
|
|
Service GetRetentionPeriod()
|
|
RetentionPeriod = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_RETENTION_PERIOD')
|
|
Response = RetentionPeriod
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// SetRetentionPeriod
|
|
//
|
|
// Input:
|
|
// RetentionPeriod - [Required]
|
|
//
|
|
// Records the retention period.
|
|
//---------------------------------------------------------------------------------------------------------------------
|
|
Service SetRetentionPeriod(RetentionPeriod)
|
|
Status = Database_Services('WriteDataRow', 'APP_INFO', 'RETAINED_WAFERS_RETENTION_PERIOD', RetentionPeriod)
|
|
Response = Status
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetToBeRetainedCount
|
|
//
|
|
// Input:
|
|
// WaferSize - [Required]
|
|
//
|
|
// Output:
|
|
// Response - Returns Wafer List for given wafer size and filter.
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service GetToBeRetainedCount(WaferSize)
|
|
RetainedWaferList = ''
|
|
FullWaferList = Retain_Manager_Services('GetWaferData', WaferSize)
|
|
|
|
For Each Wafer in FullWaferList using @FM setting WaferPos then
|
|
Convert @VM to @FM in Wafer
|
|
Location = Wafer<RETAIN_WAFER_RETAIN_LOC$>
|
|
Status = Wafer<RETAIN_WAFER_STATUS$>
|
|
RetainSig = Wafer<RETAIN_WAFER_OPERATOR$>
|
|
|
|
If Location _NEC 'Wafer Destroyed' AND Status _NEC 'Do Not Destroy' then
|
|
RetainBox = Wafer<RETAIN_WAFER_RETAIN_BOX$>
|
|
RetainedSlot = Wafer<RETAIN_WAFER_RETAIN_SLOT$>
|
|
RetainedDate = Wafer<RETAIN_WAFER_RETAIN_DATE$>
|
|
If RetainBox NE '' AND RetainedSlot NE '' AND RetainedDate EQ '' then
|
|
RetainedWaferList := Wafer<RETAIN_WAFER_RUN_ID$> : @VM : Wafer<RETAIN_WAFER_POCKET$> : @VM : Wafer<RETAIN_WAFER_SCRIBE$> : @VM
|
|
RetainedWaferList := Wafer<RETAIN_WAFER_WO_NO$> : @VM : Wafer<RETAIN_WAFER_RETAIN_BOX$> : @VM : Wafer<RETAIN_WAFER_RETAIN_SLOT$> : @VM
|
|
RetainedWaferList := False$ : @VM : Wafer<RETAIN_WAFER_WAFER_ID$> : @FM
|
|
end
|
|
end
|
|
Next Wafer
|
|
|
|
RetainedWaferList[-1, 1] = ''
|
|
WaferCount = Count(RetainedWaferList, @FM)
|
|
Response = WaferCount
|
|
|
|
end service
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetToBeDestroyedCount
|
|
//
|
|
// Input:
|
|
// WaferSize - [Required]
|
|
//
|
|
// Output:
|
|
// Response - Returns Wafer List for given wafer size and filter.
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service GetToBeDestroyedCount(WaferSize)
|
|
|
|
RetainedPeriod = Database_Services('ReadDataRow', 'APP_INFO', 'RETAINED_WAFERS_RETENTION_PERIOD')
|
|
CurrentDate = Date()
|
|
DestroyedWaferList = ''
|
|
FullWaferList = Retain_Manager_Services('GetWaferData', WaferSize)
|
|
|
|
For Each Wafer in FullWaferList using @FM setting WaferPos then
|
|
CheckDate = Wafer<1, RETAIN_WAFER_RETAIN_DATE$> + RetainedPeriod
|
|
Location = Wafer<1, RETAIN_WAFER_RETAIN_LOC$>
|
|
Status = Wafer<1, RETAIN_WAFER_STATUS$>
|
|
|
|
If Location _NEC 'Wafer Destroyed' AND Status _NEC 'Do Not Destroy' then
|
|
If CheckDate LE CurrentDate then
|
|
DestroyedWaferList := Wafer<1, RETAIN_WAFER_RUN_ID$> : @VM : Wafer<1, RETAIN_WAFER_POCKET$> : @VM : Wafer<1, RETAIN_WAFER_SCRIBE$> : @VM
|
|
DestroyedWaferList := Wafer<1, RETAIN_WAFER_WO_NO$> : @VM : Wafer<1, RETAIN_WAFER_RETAIN_BOX$> : @VM : Wafer<1, RETAIN_WAFER_RETAIN_SLOT$> : @VM
|
|
DestroyedWaferList := False$ : @VM : Wafer<1, RETAIN_WAFER_WAFER_ID$> : @FM
|
|
end
|
|
end
|
|
|
|
Next Wafer
|
|
|
|
DestroyedWaferList[-1, 1] = ''
|
|
WaferCount = Count(DestroyedWaferList, @FM)
|
|
Response = WaferCount
|
|
|
|
end service
|
|
|
|
|
|
Service GetRetainReport()
|
|
|
|
WaferData = Retain_Manager_Services('GetWaferData', '150 mm 6 in')
|
|
WaferDataPrime = SRP_Array('Rotate', WaferData, @FM, @VM)
|
|
WfrIDs = WaferDataPrime<RETAIN_WAFER_WAFER_ID$>
|
|
NumWfrs = DCount(WfrIDs, @VM)
|
|
ReportData = ''
|
|
Def = ""
|
|
Def<MCAPTION$> = "Building Retain Wafer Report..."
|
|
Def<MTYPE$> = "GC"
|
|
Def<MEXTENT$> = NumWfrs
|
|
Def<MTEXTWIDTH$> = 600
|
|
MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
|
|
|
|
ReportData<1, -1> = 'GaNRunID'
|
|
ReportData<1, -1> = 'Reactor'
|
|
ReportData<1, -1> = 'Recipe'
|
|
ReportData<1, -1> = 'Pocket'
|
|
ReportData<1, -1> = 'Scribe'
|
|
ReportData<1, -1> = 'Grade'
|
|
ReportData<1, -1> = 'PartNo'
|
|
ReportData<1, -1> = 'WONo'
|
|
ReportData<1, -1> = 'RetainBox'
|
|
ReportData<1, -1> = 'RetainSlot'
|
|
ReportData<1, -1> = 'RetainLoc'
|
|
ReportData<1, -1> = 'RetainStatus'
|
|
ReportData<1, -1> = 'NCRNo'
|
|
ReportData<1, -1> = 'RejectType'
|
|
ReportData<1, -1> = 'CustomerName'
|
|
ReportData<1, -1> = 'LossDesc'
|
|
ReportData<1, -1> = 'LossComments'
|
|
ReportData<1, -1> = 'AssignCauseDesc'
|
|
ReportData<1, -1> = 'AssignCauseComments'
|
|
ReportData<1, -1> = 'Shift'
|
|
ReportData<1, -1> = 'AuthRejSigName'
|
|
ReportData<1, -1> = 'RDSNo'
|
|
|
|
For each WfrID in WfrIDs using @VM setting vPos
|
|
Running = Msg(@WINDOW, MsgUp, vPos, MSGINSTUPDATE$) ;* Update message
|
|
WOWfrRec = Database_Services('ReadDataRow', 'WO_WFR', WfrID)
|
|
RetainWfrRec = Database_Services('ReadDataRow', 'RETAINED_WAFERS', WfrID)
|
|
RDSNo = Xlate('WO_WFR', WfrID, 'RDS_NO', 'X')
|
|
ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSNo)
|
|
GaNRunID = RetainWfrRec<RETAINED_WAFERS.RUN_ID$>
|
|
Reactor = ReactRunRec<REACT_RUN_REACTOR$>
|
|
Recipe = RetainWfrRec<RETAINED_WAFERS.RECIPE$>
|
|
Pocket = RetainWfrRec<RETAINED_WAFERS.POCKET$>
|
|
Scribe = RetainWfrRec<RETAINED_WAFERS.SCRIBE$>
|
|
Grade = RetainWfrRec<RETAINED_WAFERS.GRADE$>
|
|
PartNo = RetainWfrRec<RETAINED_WAFERS.PART_NO$>
|
|
WONo = Field(WfrID, '*', 1, 1)
|
|
RetainBox = RetainWfrRec<RETAINED_WAFERS.RETAIN_BOX$>
|
|
RetainSlot = RetainWfrRec<RETAINED_WAFERS.RETAIN_SLOT$>
|
|
RetainLoc = RetainWfrRec<RETAINED_WAFERS.LOCATION$>
|
|
RetainStatus = RetainWfrRec<RETAINED_WAFERS.STATUS$>
|
|
NCRNo = WOWfrRec<WO_WFR_RDS_NCR_NO$>
|
|
If NCRNo NE '' then
|
|
NCRRec = Database_Services('ReadDataRow', 'NCR', NCRNo)
|
|
RejectType = Xlate('NCR', NCRNo, 'REJ_TYPE', 'X')
|
|
CustomerName = Xlate('NCR', NCRNo, 'CUST_NAME', 'X')
|
|
LossDesc = Xlate('NCR', NCRNo, 'LOSS_DESC', 'X')
|
|
LossComments = NCRRec<NCR_LOSS_COMMENTS$>
|
|
AssignCauseDesc = Xlate('NCR', NCRNo, 'AC_DESC', 'X')
|
|
AssignCauseComments = NCRRec<NCR_AC_COMMENTS$>
|
|
Shift = NCRRec<NCR_SHIFT$>
|
|
AuthRejSigName = NCRRec<NCR_AUTH_REJ_SIG$>
|
|
end else
|
|
RejectType = ''
|
|
CustomerName = ''
|
|
LossDesc = ''
|
|
LossComments = ''
|
|
AssignCauseDesc = ''
|
|
AssignCauseComments = ''
|
|
Shift = ''
|
|
AuthRejSigName = ''
|
|
end
|
|
|
|
ReportData<vPos+1, -1> = GaNRunID
|
|
ReportData<vPos+1, -1> = Reactor
|
|
ReportData<vPos+1, -1> = Recipe
|
|
ReportData<vPos+1, -1> = Pocket
|
|
ReportData<vPos+1, -1> = Scribe
|
|
ReportData<vPos+1, -1> = Grade
|
|
ReportData<vPos+1, -1> = PartNo
|
|
ReportData<vPos+1, -1> = WONo
|
|
ReportData<vPos+1, -1> = RetainBox
|
|
ReportData<vPos+1, -1> = RetainSlot
|
|
ReportData<vPos+1, -1> = RetainLoc
|
|
ReportData<vPos+1, -1> = RetainStatus
|
|
ReportData<vPos+1, -1> = NCRNo
|
|
ReportData<vPos+1, -1> = RejectType
|
|
ReportData<vPos+1, -1> = CustomerName
|
|
ReportData<vPos+1, -1> = LossDesc
|
|
ReportData<vPos+1, -1> = LossComments
|
|
ReportData<vPos+1, -1> = AssignCauseDesc
|
|
ReportData<vPos+1, -1> = AssignCauseComments
|
|
ReportData<vPos+1, -1> = Shift
|
|
ReportData<vPos+1, -1> = AuthRejSigName
|
|
ReportData<vPos+1, -1> = RDSNo
|
|
|
|
Next WfrID
|
|
Swap @VM with ',' in ReportData
|
|
Swap @FM with CRLF$ in ReportData
|
|
Msg(@Window,MsgUp) ;* Take message down
|
|
|
|
DialogParams = True$ : @FM : '' : @FM : '' : @FM : 'Retained 6 in with NCR.csv'
|
|
SaveLocation = Utility('CHOOSEFILE', @Window, DialogParams)
|
|
If SaveLocation NE '' then
|
|
OSWrite ReportData on SaveLocation
|
|
RunCommand = 'explorer.exe /select,"' : SaveLocation : '"'
|
|
Output = SRP_Run_Command(RunCommand, 'DOS')
|
|
end
|
|
|
|
end service
|
|
|