421 lines
19 KiB
Plaintext
421 lines
19 KiB
Plaintext
Compile function Automated_Workflow_Services(@Service, @Params)
|
|
|
|
/*
|
|
Initial Author: Jonathan Ouellette
|
|
This service module has a catalogued list of functions to quickly and easily perform certain functions related to lot
|
|
processing.
|
|
|
|
1. CreateAWO - Imitates the process of getting data from SAP and processing the WO start in OI.
|
|
2. RouteWO - Imitates routing of a WO, AKA selecting a ProdVer and Assigning the WO to a reactor Type
|
|
3. PrescribeWafers - Imitates creating the child lots for a WO, AKA creating WO_MAT records
|
|
4. ReleaseCassettes - Assigns raw substrates to the WO_MAT records. RDS for non-epipro is created at this point.
|
|
5. PerformPTI - Imitates Receiving operator moving the lot into the fab.
|
|
6. Perform1VER - Performs the 1VER operation for an RDS.
|
|
7. PerformLoad - Performs the load operation for an RDS.
|
|
8. PerformUnload - Performs the unload operation for a non-epipro RDS.
|
|
9. EnterRecipeParms - Used in conjunction with PerformLoad. Used to enter the parameters for the Reactor Recipe upon load
|
|
typically this is the first load of a Work Order.
|
|
10. VerifyRecipeParms - Used in conjunction with PerformLoad. Used to verify the current recipe setpoints for an RDS load.
|
|
|
|
|
|
*/
|
|
#pragma precomp SRP_PreCompiler
|
|
Declare function Gan_Services, Obj_Notes_Sent, msg, Check_Notes, Jonathan_Services, Database_Services, SRP_Datetime
|
|
Declare function Lsl_Users_Services, SRP_Time, RList, Error_Services, Obj_Wo_Mat, Pm_Services, Date_Services, Test_Run_Services
|
|
Declare function Reactor_Services, Reactor_Log_Services, obj_react_item, Utility, Environment_Services, obj_wo_log, Qa_Services
|
|
Declare subroutine Start_Window, RList, Set_Status, Database_Services, Obj_Sap, Sap_Services, Btree.Extract, Qa_Services
|
|
Declare subroutine Reactor_Services, Obj_Wo_Log, obj_wo_mat, Work_Order_Services, Material_Movement_Services, Automated_Workflow_Services
|
|
Declare subroutine Override_Services, Obj_Wo_Mat_Log, obj_post_log, Obj_Sap
|
|
|
|
$insert LOGICAL
|
|
$insert NOTE_PTRS_EQU
|
|
$insert MSG_EQUATES
|
|
$Insert APP_INSERTS
|
|
$Insert RLIST_EQUATES
|
|
$Insert WO_LOG_EQUATES
|
|
$Insert RDS_EQUATES
|
|
$Insert WO_STEP_EQUATES
|
|
$Insert WO_MAT_QA_EQUATES
|
|
$Insert REACT_RUN_EQUATES
|
|
$Insert RDS_LAYER_EQUATES
|
|
$Insert RDS_TEST_EQUATES
|
|
$Insert PM_EQUATES
|
|
$Insert PM_SPEC_EQUATES
|
|
$Insert WO_MAT_EQUATES
|
|
$Insert WM_OUT_EQUATES
|
|
$Insert TEST_RUN_EQUATES
|
|
$Insert TEST_RUN_WAFER_EQUATES
|
|
$Insert TEST_WAFER_PROD_EQUATES
|
|
$Insert TEST_RUN_TYPE_EQUATES
|
|
$Insert EPI_PART_EQUATES
|
|
$Insert POPUP_EQUATES
|
|
$Insert REACTOR_EQUATES
|
|
|
|
GoToService
|
|
|
|
Return Response or ""
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SERVICES
|
|
//-----------------------------------------------------------------------------
|
|
|
|
Service CreatAWO()
|
|
|
|
//Step 1: Start a WO WOLogFileIn variable emulates what an SAP file would have
|
|
/*
|
|
ProdOrdNo = FileIn<1,1>
|
|
CustPONo = FileIn<1,2>
|
|
PromiseShipDt = FileIn<1,3>
|
|
EpiPartNo = FileIn<1,4>
|
|
SubPartNo = FileIn<1,5>
|
|
SubRevNo = FileIn<1,6>
|
|
WOQty = FileIn<1,7>
|
|
VendCd = FileIn<1,8>
|
|
*/
|
|
debug
|
|
WOLogFileIn = 'M999930.1':@VM:'NA':@VM:'02/29/2024':@VM:'U053':@VM:'931968':@VM:'1.0':@VM:'2400':@VM:'NA'
|
|
RetVal = obj_WO_LOG('SAPCreate',WOLogFileIn)
|
|
Response = RetVal
|
|
end service
|
|
|
|
Service RouteWO(WO_No)
|
|
//Step 2: Route a WO with a Product Version
|
|
|
|
WOLogRec = Database_Services('ReadDataRow', 'WO_LOG', WO_No)
|
|
EpiPartNo = WOLogRec<WO_LOG_EPI_PART_NO$>
|
|
If EpiPartNo NE '' then
|
|
AllProdVerNos = XLATE('EPI_PART',EpiPartNo,EPI_PART_PROD_VER_NO$,'X')
|
|
TypeOver = ''
|
|
TypeOver<PDISPLAY$> = AllProdVerNos
|
|
TypeOver<PSELECT$> = 1
|
|
TypeOver<PMODE$> = 'K'
|
|
SelectedProdVerNo = Popup(@WINDOW,TypeOver,'PROD_VER')
|
|
If SelectedProdVerNo NE '' then
|
|
obj_WO_Log('Route',WO_No:@RM:SelectedProdVerNo)
|
|
end
|
|
end
|
|
end service
|
|
|
|
Service PrescribeWafers(WONo, AmountToRX)
|
|
//Step 3: prescribe wafers. This is the same as assigning lot numbers to individual lots of raw material. AKA creating WO_MAT records
|
|
/*
|
|
a. User clicks the PUB_RX button on the WO_LOG form.
|
|
b. Opens WO Receipt form
|
|
c. Users clicks on WO's Due in
|
|
d. User selects or enters a WO.
|
|
e. User clicks scan codes, opens
|
|
*/
|
|
debug
|
|
ProdVerNo = XLATE('WO_LOG', WONo, 'PROD_VER_NO', 'X')
|
|
ReactType = XLATE('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
|
CassLotNo = '123456789'
|
|
CustPartNo = XLATE('WO_LOG', WONo, 'CUST_PART_NO', 'X')
|
|
CassQty = 25
|
|
NumCassToRX = AmountToRX / 25
|
|
ExistingWOMatList = XLATE('WO_LOG', WONo, 'WO_MAT_KEY', 'X')
|
|
LastCassNo = 0
|
|
for each cass in ExistingWOMatList using @VM setting iPos
|
|
thisCassNo = FIELD(cass, '*', 2)
|
|
if thisCassNo GT LastCassNo then LastCassNo = thisCassNo
|
|
Next cass
|
|
for i = 1 to NumCassToRX
|
|
NextCassNo = LastCassNo + 1
|
|
LastCassNo = nextCassNo
|
|
Parms = WONo:@RM
|
|
Parms := NextCassNo:@RM
|
|
Parms := ProdVerNo:@RM
|
|
Parms := CassLotNo:@RM
|
|
Parms := CassQty:@RM
|
|
Parms := CustPartNo:@RM ;* This is the CUSTOMER part No
|
|
Parms := 1:@RM
|
|
Parms := ReactType:@RM ;* 3 character Reactor Type Code
|
|
Parms := '':@RM
|
|
Parms := 'SR':@RM ;* Warehouse = 'SR' - Shipping/Receiving Area
|
|
Parms := 'RB':@RM ;* Location = 'RB' - Receiving Bench
|
|
Parms := OCONV(SRP_Datetime('Now'), 'DT/4'):@RM
|
|
Parms := 'JONATHAN_O':@RM
|
|
Parms := '':@RM
|
|
Parms := '':@RM
|
|
Parms := '':@RM ;* Added 8/18/2009 JCH
|
|
Parms := '':@RM ;* Added 12/16/2009 JCH
|
|
Parms := 25:@RM ;* Added 11/4/2009 JCH
|
|
Parms := 0:@RM ;* Added 05/14/2010 JCH
|
|
Parms := '':@RM ;* Added 07/14/2011 for SAP Project JCH
|
|
Parms := 25 ; // Added 02/01/2018 dmb
|
|
obj_WO_Mat('Create',Parms)
|
|
If Error_Services('NoError') then
|
|
WOLogRec = Database_Services('ReadDataRow', 'WO_LOG', WONo)
|
|
WOLogRec<WO_LOG_WO_MAT_KEY$, -1> = WONo : '*' : LastCassNo
|
|
Database_Services('WriteDataRow', 'WO_LOG', WONo, WOLogRec, 1, 0, 1)
|
|
end
|
|
Next i
|
|
Work_Order_Services('UpdateReceivedQty', WONo)
|
|
|
|
|
|
end service
|
|
|
|
Service ReleaseCassettes(WONo)
|
|
|
|
//Step 4: User clicks release cassettes(PUB_RELEASE) from WO_LOG form
|
|
Work_Order_Services('ReleaseCassettes', WONo)
|
|
//Can get RDS number at this point
|
|
end service
|
|
|
|
Service PerformPTI(CassID)
|
|
debug
|
|
//Step 5: User performs a PTI scan to tag lot into the fab.
|
|
Warehouse = '1K'
|
|
Location = 'PTI'
|
|
Material_Movement_Services('SaveRecord', CassID, Warehouse, Location, @USER4)
|
|
end service
|
|
|
|
* Service BatchProcessLotList()
|
|
* RDSList = ''
|
|
*
|
|
* RDSList<1> = 627134
|
|
* RDSList<2> = 627135
|
|
* RDSList<3> = 627136
|
|
* RDSList<4> = 627132
|
|
* RDSList<5> = 627133
|
|
*
|
|
* for each rds in RDSList using @FM
|
|
* //Automated_Workflow_Services('Perform1VER', rds, 63, 25)
|
|
* Automated_Workflow_Services('PerformUnload', rds)
|
|
* Next rds
|
|
* end service
|
|
|
|
Service Perform1VER(CassID, ReactorID, WfrQty)
|
|
|
|
//Step 6
|
|
If RowExists('RDS', CassID) AND ReactorID NE '' then
|
|
ReadyToSign = QA_Services('PreEpiSignatureReady', CassID, @User4, WfrQty, ReactorID)
|
|
If (ReadyToSign EQ True$) then
|
|
QA_Services('SignPreEpiStage', CassID, @USER4, WfrQty, ReactorID)
|
|
end
|
|
end
|
|
|
|
end service
|
|
|
|
Service PerformLoad(CassID, WfrInQty, LorRLL)
|
|
|
|
//Step 7
|
|
If RowExists('RDS', CassID) then
|
|
ReadyToSign = Qa_Services('LoadSignatureReady', CassID, @User4, WfrInQty, LorRLL, 0)
|
|
If ReadyToSign then
|
|
Qa_Services('SignLoadStage', CassID, @User4, WfrInQty, LorRLL, 0)
|
|
end else
|
|
ErrorReason = Error_Services('GetMessage')
|
|
Begin Case
|
|
Case ErrorReason EQ 'Process Error: Recipe parameters have not been entered.'
|
|
//Get the expected parameters and enter them. This is in the RDS_Layer Record
|
|
//First lets get limits from the RDS Layer Record(s)
|
|
RDSLayerKeys = XLATE('RDS', CassID, RDS_RDS_LAYER_KEYS$, 'X')
|
|
for each RDSLayerKey in RDSLayerKeys using @VM setting rlPos
|
|
Automated_Workflow_Services('EnterRecipeParams', RDSLayerKey)
|
|
If Error_Services('NoError') then
|
|
Automated_Workflow_Services('PerformLoad', CassID, WfrInQty, LorRLL)
|
|
end else
|
|
//Die
|
|
Return
|
|
end
|
|
Next RDSLayerKey
|
|
Case ErrorReason EQ 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
|
|
Automated_Workflow_Services('VerifyRecipeParams', CassID)
|
|
If Error_Services('NoError') then
|
|
Automated_Workflow_Services('PerformLoad', CassID, WfrInQty, LorRLL)
|
|
end else
|
|
//Die
|
|
Return
|
|
end
|
|
End Case
|
|
end
|
|
end
|
|
end service
|
|
|
|
Service PerformUnload(RDSNo)
|
|
//Step 8
|
|
|
|
If RDSNo NE '' then
|
|
Reactor = XLATE('RDS', RDSNo, 'REACTOR', 'X')
|
|
If Reactor NE '' then
|
|
ReadyToSign = QA_Services('UnloadSignatureReady', RDSNo, @User4, Reactor)
|
|
If Error_Services('HasError') then
|
|
If ErrorMsg EQ 'Cassette runtime exceeds three days! An override by a LEAD or SUPERVISOR is required.' then
|
|
Override_Services('SetOverride', 'RDS', RDSNo, 'UNLOAD_DTM', @USER4)
|
|
ReadyToSign = True$
|
|
end
|
|
end
|
|
If ReadyToSign then
|
|
QA_Services('SignUnloadStage', RDSNo, @User4)
|
|
end
|
|
end else
|
|
Error_Services('Add', 'No Reactor assigned to RDS!')
|
|
end
|
|
end else
|
|
Error_Services('Add', 'No RDS No. Supplied!')
|
|
end
|
|
end service
|
|
|
|
Service PerformFQA(RDSNo)
|
|
|
|
ToolID = ''
|
|
WHCd = 'CR'
|
|
LocCD = 'QA'
|
|
Tag = ''
|
|
SigDt = Date()
|
|
SigTm = Time()
|
|
WONo = XLATE('RDS', RDSNo, RDS_WO$, 'X')
|
|
CassNo = XLATE('RDS', RDSNo, RDS_CASS_NO$, 'X')
|
|
|
|
Equ COL$LOG_FILE to 1
|
|
Equ COL$LOG_DTM to 2
|
|
Equ COL$ACTION to 3
|
|
Equ COL$WH_CD to 4
|
|
Equ COL$LOC_CD to 5
|
|
Equ COL$WO_NOS to 6
|
|
Equ COL$CASS_NOS to 7
|
|
Equ COL$USER_ID to 8
|
|
Equ COL$TAGS to 9
|
|
Equ COL$TOOL_ID to 10
|
|
EventParms = ''
|
|
EventParms<COL$LOG_FILE> = 'WO_MAT'
|
|
EventParms<COL$LOG_DTM> = SigDt:' ':SigTm
|
|
EventParms<COL$ACTION> = 1:'QA'
|
|
EventParms<COL$WH_CD> = 'CR'
|
|
EventParms<COL$LOC_CD> = 'QA'
|
|
EventParms<COL$WO_NOS> = WONo
|
|
EventParms<COL$CASS_NOS> = CassNo
|
|
EventParms<COL$USER_ID> = @USER4
|
|
EventParms<COL$TAGS> = ''
|
|
EventParms<COL$TOOL_ID> = ''
|
|
|
|
CONVERT @FM TO @RM IN EventParms
|
|
|
|
obj_WO_Mat_Log('Create',EventParms) ;* * * * * INV EVENT LOG * * * * *
|
|
Obj_Post_Log('POST')
|
|
|
|
Qa_Services('SignFQAStage', RDSNo, @USER4)
|
|
end service
|
|
|
|
|
|
Service EnterRecipeParams(RDSLayerKey)
|
|
|
|
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKey)
|
|
If RDSLayerRec NE '' then
|
|
If RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> NE '' then
|
|
//Epi Deposit Time
|
|
RDSLayerRec<RDS_LAYER_EPI_TIME$> = ((RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> - RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_DILUENT_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DILUENT_MAX$> NE '' then
|
|
//Diluent
|
|
RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$> = ((RDSLayerRec<RDS_LAYER_DILUENT_MAX$> - RDSLayerRec<RDS_LAYER_DILUENT_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DILUENT_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> NE '' then
|
|
//Dopant Flow
|
|
RDSLayerRec<RDS_LAYER_DOPANT_FLOW$> = ((RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> NE '' then
|
|
//HCL Flow
|
|
RDSLayerRec<RDS_LAYER_HCL_FLOW$> = ((RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> NE '' then
|
|
//Bake Time
|
|
RDSLayerRec<RDS_LAYER_BAKE_TIME$> = ((RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> - RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> NE '' then
|
|
//H2 Flow
|
|
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$> = ((RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> NE '' then
|
|
//TCS Flow
|
|
RDSLayerRec<RDS_LAYER_TCS_FLOW$> = ((RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> NE '' then
|
|
//DCS Flow
|
|
RDSLayerRec<RDS_LAYER_DCS_FLOW$> = ((RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> - RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_AUX1_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_AUX1_MAX$> NE '' then
|
|
//AUX 1
|
|
RDSLayerRec<RDS_LAYER_AUX1$> = ((RDSLayerRec<RDS_LAYER_AUX1_MAX$> - RDSLayerRec<RDS_LAYER_AUX1_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_AUX1_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_AUX2_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_AUX2_MAX$> NE '' then
|
|
//AUX2
|
|
RDSLayerRec<RDS_LAYER_AUX2$> = ((RDSLayerRec<RDS_LAYER_AUX2_MAX$> - RDSLayerRec<RDS_LAYER_AUX2_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_AUX2_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> NE '' then
|
|
//F_OFFSET
|
|
RDSLayerRec<RDS_LAYER_F_OFFSET$> = ((RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> NE '' then
|
|
//S_OFFSET
|
|
RDSLayerRec<RDS_LAYER_S_OFFSET$> = ((RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> NE '' then
|
|
//R OFFSET
|
|
RDSLayerRec<RDS_LAYER_R_OFFSET$> = ((RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> - RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_ETCH1_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH1_MAX$> NE '' then
|
|
//ETCH 1
|
|
RDSLayerRec<RDS_LAYER_ETCH1$> = ((RDSLayerRec<RDS_LAYER_ETCH1_MAX$> - RDSLayerRec<RDS_LAYER_ETCH1_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH1_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_ETCH2_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH2_MAX$> NE '' then
|
|
//ETCH 2
|
|
RDSLayerRec<RDS_LAYER_ETCH2$> = ((RDSLayerRec<RDS_LAYER_ETCH2_MAX$> - RDSLayerRec<RDS_LAYER_ETCH2_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH2_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_ETCH3_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_ETCH3_MAX$> NE '' then
|
|
//ETCH 3
|
|
RDSLayerRec<RDS_LAYER_ETCH3$> = ((RDSLayerRec<RDS_LAYER_ETCH3_MAX$> - RDSLayerRec<RDS_LAYER_ETCH3_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_ETCH3_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> NE '' then
|
|
//UL_TEMP
|
|
RDSLayerRec<RDS_LAYER_UL_TEMP$> = ((RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> - RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$>
|
|
end
|
|
|
|
If RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> NE '' AND RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> NE '' then
|
|
//Susceptor Etch
|
|
RDSLayerRec<RDS_LAYER_SUSC_ETCH$> = ((RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> - RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$>) / 2) + RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$>
|
|
end
|
|
Database_Services('WriteDataRow', 'RDS_LAYER', RDSLayerKey, RDSLayerRec, True$, False$, True$)
|
|
end
|
|
|
|
end service
|
|
|
|
Service VerifyRecipeParams(RDSNo)
|
|
//Used to verify exisiting recipe params. This is if they are already set.
|
|
IF RDSNo NE '' then
|
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
|
RDSRec<RDS_RDS_LAYER_ACK$> = True$
|
|
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
|
end else
|
|
Error_Services('Add', 'RDS No was blank!!!')
|
|
end
|
|
end service
|
|
|
|
Service SendCassComp(WoMatKey)
|
|
debug
|
|
Sap_Services('RetransmitCassComp', WoMatKey)
|
|
obj_sap('SendOutbound')
|
|
end service
|
|
|
|
|
|
|
|
|
|
|
|
|