Modified full box reject logic within NCR_ACTIONS to not execute if the associated WO_MAT record already has a batch number. If it does, the scrapped quantity will be accounted for in SAP against the SAP batch using the SCRAP_IN transaction logic within NCR_ACTIONS.
This commit is contained in:
@ -147,6 +147,7 @@ READ_RECORD_PRE:
|
|||||||
// ActionFlow = ACTION_STOP$
|
// ActionFlow = ACTION_STOP$
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
READ_RECORD:
|
READ_RECORD:
|
||||||
// In order to stop a record from being read in this action these lines of code must be used:
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
//
|
//
|
||||||
@ -174,6 +175,7 @@ READ_RECORD:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
READONLY_RECORD_PRE:
|
READONLY_RECORD_PRE:
|
||||||
// In order to stop a record from being read in this action these lines of code must be used:
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
//
|
//
|
||||||
@ -183,6 +185,7 @@ READONLY_RECORD_PRE:
|
|||||||
// ActionFlow = ACTION_STOP$
|
// ActionFlow = ACTION_STOP$
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
READONLY_RECORD:
|
READONLY_RECORD:
|
||||||
// In order to stop a record from being read in this action these lines of code must be used:
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
//
|
//
|
||||||
@ -210,6 +213,7 @@ READONLY_RECORD:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
WRITE_RECORD_PRE:
|
WRITE_RECORD_PRE:
|
||||||
|
|
||||||
WorkOrderNo = {WO_NO}
|
WorkOrderNo = {WO_NO}
|
||||||
@ -260,6 +264,7 @@ WRITE_RECORD_PRE:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
WRITE_RECORD:
|
WRITE_RECORD:
|
||||||
|
|
||||||
NCRNo = @ID
|
NCRNo = @ID
|
||||||
@ -286,6 +291,7 @@ WRITE_RECORD:
|
|||||||
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
||||||
WMIKey = WoMatRec<WO_MAT_WMI_KEY$>
|
WMIKey = WoMatRec<WO_MAT_WMI_KEY$>
|
||||||
WMOKey = WoMatRec<WO_MAT_WMO_KEY$>
|
WMOKey = WoMatRec<WO_MAT_WMO_KEY$>
|
||||||
|
|
||||||
If WMIKey NE '' then
|
If WMIKey NE '' then
|
||||||
WMIRec = Database_Services('ReadDataRow', 'WM_IN', WMIKey)
|
WMIRec = Database_Services('ReadDataRow', 'WM_IN', WMIKey)
|
||||||
Database_Services('WriteDataRow', 'WM_IN', WMIKey, WMIRec, True$, True$, False$)
|
Database_Services('WriteDataRow', 'WM_IN', WMIKey, WMIRec, True$, True$, False$)
|
||||||
@ -369,190 +375,45 @@ WRITE_RECORD:
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// NCR has been closed. Check if it is a full box reject.
|
SAPBatchNo = WoMatRec<WO_MAT_SAP_BATCH_NO$>
|
||||||
WONo = {WO_NO}
|
If (SAPBatchNo EQ '') then
|
||||||
CassNo = {WO_MAT_CASS_NO}
|
// NCR has been closed and SAPBatchNo is null. Check if it is a full box reject. If it is send a cassette
|
||||||
WOStep = {WO_STEP}
|
// complete transaction (with zero GR wafers!) to record the scrap quantity in SAP.
|
||||||
WOStepNo = WOStep
|
WONo = {WO_NO}
|
||||||
WOMatKey = WONo:'*':CassNo
|
CassNo = {WO_MAT_CASS_NO}
|
||||||
|
WOStep = {WO_STEP}
|
||||||
|
WOStepNo = WOStep
|
||||||
|
WOMatKey = WONo:'*':CassNo
|
||||||
|
|
||||||
If (ReactorType EQ 'EPP') then
|
If (ReactorType EQ 'EPP') then
|
||||||
|
|
||||||
InCassNos = {CASS_NO}
|
InCassNos = {CASS_NO}
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Verify the need to "Auto-Sign" the box after returning from the NCR form *
|
* Verify the need to "Auto-Sign" the box after returning from the NCR form *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
|
||||||
CassetteQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X')
|
CassetteQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X')
|
||||||
CurrWfrCount = Xlate('WM_OUT', WMOKey, 'WAFER_CNT', 'X')
|
CurrWfrCount = Xlate('WM_OUT', WMOKey, 'WAFER_CNT', 'X')
|
||||||
If CurrWfrCount EQ '' then CurrWfrCount = 0
|
If CurrWfrCount EQ '' then CurrWfrCount = 0
|
||||||
WMOKey = WONo:'*':WOStep:'*':CassNo
|
WMOKey = WONo:'*':WOStep:'*':CassNo
|
||||||
NCRNos = Xlate('WM_OUT', WMOKey, 'SLOT_NCR', 'X')
|
NCRNos = Xlate('WM_OUT', WMOKey, 'SLOT_NCR', 'X')
|
||||||
RejectedQty = 0
|
RejectedQty = 0
|
||||||
If NCRNos NE '' then
|
If NCRNos NE '' then
|
||||||
For each NCRNo in NCRNos using @VM
|
For each NCRNo in NCRNos using @VM
|
||||||
RejectedQty += (NCRNo NE '')
|
RejectedQty += (NCRNo NE '')
|
||||||
Next NCRNo
|
Next NCRNo
|
||||||
end
|
end
|
||||||
|
|
||||||
If ( (CurrWfrCount EQ 0) and (RejectedQty GE CassetteQty) ) then
|
|
||||||
|
|
||||||
// Full box reject
|
|
||||||
*****************************
|
|
||||||
* Set SAP Batch as Rejected *
|
|
||||||
*****************************
|
|
||||||
WOMatKey = WONo:'*':CassNo
|
|
||||||
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
|
||||||
ProdOrdNo = XLATE('WO_LOG',WONo,WO_LOG_PROD_ORD_NO$,'X')
|
|
||||||
ProdOrdNo[-1,1] = 'R'
|
|
||||||
SAPBatchNo = ProdOrdNo
|
|
||||||
WOMatRec<WO_MAT_SAP_BATCH_NO$> = SAPBatchNo
|
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WoMatRec, True$, False$, True$)
|
|
||||||
|
|
||||||
*****************
|
|
||||||
* Auto-Sign FQA *
|
|
||||||
*****************
|
|
||||||
SigDate = Date()
|
|
||||||
SigTime = Time()
|
|
||||||
SigDt = OCONV(SigDate, 'D2/')
|
|
||||||
SigTm = OConv(SigTime, 'MTS')
|
|
||||||
SigTmPlusOne = OCONV(SigTime + 1, 'MTS' )
|
|
||||||
SigTmPlusTwo = OCONV(SigTime + 2, 'MTS' )
|
|
||||||
SigDTM = SigDate + (SigTime / 86400) ; // 86400 = 24 hours * 60 minutes * 60 seconds
|
|
||||||
SignedBy = 'AUTO_FQA'
|
|
||||||
ToolID = ''
|
|
||||||
WHCode = 'CR' /* Warehouse Code = Cleanroom */
|
|
||||||
LocCode = 'QA' /* Location Code = QA */
|
|
||||||
ActionCode = 'REJ' /* Action Code = Rejected */
|
|
||||||
Tag = ''
|
|
||||||
|
|
||||||
// Sign WM_OUT<SIG_SUP_VER>
|
|
||||||
StatusStage = 'MO_QA'
|
|
||||||
WMOKey = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X')
|
|
||||||
WMORec = Database_Services('ReadDataRow', 'WM_OUT', WMOKey)
|
|
||||||
WMORec<WM_OUT_SUP_VER_SIG$> = SignedBy
|
|
||||||
WMORec<WM_OUT_SUP_VER_SIG_DTM$> = IConv(SigDt:' ':SigTm, 'DT')
|
|
||||||
Database_Services('WriteDataRow', 'WM_OUT', WMOKey, WMORec, True$, False$, True$)
|
|
||||||
|
|
||||||
***************************
|
|
||||||
* Log the signature event *
|
|
||||||
***************************
|
|
||||||
Set_Status(0)
|
|
||||||
EventParms = ''
|
|
||||||
EventParms<COL$LOG_FILE> = 'WO_MAT'
|
|
||||||
EventParms<COL$LOG_DTM> = SigDt:' ':SigTm
|
|
||||||
EventParms<COL$ACTION> = WOStepNo:'QA'
|
|
||||||
EventParms<COL$WH_CD> = WHCode
|
|
||||||
EventParms<COL$LOC_CD> = LocCode
|
|
||||||
EventParms<COL$WO_NOS> = WONo
|
|
||||||
EventParms<COL$CASS_NOS> = CassNo
|
|
||||||
EventParms<COL$USER_ID> = SignedBy
|
|
||||||
EventParms<COL$TAGS> = ''
|
|
||||||
EventParms<COL$TOOL_ID> = ''
|
|
||||||
CONVERT @FM TO @RM IN EventParms
|
|
||||||
obj_WO_Mat_Log('Create', EventParms)
|
|
||||||
errCode = ''
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
|
||||||
END
|
|
||||||
|
|
||||||
*********************************
|
|
||||||
* Log the full box reject event *
|
|
||||||
*********************************
|
|
||||||
Set_Status(0)
|
|
||||||
EventParms = ''
|
|
||||||
EventParms<COL$LOG_FILE> = 'WO_MAT'
|
|
||||||
EventParms<COL$LOG_DTM> = SigDt:' ':SigTmPlusTwo
|
|
||||||
EventParms<COL$ACTION> = ActionCode
|
|
||||||
EventParms<COL$WH_CD> = WHCode
|
|
||||||
EventParms<COL$LOC_CD> = LocCode
|
|
||||||
EventParms<COL$WO_NOS> = WONo
|
|
||||||
EventParms<COL$CASS_NOS> = CassNo
|
|
||||||
EventParms<COL$USER_ID> = SignedBy
|
|
||||||
EventParms<COL$TAGS> = ''
|
|
||||||
EventParms<COL$TOOL_ID> = ''
|
|
||||||
CONVERT @FM TO @RM IN EventParms
|
|
||||||
obj_WO_Mat_Log('Create',EventParms)
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
|
||||||
END
|
|
||||||
|
|
||||||
**********************************************************************
|
|
||||||
* Synchonize the WO_MAT schedule wafers quatity with the RDS records *
|
|
||||||
**********************************************************************
|
|
||||||
IF (Not(ReactorType = 'EPP') and Not(ReactorType = 'EpiPro')) THEN
|
|
||||||
IF (RDSNo NE '') THEN
|
|
||||||
RDSRec = obj_Tables('ReadOnlyRec','RDS':@RM:RDSNo)
|
|
||||||
RDSRec<RDS_SUP_VER_SIG$> = SignedBy
|
|
||||||
RDSRec<RDS_SUP_VER_SIG_DATE$> = SigDate
|
|
||||||
RDSRec<RDS_SUP_VER_SIG_TIME$> = SigTime
|
|
||||||
obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec)
|
|
||||||
|
|
||||||
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
|
||||||
WMRDSNos = WOMatRec<WO_MAT_RDS_NO$>
|
|
||||||
LOCATE RDSNo IN WMRDSNos USING @VM SETTING Pos THEN
|
|
||||||
NextRDSNo = WMRDSNos<1,Pos+1>
|
|
||||||
IF (NextRDSNo NE '') THEN
|
|
||||||
CurrWfrQty = obj_WO_Mat('CurrWaferCnt', WOMatKey:@RM:WOMatRec)
|
|
||||||
Set_Status(0)
|
|
||||||
obj_RDS('SetSchedWfrQty', NextRDSNo:@RM:CurrWfrQty)
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
|
||||||
END
|
|
||||||
END
|
|
||||||
END
|
|
||||||
END
|
|
||||||
END
|
|
||||||
|
|
||||||
***********************************************************************
|
|
||||||
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
|
|
||||||
***********************************************************************
|
|
||||||
SAP_Services('AddCassCompTransaction', WOMatKey)
|
|
||||||
END
|
|
||||||
|
|
||||||
end else
|
|
||||||
|
|
||||||
// Non-EpiPro
|
|
||||||
****************************************************************************
|
|
||||||
* Verify the need to "Auto-Sign" the box after returning from the NCR form *
|
|
||||||
****************************************************************************
|
|
||||||
|
|
||||||
RejectedWafers = 0
|
|
||||||
RejectedMUWafers = 0
|
|
||||||
ProdTestWafers = 0
|
|
||||||
|
|
||||||
If ( (WONo NE '') and (CassNo NE '') ) then
|
|
||||||
WOMatKey = WONo:'*':CassNo
|
|
||||||
Set_Status(0)
|
|
||||||
CassetteQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X')
|
|
||||||
RejectedWafers = XLATE('WO_MAT', WOMatKey, 'TOT_REJ_WFRS', 'X')
|
|
||||||
RejectedMUWafers = XLATE('WO_MAT', WOMatKey, 'TOT_REJ_MU_WFRS', 'X')
|
|
||||||
ProdTestWafers = XLATE('WO_MAT', WOMatKey, 'TW_PROD','X')
|
|
||||||
CurrWfrCount = XLATE('WO_MAT', WOMatKey, 'CURR_WFR_CNT', 'X')
|
|
||||||
|
|
||||||
IF (RejectedWafers = '') then
|
|
||||||
RejectedWafers = 0
|
|
||||||
END
|
|
||||||
IF (RejectedMUWafers = '') then
|
|
||||||
RejectedMUWafers = 0
|
|
||||||
END
|
|
||||||
IF (ProdTestWafers = '') then
|
|
||||||
ProdTestWafers = 0
|
|
||||||
END
|
|
||||||
|
|
||||||
IF ((ReactorType = 'EPP') OR (ReactorType = 'EpiPro')) THEN
|
|
||||||
RejectedQty = RejectedWafers + RejectedMUWafers
|
|
||||||
END ELSE
|
|
||||||
RejectedQty = RejectedWafers + RejectedMUWafers + ProdTestWafers
|
|
||||||
END
|
|
||||||
|
|
||||||
If ( (CurrWfrCount EQ 0) and (RejectedQty GE CassetteQty) ) then
|
If ( (CurrWfrCount EQ 0) and (RejectedQty GE CassetteQty) ) then
|
||||||
****************************************************
|
|
||||||
* Set SAP Batch as Rejected - full cassette reject *
|
// Full box reject
|
||||||
****************************************************
|
*****************************
|
||||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
* Set SAP Batch as Rejected *
|
||||||
ProdOrdNo = XLATE('WO_LOG', WONo, WO_LOG_PROD_ORD_NO$, 'X')
|
*****************************
|
||||||
|
WOMatKey = WONo:'*':CassNo
|
||||||
|
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
ProdOrdNo = XLATE('WO_LOG',WONo,WO_LOG_PROD_ORD_NO$,'X')
|
||||||
ProdOrdNo[-1,1] = 'R'
|
ProdOrdNo[-1,1] = 'R'
|
||||||
SAPBatchNo = ProdOrdNo
|
SAPBatchNo = ProdOrdNo
|
||||||
WOMatRec<WO_MAT_SAP_BATCH_NO$> = SAPBatchNo
|
WOMatRec<WO_MAT_SAP_BATCH_NO$> = SAPBatchNo
|
||||||
@ -564,10 +425,9 @@ WRITE_RECORD:
|
|||||||
SigDate = Date()
|
SigDate = Date()
|
||||||
SigTime = Time()
|
SigTime = Time()
|
||||||
SigDt = OCONV(SigDate, 'D2/')
|
SigDt = OCONV(SigDate, 'D2/')
|
||||||
SigTm = SigTime
|
SigTm = OConv(SigTime, 'MTS')
|
||||||
SigTmPlusOne = OCONV(SigTm + 1, 'MTS' )
|
SigTmPlusOne = OCONV(SigTime + 1, 'MTS' )
|
||||||
SigTmPlusTwo = OCONV(SigTm + 2, 'MTS' )
|
SigTmPlusTwo = OCONV(SigTime + 2, 'MTS' )
|
||||||
SigTm = OCONV(SigTm,'MTS')
|
|
||||||
SigDTM = SigDate + (SigTime / 86400) ; // 86400 = 24 hours * 60 minutes * 60 seconds
|
SigDTM = SigDate + (SigTime / 86400) ; // 86400 = 24 hours * 60 minutes * 60 seconds
|
||||||
SignedBy = 'AUTO_FQA'
|
SignedBy = 'AUTO_FQA'
|
||||||
ToolID = ''
|
ToolID = ''
|
||||||
@ -576,35 +436,34 @@ WRITE_RECORD:
|
|||||||
ActionCode = 'REJ' /* Action Code = Rejected */
|
ActionCode = 'REJ' /* Action Code = Rejected */
|
||||||
Tag = ''
|
Tag = ''
|
||||||
|
|
||||||
// Sign RDS FQA Signature
|
// Sign WM_OUT<SIG_SUP_VER>
|
||||||
StatusStage = 'QA'
|
StatusStage = 'MO_QA'
|
||||||
RDSNo = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
|
WMOKey = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X')
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
WMORec = Database_Services('ReadDataRow', 'WM_OUT', WMOKey)
|
||||||
RDSRec<RDS_SUP_VER_SIG$> = SignedBy
|
WMORec<WM_OUT_SUP_VER_SIG$> = SignedBy
|
||||||
RDSRec<RDS_SUP_VER_SIG_DATE$> = SigDate
|
WMORec<WM_OUT_SUP_VER_SIG_DTM$> = IConv(SigDt:' ':SigTm, 'DT')
|
||||||
RDSRec<RDS_SUP_VER_SIG_TIME$> = SigTime
|
Database_Services('WriteDataRow', 'WM_OUT', WMOKey, WMORec, True$, False$, True$)
|
||||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
|
||||||
|
|
||||||
***************************
|
***************************
|
||||||
* Log the signature event *
|
* Log the signature event *
|
||||||
***************************
|
***************************
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
EventParms = ''
|
EventParms = ''
|
||||||
EventParms<COL$LOG_FILE> = 'WO_MAT'
|
EventParms<COL$LOG_FILE> = 'WO_MAT'
|
||||||
EventParms<COL$LOG_DTM> = SigDt:' ':SigTm
|
EventParms<COL$LOG_DTM> = SigDt:' ':SigTm
|
||||||
EventParms<COL$ACTION> = WOStepNo:'QA'
|
EventParms<COL$ACTION> = WOStepNo:'QA'
|
||||||
EventParms<COL$WH_CD> = WHCode
|
EventParms<COL$WH_CD> = WHCode
|
||||||
EventParms<COL$LOC_CD> = LocCode
|
EventParms<COL$LOC_CD> = LocCode
|
||||||
EventParms<COL$WO_NOS> = WONo
|
EventParms<COL$WO_NOS> = WONo
|
||||||
EventParms<COL$CASS_NOS> = CassNo
|
EventParms<COL$CASS_NOS> = CassNo
|
||||||
EventParms<COL$USER_ID> = SignedBy
|
EventParms<COL$USER_ID> = SignedBy
|
||||||
EventParms<COL$TAGS> = ''
|
EventParms<COL$TAGS> = ''
|
||||||
EventParms<COL$TOOL_ID> = ''
|
EventParms<COL$TOOL_ID> = ''
|
||||||
CONVERT @FM TO @RM IN EventParms
|
CONVERT @FM TO @RM IN EventParms
|
||||||
obj_WO_Mat_Log('Create', EventParms)
|
obj_WO_Mat_Log('Create', EventParms)
|
||||||
errCode = ''
|
errCode = ''
|
||||||
IF Get_Status(errCode) THEN
|
IF Get_Status(errCode) THEN
|
||||||
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':errCode)
|
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
||||||
END
|
END
|
||||||
|
|
||||||
*********************************
|
*********************************
|
||||||
@ -631,23 +490,25 @@ WRITE_RECORD:
|
|||||||
**********************************************************************
|
**********************************************************************
|
||||||
* Synchonize the WO_MAT schedule wafers quatity with the RDS records *
|
* Synchonize the WO_MAT schedule wafers quatity with the RDS records *
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
IF (RDSNo NE '') THEN
|
IF (Not(ReactorType = 'EPP') and Not(ReactorType = 'EpiPro')) THEN
|
||||||
RDSRec = obj_Tables('ReadOnlyRec','RDS':@RM:RDSNo)
|
IF (RDSNo NE '') THEN
|
||||||
RDSRec<RDS_SUP_VER_SIG$> = SignedBy
|
RDSRec = obj_Tables('ReadOnlyRec','RDS':@RM:RDSNo)
|
||||||
RDSRec<RDS_SUP_VER_SIG_DATE$> = SigDate
|
RDSRec<RDS_SUP_VER_SIG$> = SignedBy
|
||||||
RDSRec<RDS_SUP_VER_SIG_TIME$> = SigTime
|
RDSRec<RDS_SUP_VER_SIG_DATE$> = SigDate
|
||||||
obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec)
|
RDSRec<RDS_SUP_VER_SIG_TIME$> = SigTime
|
||||||
|
obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec)
|
||||||
|
|
||||||
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
||||||
WMRDSNos = WOMatRec<WO_MAT_RDS_NO$>
|
WMRDSNos = WOMatRec<WO_MAT_RDS_NO$>
|
||||||
LOCATE RDSNo IN WMRDSNos USING @VM SETTING Pos THEN
|
LOCATE RDSNo IN WMRDSNos USING @VM SETTING Pos THEN
|
||||||
NextRDSNo = WMRDSNos<1,Pos+1>
|
NextRDSNo = WMRDSNos<1,Pos+1>
|
||||||
IF (NextRDSNo NE '') THEN
|
IF (NextRDSNo NE '') THEN
|
||||||
CurrWfrQty = obj_WO_Mat('CurrWaferCnt', WOMatKey:@RM:WOMatRec)
|
CurrWfrQty = obj_WO_Mat('CurrWaferCnt', WOMatKey:@RM:WOMatRec)
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
obj_RDS('SetSchedWfrQty', NextRDSNo:@RM:CurrWfrQty)
|
obj_RDS('SetSchedWfrQty', NextRDSNo:@RM:CurrWfrQty)
|
||||||
IF Get_Status(errCode) THEN
|
IF Get_Status(errCode) THEN
|
||||||
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
||||||
|
END
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
@ -660,13 +521,163 @@ WRITE_RECORD:
|
|||||||
END
|
END
|
||||||
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Error in NCR_ACTIONS. WONo and/or CassNo are null!.')
|
|
||||||
|
// Non-EpiPro
|
||||||
|
****************************************************************************
|
||||||
|
* Verify the need to "Auto-Sign" the box after returning from the NCR form *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
RejectedWafers = 0
|
||||||
|
RejectedMUWafers = 0
|
||||||
|
ProdTestWafers = 0
|
||||||
|
|
||||||
|
If ( (WONo NE '') and (CassNo NE '') ) then
|
||||||
|
WOMatKey = WONo:'*':CassNo
|
||||||
|
Set_Status(0)
|
||||||
|
CassetteQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X')
|
||||||
|
RejectedWafers = XLATE('WO_MAT', WOMatKey, 'TOT_REJ_WFRS', 'X')
|
||||||
|
RejectedMUWafers = XLATE('WO_MAT', WOMatKey, 'TOT_REJ_MU_WFRS', 'X')
|
||||||
|
ProdTestWafers = XLATE('WO_MAT', WOMatKey, 'TW_PROD','X')
|
||||||
|
CurrWfrCount = XLATE('WO_MAT', WOMatKey, 'CURR_WFR_CNT', 'X')
|
||||||
|
|
||||||
|
IF (RejectedWafers = '') then
|
||||||
|
RejectedWafers = 0
|
||||||
|
END
|
||||||
|
IF (RejectedMUWafers = '') then
|
||||||
|
RejectedMUWafers = 0
|
||||||
|
END
|
||||||
|
IF (ProdTestWafers = '') then
|
||||||
|
ProdTestWafers = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ((ReactorType = 'EPP') OR (ReactorType = 'EpiPro')) THEN
|
||||||
|
RejectedQty = RejectedWafers + RejectedMUWafers
|
||||||
|
END ELSE
|
||||||
|
RejectedQty = RejectedWafers + RejectedMUWafers + ProdTestWafers
|
||||||
|
END
|
||||||
|
|
||||||
|
If ( (CurrWfrCount EQ 0) and (RejectedQty GE CassetteQty) ) then
|
||||||
|
****************************************************
|
||||||
|
* Set SAP Batch as Rejected - full cassette reject *
|
||||||
|
****************************************************
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
ProdOrdNo = XLATE('WO_LOG', WONo, WO_LOG_PROD_ORD_NO$, 'X')
|
||||||
|
ProdOrdNo[-1,1] = 'R'
|
||||||
|
SAPBatchNo = ProdOrdNo
|
||||||
|
WOMatRec<WO_MAT_SAP_BATCH_NO$> = SAPBatchNo
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WoMatRec, True$, False$, True$)
|
||||||
|
|
||||||
|
*****************
|
||||||
|
* Auto-Sign FQA *
|
||||||
|
*****************
|
||||||
|
SigDate = Date()
|
||||||
|
SigTime = Time()
|
||||||
|
SigDt = OCONV(SigDate, 'D2/')
|
||||||
|
SigTm = SigTime
|
||||||
|
SigTmPlusOne = OCONV(SigTm + 1, 'MTS' )
|
||||||
|
SigTmPlusTwo = OCONV(SigTm + 2, 'MTS' )
|
||||||
|
SigTm = OCONV(SigTm,'MTS')
|
||||||
|
SigDTM = SigDate + (SigTime / 86400) ; // 86400 = 24 hours * 60 minutes * 60 seconds
|
||||||
|
SignedBy = 'AUTO_FQA'
|
||||||
|
ToolID = ''
|
||||||
|
WHCode = 'CR' /* Warehouse Code = Cleanroom */
|
||||||
|
LocCode = 'QA' /* Location Code = QA */
|
||||||
|
ActionCode = 'REJ' /* Action Code = Rejected */
|
||||||
|
Tag = ''
|
||||||
|
|
||||||
|
// Sign RDS FQA Signature
|
||||||
|
StatusStage = 'QA'
|
||||||
|
RDSNo = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
|
||||||
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
|
RDSRec<RDS_SUP_VER_SIG$> = SignedBy
|
||||||
|
RDSRec<RDS_SUP_VER_SIG_DATE$> = SigDate
|
||||||
|
RDSRec<RDS_SUP_VER_SIG_TIME$> = SigTime
|
||||||
|
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||||
|
|
||||||
|
***************************
|
||||||
|
* Log the signature event *
|
||||||
|
***************************
|
||||||
|
Set_Status(0)
|
||||||
|
EventParms = ''
|
||||||
|
EventParms<COL$LOG_FILE> = 'WO_MAT'
|
||||||
|
EventParms<COL$LOG_DTM> = SigDt:' ':SigTm
|
||||||
|
EventParms<COL$ACTION> = WOStepNo:'QA'
|
||||||
|
EventParms<COL$WH_CD> = WHCode
|
||||||
|
EventParms<COL$LOC_CD> = LocCode
|
||||||
|
EventParms<COL$WO_NOS> = WONo
|
||||||
|
EventParms<COL$CASS_NOS> = CassNo
|
||||||
|
EventParms<COL$USER_ID> = SignedBy
|
||||||
|
EventParms<COL$TAGS> = ''
|
||||||
|
EventParms<COL$TOOL_ID> = ''
|
||||||
|
CONVERT @FM TO @RM IN EventParms
|
||||||
|
obj_WO_Mat_Log('Create', EventParms)
|
||||||
|
errCode = ''
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
*********************************
|
||||||
|
* Log the full box reject event *
|
||||||
|
*********************************
|
||||||
|
Set_Status(0)
|
||||||
|
EventParms = ''
|
||||||
|
EventParms<COL$LOG_FILE> = 'WO_MAT'
|
||||||
|
EventParms<COL$LOG_DTM> = SigDt:' ':SigTmPlusTwo
|
||||||
|
EventParms<COL$ACTION> = ActionCode
|
||||||
|
EventParms<COL$WH_CD> = WHCode
|
||||||
|
EventParms<COL$LOC_CD> = LocCode
|
||||||
|
EventParms<COL$WO_NOS> = WONo
|
||||||
|
EventParms<COL$CASS_NOS> = CassNo
|
||||||
|
EventParms<COL$USER_ID> = SignedBy
|
||||||
|
EventParms<COL$TAGS> = ''
|
||||||
|
EventParms<COL$TOOL_ID> = ''
|
||||||
|
CONVERT @FM TO @RM IN EventParms
|
||||||
|
obj_WO_Mat_Log('Create',EventParms)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
**********************************************************************
|
||||||
|
* Synchonize the WO_MAT schedule wafers quatity with the RDS records *
|
||||||
|
**********************************************************************
|
||||||
|
IF (RDSNo NE '') THEN
|
||||||
|
RDSRec = obj_Tables('ReadOnlyRec','RDS':@RM:RDSNo)
|
||||||
|
RDSRec<RDS_SUP_VER_SIG$> = SignedBy
|
||||||
|
RDSRec<RDS_SUP_VER_SIG_DATE$> = SigDate
|
||||||
|
RDSRec<RDS_SUP_VER_SIG_TIME$> = SigTime
|
||||||
|
obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec)
|
||||||
|
|
||||||
|
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
||||||
|
WMRDSNos = WOMatRec<WO_MAT_RDS_NO$>
|
||||||
|
LOCATE RDSNo IN WMRDSNos USING @VM SETTING Pos THEN
|
||||||
|
NextRDSNo = WMRDSNos<1,Pos+1>
|
||||||
|
IF (NextRDSNo NE '') THEN
|
||||||
|
CurrWfrQty = obj_WO_Mat('CurrWaferCnt', WOMatKey:@RM:WOMatRec)
|
||||||
|
Set_Status(0)
|
||||||
|
obj_RDS('SetSchedWfrQty', NextRDSNo:@RM:CurrWfrQty)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Error_Services('Add', 'Error in NCR_ACTIONS. Error code: ':ErrCode)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
***********************************************************************
|
||||||
|
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
|
||||||
|
***********************************************************************
|
||||||
|
SAP_Services('AddCassCompTransaction', WOMatKey)
|
||||||
|
END
|
||||||
|
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in NCR_ACTIONS. WONo and/or CassNo are null!.')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
DELETE_RECORD_PRE:
|
DELETE_RECORD_PRE:
|
||||||
|
|
||||||
WorkOrderNo = {WO_NO}
|
WorkOrderNo = {WO_NO}
|
||||||
|
|||||||
Reference in New Issue
Block a user