Various bug fixes with scanner, form validation within the adjust lot qty form, and added scroll bars on the view lot form

This commit is contained in:
Infineon\Ouellette 2025-02-11 15:25:57 -07:00
parent 76915aff9a
commit 5e00026748
7 changed files with 320 additions and 195 deletions

View File

@ -1372,9 +1372,39 @@
"<8,18,1,14>": "", "<8,18,1,14>": "",
"<8,18,1,15>": "COMMEVT", "<8,18,1,15>": "COMMEVT",
"<8,18,1,16>": "0" "<8,18,1,16>": "0"
},
"<8,18,2>": {
"<8,18,2,1>": "X",
"<8,18,2,2>": "EXECUTE",
"<8,18,2,3>": "@WINDOW_EVENTS",
"<8,18,2,4>": {
"<8,18,2,4,1>": "@SELF",
"<8,18,2,4,2>": "@EVENT",
"<8,18,2,4,3>": "@PARAM1",
"<8,18,2,4,4>": "@PARAM2",
"<8,18,2,4,5>": "@PARAM3",
"<8,18,2,4,6>": "@PARAM4",
"<8,18,2,4,7>": "@PARAM5",
"<8,18,2,4,8>": "@PARAM6"
},
"<8,18,2,5>": "",
"<8,18,2,6>": "",
"<8,18,2,7>": "",
"<8,18,2,8>": "",
"<8,18,2,9>": "",
"<8,18,2,10>": "",
"<8,18,2,11>": "",
"<8,18,2,12>": "",
"<8,18,2,13>": "",
"<8,18,2,14>": "",
"<8,18,2,15>": "COMMEVT",
"<8,18,2,16>": "0"
} }
}, },
"<8,19>": "CHANGED", "<8,19>": {
"<8,19,1>": "CHANGED",
"<8,19,2>": "LOSTFOCUS"
},
"<8,20>": "", "<8,20>": "",
"<8,21>": "", "<8,21>": "",
"<8,22>": "", "<8,22>": "",

View File

@ -3859,7 +3859,8 @@
"<1,52,16>": "", "<1,52,16>": "",
"<1,52,17>": "", "<1,52,17>": "",
"<1,52,18>": "", "<1,52,18>": "",
"<1,52,19>": "" "<1,52,19>": "",
"<1,52,20>": ""
}, },
"<1,53>": { "<1,53>": {
"<1,53,1>": "ITEM", "<1,53,1>": "ITEM",
@ -9173,7 +9174,7 @@
"<2,2,39,2>": "EXECUTE", "<2,2,39,2>": "EXECUTE",
"<2,2,39,3>": "LSL2*OIWINEXE**NDW_ADJUST_LOT_QTY", "<2,2,39,3>": "LSL2*OIWINEXE**NDW_ADJUST_LOT_QTY",
"<2,2,39,4>": { "<2,2,39,4>": {
"<2,2,39,4,1>": "CreateParam", "<2,2,39,4,1>": "",
"<2,2,39,4,2>": "@WINDOW" "<2,2,39,4,2>": "@WINDOW"
}, },
"<2,2,39,5>": "", "<2,2,39,5>": "",

View File

@ -522,7 +522,7 @@
}, },
"<3,11>": { "<3,11>": {
"<3,11,1>": "0x60000", "<3,11,1>": "0x60000",
"<3,11,2>": "0x80000000" "<3,11,2>": "0x80000002"
}, },
"<3,12>": "8", "<3,12>": "8",
"<3,13>": { "<3,13>": {
@ -1221,7 +1221,7 @@
}, },
"<4,11>": { "<4,11>": {
"<4,11,1>": "0x60000", "<4,11,1>": "0x60000",
"<4,11,2>": "0x80000000" "<4,11,2>": "0x80000002"
}, },
"<4,12>": "7", "<4,12>": "7",
"<4,13>": { "<4,13>": {

View File

@ -42,6 +42,7 @@ Event WINDOW.CREATE(CreateParam)
Set_Property(@Window : '.PUB_SEARCH_LOT', 'VISIBLE', True$) Set_Property(@Window : '.PUB_SEARCH_LOT', 'VISIBLE', True$)
end end
end else end else
msg(@Window, 'Only Lead, Supervisors, or engineering may adjust lot quantities')
Result = '' Result = ''
Result<1> = False$ Result<1> = False$
End_Dialog(@Window, Result) End_Dialog(@Window, Result)
@ -58,27 +59,44 @@ end event
Event EDL_NEW_LOT_WFR_QTY.CHANGED(NewLotQty) Event EDL_NEW_LOT_WFR_QTY.CHANGED(NewLotQty)
NewLotQty = Get_Property(@Window : '.EDL_NEW_LOT_WFR_QTY', 'TEXT') NewLotQty = Get_Property(@Window : '.EDL_NEW_LOT_WFR_QTY', 'TEXT')
If NewLotQty NE '' then
If Num(NewLotQty) then If Num(NewLotQty) then
If NewLotQty LE 25 AND NewLotQty GE 0 then If NewLotQty LE 25 AND NewLotQty GE 0 then
Set_Property(@Window : '.PUB_SUBMIT', 'ENABLED', True$) Set_Property(@Window : '.PUB_SUBMIT', 'ENABLED', True$)
end else end else
msg(@Window, 'New wafer quantity value must be a number between 0 and 25.') msg(@Window, 'New wafer quantity value must be a number between 0 and 25.')
Set_Property(@Window : '.EDL_NEW_LOT_WFR_QTY', 'TEXT', '')
end end
end else end else
If NewLotQty NE '' then If NewLotQty NE '' then
msg(@Window, 'New wafer quantity value must be a number between 0 and 25.') msg(@Window, 'New wafer quantity value must be a number between 0 and 25.')
end end
end end
end
end event end event
Event EDL_LOT_NO.CHANGED(LotNo) Event EDL_LOT_NO.CHANGED(LotNo)
LotIdString = Get_Property(@Window : '.EDL_LOT_NO', 'TEXT')
Begin Case LotNo = Get_Property(@Window : '.EDL_LOT_NO', 'TEXT')
Case LotIdString[1, 4] EQ '1TTW' If LotNo[1, 4] EQ '1T' then
Set_Property(@Window : '.EDL_LOT_NO', 'TEXT', LotIdString[3, 999]) LotNo = LotNo[3, 999]
Case LotIdString[1, 2] EQ '1T' Set_Property(@Window : '.EDL_LOT_NO', 'TEXT', LotNo)
Set_Property(@Window : '.EDL_LOT_NO', 'TEXT', LotIdString[3, 999]) end
End Case end event
Event EDL_LOT_NO.LOSTFOCUS(Flag, FocusID)
Set_Property(@Window : '.EDL_CURR_WFR_QTY', 'TEXT', '')
Set_Property(@Window : '.EDL_NEW_LOT_WFR_QTY', 'TEXT', '')
LotNo = Get_Property(@Window : '.EDL_LOT_NO', 'TEXT')
If LotNo[1, 4] EQ '1T' then
LotNo = LotNo[3, 999]
Set_Property(@Window : '.EDL_LOT_NO', 'TEXT', LotNo)
end
If RowExists('LOT', LotNo) then
GoSub GetLotCurrData
end
end event end event
Event PUB_SEARCH_LOT.CLICK() Event PUB_SEARCH_LOT.CLICK()
@ -95,7 +113,15 @@ Event PUB_SUBMIT.CLICK()
CurrWfrQty = Database_Services('ReadDataColumn', 'LOT', LotId, LOT_WAFER_QTY$, True$, 0, False$) CurrWfrQty = Database_Services('ReadDataColumn', 'LOT', LotId, LOT_WAFER_QTY$, True$, 0, False$)
AmountToDecrease = 0 AmountToDecrease = 0
AmountToIncrease = 0 AmountToIncrease = 0
If RowExists('LOT', LotId) then
If NewWfrQty NE '' then
if Num(NewWfrQty) then
If NewWfrQty NE CurrWfrQty then If NewWfrQty NE CurrWfrQty then
MsgHead = 'Adjust lot wafer quantity'
MsgText = 'Are you sure you wish to adjust lot ' : LotId : ' wafer quantity from ' : CurrWfrQty : ' to ' : NewWfrQty : '?'
OK = Msg(@WINDOW,'','YESNO','',MsgHead:@FM:MsgText)
If OK then
Begin Case Begin Case
Case NewWfrQty LT CurrWfrQty Case NewWfrQty LT CurrWfrQty
AmountToDecrease = CurrWfrQty - NewWfrQty AmountToDecrease = CurrWfrQty - NewWfrQty
@ -114,7 +140,16 @@ Event PUB_SUBMIT.CLICK()
msg(@Window, 'Error Adjusting wafer quantity, ' : ErrorMessage) msg(@Window, 'Error Adjusting wafer quantity, ' : ErrorMessage)
end end
end end
end
end else
msg(@Window, 'New wafer count must be a number between 0-25')
end
end else
msg(@Window, 'New wafer count cannot be blank and must be a number between 0-25')
end
end else
msg(@Window, 'Lot # ' : LotId : ' not found!')
end
end event end event
Event PUB_CANCEL.CLICK() Event PUB_CANCEL.CLICK()
@ -139,3 +174,4 @@ GetLotCurrData:
return return

View File

@ -23,7 +23,6 @@ Return EventFlow or 1
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
PlaceDialog(-2, -2) PlaceDialog(-2, -2)
Set_Property(@Window, 'VISIBLE', 1) Set_Property(@Window, 'VISIBLE', 1)
NewTWSystemActive = XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') NewTWSystemActive = XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X')
@ -237,13 +236,15 @@ Event PUB_SUBMIT.CLICK()
If Quantity NE '' AND TWLot NE '' then If Quantity NE '' AND TWLot NE '' then
if Num(Quantity) then if Num(Quantity) then
Begin Case Begin Case
Case Quantity GT 0 AND Quantity LT 25 Case Quantity GT 0 AND Quantity LE 25
TWLots<1, -1> = TWRow<1,1> TWLots<1, -1> = TWRow<1,1>
TWLotQtys<1, -1> = TWRow<1,3> TWLotQtys<1, -1> = TWRow<1,3>
Case Quantity GT 25 Case Quantity GT 25
NotReadyReason := 'Quantity value for test wafer lot ' : TWLot : ' must be less than 25.' : CRLF$ NotReadyReason := 'Quantity value for test wafer lot ' : TWLot : ' must be less than 25.' : CRLF$
Case Quantity LE 0 Case Quantity LE 0
NotReadyReason := 'Quantity value for test wafer lot ' : TWLot : ' must be greater than 0.' : CRLF$ NotReadyReason := 'Quantity value for test wafer lot ' : TWLot : ' must be greater than 0.' : CRLF$
Case Otherwise$
NotReadyReason := 'Quantity value for test wafer lot ' : TWLot : ' is invalid.' : CRLF$
End Case End Case
end else end else
NotReadyReason := 'Quantity value for test wafer lot ' : TWLot : ' must be a number' : CRLF$ NotReadyReason := 'Quantity value for test wafer lot ' : TWLot : ' must be a number' : CRLF$
@ -251,7 +252,6 @@ Event PUB_SUBMIT.CLICK()
end else end else
NotReadyReason := 'A quantity of test wafers used is required for test wafer lot ' : TWLot : CRLF$ NotReadyReason := 'A quantity of test wafers used is required for test wafer lot ' : TWLot : CRLF$
end end
Next TWRow Next TWRow
If NotReadyReason EQ '' then If NotReadyReason EQ '' then
TRWaferKey = Test_Run_Services('CreateTestRunRecord', SelRunTypeID, SelEquipType, EquipmentID, RelatedPSN, RelatedRDS, @User4, TWLots, TWLotQtys) TRWaferKey = Test_Run_Services('CreateTestRunRecord', SelRunTypeID, SelEquipType, EquipmentID, RelatedPSN, RelatedRDS, @User4, TWLots, TWLotQtys)

View File

@ -526,12 +526,15 @@ Service ProcessScanData(ScanID, ScanJSON)
ScansRow<SCANS.SCAN_TYPE$> = 'TENCOR_LOAD' ScansRow<SCANS.SCAN_TYPE$> = 'TENCOR_LOAD'
ScansRow<SCANS.TOOL_ID$>= ScanData[3,99] ScansRow<SCANS.TOOL_ID$>= ScanData[3,99]
Case ScanData[1, 16] EQ 'TWQUANTITYUPDATE' Case ScanData[1, 16] EQ 'TWQUANTITYUPDATE'
TWLot = Field(ScanData, '|', 2) TWLot = Field(ScanData, '|', 2)
TWLotQuantity = Field(ScanData, '|', 3) TWLotQuantity = Field(ScanData, '|', 3)
ThisScanTWLots = ScansRow<SCANS.TW_LOT_ID$> ThisScanTWLots = ScansRow<SCANS.TW_LOT_ID$>
Locate TWLot in ThisScanTWLots using @VM setting twPOS then Locate TWLot in ThisScanTWLots using @VM setting twPOS then
ScansRow<SCANS.TW_LOT_QTY$, twPos> = TWLotQuantity ScansRow<SCANS.TW_LOT_QTY$, twPos> = TWLotQuantity
end end
Case ScanData[1, 17] EQ 'TESTRUNTYPEUPDATE' Case ScanData[1, 17] EQ 'TESTRUNTYPEUPDATE'
TestRunTypeId = Field(ScanData, '|', 2) TestRunTypeId = Field(ScanData, '|', 2)
ScansRow<SCANS.TEST_RUN_TYPE_ID$> = TestRunTypeId ScansRow<SCANS.TEST_RUN_TYPE_ID$> = TestRunTypeId
@ -648,6 +651,10 @@ Service ProcessScanData(ScanID, ScanJSON)
If ThisTestRunType NE '' then If ThisTestRunType NE '' then
for each TWLot in TestWaferLotData using @VM setting twPOS for each TWLot in TestWaferLotData using @VM setting twPOS
If ScansRow<SCANS.TW_LOT_QTY$, twPOS> NE '' OR ScansRow<SCANS.TW_LOT_QTY$, twPOS> GT 0 then If ScansRow<SCANS.TW_LOT_QTY$, twPOS> NE '' OR ScansRow<SCANS.TW_LOT_QTY$, twPOS> GT 0 then
TWLotCurrQty = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_WAFER_QTY$, True$, 0, False$)
ThisCurrUsageQty = ScansRow<SCANS.TW_LOT_QTY$, twPOS>
If TWLotCurrQty GT 0 then
If TWLotCurrQty GE ThisCurrUsageQty then
TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot) TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot)
If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then
TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$) TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$)
@ -659,6 +666,12 @@ Service ProcessScanData(ScanID, ScanJSON)
Abort = True$ Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.') Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.')
end end
end else
Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' does not have enough wafers. Please select ' : TWLotCurrQty : ' wafers or less.')
end
end else
Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' has no wafers and cannot be logged for usage.')
end
end else end else
Abort = True$ Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.') Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.')
@ -1114,7 +1127,10 @@ Service ProcessScanData(ScanID, ScanJSON)
Abort = False$ Abort = False$
for each TWLot in TestWaferLotData using @VM setting twPOS for each TWLot in TestWaferLotData using @VM setting twPOS
If ScansRow<SCANS.TW_LOT_QTY$, twPOS> NE '' OR ScansRow<SCANS.TW_LOT_QTY$, twPOS> GT 0 then If ScansRow<SCANS.TW_LOT_QTY$, twPOS> NE '' OR ScansRow<SCANS.TW_LOT_QTY$, twPOS> GT 0 then
TWLotCurrQty = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_WAFER_QTY$, True$, 0, False$)
ThisCurrUsageQty = ScansRow<SCANS.TW_LOT_QTY$, twPOS>
If TWLotCurrQty GT 0 then
If TWLotCurrQty GE ThisCurrUsageQty then
TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot) TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot)
If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then
TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$) TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$)
@ -1127,6 +1143,12 @@ Service ProcessScanData(ScanID, ScanJSON)
Abort = True$ Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.') Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.')
end end
end else
Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' does not have enough wafers. Please select ' : TWLotCurrQty : ' wafers or less.')
end
end else
Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' has no wafers and cannot be logged for usage.')
end
end else end else
Abort = True$ Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.') Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.')
@ -2319,3 +2341,4 @@ return

View File

@ -11,7 +11,7 @@ $Insert LOT_EQUATES
$Insert LOT_OPERATION_EQUATES $Insert LOT_OPERATION_EQUATES
Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services
Declare function SRP_Datetime, Database_Services, Test_Run_Services, File_Services, Status, delete, Insert, Datetime, SRP_Json Declare function SRP_Datetime, Database_Services, Test_Run_Services, File_Services, Status, delete, Insert, Datetime, SRP_Json, MemberOf
Declare subroutine Database_Services, Btree.Extract, Error_Services, Logging_Services, Rlist, Test_Run_Services, Lot_Services, SRP_Json Declare subroutine Database_Services, Btree.Extract, Error_Services, Logging_Services, Rlist, Test_Run_Services, Lot_Services, SRP_Json
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct'
@ -318,10 +318,27 @@ Service GetTestWaferLots(ShowOnlyOpenLots)
end service end service
Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys) Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys)
TWRunKey = '' TWRunKey = ''
Response = '' Response = ''
ErrorMessage = '' ErrorMessage = ''
//Pre-Checks.
If TWLotIds NE '' then
for each TWLotId in TWLotIds using @VM setting twLotPos
ThisTWLotCurrQty = Database_Services('ReadDataColumn', 'LOT', TWLotId, LOT_WAFER_QTY$, True$, 0, False$)
If ThisTWLotCurrQty then
ThisTWLotUsageQty = TWLotQtys<1, twLotPos>
If ThisTWLotCurrQty LT ThisTWLotUsageQty then
ErrorMessage = 'Error in Create Test Run Record routine. Lot # ' : TWLotId : ' does not have enough wafers. Please choose ' : ThisTWLotCurrQty : ' wafers or less.'
end
end else
ErrorMessage = 'Error in Create Test Run Record routine. Lot # ' : TWLotId : ' has a zero wafer quantity.'
end
Until ErrorMessage NE ''
Next TWLotId
end else
ErrorMessage = 'Error in Create Test Run Record routine. No test wafer lots entered.'
end
If ErrorMessage EQ '' then
If RunTypeID NE '' AND EqpType NE '' AND EqpID NE '' AND UserID NE '' then If RunTypeID NE '' AND EqpType NE '' AND EqpID NE '' AND UserID NE '' then
RunDTM = SRP_Datetime('Now') RunDTM = SRP_Datetime('Now')
TWRunRec = '' TWRunRec = ''
@ -397,6 +414,7 @@ Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLo
//Now check that the usage QTY can be consumed from the TW Lot //Now check that the usage QTY can be consumed from the TW Lot
ThisLotCurrQty = Database_Services('ReadDataColumn', 'LOT', TWLotId, LOT_WAFER_QTY$, True$, 0, False$) ThisLotCurrQty = Database_Services('ReadDataColumn', 'LOT', TWLotId, LOT_WAFER_QTY$, True$, 0, False$)
If ThisUsageQty LE ThisLotCurrQty then If ThisUsageQty LE ThisLotCurrQty then
Abort = false$ Abort = false$
for i = 1 to ThisUsageQty for i = 1 to ThisUsageQty
Test_Run_Services('CreateTestRunWaferRecord',TWRunKey, ThisLotPartId, RunTypeID, TWLotId, UserID) Test_Run_Services('CreateTestRunWaferRecord',TWRunKey, ThisLotPartId, RunTypeID, TWLotId, UserID)
@ -459,6 +477,7 @@ Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLo
ErrorMessage := 'User ID Missing. ' ErrorMessage := 'User ID Missing. '
end end
end end
end
If ErrorMessage NE '' then If ErrorMessage NE '' then
LogData = '' LogData = ''
LogData<1, 1> = LoggingDTM LogData<1, 1> = LoggingDTM
@ -751,6 +770,22 @@ Service GenerateTWCSVReport(StartDTM, StopDTM, SavePath)
end service end service
Service IsNewTWSystemActive(UserId)
IsTWSystemActive = False$
If UserId EQ '' then
UserId = @USER4
end
TWTrackingSystemActive = Database_Services('ReadDataColumn', 'APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, True$, 0, False$)
If TWTrackingSystemActive EQ True$ then
IsTWSystemActive = True$
end else
If MemberOf(UserId, 'TW_TRACKING_TEST') then
IsTWSystemActive = True$
end
end
end service