ready for unit testing

This commit is contained in:
Infineon\StieberD
2025-06-17 17:10:31 -07:00
committed by Stieber Daniel (CSC FI SPS MESLEO)
parent 401c03d752
commit 03e85359d1
21 changed files with 1713 additions and 546 deletions

View File

@ -556,8 +556,6 @@ UnloadProduct:
Next CassNo
end
RETURN
@ -639,3 +637,4 @@ SlotOverview:
RETURN

View 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

View 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

View 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

View 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

View 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

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -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
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -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

View File

@ -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__

View 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

View File

@ -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

View 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

View 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

View 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

View File

@ -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