ready for unit testing
This commit is contained in:
committed by
Stieber Daniel (CSC FI SPS MESLEO)
parent
401c03d752
commit
03e85359d1
@ -556,8 +556,6 @@ UnloadProduct:
|
||||
Next CassNo
|
||||
end
|
||||
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
@ -639,3 +637,4 @@ SlotOverview:
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
45
LSL2/STPROC/COPY_LOT_EVENT_RECORD_TO_SQL.txt
Normal file
45
LSL2/STPROC/COPY_LOT_EVENT_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,45 @@
|
||||
Compile function Copy_LOT_EVENT_Record_To_SQL(Connection, Key, Record)
|
||||
|
||||
/*****************************************************************************\
|
||||
Copies the given LOT_EVENT record to the MSSQL database.
|
||||
|
||||
History
|
||||
-------
|
||||
06/10/2025 DJS Original Programmer
|
||||
\*****************************************************************************/
|
||||
|
||||
$insert LOT_EVENT_EQUATES
|
||||
|
||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||
Ans = ""
|
||||
|
||||
// Parse record into a dimensioned array for speed
|
||||
Dim Rec(13)
|
||||
MatParse Record into Rec
|
||||
|
||||
// List of key names and their values
|
||||
Keys = "LOT_EVENT_ID":@VM:SQL_Format(Key, "STR")
|
||||
|
||||
// List of data fields and their values
|
||||
DataFields = "LOT_ID" :@VM:SQL_Format(Rec(LOT_EVENT_LOT_ID$), "STR"):@FM
|
||||
DataFields := "LOT_EVENT_TYPE" :@VM:SQL_Format(Rec(LOT_EVENT_LOT_EVENT_TYPE$), "STR"):@FM
|
||||
DataFields := "EVENT_DATETIME" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_DATETIME$), "DATETIME"):@FM
|
||||
DataFields := "EVENT_NOTE" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_NOTE$), "STR"):@FM
|
||||
DataFields := "EQUIPMENT_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EQUIPMENT_ID$), "STR"):@FM
|
||||
DataFields := "EVENT_REDUCE_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_REDUCE_WAFER_QTY$), "INT"):@FM
|
||||
DataFields := "EVENT_BONUS_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_BONUS_WAFER_QTY$), "INT"):@FM
|
||||
DataFields := "EVENT_BEGIN_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_BEGIN_WAFER_QTY$), "INT"):@FM
|
||||
DataFields := "EVENT_END_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_END_WAFER_QTY$), "INT"):@FM
|
||||
DataFields := "EVENT_OPERATION_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATION_ID$), "STR"):@FM
|
||||
DataFields := "EVENT_OPERATOR_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATOR_ID$), "STR"):@FM
|
||||
DataFields := "SEQUENCE" :@VM:SQL_Format(Rec(LOT_EVENT_SEQUENCE$), "INT")
|
||||
|
||||
// Symbolics
|
||||
|
||||
// Write the data to the SQL database
|
||||
Ans = SQL_Write(Connection, "LOT_EVENT", Keys, DataFields);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// Multi-valued Fields
|
||||
|
||||
Return Ans
|
35
LSL2/STPROC/COPY_LOT_EVENT_TYPE_RECORD_TO_SQL.txt
Normal file
35
LSL2/STPROC/COPY_LOT_EVENT_TYPE_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,35 @@
|
||||
Compile function Copy_LOT_EVENT_TYPE_Record_To_SQL(Connection, Key, Record)
|
||||
|
||||
/*****************************************************************************\
|
||||
Copies the given OPERATION record to the MSSQL database.
|
||||
|
||||
History
|
||||
-------
|
||||
06/19/2025 DJS Original Programmer
|
||||
\*****************************************************************************/
|
||||
|
||||
$insert LOT_EVENT_TYPE_EQUATES
|
||||
|
||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||
Ans = ""
|
||||
|
||||
// Parse record into a dimensioned array for speed
|
||||
Dim Rec(2)
|
||||
MatParse Record into Rec
|
||||
|
||||
// List of key names and their values
|
||||
Keys = "LOT_EVENT_TYPE_ID":@VM:SQL_Format(Key, "STR")
|
||||
|
||||
// List of data fields and their values
|
||||
DataFields = "DESCRIPTION" :@VM:SQL_Format(Rec(LOT_EVENT_TYPE.DESCRIPTION$), "STR"):@FM
|
||||
DataFields := "WIP_TRANS_TYPE" :@VM:SQL_Format(Rec(LOT_EVENT_TYPE.WIP_TRANS_TYPE$), "STR")
|
||||
|
||||
// Symbolics
|
||||
|
||||
// Write the data to the SQL database
|
||||
Ans = SQL_Write(Connection, "LOT_EVENT_TYPE", Keys, DataFields);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// Multi-valued Fields
|
||||
|
||||
Return Ans
|
56
LSL2/STPROC/COPY_LOT_OPERATION_RECORD_TO_SQL.txt
Normal file
56
LSL2/STPROC/COPY_LOT_OPERATION_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,56 @@
|
||||
Compile function Copy_LOT_OPERATION_Record_To_SQL(Connection, Key, Record)
|
||||
|
||||
/*****************************************************************************\
|
||||
Copies the given LOT_OPERATION record to the MSSQL database.
|
||||
|
||||
History
|
||||
-------
|
||||
06/19/2025 DJS Original Programmer
|
||||
\*****************************************************************************/
|
||||
|
||||
$insert LOT_OPERATION_EQUATES
|
||||
|
||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||
Ans = ""
|
||||
|
||||
// Parse record into a dimensioned array for speed
|
||||
Dim Rec(24)
|
||||
MatParse Record into Rec
|
||||
|
||||
// List of key names and their values
|
||||
Keys = "LOT_OPERATION_ID":@VM:SQL_Format(Key, "STR")
|
||||
|
||||
// List of data fields and their values
|
||||
DataFields = "LOT_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_LOT_ID$), "STR"):@FM
|
||||
DataFields := "OPERATION_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_ID$), "STR"):@FM
|
||||
DataFields := "DATETIME_IN" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_IN$), "DATETIME"):@FM
|
||||
DataFields := "DATETIME_OUT" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_OUT$), "DATETIME"):@FM
|
||||
DataFields := "EQUIPMENT_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_EQUIPMENT_ID$), "STR"):@FM
|
||||
DataFields := "WAFER_IN_QTY" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_IN_QTY$), "INT"):@FM
|
||||
DataFields := "WAFER_OUT_QTY" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_OUT_QTY$), "INT"):@FM
|
||||
DataFields := "OPERATOR_IN_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATOR_IN_ID$), "STR"):@FM
|
||||
DataFields := "OPERATOR_OUT_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATOR_OUT_ID$), "STR"):@FM
|
||||
DataFields := "OPERATION_SEQUENCE" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_SEQUENCE$), "INT"):@FM
|
||||
DataFields := "REWORK" :@VM:SQL_Format(Rec(LOT_OPERATION_REWORK$), "BIT"):@FM
|
||||
DataFields := "DATETIME_START" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_START$), "DATETIME"):@FM
|
||||
DataFields := "DATETIME_STOP" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_STOP$), "DATETIME"):@FM
|
||||
DataFields := "CLEAN_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_CLEAN_ID$), "STR"):@FM
|
||||
DataFields := "PACKAGING_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_PACKAGING_ID$), "STR"):@FM
|
||||
DataFields := "WAFER_COUNTER_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_COUNTER_ID$), "STR"):@FM
|
||||
DataFields := "OPERATION_TYPE" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_TYPE$), "STR"):@FM
|
||||
DataFields := "OPERATION_CLASS" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_CLASS$), "STR"):@FM
|
||||
DataFields := "MET_TEST_TYPE_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_MET_TEST_TYPE_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "MET_TEST_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_MET_TEST_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "PACKAGING_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_PACKAGING_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "CLEAN_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_CLEAN_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "WAFER_COUNTER_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_COUNTER_REQUIRED$), "BIT")
|
||||
|
||||
// Symbolics
|
||||
|
||||
// Write the data to the SQL database
|
||||
Ans = SQL_Write(Connection, "LOT_OPERATION", Keys, DataFields);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// Multi-valued Fields
|
||||
|
||||
Return Ans
|
50
LSL2/STPROC/COPY_LOT_RECORD_TO_SQL.txt
Normal file
50
LSL2/STPROC/COPY_LOT_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,50 @@
|
||||
Compile function Copy_LOT_Record_To_SQL(Connection, Key, Record)
|
||||
|
||||
/*****************************************************************************\
|
||||
Copies the given LOT record to the MSSQL database.
|
||||
|
||||
History
|
||||
-------
|
||||
06/10/2025 DJS Original Programmer
|
||||
\*****************************************************************************/
|
||||
|
||||
$insert LOT_EQUATES
|
||||
|
||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||
Ans = ""
|
||||
|
||||
// Parse record into a dimensioned array for speed
|
||||
Dim Rec(23)
|
||||
MatParse Record into Rec
|
||||
|
||||
// List of key names and their values
|
||||
Keys = "LOT_ID":@VM:SQL_Format(Key, "STR")
|
||||
|
||||
// List of data fields and their values
|
||||
DataFields = "TYPE" :@VM:SQL_Format(Rec(LOT_TYPE$), "STR"):@FM
|
||||
DataFields := "PROD_ID" :@VM:SQL_Format(Rec(LOT_PROD_ID$), "STR"):@FM
|
||||
DataFields := "ORIG_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_ORIG_WAFER_QTY$), "INT"):@FM
|
||||
DataFields := "WAFER_QTY" :@VM:SQL_Format(Rec(LOT_WAFER_QTY$), "INT"):@FM
|
||||
DataFields := "VENDOR_PART_NO" :@VM:SQL_Format(Rec(LOT_VENDOR_PART_NO$), "STR"):@FM
|
||||
DataFields := "VENDOR_LOT_NO" :@VM:SQL_Format(Rec(LOT_VENDOR_LOT_NO$), "STR"):@FM
|
||||
DataFields := "VENDOR_CODE" :@VM:SQL_Format(Rec(LOT_VENDOR_CODE$), "STR"):@FM
|
||||
DataFields := "OPEN" :@VM:SQL_Format(Rec(LOT_OPEN$), "BIT"):@FM
|
||||
DataFields := "HOLD" :@VM:SQL_Format(Rec(LOT_HOLD$), "BIT"):@FM
|
||||
DataFields := "HOT" :@VM:SQL_Format(Rec(LOT_HOT$), "BIT"):@FM
|
||||
DataFields := "LEGACY_LOT_ID" :@VM:SQL_Format(Rec(LOT_LEGACY_LOT_ID$), "STR"):@FM
|
||||
DataFields := "MOST_RECENT_LOT_EVENT_ID" :@VM:SQL_Format(Rec(LOT_MOST_RECENT_LOT_EVENT_ID$), "STR"):@FM
|
||||
DataFields := "LEGACY_LOT_TYPE" :@VM:SQL_Format(Rec(LOT_LEGACY_LOT_TYPE$), "STR"):@FM
|
||||
DataFields := "WO_LOG_ID" :@VM:SQL_Format(Rec(LOT_WO_LOG_ID$), "INT"):@FM
|
||||
DataFields := "PROD_SPEC_ID" :@VM:SQL_Format(Rec(LOT_PROD_SPEC_ID$), "INT"):@FM
|
||||
DataFields := "EPI_PART_NO" :@VM:SQL_Format(Rec(LOT_EPI_PART_NO$), "STR"):@FM
|
||||
DataFields := "PROD_VER_NO" :@VM:SQL_Format(Rec(LOT_PROD_VER_NO$), "STR")
|
||||
|
||||
// Symbolics
|
||||
|
||||
// Write the data to the SQL database
|
||||
Ans = SQL_Write(Connection, "LOT", Keys, DataFields);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// Multi-valued Fields
|
||||
|
||||
Return Ans
|
43
LSL2/STPROC/COPY_OPERATION_RECORD_TO_SQL.txt
Normal file
43
LSL2/STPROC/COPY_OPERATION_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,43 @@
|
||||
Compile function Copy_OPERATION_Record_To_SQL(Connection, Key, Record)
|
||||
|
||||
/*****************************************************************************\
|
||||
Copies the given OPERATION record to the MSSQL database.
|
||||
|
||||
History
|
||||
-------
|
||||
06/19/2025 DJS Original Programmer
|
||||
\*****************************************************************************/
|
||||
|
||||
$insert OPERATION_EQUATES
|
||||
|
||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||
Ans = ""
|
||||
|
||||
// Parse record into a dimensioned array for speed
|
||||
Dim Rec(10)
|
||||
MatParse Record into Rec
|
||||
|
||||
// List of key names and their values
|
||||
Keys = "OPERATION_ID":@VM:SQL_Format(Key, "STR")
|
||||
|
||||
// List of data fields and their values
|
||||
DataFields = "ACTIVE" :@VM:SQL_Format(Rec(OPERATION_ACTIVE$), "BIT"):@FM
|
||||
DataFields := "CLASS_ID" :@VM:SQL_Format(Rec(OPERATION_CLASS_ID$), "STR"):@FM
|
||||
DataFields := "OPERATION_DESCRIPTION" :@VM:SQL_Format(Rec(OPERATION_OPERATION_DESCRIPTION$), "STR"):@FM
|
||||
DataFields := "TYPE" :@VM:SQL_Format(Rec(OPERATION_TYPE$), "STR"):@FM
|
||||
DataFields := "REWORK" :@VM:SQL_Format(Rec(OPERATION_REWORK$), "BIT"):@FM
|
||||
DataFields := "MET_TEST_TYPE_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_MET_TEST_TYPE_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "MET_TEST_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_MET_TEST_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "PACKAGING_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_PACKAGING_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "CLEAN_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_CLEAN_REQUIRED$), "BIT"):@FM
|
||||
DataFields := "WAFER_COUNTER_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_WAFER_COUNTER_REQUIRED$), "BIT")
|
||||
|
||||
// Symbolics
|
||||
|
||||
// Write the data to the SQL database
|
||||
Ans = SQL_Write(Connection, "OPERATION", Keys, DataFields);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// Multi-valued Fields
|
||||
|
||||
Return Ans
|
535
LSL2/STPROC/LOT_OPERATION_SERVICES.txt
Normal file
535
LSL2/STPROC/LOT_OPERATION_SERVICES.txt
Normal file
@ -0,0 +1,535 @@
|
||||
Compile function Lot_Operation_Services(@Service, @Params)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
Declare function Lot_Services, Database_Services, Error_Services, Srp_Sort_Array, Lot_Operation_Services
|
||||
Declare function RTI_CreateGUID, MemberOf, SRP_JSON, Operation_Services, Datetime, Met_Test_Services, PSN_Services
|
||||
Declare subroutine Database_Services, Error_Services, SRP_JSON, Lot_Services, Lot_Event_Services, Lot_Operation_Services
|
||||
|
||||
$insert LOGICAL
|
||||
$insert LOT_EQUATES
|
||||
$Insert LOT_OPERATION_EQUATES
|
||||
$Insert METROLOGY_DATA_EXAMPLE_EQUATES
|
||||
$Insert OPERATION_EQUATES
|
||||
$Insert MET_TEST_EQUATES
|
||||
$Insert WAFER_COUNTER_EQUATES
|
||||
|
||||
Options OPERATION_TYPE = 'CLEAN', 'THICK_METROLOGY', 'RES_METROLOGY', 'SURFACE_METROLOGY', 'VISUAL_INSPECTION', 'PACKAGING'
|
||||
|
||||
GoToService
|
||||
|
||||
Return Response or ""
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SERVICES
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Service AddOperationToLot(LotId, OperationId, PrescribedSequence, UserId)
|
||||
|
||||
Operation = ''
|
||||
ErrorMessage = ''
|
||||
If RowExists('LOT', LotId) then
|
||||
If RowExists('OPERATION', OperationId) then
|
||||
If PrescribedSequence AND Num(PrescribedSequence) then
|
||||
If Lot_Operation_Services('CanUserAddLotOperation', UserId) then
|
||||
LotCurrOperation = Lot_Services('GetLotCurrOperationId', LotId)
|
||||
CurrOperationSequence = Xlate('LOT_OPERATION', LotCurrOperation, LOT_OPERATION_OPERATION_SEQUENCE$, 'X')
|
||||
If CurrOperationSequence LT PrescribedSequence then
|
||||
//Get Curr Operation Sequence
|
||||
Done = False$
|
||||
LotCurrOperationSequence = Lot_Services('GetLotOperationSequence', LotId)
|
||||
for each Operation in LotCurrOperationSequence using @Fm setting OpPos
|
||||
ThisOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', Operation)
|
||||
ThisOperationSequence = ThisOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>
|
||||
If ThisOperationSequence GE PrescribedSequence then
|
||||
NewOperationSequence = ThisOperationSequence + 1
|
||||
ThisOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$> = NewOperationSequence
|
||||
Database_Services('WriteDataRow', 'LOT_OPERATION', Operation, ThisOperationRec)
|
||||
If Error_Services('HasError') then
|
||||
Done = True$
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end
|
||||
Until Done
|
||||
Next Operation
|
||||
If ErrorMessage EQ '' then
|
||||
LotOperationRecID = RTI_CreateGUID()
|
||||
If Not(RowExists('LOT_OPERATION', LotOperationRecID)) then
|
||||
OperationRec = Database_Services('ReadDataRow', 'OPERATION', OperationId)
|
||||
Class = OperationRec<OPERATION_CLASS_ID$>
|
||||
Type = OperationRec<OPERATION_TYPE$>
|
||||
Rework = OperationRec<OPERATION_REWORK$>
|
||||
ThisNewOperationRec = Database_Services('ReadDataRow', 'OPERATION', OperationId)
|
||||
LotOperationRec = ''
|
||||
LotOperationRec<LOT_OPERATION_LOT_ID$> = LotId
|
||||
LotOperationRec<LOT_OPERATION_OPERATION_ID$> = OperationId
|
||||
LotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$> = PrescribedSequence
|
||||
LotOperationRec<LOT_OPERATION_REWORK$> = Rework
|
||||
LotOperationRec<LOT_OPERATION_OPERATION_TYPE$> = Type
|
||||
LotOperationRec<LOT_OPERATION_OPERATION_CLASS$> = Class
|
||||
LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$> = OperationRec<OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||
LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$> = OperationRec<OPERATION_MET_TEST_REQUIRED$>
|
||||
LotOperationRec<LOT_OPERATION_PACKAGING_REQUIRED$> = OperationRec<OPERATION_PACKAGING_REQUIRED$>
|
||||
LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$> = OperationRec<OPERATION_CLEAN_REQUIRED$>
|
||||
LotOperationRec<LOT_OPERATION_WAFER_COUNTER_REQUIRED$> = OperationRec<OPERATION_WAFER_COUNTER_REQUIRED$>
|
||||
IsOperationRework = Database_Services('ReadDataColumn', 'OPERATION', OperationId, OPERATION_REWORK$)
|
||||
Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationRecId, LotOperationRec)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'ADD_LOT_OPERATION', 'Added operation ' : Operation : ' to lot.', '', UserId)
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot Operation already existed, cannot overwrite'
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Not allowed to add new operations prior to current operation'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'User ' : UserId : ' does not have permission to add operations to lots.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Invalid operation sequence entered.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Operation ' : OperationId : 'not found in OPERATION table.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot ' : LotId : ' not found in LOT table.'
|
||||
end
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
Response = Operation
|
||||
end else
|
||||
Error_Services('Add', 'Error in ' : Service : '.' : ErrorMessage)
|
||||
// todo: add logging
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service RemoveLotOperation(LotOperationId, UserId)
|
||||
|
||||
//Todo User permission check
|
||||
ErrorMessage = ''
|
||||
Success = False$
|
||||
|
||||
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||
MoveInTime = LotOperationRec<LOT_OPERATION_DATETIME_IN$>
|
||||
MoveOutTime = LotOperationRec<LOT_OPERATION_DATETIME_OUT$>
|
||||
Sequence = LotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>
|
||||
OperationId = LotOperationRec<LOT_OPERATION_OPERATION_ID$>
|
||||
OperationClass = XLATE('OPERATION', OperationId, OPERATION_CLASS_ID$, 'X')
|
||||
If OperationClass NE 'RTF_DEFAULT' AND OperationClass NE 'RTF_DEFAULT_END' then
|
||||
If MoveInTime EQ '' AND MoveOutTime EQ '' then
|
||||
LotOperationRec<LOT_OPERATION_LOT_ID$> = '';//Nulling this value out should disassociated the lot operation record from the lot.
|
||||
Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationId, LotOperationRec)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Operation_Services('UpdateLotOperationSequence', LotId, Sequence)
|
||||
If Error_Services('NoError') then
|
||||
Success = True$
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'REMOVE_LOT_OPERATION', 'Removed operation ' : OperationId : ' from lot.', '', UserId)
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot has already started processing on operation ' : OperationId
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to remove default operations.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot Operation record not found'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
Error_Services('Add', 'Error in service ': Service : ' : ' : ErrorMessage)
|
||||
end
|
||||
|
||||
Response = Success
|
||||
|
||||
|
||||
end service
|
||||
|
||||
Service UpdateLotOperationSequence(LotId, StartSequence)
|
||||
ErrorMessage = ''
|
||||
If StartSequence EQ '' then
|
||||
StartSequence = 1
|
||||
end
|
||||
|
||||
If RowExists('LOT', LotId) then
|
||||
LotOperationSequence = Lot_Services('GetLotOperationSequence', LotId)
|
||||
Offset = 0
|
||||
for each LotOperationId in LotOperationSequence using @FM setting SeqPos
|
||||
If LotOperationId NE '' then
|
||||
ThisLotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
OrigSeq = ThisLotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>
|
||||
NewSeq = OrigSeq - Offset
|
||||
ThisLotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$> = NewSeq
|
||||
Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationId, ThisLotOperationRec)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
Offset += 1
|
||||
end
|
||||
Until ErrorMessage NE ''
|
||||
Next LotOperation
|
||||
end else
|
||||
ErrorMessage = 'Lot Id not found'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
Error_Services('Add', 'Error in ' : Service : ' : ' : ErrorMessage)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service ModifyLotOperationSequence(LotOperationId, NewSequence, UserId)
|
||||
|
||||
ErrorMessage = ''
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
|
||||
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service GetAvailableSequences(LotId)
|
||||
AvailableSequences = ''
|
||||
|
||||
If RowExists('LOT', LotId) then
|
||||
CurrentLotOperations = Lot_Services('GetLotOperationSequence', LotId)
|
||||
For each LotOperationId in CurrentLotOperations using @FM setting Sequence
|
||||
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
OperationId = LotOperationRec<LOT_OPERATION_OPERATION_ID$>
|
||||
OperationClass = Database_Services('ReadDataColumn', 'OPERATION', OperationId, OPERATION_CLASS_ID$)
|
||||
StartDtm = LotOperationRec<LOT_OPERATION_DATETIME_IN$>
|
||||
If StartDTM EQ '' then
|
||||
If OperationClass NE 'RTF_DEFAULT' then
|
||||
AvailableSequences<1, -1> = Sequence + 1
|
||||
end
|
||||
end
|
||||
Next LotOperationId
|
||||
end
|
||||
|
||||
Response = AvailableSequences
|
||||
end service
|
||||
|
||||
|
||||
Service AddSpecsToLotOperation(LotOperationId)
|
||||
|
||||
end service
|
||||
|
||||
Service CanUserAddLotOperation(UserId)
|
||||
|
||||
If UserId NE '' then
|
||||
Begin Case
|
||||
Case MemberOf(UserId, 'LEAD')
|
||||
Response = True$
|
||||
Case MemberOf(UserId, 'SUPERVISOR')
|
||||
Response = True$
|
||||
Case MemberOf(UserId, 'ENGINEER')
|
||||
Response = True$
|
||||
Case MemberOf(UserId, 'ENG_TECH')
|
||||
Response = True$
|
||||
Case Otherwise$
|
||||
Response = False$
|
||||
End Case
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service ConvertRecordToJson(LotOperationId)
|
||||
|
||||
JsonString = ''
|
||||
objJSON = ''
|
||||
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
If SRP_JSON(objJSON, 'New', 'Object') then
|
||||
SRP_JSON(objJSON, 'SetValue', 'LotOperationId', LotOperationId)
|
||||
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||
LegacyLotId = Database_Services('ReadDataColumn', 'LOT', LotId, LOT_LEGACY_LOT_ID$, True$, 0, False$)
|
||||
SRP_JSON(objJSON, 'SetValue', 'LotOperationId', LotOperationId)
|
||||
SRP_JSON(objJSON, 'SetValue', 'LotId', LotId, 'String')
|
||||
SRP_JSON(objJSON, 'SetValue', 'LegacyLotId', LegacyLotId, 'String')
|
||||
SRP_JSON(objJSON, 'SetValue', 'OperationId', LotOperationRec<LOT_OPERATION_OPERATION_ID$>, 'String')
|
||||
SRP_JSON(objJSON, 'SetValue', 'DateTimeIn', OConv(LotOperationRec<LOT_OPERATION_DATETIME_IN$>, 'DT'), 'String')
|
||||
SRP_JSON(objJSON, 'SetValue', 'DateTimeOut', OConv(LotOperationRec<LOT_OPERATION_DATETIME_OUT$>, 'DT'), 'String')
|
||||
EquipmentId = LotOperationRec<LOT_OPERATION_EQUIPMENT_ID$>
|
||||
SRP_JSON(objJSON, 'SetValue', 'EquipmentId', EquipmentId)
|
||||
SRP_JSON(objJSON, 'SetValue', 'WaferInQty', LotOperationRec<LOT_OPERATION_WAFER_IN_QTY$>, 'Number')
|
||||
SRP_JSON(objJSON, 'SetValue', 'WaferOutQty', LotOperationRec<LOT_OPERATION_WAFER_OUT_QTY$>, 'Number')
|
||||
SRP_JSON(objJSON, 'SetValue', 'OperatorInId', LotOperationRec<LOT_OPERATION_OPERATOR_IN_ID$>)
|
||||
SRP_JSON(objJSON, 'SetValue', 'OperatorOutId', LotOperationRec<LOT_OPERATION_OPERATOR_OUT_ID$>)
|
||||
SRP_JSON(objJSON, 'SetValue', 'OperationSequence', LotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>)
|
||||
SRP_JSON(objJSON, 'SetValue', 'DateTimeStart', OConv(LotOperationRec<LOT_OPERATION_DATETIME_START$>, 'DT'), 'String')
|
||||
SRP_JSON(objJSON, 'SetValue', 'DateTimeStop', OConv(LotOperationRec<LOT_OPERATION_DATETIME_STOP$>, 'DT'), 'String')
|
||||
SRP_JSON(objJSON, 'SetValue', 'MetTestId', LotOperationRec<LOT_OPERATION_MET_TEST_ID$>)
|
||||
SRP_JSON(objJSON, 'SetValue', 'CleanId', LotOperationRec<LOT_OPERATION_CLEAN_ID$>)
|
||||
SRP_JSON(objJSON, 'SetValue', 'PackagingId', LotOperationRec<LOT_OPERATION_PACKAGING_ID$>)
|
||||
SRP_JSON(objJSON, 'SetValue', 'WaferCounterId', LotOperationRec<LOT_OPERATION_WAFER_COUNTER_ID$>)
|
||||
SRP_JSON(objJson, 'SetValue', 'MetTestTypeRequired', LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>, 'STRING')
|
||||
SRP_JSON(objJson, 'SetValue', 'MetTestRequired', LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$>, 'Boolean')
|
||||
SRP_JSON(objJson, 'SetValue', 'PackagingRequired', LotOperationRec<LOT_OPERATION_PACKAGING_REQUIRED$>, 'Boolean')
|
||||
SRP_JSON(objJson, 'SetValue', 'CleanRequired', LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$>, 'Boolean')
|
||||
SRP_JSON(objJson, 'SetValue', 'WaferCounterRequired', LotOperationRec<LOT_OPERATION_WAFER_COUNTER_REQUIRED$>, 'Boolean')
|
||||
|
||||
SRP_JSON(objJSON, 'SetValue', 'OperationType', LotOperationRec<LOT_OPERATION_OPERATION_TYPE$>)
|
||||
//Add OPERATION Object
|
||||
OperationJson = Operation_Services('ConvertRecordToJSON', LotOperationRec<LOT_OPERATION_OPERATION_ID$>)
|
||||
If SRP_JSON(objOperationJson, 'Parse', OperationJson) EQ '' then
|
||||
SRP_Json(objJSON, 'Set', 'OperationInfo',objOperationJson)
|
||||
SRP_Json(objOperationJson, 'Release')
|
||||
end
|
||||
//Add Associated MET_TEST JSON Object
|
||||
AssocMetTestIds = LotOperationRec<LOT_OPERATION_MET_TEST_ID$>
|
||||
objAssocMetTest = ''
|
||||
If SRP_Json(objAssocMetTest, 'New', 'Array') then
|
||||
for each MetTestId in AssocMetTestIds using @VM
|
||||
MetTestJson = Met_Test_Services('ConvertRecordToJson', MetTestId)
|
||||
If SRP_Json(objMetTest, 'Parse', MetTestJson) EQ '' then
|
||||
SRP_Json(objAssocMetTest, 'Add', objMetTest)
|
||||
SRP_Json(objMetTest, 'Release')
|
||||
end
|
||||
Next MetTestId
|
||||
SRP_Json(objJSON, 'Set', 'AssociatedMetTests', objAssocMetTest)
|
||||
SRP_Json(objAssocMetTest, 'Release')
|
||||
end
|
||||
|
||||
//Add Available Met Test Record
|
||||
AvailMetTestIds = Met_Test_Services('GetMetTests', LotId, LegacyLotId, '', EquipmentId, True$)
|
||||
objAvailMetTest = ''
|
||||
If SRP_Json(objAvailMetTest, 'New', 'Array') then
|
||||
for each MetTestId in AvailMetTestIds using @VM
|
||||
MetTestJson = Met_Test_Services('ConvertRecordToJson', MetTestId)
|
||||
If SRP_Json(objMetTest, 'Parse', MetTestJson) EQ '' then
|
||||
SRP_Json(objAvailMetTest, 'Add', objMetTest)
|
||||
SRP_Json(objMetTest, 'Release')
|
||||
end
|
||||
Next MetTestId
|
||||
SRP_Json(objJSON, 'Set', 'AvailMetTests', objAvailMetTest)
|
||||
SRP_Json(objAvailMetTest, 'Release')
|
||||
end
|
||||
//Add in relevant recipes
|
||||
//OperationType = LotOperationRec<LOT_OPERATION_OPERATION_TYPE$>
|
||||
//MetTestTypeRequired = LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||
Recipes = ''
|
||||
ShowThickRecipes = False$
|
||||
ShowResRecipes = False$
|
||||
ShowCleanRecipes = False$
|
||||
ShowSurfscanRecipes = False$
|
||||
IsMetTestReqd = LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$>
|
||||
IsCleanRequired = LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$>
|
||||
If IsMetTestReqd then
|
||||
MetTestTypeRequired = LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||
Begin Case
|
||||
Case MetTestTypeRequired EQ 'TENCOR'
|
||||
ShowSurfscanRecipes = True$
|
||||
Case MetTestTypeRequired EQ 'THICK'
|
||||
ShowThickRecipes = True$
|
||||
Case MetTestTypeRequired EQ 'RES'
|
||||
ShowResRecipes = True$
|
||||
End Case
|
||||
end
|
||||
If IsCleanRequired then
|
||||
ShowCleanRecipes = True$
|
||||
end
|
||||
ProdSpecNo = XLATE('LOT', LotId, LOT_PROD_SPEC_ID$, 'X')
|
||||
Recipes = PSN_Services('GetAllMetrologoyRecipes', ProdSpecNo, ShowSurfscanRecipes, ShowCleanRecipes, ShowResRecipes, ShowThickRecipes)
|
||||
If SRP_JSON(objRecipes, 'New', 'Array') then
|
||||
for each Recipe in Recipes using @FM
|
||||
//ToolClass : @VM : Recipe : @VM : Stage
|
||||
ToolClass = Recipe<1,1>
|
||||
RecipeName = Recipe<1,2>
|
||||
Stage = Recipe<1,3>
|
||||
If SRP_JSON(objRecipe, 'New', 'Object') then
|
||||
SRP_JSON(objRecipe, 'SetValue', 'ToolClass', ToolClass, 'String')
|
||||
SRP_JSON(objRecipe, 'SetValue', 'RecipeName', RecipeName, 'String')
|
||||
SRP_JSON(objRecipe, 'SetValue', 'StageName', Stage, 'String')
|
||||
SRP_JSON(objRecipes, 'Add', objRecipe)
|
||||
SRP_JSON(objRecipe, 'Release')
|
||||
end
|
||||
Next Recipe
|
||||
SRP_JSON(objJSON, 'Set', 'RecipeParams', objRecipes)
|
||||
SRP_JSON(objRecipes, 'Release')
|
||||
end
|
||||
JsonString = SRP_JSON(objJSON, 'Stringify', 'Styled')
|
||||
SRP_JSON(objJSON, 'Release')
|
||||
|
||||
end
|
||||
|
||||
Response = JsonString
|
||||
end service
|
||||
|
||||
|
||||
|
||||
Service StartLotOperation(LotOperationId, UserId)
|
||||
|
||||
//1. Validate that it can be moved into the operation passed in.
|
||||
|
||||
//2. Move in the lot
|
||||
//3. Return true is move in successfully
|
||||
//4. Return false if error moving in
|
||||
|
||||
ErrorMessage = ''
|
||||
|
||||
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||
If RowExists('LSL_USERS', UserId) then
|
||||
//We can also add additional checks like security checks, training checks, etc here if needed.
|
||||
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||
LotCurrentLotOpId = Lot_Services('GetLotCurrOperationId', LotId)
|
||||
If LotOperationId EQ LotCurrentLotOpId then
|
||||
LotMovedIn = Lot_Services('IsLotMovedIn', LotId)
|
||||
If Not(LotMovedIn) then
|
||||
Lot_Services('MoveInLot', LotId, UserId)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot is already moved into this operation.'
|
||||
end
|
||||
end else
|
||||
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Invalid user passed to routine.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Invalid Lot Operation passed to routine.'
|
||||
end
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
Response = True$
|
||||
end else
|
||||
Response = False$
|
||||
Error_Services('Add', 'Error in ' : Service : '. ' : ErrorMessage)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service CompleteLotOperation(LotOperationId, UserId)
|
||||
|
||||
//1. Validate that the lot is moved into the operation
|
||||
//2. Validate that the lot
|
||||
ErrorMessage = ''
|
||||
|
||||
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||
If RowExists('LSL_USERS', UserId) then
|
||||
//We can also add additional checks like security checks, training checks, etc here if needed.
|
||||
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||
LotCurrentLotOpId = Lot_Services('GetLotCurrOperationId', LotId)
|
||||
If LotOperationId EQ LotCurrentLotOpId then
|
||||
LotMovedIn = Lot_Services('IsLotMovedIn', LotId)
|
||||
If LotMovedIn then
|
||||
//Perform Validation for the particular operation here.
|
||||
OperationValid = Lot_Operation_Services('ValidateLotOperation', LotOperationId)
|
||||
If OperationValid then
|
||||
Lot_Services('MoveOutLot', LotId, UserId)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot Operation has not finished processing and cannot be moved out.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot is already moved into this operation.'
|
||||
end
|
||||
end else
|
||||
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Invalid user passed to routine.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Invalid Lot Operation passed to routine.'
|
||||
end
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
Response = True$
|
||||
end else
|
||||
Response = False$
|
||||
Error_Services('Add', 'Error in ' : Service : '. ' : ErrorMessage)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service ValidateLotOperation(LotOperationId)
|
||||
|
||||
ErrorMessage = ''
|
||||
IsValid = True$
|
||||
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
OperationId = LotOperationRec<LOT_OPERATION_OPERATION_ID$>
|
||||
MetTestRequired = LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$>
|
||||
MetTestTypeRequired = LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||
PackagingRequired = LotOperationRec<LOT_OPERATION_PACKAGING_REQUIRED$>
|
||||
CleanRequired = LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$>
|
||||
WaferCountRequired = LotOperationRec<LOT_OPERATION_WAFER_COUNTER_REQUIRED$>
|
||||
If MetTestRequired then
|
||||
MetTestsInSpec = True$
|
||||
AssociatedMetTestIds = LotOperationRec<LOT_OPERATION_MET_TEST_ID$>
|
||||
If AssociatedMetTestIds NE '' then
|
||||
for each MetTestId in AssociatedMetTestIds using @VM
|
||||
MetTestOoS = Database_Services('ReadDataColumn', 'MET_TEST', MetTestId, MET_TEST.OUT_OF_SPEC$, True$, 0, False)
|
||||
If MetTestOoS then
|
||||
//ToDo Check that the met tests meet the requirements.
|
||||
MetTestsInSpec = False$
|
||||
ErrorMessage = 'An associated Met test record is out of spec.'
|
||||
end
|
||||
Until MetTestsInSpec EQ False$
|
||||
Next MetTestId
|
||||
end else
|
||||
IsValid = False$
|
||||
ErrorMessage = 'Met tests are required and none are assigned.'
|
||||
end
|
||||
end
|
||||
If PackagingRequired then
|
||||
|
||||
end
|
||||
If CleanRequired then
|
||||
|
||||
end
|
||||
If WaferCountRequired then
|
||||
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Lot Operation not found'
|
||||
end
|
||||
If ErrorMessage NE '' then
|
||||
IsValid = False$
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
Response = IsValid
|
||||
|
||||
end service
|
||||
|
||||
Service ValidateFQA(LotOperationId)
|
||||
|
||||
Response = False$
|
||||
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||
OperationStartDtm = LotOperationRec<LOT_OPERATION_DATETIME_IN$>
|
||||
RelevantMetTests = ''
|
||||
MetTests = Met_Test_Services('GetMetTestsByLotId', LotId)
|
||||
For each MetTestId in MetTests using @VM
|
||||
ThisMetTestRec = Database_Services('ReadDataRow', 'MET_TEST', MetTestId, True$, 0, False$)
|
||||
|
||||
Next MetTestId
|
||||
|
||||
end service
|
||||
|
||||
Service AssociateClean(LotOperationId, CleanId, UserId)
|
||||
|
||||
end service
|
||||
|
||||
Service GetFinalQAOperationJson(LotId, Stage)
|
||||
|
||||
end service
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -17,8 +17,8 @@ COMPILE FUNCTION obj_RDS(Method,Parms)
|
||||
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_WO_Verify, obj_Prod_Spec, Send_Dyn, obj_RDS_Makeup
|
||||
DECLARE FUNCTION obj_RDS2, obj_RDS_Test, obj_WO_Mat, obj_Clean_Insp, obj_PRS_Prop, Database_Services
|
||||
DECLARE FUNCTION Logging_Services, Environment_Services, Error_Services, Signature_Services, Supplement_Services
|
||||
DECLARE FUNCTION obj_RDS2, obj_RDS_Test, obj_WO_Mat, obj_Clean_Insp, obj_PRS_Prop, Database_Services, RDS_Services
|
||||
DECLARE FUNCTION Logging_Services, Environment_Services, Error_Services, Signature_Services, Lot_Services, Supplement_Services
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, obj_WM_In
|
||||
DECLARE SUBROUTINE Btree.Extract, RDS_React_Run, Environment_Services, Logging_Services, Error_Services, Send_Info
|
||||
DECLARE SUBROUTINE SRP_Stopwatch, Database_Services, Lot_Services, Supplement_Services
|
||||
@ -475,7 +475,21 @@ Create:
|
||||
Logging_Services('AppendLog', objLog, LoggingDTM : ',' : @USER4 : ',' : RDSNo : ',' : 'Error writing new RDS record. Error code: ':errCode)
|
||||
Result = ''
|
||||
END ELSE
|
||||
Lot_Services('CreateNewLot', 'RDS', '', WaferQty, SubPartNo, LotNo, SubVendCd, @User4, '', RDSNo)
|
||||
|
||||
NewLotId = Lot_Services('CreateNewLot', 'RDS', '', WaferQty, SubPartNo, LotNo, SubVendCd, @User4, '', RDSNo)
|
||||
|
||||
If Rds_Services('IsEpiPro', RDSNo) then
|
||||
Lot_Services('AddLotOperationIntoSequence', NewLotId, 'RDS_CREATE', 1, False$)
|
||||
Lot_Services('AddLotOperationIntoSequence', NewLotId, 'PRE_EPI', 2, False$)
|
||||
Lot_Services('AddLotOperationIntoSequence', NewLotId, 'REACTOR_RUN', 3, False$)
|
||||
Lot_Services('AddLotOperationIntoSequence', NewLotId, 'POST_EPI', 4, False$)
|
||||
Lot_Services('AddLotOperationIntoSequence', NewLotId, 'RDS_CLOSE', 5, False$)
|
||||
|
||||
Lot_Services('StartLot', NewLotId, @User4) ; // LOT_START event and move in to RDS_CREATE operation
|
||||
Lot_Services('MoveOutLot', NewLotId, @User4) ; // Move out of RDS_CREATE operation
|
||||
Lot_Services('MoveInLot', NewLotId, @User4) ; // Move in to PRE_EPI operation
|
||||
end
|
||||
|
||||
Result = RDSNo
|
||||
********************************
|
||||
*Automatically Apply Supplement*
|
||||
@ -1478,4 +1492,3 @@ RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -26,10 +26,10 @@ COMPILE FUNCTION obj_RDS2(Method,Parms)
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, Dialog_Box, obj_RDS_Test
|
||||
DECLARE FUNCTION obj_React_Status, Logging_Services, Environment_Services, Database_Services, Error_Services
|
||||
DECLARE FUNCTION Material_Services, SRP_Array
|
||||
DECLARE FUNCTION Material_Services, SRP_Array, Lot_Services
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, obj_WO_Step, obj_RDS_Layer, obj_RDS_Test, obj_React_Status, obj_WO_Wfr
|
||||
DECLARE SUBROUTINE RDS_React_Run, obj_WM_Out, obj_WM_In, ErrMsg, Send_Info, obj_Clean_Insp, Database_Services
|
||||
DECLARE SUBROUTINE Logging_Services
|
||||
DECLARE SUBROUTINE Logging_Services, Lot_Services
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT WO_VERIFY_EQU
|
||||
@ -769,7 +769,14 @@ IF NOT(UnloadFailed) THEN
|
||||
// Clear REACT_RUN data (copy cleared RDS data to REACT_RUN)
|
||||
RDS_React_Run(RDSNo)
|
||||
|
||||
end
|
||||
end else
|
||||
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSNo, 'RDS')
|
||||
If Error_Services('NoError') then
|
||||
Lot_Services('MoveOutLot', LotId, @User4) ; // Move out of POST_EPI operation
|
||||
Lot_Services('MoveInLot', LotId, @User4) ; // Move into RDS_CLOSE operation
|
||||
Lot_Services('CloseLot', LotId)
|
||||
end
|
||||
end
|
||||
|
||||
END ELSE
|
||||
obj_Tables('UnlockRec',RTParms)
|
||||
@ -1675,3 +1682,4 @@ RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -151,7 +151,7 @@ Declare function Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClie
|
||||
Declare function SRP_Encode, SRP_Decode, SRP_COM, QA_Services, RDS_Services, Obj_NCR, Logging_Services, Obj_Reactor
|
||||
Declare function Get_Status, Set_Status, obj_WO_Mat, NextKey, MemberOf, FieldCount, obj_React_Status, Obj_Clean_Insp
|
||||
Declare function Schedule_Services, Signature_Services, Date, Time, Datetime, Date_Services, SRP_Array, Math_Services
|
||||
Declare function Supplement_Services, Reactor_Services
|
||||
Declare function Supplement_Services, Reactor_Services, Lot_Services
|
||||
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
@ -1797,6 +1797,7 @@ end service
|
||||
// Reponse - True$ if PRE stage was successfully signed, False$ otherwise.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SignPreEpiStage'
|
||||
|
||||
@ -1970,6 +1971,16 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
If (FirstParmsComp EQ False$) then RDS_Services('CopyRDSLayerParameters', RDSNo)
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If RDS_Services('IsEpiPro', RDSNo) then
|
||||
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSNo, 'RDS')
|
||||
If Error_Services('NoError') then
|
||||
Lot_Services('MoveOutLot', LotId, Username) ; // Move out of PRE_EPI operation
|
||||
Lot_Services('MoveInLot', LotId, Username) ; // Move into REACTOR_RUN operation
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
Response = True$
|
||||
end else
|
||||
@ -1978,6 +1989,7 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
@ -2534,6 +2546,15 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
|
||||
// Set LOAD signature in RDS record
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If RDS_Services('IsEpiPro', RDSNo) then
|
||||
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSNo, 'RDS')
|
||||
If Error_Services('NoError') then
|
||||
Lot_Services('BeginRun', LotId, Username, Reactor) ; // Begin run at REACTOR_RUN operation
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Load Stage signed onto Reactor ' : Reactor, Username)
|
||||
If ReactorType EQ 'EPP' then
|
||||
@ -2985,6 +3006,23 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
end
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If RDS_Services('IsEpiPro', RDSNo) then
|
||||
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSNo, 'RDS')
|
||||
If Error_Services('NoError') then
|
||||
Lot_Services('EndRun', LotId, Username, Reactor) ; // End run at REACTOR_RUN operation
|
||||
Lot_Services('MoveOutLot', LotId, Username) ; // Move out of REACTOR_RUN operation
|
||||
Lot_Services('MoveInLot', LotId, Username) ; // Move into POST_EPI operation
|
||||
// If no production wafers in this run, then move out of POST_EPI and close the lot.
|
||||
If Rds_Services('IsEpiProTestRun', RDSNo) then
|
||||
Lot_Services('MoveOutLot', LotId, Username) ; // Move out of POST_EPI operation
|
||||
Lot_Services('MoveInLot', LotId, Username) ; // Move into RDS_CLOSE operation
|
||||
Lot_Services('CloseLot', LotId)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Unload Stage signed onto Reactor ' : Reactor, Username)
|
||||
Response = True$
|
||||
@ -3646,4 +3684,3 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -168,9 +168,6 @@ Event PUB_SIGN.CLICK()
|
||||
Set_Property(@Window, 'SAVEWARN', False$)
|
||||
Set_Status(0)
|
||||
Send_Event(@Window, 'READ')
|
||||
* RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT', 'X')
|
||||
* CombStatus = Xlate('RDS', RDSNo, 'COMB_STATUS_STATIC', 'X')
|
||||
* Set_Property(@Window:'.COMB_STATUS', 'TEXT', CombStatus)
|
||||
|
||||
end event
|
||||
|
||||
@ -179,5 +176,3 @@ end event
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
@ -650,12 +650,8 @@ end service
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service IsEpiPro(RDSNo)
|
||||
|
||||
IsEpiPro = False$
|
||||
ReactorKey = Xlate('RDS', RDSNo, 'REACTOR', 'X')
|
||||
ReactorType = Xlate('REACTOR', ReactorKey, 'REACT_TYPE', 'X')
|
||||
If ReactorType _EQC 'EPP' or ReactorType _EQC 'P' or ReactorType _EQC 'EpiPro' then
|
||||
IsEpiPro = True$
|
||||
end
|
||||
ReactorType = Xlate('RDS', RDSNo, 'PS_REACTOR_TYPE', 'X')
|
||||
IsEpiPro = ( (ReactorType _EQC 'EPP') or (ReactorType _EQC 'P') or (ReactorType _EQC 'EpiPro') )
|
||||
Response = IsEpiPro
|
||||
|
||||
End Service
|
||||
@ -1988,6 +1984,7 @@ Service PushSigProfileToWoMat(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1,7 +1,7 @@
|
||||
compile insert LOT_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 01/04/2025
|
||||
Written : 17/06/2025
|
||||
Description : Insert for Table LOT
|
||||
----------------------------------------*/
|
||||
#ifndef __LOT_EQUATES__
|
||||
@ -23,5 +23,11 @@ compile insert LOT_EQUATES
|
||||
equ LOT_LEGACY_LOT_ID$ to 14
|
||||
equ LOT_VOIDED_LOT_RECORDS$ to 15
|
||||
equ LOT_MOST_RECENT_LOT_EVENT_ID$ to 16
|
||||
equ LOT_LEGACY_LOT_TYPE$ to 17
|
||||
equ LOT_WO_LOG_ID$ to 18
|
||||
equ LOT_PROD_SPEC_ID$ to 19
|
||||
equ LOT_EPI_PART_NO$ to 20
|
||||
equ LOT_PROD_VER_NO$ to 21
|
||||
equ LOT_MET_TEST_IDS$ to 22
|
||||
|
||||
#endif
|
||||
|
@ -1,7 +1,7 @@
|
||||
compile insert LOT_EVENT_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 16/10/2024
|
||||
Written : 17/06/2025
|
||||
Description : Insert for Table LOT_EVENT
|
||||
----------------------------------------*/
|
||||
#ifndef __LOT_EVENT_EQUATES__
|
||||
|
13
LSL2/STPROCINS/LOT_EVENT_TYPE_EQUATES.txt
Normal file
13
LSL2/STPROCINS/LOT_EVENT_TYPE_EQUATES.txt
Normal file
@ -0,0 +1,13 @@
|
||||
compile insert LOT_EVENT_TYPE_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 20/06/2025
|
||||
Description : Insert for Table LOT_EVENT_TYPE
|
||||
----------------------------------------*/
|
||||
#ifndef __LOT_EVENT_TYPE_EQUATES__
|
||||
#define __LOT_EVENT_TYPE_EQUATES__
|
||||
|
||||
equ LOT_EVENT_TYPE.DESCRIPTION$ to 1
|
||||
equ LOT_EVENT_TYPE.WIP_TRANS_TYPE$ to 2
|
||||
|
||||
#endif
|
@ -1,25 +1,35 @@
|
||||
compile insert LOT_OPERATION_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 14/10/2024
|
||||
Written : 17/06/2025
|
||||
Description : Insert for Table LOT_OPERATION
|
||||
----------------------------------------*/
|
||||
#ifndef __LOT_OPERATION_EQUATES__
|
||||
#define __LOT_OPERATION_EQUATES__
|
||||
|
||||
equ LOT_OPERATION_LOT_ID$ to 1
|
||||
equ LOT_OPERATION_OPERATION_ID$ to 2
|
||||
equ LOT_OPERATION_DATETIME_IN$ to 3
|
||||
equ LOT_OPERATION_DATETIME_OUT$ to 4
|
||||
equ LOT_OPERATION_EQUIPMENT_ID$ to 5
|
||||
equ LOT_OPERATION_WAFER_IN_QTY$ to 6
|
||||
equ LOT_OPERATION_WAFER_OUT_QTY$ to 7
|
||||
equ LOT_OPERATION_OPERATOR_IN_ID$ to 8
|
||||
equ LOT_OPERATION_OPERATOR_OUT_ID$ to 9
|
||||
equ LOT_OPERATION_OPERATION_SEQUENCE$ to 10
|
||||
equ LOT_OPERATION_REWORK$ to 11
|
||||
equ LOT_OPERATION_DATETIME_START$ to 12
|
||||
equ LOT_OPERATION_DATETIME_STOP$ to 13
|
||||
equ LOT_OPERATION_LOT_ID$ to 1
|
||||
equ LOT_OPERATION_OPERATION_ID$ to 2
|
||||
equ LOT_OPERATION_DATETIME_IN$ to 3
|
||||
equ LOT_OPERATION_DATETIME_OUT$ to 4
|
||||
equ LOT_OPERATION_EQUIPMENT_ID$ to 5
|
||||
equ LOT_OPERATION_WAFER_IN_QTY$ to 6
|
||||
equ LOT_OPERATION_WAFER_OUT_QTY$ to 7
|
||||
equ LOT_OPERATION_OPERATOR_IN_ID$ to 8
|
||||
equ LOT_OPERATION_OPERATOR_OUT_ID$ to 9
|
||||
equ LOT_OPERATION_OPERATION_SEQUENCE$ to 10
|
||||
equ LOT_OPERATION_REWORK$ to 11
|
||||
equ LOT_OPERATION_DATETIME_START$ to 12
|
||||
equ LOT_OPERATION_DATETIME_STOP$ to 13
|
||||
equ LOT_OPERATION_MET_TEST_ID$ to 14
|
||||
equ LOT_OPERATION_CLEAN_ID$ to 15
|
||||
equ LOT_OPERATION_PACKAGING_ID$ to 16
|
||||
equ LOT_OPERATION_WAFER_COUNTER_ID$ to 17
|
||||
equ LOT_OPERATION_OPERATION_TYPE$ to 18
|
||||
equ LOT_OPERATION_OPERATION_CLASS$ to 19
|
||||
equ LOT_OPERATION_MET_TEST_TYPE_REQUIRED$ to 20
|
||||
equ LOT_OPERATION_MET_TEST_REQUIRED$ to 21
|
||||
equ LOT_OPERATION_PACKAGING_REQUIRED$ to 22
|
||||
equ LOT_OPERATION_CLEAN_REQUIRED$ to 23
|
||||
equ LOT_OPERATION_WAFER_COUNTER_REQUIRED$ to 24
|
||||
|
||||
#endif
|
||||
|
||||
|
21
LSL2/STPROCINS/METROLOGY_DATA_EXAMPLE_EQUATES.txt
Normal file
21
LSL2/STPROCINS/METROLOGY_DATA_EXAMPLE_EQUATES.txt
Normal file
@ -0,0 +1,21 @@
|
||||
compile insert METROLOGY_DATA_EXAMPLE_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 07/04/2025
|
||||
Description : Insert for Table METROLOGY_DATA_EXAMPLE
|
||||
----------------------------------------*/
|
||||
#ifndef __METROLOGY_DATA_EXAMPLE_EQUATES__
|
||||
#define __METROLOGY_DATA_EXAMPLE_EQUATES__
|
||||
|
||||
equ METROLOGY_DATA_EXAMPLE_INSPECTION_TYPE$ to 1
|
||||
equ METROLOGY_DATA_EXAMPLE_TOOL_ID$ to 2
|
||||
equ METROLOGY_DATA_EXAMPLE_DATA_ENTRY_DTM$ to 3
|
||||
equ METROLOGY_DATA_EXAMPLE_DATA_ENTRY_USER$ to 4
|
||||
equ METROLOGY_DATA_EXAMPLE_RAW_DATA_POINTS$ to 5
|
||||
equ METROLOGY_DATA_EXAMPLE_DATA_AVERAGE$ to 6
|
||||
equ METROLOGY_DATA_EXAMPLE_SPEC_LIMIT_UPPER$ to 7
|
||||
equ METROLOGY_DATA_EXAMPLE_IN_SPEC$ to 8
|
||||
equ METROLOGY_DATA_EXAMPLE_SPEC_LIMIT_LOWER$ to 9
|
||||
|
||||
#endif
|
||||
|
43
LSL2/STPROCINS/MET_TEST_DATA_EQUATES.txt
Normal file
43
LSL2/STPROCINS/MET_TEST_DATA_EQUATES.txt
Normal file
@ -0,0 +1,43 @@
|
||||
compile insert MET_TEST_DATA_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 16/06/2025
|
||||
Description : Insert for Table MET_TEST_DATA
|
||||
----------------------------------------*/
|
||||
#ifndef __MET_TEST_DATA_EQUATES__
|
||||
#define __MET_TEST_DATA_EQUATES__
|
||||
|
||||
equ MET_TEST_DATA.MET_TEST_ID$ to 1
|
||||
equ MET_TEST_DATA.POSITION$ to 2
|
||||
equ MET_TEST_DATA.PROPERTY_1_VALUE$ to 3
|
||||
equ MET_TEST_DATA.PROPERTY_1_OUT_OF_SPEC$ to 4
|
||||
equ MET_TEST_DATA.PROPERTY_2_VALUE$ to 5
|
||||
equ MET_TEST_DATA.PROPERTY_2_OUT_OF_SPEC$ to 6
|
||||
equ MET_TEST_DATA.PROPERTY_3_VALUE$ to 7
|
||||
equ MET_TEST_DATA.PROPERTY_3_OUT_OF_SPEC$ to 8
|
||||
equ MET_TEST_DATA.PROPERTY_4_VALUE$ to 9
|
||||
equ MET_TEST_DATA.PROPERTY_4_OUT_OF_SPEC$ to 10
|
||||
equ MET_TEST_DATA.PROPERTY_5_VALUE$ to 11
|
||||
equ MET_TEST_DATA.PROPERTY_5_OUT_OF_SPEC$ to 12
|
||||
equ MET_TEST_DATA.PROPERTY_6_VALUE$ to 13
|
||||
equ MET_TEST_DATA.PROPERTY_6_OUT_OF_SPEC$ to 14
|
||||
equ MET_TEST_DATA.PROPERTY_7_VALUE$ to 15
|
||||
equ MET_TEST_DATA.PROPERTY_7_OUT_OF_SPEC$ to 16
|
||||
equ MET_TEST_DATA.PROPERTY_8_VALUE$ to 17
|
||||
equ MET_TEST_DATA.PROPERTY_8_OUT_OF_SPEC$ to 18
|
||||
equ MET_TEST_DATA.PROPERTY_9_VALUE$ to 19
|
||||
equ MET_TEST_DATA.PROPERTY_9_OUT_OF_SPEC$ to 20
|
||||
equ MET_TEST_DATA.PROPERTY_10_VALUE$ to 21
|
||||
equ MET_TEST_DATA.PROPERTY_10_OUT_OF_SPEC$ to 22
|
||||
equ MET_TEST_DATA.PROPERTY_11_VALUE$ to 23
|
||||
equ MET_TEST_DATA.PROPERTY_11_OUT_OF_SPEC$ to 24
|
||||
equ MET_TEST_DATA.PROPERTY_12_VALUE$ to 25
|
||||
equ MET_TEST_DATA.PROPERTY_12_OUT_OF_SPEC$ to 26
|
||||
equ MET_TEST_DATA.PROPERTY_13_VALUE$ to 27
|
||||
equ MET_TEST_DATA.PROPERTY_13_OUT_OF_SPEC$ to 28
|
||||
equ MET_TEST_DATA.PROPERTY_14_VALUE$ to 29
|
||||
equ MET_TEST_DATA.PROPERTY_14_OUT_OF_SPEC$ to 30
|
||||
equ MET_TEST_DATA.PROPERTY_15_VALUE$ to 31
|
||||
equ MET_TEST_DATA.PROPERTY_15_OUT_OF_SPEC$ to 32
|
||||
|
||||
#endif
|
72
LSL2/STPROCINS/MET_TEST_EQUATES.txt
Normal file
72
LSL2/STPROCINS/MET_TEST_EQUATES.txt
Normal file
@ -0,0 +1,72 @@
|
||||
compile insert MET_TEST_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 16/06/2025
|
||||
Description : Insert for Table MET_TEST
|
||||
----------------------------------------*/
|
||||
#ifndef __MET_TEST_EQUATES__
|
||||
#define __MET_TEST_EQUATES__
|
||||
|
||||
equ MET_TEST.MET_TEST_DATA_IDS$ to 1
|
||||
equ MET_TEST.LOT_ID$ to 2
|
||||
equ MET_TEST.LEGACY_LOT_ID$ to 3
|
||||
equ MET_TEST.LOT_OPERATION_ID$ to 4
|
||||
equ MET_TEST.TEST_DTM$ to 5
|
||||
equ MET_TEST.TOOL_CLASS$ to 6
|
||||
equ MET_TEST.TOOL_RECIPE$ to 7
|
||||
equ MET_TEST.TOOL_PATTERN$ to 8
|
||||
equ MET_TEST.INSPECTION_RECIPE$ to 9
|
||||
equ MET_TEST.SAMPLE_SIZE$ to 10
|
||||
equ MET_TEST.TOOL$ to 11
|
||||
equ MET_TEST.LAYER$ to 12
|
||||
equ MET_TEST.ZONE$ to 13
|
||||
equ MET_TEST.SLOT$ to 14
|
||||
equ MET_TEST.OUT_OF_SPEC$ to 15
|
||||
equ MET_TEST.COMPLETE$ to 16
|
||||
equ MET_TEST.PROPERTY_1$ to 17
|
||||
equ MET_TEST.PROPERTY_1_SPEC_MIN$ to 18
|
||||
equ MET_TEST.PROPERTY_1_SPEC_MAX$ to 19
|
||||
equ MET_TEST.PROPERTY_2$ to 20
|
||||
equ MET_TEST.PROPERTY_2_SPEC_MIN$ to 21
|
||||
equ MET_TEST.PROPERTY_2_SPEC_MAX$ to 22
|
||||
equ MET_TEST.PROPERTY_3$ to 23
|
||||
equ MET_TEST.PROPERTY_3_SPEC_MIN$ to 24
|
||||
equ MET_TEST.PROPERTY_3_SPEC_MAX$ to 25
|
||||
equ MET_TEST.PROPERTY_4$ to 26
|
||||
equ MET_TEST.PROPERTY_4_SPEC_MIN$ to 27
|
||||
equ MET_TEST.PROPERTY_4_SPEC_MAX$ to 28
|
||||
equ MET_TEST.PROPERTY_5$ to 29
|
||||
equ MET_TEST.PROPERTY_5_SPEC_MIN$ to 30
|
||||
equ MET_TEST.PROPERTY_5_SPEC_MAX$ to 31
|
||||
equ MET_TEST.PROPERTY_6$ to 32
|
||||
equ MET_TEST.PROPERTY_6_SPEC_MIN$ to 33
|
||||
equ MET_TEST.PROPERTY_6_SPEC_MAX$ to 34
|
||||
equ MET_TEST.PROPERTY_7$ to 35
|
||||
equ MET_TEST.PROPERTY_7_SPEC_MIN$ to 36
|
||||
equ MET_TEST.PROPERTY_7_SPEC_MAX$ to 37
|
||||
equ MET_TEST.PROPERTY_8$ to 38
|
||||
equ MET_TEST.PROPERTY_8_SPEC_MIN$ to 39
|
||||
equ MET_TEST.PROPERTY_8_SPEC_MAX$ to 40
|
||||
equ MET_TEST.PROPERTY_9$ to 41
|
||||
equ MET_TEST.PROPERTY_9_SPEC_MIN$ to 42
|
||||
equ MET_TEST.PROPERTY_9_SPEC_MAX$ to 43
|
||||
equ MET_TEST.PROPERTY_10$ to 44
|
||||
equ MET_TEST.PROPERTY_10_SPEC_MIN$ to 45
|
||||
equ MET_TEST.PROPERTY_10_SPEC_MAX$ to 46
|
||||
equ MET_TEST.PROPERTY_11$ to 47
|
||||
equ MET_TEST.PROPERTY_11_SPEC_MIN$ to 48
|
||||
equ MET_TEST.PROPERTY_11_SPEC_MAX$ to 49
|
||||
equ MET_TEST.PROPERTY_12$ to 50
|
||||
equ MET_TEST.PROPERTY_12_SPEC_MIN$ to 51
|
||||
equ MET_TEST.PROPERTY_12_SPEC_MAX$ to 52
|
||||
equ MET_TEST.PROPERTY_13$ to 53
|
||||
equ MET_TEST.PROPERTY_13_SPEC_MIN$ to 54
|
||||
equ MET_TEST.PROPERTY_13_SPEC_MAX$ to 55
|
||||
equ MET_TEST.PROPERTY_14$ to 56
|
||||
equ MET_TEST.PROPERTY_14_SPEC_MIN$ to 57
|
||||
equ MET_TEST.PROPERTY_14_SPEC_MAX$ to 58
|
||||
equ MET_TEST.PROPERTY_15$ to 59
|
||||
equ MET_TEST.PROPERTY_15_SPEC_MIN$ to 60
|
||||
equ MET_TEST.PROPERTY_15_SPEC_MAX$ to 61
|
||||
|
||||
#endif
|
@ -1,11 +1,21 @@
|
||||
compile insert OPERATION_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 10/10/2024
|
||||
Written : 17/06/2025
|
||||
Description : Insert for Table OPERATION
|
||||
----------------------------------------*/
|
||||
#ifndef __OPERATION_EQUATES__
|
||||
#define __OPERATION_EQUATES__
|
||||
|
||||
equ OPERATION_ACTIVE$ to 1
|
||||
equ OPERATION_CLASS_ID$ to 2
|
||||
equ OPERATION_OPERATION_DESCRIPTION$ to 3
|
||||
equ OPERATION_TYPE$ to 4
|
||||
equ OPERATION_REWORK$ to 5
|
||||
equ OPERATION_MET_TEST_TYPE_REQUIRED$ to 6
|
||||
equ OPERATION_MET_TEST_REQUIRED$ to 7
|
||||
equ OPERATION_PACKAGING_REQUIRED$ to 8
|
||||
equ OPERATION_CLEAN_REQUIRED$ to 9
|
||||
equ OPERATION_WAFER_COUNTER_REQUIRED$ to 10
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user