Files
open-insight/LSL2/STPROC/COMM_WO_MAT.txt
Mitchem Dakota (CSC FI SPS MESLEO External) 273b7f67a6 Merged PR 19143: Require 100 percent centerpoint on MU conversion.
Initial commit.

Create FQASignatureReady service in QA_SERVICES.

Create SignFQA service in SIGNATURE_SERVICES.

Commit remaining portion of project.

Implement changes requested in review meeting.

Fix typo. Add new MU logic to final entry point.

Restrict logic to only apply to 'THICK'
inspections.

Bypass new logic if Biorad 4 and 5 are down.
2025-06-18 22:23:57 +02:00

818 lines
23 KiB
Plaintext

COMPILE FUNCTION Comm_WO_Mat(Instruction, Parm1,Parm2)
#pragma precomp SRP_PreCompiler
/*
Commuter module for WO_MAT (Work Order Material) window
10/18/2006 - John C. Henry, J.C. Henry & Co., Inc.
*/
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message, Wo_Mat_Services
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, obj_WO_Mat, obj_Tables, SAP_Services, Hold_Services
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists
DECLARE FUNCTION Dialog_Box, obj_WO_Log, obj_NCR, MemberOf, obj_Tables, Error_Services, Hold_Services, Database_Services
$INSERT POPUP_EQUATES
$INSERT LOGICAL
$INSERT MSG_EQUATES
$INSERT APPCOLORS
$INSERT WM_IN_EQUATES
$INSERT WO_LOG_EQU
$INSERT WO_STEP_EQU
$INSERT WO_MAT_EQUATES
$INSERT ORDER_EQU
$INSERT RDS_EQU
$INSERT PROD_SPEC_EQU
$INSERT NOTIFICATION_EQU
$INSERT LSL_USERS_EQU
$INSERT SECURITY_RIGHTS_EQU
EQU CRLF$ TO \0D0A\
EQU COL$PROC_STEP TO 1
EQU COL$PSN TO 2
EQU COL$PRE_CLEAN TO 3
EQU COL$RDS_NO TO 4
EQU COL$CURR_STATUS TO 5
EQU COL$POST_CLEAN TO 6
EQU COL$WFRS_OUT TO 7
EQU COL$ON_HOLD_DTM TO 1
EQU COL$ON_HOLD_USER TO 2
EQU COL$ON_REASON TO 3
EQU COL$OFF_HOLD_DTM TO 4
EQU COL$OFF_HOLD_USER TO 5
EQU COL$OFF_REASON TO 6
EQU COL$INV_TAG TO 8
EQU COL$CI_KEY TO 1
EQU COL$CI_STEP TO 2
EQU COL$CI_STAGE TO 3
EQU COL$CI_CLEAN_TOOL TO 4
EQU COL_WFR_SLOT_NO$ TO 1
EQU COL_WFR_ID$ TO 2
EQU COL_WFR_DISP$ TO 3
ErrTitle = 'Error in Comm_WO_MAT'
ErrorMsg = ''
Result = ''
BEGIN CASE
CASE Instruction = 'Create' ; GOSUB Create
CASE Instruction = 'Refresh' ; GOSUB Refresh
CASE Instruction = 'Read' ; GOSUB Read
CASE Instruction = 'Write' ; GOSUB Write
CASE Instruction = 'Clear' ; GOSUB Clear
CASE Instruction = 'Delete' ; GOSUB Delete
CASE Instruction = 'Close' ; GOSUB Close
CASE Instruction = 'WfrDC' ; GOSUB WfrDC
CASE Instruction = 'Shipment' ; GOSUB Shipment
CASE Instruction = 'NCRKeysDC' ; GOSUB NCRKeysDC
CASE Instruction = 'TabClick' ; GOSUB TabClick
CASE Instruction = 'HoldClick' ; GOSUB HoldClick
CASE Instruction = 'FlagClick' ; GOSUB FlagClick
CASE Instruction = 'MakeUpClick' ; GOSUB MakeUpClick
CASE Instruction = 'CleanInspDC' ; GOSUB CleanInspDC
CASE Instruction = 'ProdVerClick' ; GOSUB ProdVerClick
CASE Instruction = 'SendGR' ; GOSUB SendGR
CASE Instruction = 'BatchFixit' ; GOSUB BatchFixit
CASE 1
ErrorMsg = 'Unknown Instruction passed to routine'
END CASE
IF ErrorMsg NE '' THEN
ErrMsg(ErrTitle:@SVM:ErrorMsg)
END
RETURN Result
* * * * * * *
Create:
* * * * * * *
obj_Appwindow('Create',@WINDOW)
* get the current style
IF MemberOf(@USER4,'OI_SUPERUSER') THEN
Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',1)
END ELSE
Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',0)
END
* Provides compatibility with the existing messaging attachment system
IF Parm1 NE '' THEN
PassedKeys = FIELD(Parm1,'*',1)
obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
END
GOSUB Refresh
RETURN
* * * * * * *
Read:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
IF RowExists('WO_MAT',WONo:'*':CassNo) ELSE
ErrMsg('Incorrect Work Order Mat Key entered.')
Send_Event(@WINDOW,'CLEAR')
RETURN
END
GOSUB Refresh
RETURN
* * * * * * *
Write:
* * * * * * *
RETURN
* * * * * * *
Clear:
* * * * * * *
GOTO Refresh
RETURN
* * * * * * *
Delete:
* * * * * * *
IF NOT(Security_Check('WO Material',DELETE$)) THEN
Security_Err_Msg('WO Material',DELETE$)
RETURN
END
WONo = Get_Property(@WINDOW:'.WO_NO','TEXT')
CassNo = Get_Property(@WINDOW:'.CASS_NO','TEXT')
IF WONo NE '' AND CassNo NE '' THEN
obj_WO_Mat('Delete',WONo:@RM:CassNo)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
END
Send_Event(@WINDOW,'CLEAR')
obj_AppWindow('ReadOnly',@WINDOW:@RM:1) ;* Clear Read Only
Result = 0
RETURN
* * * * * * *
Close:
* * * * * * *
obj_Appwindow('DetailReturn')
RETURN
* * * * * * * *
WfrDC:
* * * * * * * *
WMId = Get_Property(@WINDOW,'ID')
CtrlEntID = Get_Property(@WINDOW,'FOCUS')
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
WfrID = Get_Property(CtrlEntID,'CELLPOS',COL_WFR_ID$:@FM:CurrRow)
CONVERT '.' TO '*' IN WfrID
DetWindow = 'WO_WFR'
DetKeys = WfrID
DefaultRec = ''
RetKey = WMId
RetWin = @WINDOW
RetPage = 1
RetCtrl = CtrlEntID
RetPos = CurrPos
obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
RETURN
* * * * * * *
Refresh:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
WOMatKey = WONo:'*':CassNo
sapBatchId = Get_Property(@WINDOW:'.SAP_BATCH_NO', 'TEXT')
SAPTXDtm = Xlate('WO_MAT', WOMatKey, WO_MAT_SAP_TX_DTM$, 'X')
* Disabled until further notice! - DJS / JRO - 2023/09/18
* Re-enabled SAP Batch Fixit for material handlers - JRO - 2023/10/10
IF MemberOf(@USER4,'MATERIAL HANDLER') THEN
Set_Property(@WINDOW:'.SAP_FIXIT','ENABLED',1)
END ELSE
Set_Property(@WINDOW:'.SAP_FIXIT','ENABLED',0)
END
IF MemberOf(@USER4,'OI_SUPERUSER') THEN
Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',1)
Set_Property(@WINDOW:'.FIX_ORDER_ITEM','VISIBLE',1)
END ELSE
Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',0)
Set_Property(@WINDOW:'.FIX_ORDER_ITEM','VISIBLE',0)
END
Ctrls = @WINDOW:'.WMO_KEY':@RM ; Props = 'DEFPROP':@RM
Ctrls := @WINDOW:'.WMI_KEY':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.PS_REACTOR_TYPE' ; Props := 'DEFPROP'
Props = Get_Property(Ctrls,Props)
WMOKey = Props[1,@RM]
WMIKey = Props[COL2()+1,@RM]
ReactorType = Props[COL2()+1,@RM]
IF ReactorType = 'P' OR ReactorType = 'EPP' THEN
IF WMIKey NE '' THEN
Set_Property(@WINDOW:'.EPI_GROUP','ENABLED',1)
END ELSE
Set_Property(@WINDOW:'.EPI_GROUP','ENABLED',0)
END
IF WMOKey NE '' THEN
Set_Property(@WINDOW:'.EPO_GROUP','ENABLED',1)
END ELSE
Set_Property(@WINDOW:'.EPO_GROUP','ENABLED',0)
END
Set_Property(@WINDOW:'.ASM_GROUP','ENABLED',0)
END ELSE
Set_Property(@WINDOW:'.ASM_GROUP','ENABLED',1)
Set_Property(@WINDOW:'.EPO_GROUP','ENABLED',0)
Set_Property(@WINDOW:'.EPI_GROUP','ENABLED',0)
END
* QBF buttons
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
END ELSE
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
END
Set_Property(Ctrls,Props,Vals)
* Turn edit table symbolic column backgrounds to green
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
ETCtrls = ETSymbolics<1>
ETCols = ETSymbolics<2>
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
ETCtrl = ETCtrls<1,I>
IF ETCtrl NE @WINDOW:'.CASSETTES' AND ETCtrl NE @WINDOW:'.INV_WH' THEN
ETList = Get_Property(ETCtrl,'LIST')
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
IF ETList<Line,1> NE '' THEN
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
NEXT N
END
NEXT Line
END
NEXT I
CtrlName = @WINDOW:'.INV_WH'
InvArray = Get_Property(CtrlName,'INVALUE')
TagIDs = InvArray<COL$INV_TAG>
TagCnt = COUNT(TagIDs,@VM) + (TagIDs NE '')
FOR I = 1 TO TagCnt
InvTag = InvArray<COL$INV_TAG,I>
BEGIN CASE
CASE InvTag[1,1] = 'I' ; LineColor = PRE_BLUE$
CASE InvTag[1,1] = 'O' ; LineColor = YELLOW$
CASE 1 ; LineColor = GREEN$
END CASE
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,I,LineColor)
NEXT I
CtrlName = @WINDOW:'.NCR_KEYS'
NCRList = Get_Property(CtrlName,'LIST')
ColCount = COUNT(NCRList<1>,@VM) + (NCRList<1> NE '')
FOR Line = 1 TO COUNT(NCRList,@FM) + (NCRList NE '')
Status = NCRList<Line,2>
BEGIN CASE
CASE Status = '' ; Color = WHITE$
CASE Status = 'Closed' ; Color = GREEN$
CASE Status = 'Open' ; Color = RED$
CASE Status = 'Verified' ; Color = YELLOW$
CASE 1 ; Color = WHITE$
END CASE
FOR Col = 1 TO ColCount
stat = Send_Message(CtrlName,'COLOR_BY_POS',Col,Line,Color)
NEXT Col
NEXT Line
RETURN
* * * * * * *
Shipment:
* * * * * * *
ShipNo = Get_Property(@WINDOW:'.SHIP_NO','DEFPROP')
IF ShipNo NE '' THEN
obj_AppWindow('ViewRelated','SHIPMENT':@RM:ShipNo)
END
RETURN
* * * * * * *
RdsDC:
* * * * * * *
WOStepKey = Get_Property(@WINDOW,'ID')
IF WOStepKey = '' THEN RETURN
CtrlEntID = @WINDOW:'.CASSETTES'
CurrPos = Get_Property(CtrlEntID,'NOTIFYPOS') ;* Undocumented property that gives cell location when multi select is enabled.
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
RDSNo = Get_Property(CtrlEntID,'CELLPOS',2:@FM:CurrRow)
IF RDSNo NE '' THEN
Set_Property(@WINDOW,'@RETURN_FROM_RDS',WOStepKey) ;* Bullshit lashup to work with multiple RDS windows
thisFormName = 'RDS'
thisFormWindowUp = Get_Property(thisFormName,'VISIBLE') ;* Returns 0 = hidden, 1 = visible, 2 = minimized, 3 = maximized
IF thisFormWindowUp = '' THEN
If Get_Property('NDW_MAIN', 'VISIBLE') then
AppMain = 'NDW_MAIN'
end else
AppMain = 'LSL_MAIN2'
end
Start_Window(thisFormName,AppMain,RDSNo:'*CENTER', '', '') ;* Put up the card window
RETURN
END
IF thisFormWindowUp = 2 THEN Set_Property(thisFormName,'VISIBLE',9) ;* Restore the window if minimized
IF Get_Property(thisFormName,'SAVEWARN') THEN
Send_Event(thisFormName,'CLEAR') ;* Clear anything existing (prompts for save first)
END
END
RETURN
* * * * * * *
NCRKeysDC:
* * * * * * *
WMId = Get_Property(@WINDOW,'ID')
CtrlEntID = @WINDOW:'.NCR_KEYS'
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
NCRKey = Get_Property(CtrlEntID,'CELLPOS',1:@FM:CurrRow)
Send_Event(@WINDOW,'WRITE')
DetWindow = 'NCR'
DetKeys = NCRKey
DefaultRec = ''
RetKey = WMId
RetWin = @WINDOW
RetPage = 1
RetCtrl = CtrlEntID
RetPos = CurrPos
obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
RETURN
* * * * * * *
TabClick:
* * * * * * *
IF Parm1 NE '' THEN
Page = Parm1
END ELSE
Page = Get_Property(@WINDOW:'.TAB_CONTROL','VALUE')
END
Set_Property(@WINDOW,'VPOSITION',Page)
RETURN
* * * * * * *
HoldClick:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
CtrlEnt = Get_Property(@WINDOW,'FOCUS')
IF WONo = '' OR CassNo = '' THEN RETURN
WOMatKey = WONo:'*':CassNo
HoldEntity = 'WO_MAT'
HoldEntityID = WOMatKey
Send_Event(CtrlEnt,'GOTFOCUS')
Set_Property(@WINDOW,'SAVEWARN',0)
Send_Event(@WINDOW,'CLEAR')
* obj_WO_Mat('ToggleHold',WOMatKey:@RM:HoldEntity:@RM:HoldEntityID:@RM:CtrlEnt)
*
* IF Get_Status(errCode) THEN ErrMsg(errCode)
Transition = Hold_Services('CheckForHold', WOMatKey, CtrlEnt)
HoldType = 'HOLD'
HoldData = ''
HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType)
If HoldData NE 'Cancel' then
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, '')
IF Error_Services("HasError") THEN
ErrCode = Error_Services("GetMessage")
ErrMsg(errCode)
end
end
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey)
RETURN
* * * * * * *
HoldDC:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
IF WONo = '' OR CassNo = '' THEN RETURN
WOMatKey = WONo:'*':CassNo
CtrlEntID = @WINDOW:'.HOLD_HISTORY'
HoldHistory = Get_Property(CtrlEntID,'LIST')
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
HistoryCols = Get_Property(CtrlEntID, "COLUMN")
ColName = HistoryCols<1,1,CurrCol>
Set_Property(@WINDOW,'SAVEWARN',0)
WOMatRec = Database_Services("ReadDataRow", "WO_MAT", WOMatKey, "", "", FALSE$)
IF INDEX(ColName,'START',1) THEN
HoldStartReason = WOMatRec<WO_MAT_HOLD_START_REASON$,CurrRow>
UpdatedText = Dialog_Box('DIALOG_TEXT',@WINDOW,'Hold Start Reason':@FM:HoldStartReason)
END ELSE
IF INDEX(ColName,'STOP',1) THEN
HoldStopReason = WOMatRec<WO_MAT_HOLD_STOP_REASON$,CurrRow>
UpdatedText = Dialog_Box('DIALOG_TEXT',@WINDOW,'Hold Stop Reason':@FM:HoldStopReason)
END
END
If UpdatedText NE 'Cancel' then
Hold_Services("EditHoldReason",WOMatKey, ColName, CurrRow, UpdatedText)
End
IF Error_Services("NoError") NE TRUE$ THEN
ErrMsg(Error_Services("GetMessage"))
end
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey)
RETURN
* * * * * * *
FlagClick:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
CtrlEnt = Get_Property(@WINDOW,'FOCUS')
FieldNo = Get_Property(CtrlEnt,'POS')
IF WONo = '' OR CassNo = '' THEN RETURN
WOMatKey = WONo:'*':CassNo
IF NOT(MemberOf(@USER4,'MASTER_SCHED')) AND NOT(MemberOf(@USER4,'OI_ADMIN')) THEN
ErrMsg('This function is limited to Material Control.')
RETURN
END
Send_Event(CtrlEnt,'GOTFOCUS')
CheckValue = Get_Property(CtrlEnt,'DEFPROP')
Set_Property(@WINDOW,'SAVEWARN','0')
Send_Event(@WINDOW,'CLEAR')
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
IF Get_Status(errCode) THEN ErrMsg(errCode)
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey)
RETURN
************
MakeUpClick:
************
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
CtrlEnt = Get_Property(@WINDOW,'FOCUS')
FieldNo = Get_Property(CtrlEnt,'POS')
Send_Event(CtrlEnt,'GOTFOCUS')
CheckValue = Get_Property(CtrlEnt,'DEFPROP')
InvalidRequest = False$
IF ((WONo NE '') AND (CassNo NE '')) THEN
WOMatKey = WONo:'*':CassNo
OnHold = Xlate('WO_MAT', WOMatKey, 'HOLD', 'X')
IF OnHold NE True$ then
IF (MemberOf(@USER4,'MASTER_SCHED')) |
OR (MemberOf(@USER4,'SUPERVISOR')) |
OR (MemberOf(@USER4,'ENGINEERING')) |
OR (MemberOf(@USER4,'LEAD')) |
OR (MemberOf(@USER4,'OI_ADMIN')) THEN
WOMatRec = Database_Services("ReadDataRow", 'WO_MAT', WOMatKey)
If Error_Services('NoError') then
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
SAPTXDtm = WOMatRec<WO_MAT_SAP_TX_DTM$>
AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
FullBoxReject = (SAPBatchNo[-1, 1] = 'R')
Begin Case
Case AwaitingBatchNo
InvalidRequest = True$
ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
Case FullBoxReject
InvalidRequest = True$
ErrMsg('WARNING: Cassette ineligible to be converted as it is a full box reject.')
Case Otherwise$
Null
End Case
If Not(InvalidRequest) then
ReactorType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE_NO_CONV', 'X')
EpiPro = (ReactorType EQ 'EPP')
If EpiPro then
LotId = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X')
end else
LotId = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
RDSNo = LotID
end
If LotId NE '' then
Parms = ''
Parms<1> = LotId ; // Cassette to verify wafer count of.
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
Parms<3> = 'MU' ; // Wafer counter tool location
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
If Proceed EQ True$ then
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
If EpiPro EQ False$ then
IF Get_Status(errCode) THEN
ErrMsg('Unable to set makeup flag until Unload stage is signed.')
InvalidRequest = True$
END else
Set_Property(@WINDOW,'SAVEWARN', False$)
Send_Event(@WINDOW,'CLEAR')
If (CheckValue EQ True$) then
Wo_Mat_Services('MakeupFlagOn', RDSNo)
end
end
end else
Set_Property(@WINDOW,'SAVEWARN', False$)
Send_Event(@WINDOW,'CLEAR')
end
end else
InvalidRequest = True$
end
end else
InvalidRequest = True$
ErrMsg('WARNING: Error starting wafer counter check. RDS No is missing.')
end
end
end else
InvalidRequest = True$
ErrMsg('ERROR: Error reading WO_MAT record.')
end
END ELSE
InvalidRequest = True$
ErrMsg('INFO: This function is limited to authorized users only.')
END
end else
InvalidRequest = True$
ErrMsg('INFO: You cannot make changes to the lot while it is on hold.')
end
END ELSE
InvalidRequest = True$
ErrMsg('WARNING: Work Order and Cassette information is missing.')
END
IF (InvalidRequest EQ True$) then
/* Toggle back the checkbox flag */
IF (CheckValue EQ False$) THEN
Set_Property(CtrlEnt, 'DEFPROP', True$)
END ELSE
Set_Property(CtrlEnt, 'DEFPROP', False$)
END
END
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey)
RETURN
* * * * * * *
CleanInspDC:
* * * * * * *
CtrlEntID = @WINDOW:'.CLEAN_INSP'
CurrPos = Get_Property(CtrlEntID,"SELPOS")
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
CIKey = Get_Property(CtrlEntID,'CELLPOS',COL$CI_KEY:@FM:CurrRow)
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
IF CIKey NE '' AND WONo NE '' AND CassNo NE '' THEN
Send_Event(@WINDOW,'CLEAR')
DetWindow = 'CLEAN_INSP'
DetKeys = CIKey
DefaultRec = ''
RetKey = WONo:'*':CassNo
RetWin = @WINDOW
RetPage = 1
RetCtrl = CtrlEntID
RetPos = CurrPos
obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
RETURN
* * * * * * *
ProdVerClick:
* * * * * * *
Ctrls = @WINDOW:'.WO_NO':@RM ; Props = 'DEFPROP':@RM
Ctrls := @WINDOW:'.CASS_NO':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.PROD_VER_NO' ; Props := 'DEFPROP'
Vals = Get_Property(Ctrls,Props)
WONo = Vals[1,@RM]
CassNo = Vals[COL2()+1,@RM]
ProdVerNo = Vals[COL2()+1,@RM]
IF WONo NE '' AND CassNo NE '' THEN
DetWindow = 'PROD_VER'
DetKeys = ProdVerNo
DefaultRec = ''
RetKey = WONo:'*':CassNo
RetPage = 1
RetCtrl = ''
RetPos = ''
oAParms = DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos
obj_AppWindow('ViewNewDetail',oAParms)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
RETURN
* * * * * * *
SendGR:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
If WONo NE '' and CassNo NE '' then
WOMatKey = WONo:'*':CassNo
WOMATRec = xlate('WO_MAT', WOMatKey, '', 'X')
MUBox = Xlate('WO_MAT', WOMatKey, 'MAKEUP_BOX', 'X')
Locate 'PACK' In WOMATRec<7> Using @VM Setting packLoc Then
myVal = WOMATRec<31, packLoc>
packComplete = (WOMATRec<31, packLoc> _EQC 'packaging complete')
end else
packComplete = FALSE$
end
If ( (packComplete EQ '1') or (MUBox EQ True$) ) Then
Sap_Services('RetransmitCassComp', WOMatKey)
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey)
ErrMsg('SAP Transaction for ':WOMatKey:' succesfully resent.')
end else
ErrMsg('Packaging Step not complete - cannot send to SAP.':CRLF$:'Please return cassette to FAB for packaging.')
end
end else
ErrorMessage = 'Process Error: Either Work Order number or Cassette number are null.'
ErrMsg(ErrorMessage)
end
RETURN
* * * * * * *
BatchFixit:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
WOMatKey = WONo:'*':CassNo
IF WONo NE '' AND CassNo NE '' THEN
Send_Event(@WINDOW,'CLEAR')
obj_Appwindow('ViewRelated','WO_MAT_BATCH':@RM:WOMatKey)
Set_Property('WO_MAT_BATCH','@RETURNKEY',WOMatKey)
END
RETURN