From fe0ebca16a777ba9f47fdb11701c8b6efa3b45fd Mon Sep 17 00:00:00 2001 From: "Infineon\\StieberD" Date: Tue, 4 Nov 2025 15:10:04 -0700 Subject: [PATCH] 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. --- LSL2/STPROC/NCR_ACTIONS.txt | 465 ++++++++++++++++++------------------ 1 file changed, 238 insertions(+), 227 deletions(-) diff --git a/LSL2/STPROC/NCR_ACTIONS.txt b/LSL2/STPROC/NCR_ACTIONS.txt index b1bc285..0d3c6e8 100644 --- a/LSL2/STPROC/NCR_ACTIONS.txt +++ b/LSL2/STPROC/NCR_ACTIONS.txt @@ -147,6 +147,7 @@ READ_RECORD_PRE: // ActionFlow = ACTION_STOP$ return + READ_RECORD: // 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 + READONLY_RECORD_PRE: // 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$ return + READONLY_RECORD: // 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 + WRITE_RECORD_PRE: WorkOrderNo = {WO_NO} @@ -260,6 +264,7 @@ WRITE_RECORD_PRE: return + WRITE_RECORD: NCRNo = @ID @@ -286,6 +291,7 @@ WRITE_RECORD: WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey) WMIKey = WoMatRec WMOKey = WoMatRec + If WMIKey NE '' then WMIRec = Database_Services('ReadDataRow', 'WM_IN', WMIKey) Database_Services('WriteDataRow', 'WM_IN', WMIKey, WMIRec, True$, True$, False$) @@ -367,207 +373,61 @@ WRITE_RECORD: If Error_Services('HasError') NE True$ then Record = Date() end - end + end - // NCR has been closed. Check if it is a full box reject. - WONo = {WO_NO} - CassNo = {WO_MAT_CASS_NO} - WOStep = {WO_STEP} - WOStepNo = WOStep - WOMatKey = WONo:'*':CassNo - - If (ReactorType EQ 'EPP') then + SAPBatchNo = WoMatRec + If (SAPBatchNo EQ '') then + // NCR has been closed and SAPBatchNo is null. Check if it is a full box reject. If it is send a cassette + // complete transaction (with zero GR wafers!) to record the scrap quantity in SAP. + WONo = {WO_NO} + CassNo = {WO_MAT_CASS_NO} + WOStep = {WO_STEP} + WOStepNo = WOStep + WOMatKey = WONo:'*':CassNo - InCassNos = {CASS_NO} - - **************************************************************************** - * Verify the need to "Auto-Sign" the box after returning from the NCR form * - **************************************************************************** - - CassetteQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X') - CurrWfrCount = Xlate('WM_OUT', WMOKey, 'WAFER_CNT', 'X') - If CurrWfrCount EQ '' then CurrWfrCount = 0 - WMOKey = WONo:'*':WOStep:'*':CassNo - NCRNos = Xlate('WM_OUT', WMOKey, 'SLOT_NCR', 'X') - RejectedQty = 0 - If NCRNos NE '' then - For each NCRNo in NCRNos using @VM - RejectedQty += (NCRNo NE '') - Next NCRNo - 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 = 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 - StatusStage = 'MO_QA' - WMOKey = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X') - WMORec = Database_Services('ReadDataRow', 'WM_OUT', WMOKey) - WMORec = SignedBy - WMORec = IConv(SigDt:' ':SigTm, 'DT') - Database_Services('WriteDataRow', 'WM_OUT', WMOKey, WMORec, True$, False$, True$) - - *************************** - * Log the signature event * - *************************** - Set_Status(0) - EventParms = '' - EventParms = 'WO_MAT' - EventParms = SigDt:' ':SigTm - EventParms = WOStepNo:'QA' - EventParms = WHCode - EventParms = LocCode - EventParms = WONo - EventParms = CassNo - EventParms = SignedBy - EventParms = '' - EventParms = '' - 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 = 'WO_MAT' - EventParms = SigDt:' ':SigTmPlusTwo - EventParms = ActionCode - EventParms = WHCode - EventParms = LocCode - EventParms = WONo - EventParms = CassNo - EventParms = SignedBy - EventParms = '' - EventParms = '' - 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 = SignedBy - RDSRec = SigDate - RDSRec = SigTime - obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec) - - WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') - WMRDSNos = WOMatRec - 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 (ReactorType EQ 'EPP') then - IF (RejectedWafers = '') then - RejectedWafers = 0 - END - IF (RejectedMUWafers = '') then - RejectedMUWafers = 0 - END - IF (ProdTestWafers = '') then - ProdTestWafers = 0 - END + InCassNos = {CASS_NO} + + **************************************************************************** + * Verify the need to "Auto-Sign" the box after returning from the NCR form * + **************************************************************************** - IF ((ReactorType = 'EPP') OR (ReactorType = 'EpiPro')) THEN - RejectedQty = RejectedWafers + RejectedMUWafers - END ELSE - RejectedQty = RejectedWafers + RejectedMUWafers + ProdTestWafers - END + CassetteQty = XLATE('WO_MAT', WOMatKey, 'WAFER_QTY', 'X') + CurrWfrCount = Xlate('WM_OUT', WMOKey, 'WAFER_CNT', 'X') + If CurrWfrCount EQ '' then CurrWfrCount = 0 + WMOKey = WONo:'*':WOStep:'*':CassNo + NCRNos = Xlate('WM_OUT', WMOKey, 'SLOT_NCR', 'X') + RejectedQty = 0 + If NCRNos NE '' then + For each NCRNo in NCRNos using @VM + RejectedQty += (NCRNo NE '') + Next NCRNo + 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') + + // 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 = 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') + 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 = '' @@ -576,37 +436,36 @@ WRITE_RECORD: 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 = SignedBy - RDSRec = SigDate - RDSRec = SigTime - Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) + // Sign WM_OUT + StatusStage = 'MO_QA' + WMOKey = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X') + WMORec = Database_Services('ReadDataRow', 'WM_OUT', WMOKey) + WMORec = SignedBy + WMORec = IConv(SigDt:' ':SigTm, 'DT') + Database_Services('WriteDataRow', 'WM_OUT', WMOKey, WMORec, True$, False$, True$) *************************** * Log the signature event * *************************** Set_Status(0) - EventParms = '' - EventParms = 'WO_MAT' - EventParms = SigDt:' ':SigTm - EventParms = WOStepNo:'QA' - EventParms = WHCode - EventParms = LocCode - EventParms = WONo - EventParms = CassNo - EventParms = SignedBy - EventParms = '' - EventParms = '' + EventParms = '' + EventParms = 'WO_MAT' + EventParms = SigDt:' ':SigTm + EventParms = WOStepNo:'QA' + EventParms = WHCode + EventParms = LocCode + EventParms = WONo + EventParms = CassNo + EventParms = SignedBy + EventParms = '' + EventParms = '' CONVERT @FM TO @RM IN EventParms obj_WO_Mat_Log('Create', EventParms) - errCode = '' + errCode = '' 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 - + ********************************* * Log the full box reject event * ********************************* @@ -627,31 +486,33 @@ WRITE_RECORD: 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 = SignedBy - RDSRec = SigDate - RDSRec = SigTime - obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec) - - WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') - WMRDSNos = WOMatRec - 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) + IF (Not(ReactorType = 'EPP') and Not(ReactorType = 'EpiPro')) THEN + IF (RDSNo NE '') THEN + RDSRec = obj_Tables('ReadOnlyRec','RDS':@RM:RDSNo) + RDSRec = SignedBy + RDSRec = SigDate + RDSRec = SigTime + obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec) + + WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') + WMRDSNos = WOMatRec + 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 + END *********************************************************************** * Send CASS_COMP transaction to SAP to inform SAP of the rejected box * @@ -660,13 +521,163 @@ WRITE_RECORD: END 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 = 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 = SignedBy + RDSRec = SigDate + RDSRec = SigTime + Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) + + *************************** + * Log the signature event * + *************************** + Set_Status(0) + EventParms = '' + EventParms = 'WO_MAT' + EventParms = SigDt:' ':SigTm + EventParms = WOStepNo:'QA' + EventParms = WHCode + EventParms = LocCode + EventParms = WONo + EventParms = CassNo + EventParms = SignedBy + EventParms = '' + EventParms = '' + 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 = 'WO_MAT' + EventParms = SigDt:' ':SigTmPlusTwo + EventParms = ActionCode + EventParms = WHCode + EventParms = LocCode + EventParms = WONo + EventParms = CassNo + EventParms = SignedBy + EventParms = '' + EventParms = '' + 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 = SignedBy + RDSRec = SigDate + RDSRec = SigTime + obj_Tables('WriteOnlyRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec) + + WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') + WMRDSNos = WOMatRec + 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 return + DELETE_RECORD_PRE: WorkOrderNo = {WO_NO}