using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Runtime.InteropServices; using kcENT; using kcMTL; using kcPRD; using Microsoft.VisualBasic; using Microsoft.VisualBasic.CompilerServices; using iMESCore.Settings; using static iMESCore.Base.iMESComSubroutine; using static iMESCore.Base.iMESConst; using static iMESCore.DataBase.iMESSql; using static iMESCore.Base.iMESComXML; using iMESCore.DataBase; using System.Linq; using System.Collections.ObjectModel; using kcSYS; using kcOE; using kcOP; using kcSMD; using System.Xml; using kcQC; namespace tcEAI_C { public class clsOE { public clsOE() { } #region MO /// /// 新增工單 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public static bool addMO(string Orgcode,string OrgMono, string MONo, string MOUnitNo, string ProductNo, decimal MOQty, string FactoryNo, string RONo = null, string ItemNo = null, string CustomerNo = null, int MOTypeNo = defInteger, int Priority = defInteger, DateTime PlanFinishDate = default(DateTime), string Creator = null, DateTime CreateDate = default(DateTime), string Description = null, DataTable dtMTL = null, List MOProperty = null, List aryMessage = null, List aryException = null, List aryAlert = null, DataTable dtMOProperty = null, string ERPMOLineNo = defString, string CustomerLotNo = null, DateTime PlanStartDate = default(DateTime), int wipEntityId = defInteger, string bomVersion = null, string lcPlantype = null, string faiFlag = null) { bool addMORet = default(bool); bool r = false; string strSQLTemp, strSQL = default(string), strSQLAddField, strSQLAddValue; IDbConnection cnnTemp1 = null; //OleDbCommand cmmTemp; DbDataReader drTemp2; DbDataReader drTemp3; // Dim daTemp As OleDb.OleDbDataAdapter // Dim drSel() As DataRow // Dim strDataBaseType, strConnectionString As String 'Connection string // Dim i As Integer // Dim dsTemp As DataSet AppSettings objSetting = new AppSettings(); var CollectionSQL = new Collection(); try { string strDataBaseType = objSetting.GetDataBaseType(); string strConnectionString = objSetting.GetConnectionString(strDataBaseType); cnnTemp1 = CreateConnection(strConnectionString); // ----- Default Value ----- int MOSource = 0; // 0: RO, 1: RMA, 2: None int MOState = 0; // 0: Unconfirm, 1: Pending, 2: Confirm, 3: Release(允許開立生產批), 6: 已在客託倉或退貨倉的工單(允許開立生產批), 99:Close int IssueState = 0; string BelongToMONo = "N/A"; string ENGNo = "N/A"; string ENGVersion = "N/A"; //string CustomerLotNo = string.Empty; // Dim OPNo As String = "LOTCREATE" // ---- Get Value ----- string CustomerName = string.Empty; string ProductVersion = string.Empty; string ProcessNo = string.Empty; string ProcessVersion = string.Empty; bool isROExist = false; bool isRODetailExist = false; string ItemProperty = defString; // 2016-10-17, Joe, 新增料件屬性,P:採購件,M:自製件,S:外包件 int OutSourcingFlag = defInteger; // 2016-10-17, Joe, 0:off,1:on // Kevin 15/06/09 ,調整產品編號轉大寫,後續的程式處理並未全部都有轉大寫 ProductNo = ProductNo.ToUpper(); // ----- 1. 檢查MO是否存在 ----- MONo = MONo.ToUpper(); using (var objOE = new clsOEBasis()) { if (objOE.GetMOBasis(MONo.ToUpper())["MONo"] is DBNull == false) clsERP.combineException(ref aryException, mesmsg: "[%MONoExist%]"); } // ----- 2. 檢查MOSource----- if (string.IsNullOrEmpty(RONo)) MOSource = 2; // MO來源為其他(暫不考慮RMA) // ----- 3. 檢查CustomerNo是否存在 ----- if (MOSource == 0) { if (string.IsNullOrEmpty(CustomerNo)) { // 未傳入 clsERP.combineException(ref aryException, mesmsg: "[%ROWithOutCustomer%]"); } else { // 有傳入=>檢查Customer主檔 using (var objENT = new clsCustomerBasis()) { var dr = objENT.GetCustomerBasis(CustomerNo.ToUpper()); if (dr["CustomerNo"] is DBNull == true) { // Customer主檔未建立 // clsERP.combineException(aryException, , , "[%CustomerNoNotExist%]") // 5.3 若拋入訂單號碼,則必須拋入客戶編號,系統應檢查tblENTCustomerBasis之中是否存在此客戶,若無則自動新增 objENT.AddCustomerBasis(CustomerNo.ToUpper(), CustomerNo, CustomerNo, "NULL", "NULL", "NULL", "NULL", "NULL", "NULL"); objENT.SetCustomerBasisIssueState(CustomerNo.ToUpper(), 2); } else { CustomerName = dr["CustomerName"].ToString(); } } } } // ----- 4. 檢查Product ----- using (var objPRD = new clsProduct()) { var dr = objPRD.GetProduct(ProductNo.ToUpper()); if (dr["ProductNo"] is DBNull == true) clsERP.combineException(ref aryException, mesmsg: "[%ProductNoNotExist%]"); if (dr["ProductNo"] is DBNull == false && Convert.ToBoolean(Operators.ConditionalCompareObjectNotEqual(dr["IssueState"], 2, false))) clsERP.combineException(ref aryException, mesmsg: "[%ProductNoNotApproved%]"); // ----- 5. 檢查MOUnitNo ----- if (dr["ProductNo"] is DBNull == false && dr["UnitNo"].ToString().ToLower() != MOUnitNo.ToLower()) clsERP.combineException(ref aryException, mesmsg: "[%ProductMOWithDifferentUnitNo%]"); dr.Delete(); try { ProductVersion = objPRD.GetProductCurVersion(ProductNo.ToUpper()); } catch (Exception ex) { clsERP.combineException(ref aryException, mesmsg: "[%GetProductVersionFail%]"); } // 2016-10-17, Joe, 取得ItemProperty var drItemProperty = objPRD.GetProductProperty(ProductNo, ProductVersion, "ItemProperty"); if (drItemProperty == null == false && drItemProperty["DefaultValue"] is DBNull == false) { ItemProperty = drItemProperty["DefaultValue"].ToString(); } // 2016-10-17, Joe, 取得外包控制 using (var objSYS = new clsSYSParameter()) { OutSourcingFlag = Conversions.ToInteger(objSYS.GetParameterValue("OutSourcingFlag")); } // 2016-10-17, Joe, 若該產品品號屬性屬於S且外包控管參數為Off時,MES不做工單新增/修改,直接回應OK,但訊息應回傳『MES系統不支持外包工單』 if (ItemProperty == "S" & OutSourcingFlag == 0) { // 2018/06/26 Lena, 修正訊息語系未譯的問題. clsERP.combineException(ref aryException, mesmsg: "[%ProductNo%]:" + ProductNo + ",[%ProductVersion%]:" + ProductVersion + ",[%IsOutSourcingProduct%], MES [%IsNotSupported%] !"); if (aryException.Count > 0) goto exitfun; } // ----- 6. 檢查ProductProcess是否存在 ----- // 2012/07/26, Aaron, 如果傳入的MOTypeNo找不到就用-1(*)找尋預設值,再找不到彈出錯誤 dr = objPRD.GetProductProcess(ProductNo.ToUpper(), ProductVersion, MOTypeNo, DefaultProcess: 1); if (dr["ProductNo"] is DBNull == true) { dr = objPRD.GetProductProcess(ProductNo.ToUpper(), ProductVersion, -1, DefaultProcess: 1); if (dr["ProductNo"] is DBNull == true) clsERP.combineException(ref aryException, mesmsg: "[%ProductProcessNoNotExist%]"); } } // ----- 7. 檢查用料清單資料 ----- var objPRD_M = new kcPRD.clsProduct(); DataView dvTemp; var objMTL = new kcMTL.clsMTLBasis(); var dsBOM = new DataSet(); DataRow drData; System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); // 用以讀取Xml字串 // 工單用料表 var dtMOBom = new DataTable("MOBom"); dtMOBom.Columns.Add("MONo", Type.GetType("System.String")); dtMOBom.Columns.Add("MaterialLevel", Type.GetType("System.Int32")); // 0:Material,1:Product dtMOBom.Columns.Add("MaterialNo", Type.GetType("System.String")); dtMOBom.Columns.Add("MaterialVersion", Type.GetType("System.String")); dtMOBom.Columns.Add("StdQty", Type.GetType("System.Double")); dtMOBom.Columns.Add("DecreaseRate", Type.GetType("System.Double")); dtMOBom.Columns.Add("UnitNo", Type.GetType("System.String")); dtMOBom.Columns.Add("OPNo", Type.GetType("System.String")); dtMOBom.Columns.Add("PutInPlaceType", Type.GetType("System.Int32")); dtMOBom.Columns.Add("Specified", Type.GetType("System.Int32")); // 0:No,1:Yes dtMOBom.Columns.Add("MOFlag", Type.GetType("System.Int32")); // 0:Create MO,1:來自半成品庫,不用開立工單 dtMOBom.Columns.Add("MaterialMONo", Type.GetType("System.String")); // 半成品的工單編號 dtMOBom.Columns.Add("Description", Type.GetType("System.String")); // Bom Material Description dtMOBom.Columns.Add("SubstituteMaterialNo", Type.GetType("System.String")); // 替代料,預設值同MaterialNo dtMOBom.Columns.Add("SubstituteMaterialLevel", Type.GetType("System.Int32")); // 替代料等級,預設值同物料等級(materialLevel) dtMOBom.Columns.Add("SubstituteStdQty", Type.GetType("System.Decimal")); // 替代料標準數量,預設值=標準數量StdQty dtMOBom.Columns.Add("RequireQty", Type.GetType("System.Decimal")); // 需求數,預設值=工單數量MoQty * 標準數StdQty dtMOBom.Columns.Add("AB", Type.GetType("System.String")); // 需求數,預設值=工單數量MoQty * 標準數StdQty dtMOBom.Columns.Add("PositionCode", Type.GetType("System.String")); // 需求數,預設值=工單數量MoQty * 標準數StdQty // 1.工單的單位可能與用料表(tblOEMOMaterialList)的標準單位(產品的單位)不同---------------------------------------------------- // 故須以工單數量,單位換算出產品的標準量 DataRow drTemp; string strStdUnitNo; double dblStdQty; // 工單開立,產品不一定是CurVersion. drTemp = objPRD_M.GetProduct(ProductNo, ProductVersion, CurVersion: defInteger); if (drTemp["ProductNo"] is DBNull) { throw new iMESException.MESException("0000-200002", "Get product data of ProductNo:" + ProductNo + ", Version:" + ProductVersion + " fail !"); } strStdUnitNo = Conversions.ToString(drTemp["UnitNo"]); // 標準單位 if ((strStdUnitNo.ToUpper() ?? "") == (MOUnitNo.ToUpper() ?? "")) // 單位相同 { dblStdQty = Conversions.ToDouble(MOQty); } else { // 將CurQty轉換為產品標準單位之數量 udUnitTransferFunction.clsUnitTransferFunction objUnit; var colParameters = new Collection(); colParameters.Add(ProductNo, "ProductNo"); colParameters.Add(ProductVersion, "ProductVersion"); colParameters.Add(ENGNo, "ENGNo"); colParameters.Add(ENGVersion, "ENGVersion"); objUnit = new udUnitTransferFunction.clsUnitTransferFunction(); dblStdQty = Conversions.ToDouble(objUnit.EXETransferQty(MOUnitNo, strStdUnitNo, Conversions.ToDouble(MOQty), colParameters)); objUnit = null; } decimal DecreaseRate = 0m; dsBOM = objPRD_M.ShowBOM(ProductNo, ProductVersion); var loopTo2 = dsBOM.Tables[0].Rows.Count - 1; for (int i = 0; i <= loopTo2; i++) { drData = dtMOBom.NewRow(); drData["MONo"] = MONo; drData["MaterialLevel"] = dsBOM.Tables[0].Rows[i]["NodeType"]; DecreaseRate = Conversions.ToDecimal(dsBOM.Tables[0].Rows[i]["DecreaseRate"]); // 取得耗損率 // 2008/06/17,sammi,投料點來自BOM表的設定. drData["PutInPlaceType"] = dsBOM.Tables[0].Rows[i]["PutInPlaceType"]; if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dsBOM.Tables[0].Rows[i]["NodeType"], 1, false))) // Product { drData["MOFlag"] = 0; drData["MaterialMONo"] = MONo; // NodeVersion,取出已轉換的產品版本. drData["MaterialVersion"] = ProductVersion; } else // Material (NodeType = 0) { drData["MOFlag"] = 1; drData["MaterialMONo"] = "N/A"; drData["MaterialVersion"] = dsBOM.Tables[0].Rows[i]["NodeVersion"]; } drData["MaterialNo"] = dsBOM.Tables[0].Rows[i]["NodeNo"]; drData["SubstituteMaterialNo"] = dsBOM.Tables[0].Rows[i]["NodeNo"]; // 替代料,預設值同MaterialNo drData["StdQty"] = dsBOM.Tables[0].Rows[i]["StdQty"]; drData["DecreaseRate"] = dsBOM.Tables[0].Rows[i]["DecreaseRate"]; drData["UnitNo"] = dsBOM.Tables[0].Rows[i]["UnitNo"]; drData["OPNo"] = dsBOM.Tables[0].Rows[i]["OPNo"]; drData["Specified"] = dsBOM.Tables[0].Rows[i]["Specified"]; drData["Description"] = Strings.Replace(dsBOM.Tables[0].Rows[i]["Description"].ToString(), "'", "''"); drData["SubstituteMaterialLevel"] = dsBOM.Tables[0].Rows[i]["NodeType"]; // 2012/12/27,Even,替代料等級,預設值為物料等級 drData["SubstituteStdQty"] = dsBOM.Tables[0].Rows[i]["StdQty"]; // 2012/12/28,Even,替代料標準數,預設值為 標準數 drData["RequireQty"] = Operators.MultiplyObject(Operators.MultiplyObject(MOQty, dsBOM.Tables[0].Rows[i]["StdQty"]), 1m + DecreaseRate); // 2012/12/27,Even,需求數,預設值為工單數 * 標準數 drData["AB"] = dsBOM.Tables[0].Rows[i]["AB"].ToString(); drData["PositionCode"] = dsBOM.Tables[0].Rows[i]["PositionCode"].ToString(); dtMOBom.Rows.Add(drData); } dsBOM.Dispose(); // Add MO之用料表 dvTemp = new DataView(dtMOBom); dvTemp.RowFilter = Conversions.ToString("MONo='" + MONo + "'"); var loopTo8 = dvTemp.Count - 1; for (int j = 0; j <= loopTo8; j++) { DecreaseRate = Conversions.ToDecimal(dvTemp[j]["DecreaseRate"]); decimal decRequireQty = Conversions.ToDecimal(Operators.MultiplyObject(Operators.MultiplyObject(MOQty, dvTemp[j]["StdQty"]), 1m + DecreaseRate)); // '2012/12/27,Even,改變需求數 dvTemp[j].BeginEdit(); // dvTemp.Table.Rows(j)("RequireQty") = dtMO.Rows(i)("MOQty") * dvTemp.Table.Rows(j)("StdQty") * (1 + DecreaseRate) dvTemp[j]["RequireQty"] = decRequireQty; dvTemp[j].EndEdit(); AddMOMaterialList(Conversions.ToString(MONo), Conversions.ToString(dvTemp[j]["MaterialNo"]), Conversions.ToInteger(dvTemp[j]["MaterialLevel"]), Conversions.ToDouble(dvTemp[j]["StdQty"]), Conversions.ToDouble(dvTemp[j]["DecreaseRate"]), Conversions.ToString(dvTemp[j]["OPNo"]), Conversions.ToInteger(dvTemp[j]["Specified"]), Conversions.ToInteger(dvTemp[j]["PutInPlaceType"]), Conversions.ToString(dvTemp[j]["UnitNo"]), Conversions.ToInteger(dvTemp[j]["MOFlag"]), Conversions.ToString(dvTemp[j]["MaterialMONo"]), dvTemp[j]["Description"].ToString(), CollectionSQL, MaterialVersion: Conversions.ToString(dvTemp[j]["MaterialVersion"]), SubstituteMaterialNo: Conversions.ToString(dvTemp[j]["MaterialNo"]), SubstituteMaterialLevel: Conversions.ToInteger(dvTemp[j]["SubstituteMaterialLevel"]), RequireQty: Conversions.ToDecimal(dvTemp[j]["RequireQty"]), SubstituteStdQty: Conversions.ToDecimal(dvTemp[j]["SubstituteStdQty"]), Creator: Creator, CreateDate: DateTime.Now, AB:Conversions.ToString(dvTemp[j]["AB"]), PositionCode:Conversions.ToString(dvTemp[j]["PositionCode"])); // R1203001 不是指定用料及半成品時才處理替代料 By Acer 2012/03/06 if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dvTemp[j]["Specified"], 0, false)) && Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dvTemp[j]["MaterialLevel"], 0, false))) { var dsSubstitute = new DataSet(); if (objPRD_M.ShowBOMMaterialGroup(Conversions.ToString(ProductNo), Conversions.ToString(ProductVersion), Conversions.ToString(dvTemp[j]["MaterialNo"]), Conversions.ToString(dvTemp[j]["OPNo"])).Tables[0].Rows.Count > 0) { // 處理BOM表中指定的替代料 dsSubstitute = objPRD_M.ShowBOMMaterialGroup(Conversions.ToString(ProductNo), Conversions.ToString(ProductVersion), Conversions.ToString(dvTemp[j]["MaterialNo"]), Conversions.ToString(dvTemp[j]["OPNo"])); } else { // 處理物料群組中指定的替代料 dsSubstitute = objMTL.ShowMaterialSubstitute(Conversions.ToString(dvTemp[j]["MaterialNo"])); } var loopTo9 = dsSubstitute.Tables[0].Rows.Count - 1; for (int k = 0; k <= loopTo9; k++) { // 2012/12/27,Even,處裡替代用料的需求數量,有替代用料,用料清單會除原先清單外再加上替代用料清單 decimal dblRequireQty = 0m * (1m + DecreaseRate); AddMOMaterialList(Conversions.ToString(MONo), Conversions.ToString(dvTemp[j]["MaterialNo"]), Conversions.ToInteger(dvTemp[j]["MaterialLevel"]), Conversions.ToDouble(dvTemp[j]["StdQty"]), Conversions.ToDouble(dvTemp[j]["DecreaseRate"]), Conversions.ToString(dvTemp[j]["OPNo"]), Conversions.ToInteger(dvTemp[j]["Specified"]), Conversions.ToInteger(dvTemp[j]["PutInPlaceType"]), Conversions.ToString(dvTemp[j]["UnitNo"]), Conversions.ToInteger(dvTemp[j]["MOFlag"]), Conversions.ToString(dvTemp[j]["MaterialMONo"]), dvTemp[j]["Description"].ToString(), CollectionSQL, MaterialVersion: Conversions.ToString(dvTemp[j]["MaterialVersion"]), SubstituteMaterialNo: dsSubstitute.Tables[0].Rows[k]["MaterialNo"].ToString(), SubstituteMaterialLevel: Conversions.ToInteger(dvTemp[j]["SubstituteMaterialLevel"]), RequireQty: dblRequireQty, SubstituteStdQty: Conversions.ToDecimal(dvTemp[j]["SubstituteStdQty"]), Creator: Creator, CreateDate: DateTime.Now, AB: Conversions.ToString(dvTemp[j]["AB"]), PositionCode: Conversions.ToString(dvTemp[j]["PositionCode"])); } dsSubstitute = null; } } #region"注释原收用料清单逻辑 继承 PRDBOM" //if (dtMTL.Rows.Count > 0) //{ // bool blnWF = false; // //2023/12/07,Ning,151196: [6.0.7] SDD231107_01-01_WF 工單整合接口調整 // //取得目前ERP是否為WF // using (var objSYSPar = new kcSYS.clsSYSParameter()) // { // var dsTemp = new DataSet(); // dsTemp = objSYSPar.ShowERPSetting(ActiveERP: 1); // if (dsTemp != null && dsTemp.Tables[0].Rows.Count > 0) // { // if (dsTemp.Tables[0].Rows[0]["ERP_Name"].ToString().ToUpper() == "WORKFLOW") // { // blnWF = true; // } // } // } // dtMTL.Columns.Add("MaterialMONo", Type.GetType("System.String")); // // dtMTL: MONo, MaterialNo, MaterialLevel, StdQty, UnitNo, OPNo, PutInPlaceType, DecreaseRate, Specified, *MaterialType, CountWay, *CheckLotNo, *MaterialVersion, +MaterialMONo, +*SubstituteMaterialNo // foreach (DataRow dr in dtMTL.Rows) // { // string strMaterialUnit = dr["UnitNo"].ToString(); // decimal decTemp = 0m; // try // { // if (string.IsNullOrEmpty(dr["MainItem"].ToString())) // { // // 未傳入 // clsERP.combineException(ref aryException, mesmsg: "[%MainItem%]"); // } // //if (string.IsNullOrEmpty(dr["PhantomItem"].ToString())) // //{ // // // 未傳入 // // clsERP.combineException(ref aryException, mesmsg: "[%PhantomItem%]"); // //} // if (string.IsNullOrEmpty(dr["LockRequirement"].ToString())) // { // // 未傳入 // clsERP.combineException(ref aryException, mesmsg: "[%LockRequirement%]"); // } // if (string.IsNullOrEmpty(dr["OperationSeqnum"].ToString())) // { // // 未傳入 // clsERP.combineException(ref aryException, mesmsg: "[%OperationSeqnum%]"); // } // if (blnWF == true) // { // if (Conversions.ToInteger(dr["StdQty"]) != Convert.ToDecimal(dr["StdQty"])) //若標準用量有小數, 需以ERP所傳入的該物料的需領用量(RequireQty)/預計產量(MOQty),並以無條件捨去取到小數六位數的值,做為該物料的標準用量 // { // decTemp = (Convert.ToDecimal(dr["RequireQty"]) / MOQty) * 1000000; // decTemp = Math.Floor(decTemp); // decTemp = decTemp / 1000000; // dr["StdQty"] = decTemp; // } // if (Conversions.ToInteger(dr["SubstituteStdQty"]) != Convert.ToDecimal(dr["SubstituteStdQty"])) //若替代料標準用量有小數同標準用量處理 // { // decTemp = (Convert.ToDecimal(dr["RequireQty"]) / MOQty) * 1000000; // decTemp = Math.Floor(decTemp); // decTemp = decTemp / 1000000; // dr["SubstituteStdQty"] = decTemp; // } // } // if (dr["MaterialLevel"].ToString() == "0") // { // // 用料清單為物料 // using (var objMTL = new clsMTLBasis()) // { // DataRow drMTL = null; // bool errorFlag = false; // dr["MONo"] = dr["MONo"].ToString().ToUpper(); // drMTL = objMTL.GetMaterialBasis(dr["MaterialNo"].ToString().ToUpper()); // // (skip) MONo, MaterialLevel, STDQty, DecreaseRate, OPNo, Specified, PutinPlaceType, MOFlag, CountWay, Description, OrgMaterialNo, EX_MTLList1, EX_MTLList2, MaterialVersion // // MaterialNo // if (drMTL["MaterialNo"] is DBNull == true) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: " [%MaterialNo%]:" + // dr["MaterialNo"] + " [%MaterialNoNotExist%][%InMESSystem%]! [%MaterialLevel%][%IsMaterial%]."); // goto SkipMaterialList; // } // else // { // dr["MaterialNo"] = dr["MaterialNo"].ToString().ToUpper(); // } // // UnitNo // if (drMTL["UnitNo"].ToString().ToLower() != strMaterialUnit.ToLower()) // { // // 當用料清單和物料主檔的單位不同時 // // 單位轉換 // using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) // { // var colParameters = new Collection(); // colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); // colParameters.Add("*", "ProductVersion"); // try // { // dr["StdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drMTL["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["StdQty"]), colParameters)); // dr["SubstituteStdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drMTL["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["SubstituteStdQty"]), colParameters)); // dr["UnitNo"] = drMTL["UnitNo"].ToString().ToLower(); // } // catch (Exception ex) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + // dr["MaterialNo"]); // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); // } // } // } // else // { // dr["UnitNo"] = dr["UnitNo"].ToString().ToLower(); // } // // MaterialMONo (Default) // dr["MaterialMONo"] = "N/A"; // // MaterialType // if (dr["MaterialType"] is DBNull == true) // { // dr["MaterialType"] = drMTL["MaterialType"]; // } // else if (Convert.ToBoolean(Operators.ConditionalCompareObjectEqual(dr["MaterialType"].ToString().ToUpper(), drMTL["MaterialType"], false))) // { // dr["MaterialType"] = dr["MaterialType"].ToString().ToUpper(); // } // else // { // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListMaterialTypeDifferent%]" + " [%MaterialNo%]:" + // dr["MaterialNo"]); // } // // CheckLotNo // if (dr["CheckLotNo"] is DBNull == true) // { // dr["CheckLotNo"] = drMTL["CheckLotNo"]; // } // else if (Convert.ToBoolean(Operators.ConditionalCompareObjectNotEqual(dr["CheckLotNo"], drMTL["CheckLotNo"], false))) // { // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListCheckLotNoDifferent%]" + " [%MaterialNo%]:" + // dr["MaterialNo"]); // } // // 2013/02/20,Even,修改替代料檢查 // if (dr["SubstituteMaterialNo"] is DBNull == true) // { // dr["SubstituteMaterialNo"] = dr["MaterialNo"]; // dr["SubstituteMaterialLevel"] = dr["MaterialLevel"]; // } // // 2013/02/25,Even,判斷替代料,替代料可為半成品或是物料 // else if (dr["SubstituteMaterialLevel"].ToString() == "0") // 為物料 // { // // 查詢替代料是否在物料主檔內,若無,則出現錯誤訊息 // drMTL = objMTL.GetMaterialBasis(dr["SubstituteMaterialNo"].ToString().ToUpper()); // if (drMTL["MaterialNo"] is DBNull == true) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + // dr["SubstituteMaterialNo"] + " [%MaterialNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsMaterial%]."); // goto SkipMaterialList; // } // else // { // dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); // } // } // else // 為半成品 (SubstituteMaterialLevel = 1) // { // DataRow drPRD = null; // // 檢查物料是否存在於產品主檔 // using (var objPRD = new clsProduct()) // { // drPRD = objPRD.GetProduct(dr["SubstituteMaterialNo"].ToString().ToUpper()); // } // if (drPRD["ProductNo"] is DBNull == true) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + // dr["SubstituteMaterialNo"] + " [%ProductNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsProduct%]."); // goto SkipMaterialList; // } // else // { // dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); // } // } // if (dr["SubstituteStdQty"] is DBNull == true) // { // dr["SubstituteStdQty"] = dr["StdQty"]; // } // // 2019/12/16 OwenLiu, Mantis:0065576 , 工單整合(新增)時用料需求數支援單位轉換 // decimal decRequireQty = 0m; // if (dr["RequireQty"] is DBNull == true) // { // // ERP未傳入需求數(RequireQty) // // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 // dr["RequireQty"] = Operators.MultiplyObject(Operators.MultiplyObject(MOQty, dr["StdQty"]), Operators.AddObject(1, dr["DecreaseRate"])); // } // else // { // decRequireQty = Convert.ToDecimal(dr["RequireQty"]); // // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 // if (drMTL["UnitNo"].ToString().ToLower() != strMaterialUnit.ToLower()) // { // // 當用料清單和物料主檔的單位不同時 // using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) // { // var colParameters = new Collection(); // colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); // colParameters.Add("*", "ProductVersion"); // try // { // dr["RequireQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drMTL["UnitNo"].ToString().ToLower(), (double)decRequireQty, colParameters)); // } // catch (Exception ex) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + // dr["MaterialNo"]); // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); // } // } // } // else // { // dr["RequireQty"] = decRequireQty; // } // } // // 檢查OPNo(用料作業站)是否存在 ----- // if (dr["OPNo"].ToString().ToUpper() != "LOTCREATE") // { // // 有傳入=>檢查OP主檔 // using (var objOP = new clsOpBasis()) // { // var drOP = objOP.GetOPBasis(dr["OPNo"].ToString().ToUpper()); // if (drOP["OPNo"] is DBNull == true) // { // // OP主檔未建立 // clsERP.combineException(ref aryException, mesmsg: "[%MaterialNo%]:" + // dr["MaterialNo"] + " [%OPNoNotExist%](" + dr["OPNo"] + ")"); // } // } // } // } // } // else // { // // 用料清單為半成品 // using (var objPRD = new clsProduct()) // { // DataRow drPRD = null; // bool errorFlag = false; // dr["MONo"] = dr["MONo"].ToString().ToUpper(); // drPRD = objPRD.GetProduct(dr["MaterialNo"].ToString().ToUpper()); // // (skip) MONo, MaterialLevel, STDQty, DecreaseRate, OPNo, Specified, PutinPlaceType, MOFlag, CountWay, Description, OrgMaterialNo, EX_MTLList1, EX_MTLList2, MaterialVersion // // MaterialNo // if (drPRD["ProductNo"] is DBNull == true) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: " [%MaterialNo%]:" + // dr["MaterialNo"] + " [%ProductNoNotExist%][%InMESSystem%]! [%MaterialLevel%][%IsProduct%]."); // goto SkipMaterialList; // } // else // { // dr["MaterialNo"] = dr["MaterialNo"].ToString().ToUpper(); // } // // UnitNo // if (drPRD["UnitNo"].ToString().ToLower() != strMaterialUnit.ToLower()) // { // // 當用料清單和物料主檔的單位不同時 // // 單位轉換 // using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) // { // var colParameters = new Collection(); // colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); // colParameters.Add("*", "ProductVersion"); // try // { // dr["StdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drPRD["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["StdQty"]), colParameters)); // dr["SubstituteStdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drPRD["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["SubstituteStdQty"]), colParameters)); // dr["UnitNo"] = drPRD["UnitNo"].ToString().ToLower(); // } // catch (Exception ex) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + // dr["MaterialNo"]); // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); // } // } // } // else // { // dr["UnitNo"] = dr["UnitNo"].ToString().ToLower(); // } // // MaterialMONo (Default) // dr["MaterialMONo"] = "N/A"; // // MaterialType // if (dr["MaterialType"] is DBNull == true) // { // dr["MaterialType"] = drPRD["ProductType"]; // } // else if (Convert.ToBoolean(Operators.ConditionalCompareObjectEqual(dr["MaterialType"].ToString().ToUpper(), drPRD["ProductType"], false))) // { // dr["MaterialType"] = dr["MaterialType"].ToString().ToUpper(); // } // else // { // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListMaterialTypeDifferent%]" + " [%MaterialNo%]:" + // dr["MaterialNo"]); // } // // CheckLotNo // dr["CheckLotNo"] = 1; // 半成品固定為1 // // SubstituteMaterialNo // // ---2013/02/20,Even,替代料是否存在的檢查---- // if (dr["SubstituteMaterialNo"] is DBNull == true) // { // dr["SubstituteMaterialNo"] = dr["MaterialNo"]; // dr["SubstituteMaterialLevel"] = dr["MaterialLevel"]; // } // else // { // DataRow drMTL = null; // // 2013/02/25,Even,判斷替代料,替代料可為半成品或是物料 // if (dr["SubstituteMaterialLevel"].ToString() == "0") // 為物料 // { // // 查詢替代料是否在物料主檔內,若無,則出現錯誤訊息 // using (var objMTL = new clsMTLBasis()) // { // drMTL = objMTL.GetMaterialBasis(dr["SubstituteMaterialNo"].ToString().ToUpper()); // } // if (drMTL["MaterialNo"] is DBNull == true) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + // dr["SubstituteMaterialNo"] + " [%MaterialNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsMaterial%]."); // goto SkipMaterialList; // } // else // { // dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); // } // } // else // 為半成品 (SubstituteMaterialLevel = 1) // { // // 檢查物料是否存在於產品主檔 // drPRD = objPRD.GetProduct(dr["SubstituteMaterialNo"].ToString().ToUpper()); // if (drPRD["ProductNo"] is DBNull == true) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + // dr["SubstituteMaterialNo"] + " [%ProductNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsProduct%]."); // goto SkipMaterialList; // } // else // { // dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); // } // } // } // if (dr["SubstituteStdQty"] is DBNull == true) // { // dr["SubstituteStdQty"] = dr["StdQty"]; // } // // 2019/12/16 OwenLiu, Mantis:0065576 , 工單整合(新增)時用料需求數支援單位轉換 // decimal decRequireQty = 0m; // if (dr["RequireQty"] is DBNull == true) // { // // ERP未傳入需求數(RequireQty) // // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 // dr["RequireQty"] = Operators.MultiplyObject(Operators.MultiplyObject(MOQty, dr["StdQty"]), Operators.AddObject(1, dr["DecreaseRate"])); // } // else // { // decRequireQty = Convert.ToDecimal(dr["RequireQty"]); // // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 // if (drPRD["UnitNo"].ToString().ToLower() != strMaterialUnit.ToLower()) // { // // 當用料清單和產品主檔的單位不同時 // using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) // { // var colParameters = new Collection(); // colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); // colParameters.Add("*", "ProductVersion"); // try // { // dr["RequireQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drPRD["UnitNo"].ToString().ToLower(), (double)decRequireQty, colParameters)); // } // catch (Exception ex) // { // errorFlag = true; // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + // dr["MaterialNo"]); // clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); // } // } // } // else // { // dr["RequireQty"] = decRequireQty; // } // } // // 檢查OPNo(用料作業站)是否存在 ----- // if (dr["OPNo"].ToString().ToUpper() != "LOTCREATE") // { // // 有傳入=>檢查OP主檔 // using (var objOP = new clsOpBasis()) // { // var drOP = objOP.GetOPBasis(dr["OPNo"].ToString().ToUpper()); // if (drOP["OPNo"] is DBNull == true) // { // // OP主檔未建立 // clsERP.combineException(ref aryException, mesmsg: "[%MaterialNo%]:" + // dr["MaterialNo"] + " [%OPNoNotExist%](" + dr["OPNo"] + ")"); // } // } // } // } // } // SkipMaterialList: // ; // } // catch (Exception ex) // { // clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%doMaterialListFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); // } // } //} #endregion // ----- 8. 檢查FactoryNo ----- // FactoryNo = "N/A" List argstrMessage = null; List argstrException = null; doFactoryNo(FactoryNo, Creator, CreateDate, strMessage: argstrMessage, strException: argstrException); // ----- 9. 檢查MO Property --- if (!(dtMOProperty == null) && dtMOProperty.Rows.Count > 0) { foreach (DataRow dr in dtMOProperty.Rows) { List argaryMessage = null; List argaryException = null; doSYSMOProperty(Convert.ToString(dr["PropertyNo"]), Convert.ToString(dr["DataType"]), aryMessage: argaryMessage, aryException: argaryException); } } // ----- Exception => Fail ----- if (aryException.Count > 0) goto exitfun; // ----- Add MO ----- // Dim objLic As New iMESLicxManager.clsDBCom // Using cn As New OleDbConnection(objSetting.GetConnectionString) // Using cmd As New OleDbCommand("", cn) // cn.Open() // Using trans As OleDbTransaction = cn.BeginTransaction // cmd.Transaction = trans try { if (string.IsNullOrEmpty(RONo) == false) { var objOE = new clsOEBasis(); // 檢查訂單是否已存在 var dr = objOE.GetROBasis(RONo.ToUpper()); if (dr["RONo"] is DBNull == false) isROExist = true; // 檢查訂單明細是否已存在 // 若訂單號碼有傳入,此項目應一併傳入,若未傳入則預設為1 if (string.IsNullOrEmpty(ItemNo)) ItemNo = "1"; dr = objOE.GetRODetail(RONo.ToUpper(), Convert.ToDecimal(ItemNo.ToUpper())); if (dr["ItemNo"] is DBNull == false) { isRODetailExist = true; } // ----- RO ----- if (isROExist == false) { // add ROBasis strSQL = "insert into tbloerobasis(rono,customerno,creator,createdate,issuestate,rostate) values('" + RONo.ToUpper() + "','" + CustomerNo.ToUpper() + "','" + Creator + "',To_Date('" + Strings.Format(CreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),2,2)"; CollectionSQL.Add(strSQL); // cmd.CommandText = _ // "insert into tbloerobasis(rono,customerno,description,creator,createdate,issuestate,lotserial,rostate) values(?,?,?,?,?,?,?,?)" // cmd.Parameters.AddWithValue(":RONo", RONo.ToUpper) // cmd.Parameters.AddWithValue(":CustomerNo", CustomerNo.ToUpper) // cmd.Parameters.AddWithValue(":Description", DBNull.Value) // cmd.Parameters.AddWithValue(":Creator", Creator) // cmd.Parameters.AddWithValue(":CreateDate", CreateDate) // cmd.Parameters.AddWithValue(":IssueState", 2) // cmd.Parameters.AddWithValue(":LotSerial", DBNull.Value) // cmd.Parameters.AddWithValue(":ROState", 2) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() } switch (isRODetailExist) { case true: { // update RODetail strSQL = "update tbloerodetail set orderqty=orderqty+" + MOQty + ", unreleaseqty=unreleaseqty+" + MOQty; strSQL += "where RONO='" + RONo.ToUpper() + "' and ItemNo=" + ItemNo.ToUpper(); break; } // Gary Lu 20130307:原本無Where條件,不修正會使得TBLOERODETAIL內其他訂單明細也受到影響 // cmd.CommandText = _ // "update tbloerodetail set orderqty=orderqty+?, unreleaseqty=unreleaseqty+?" // cmd.Parameters.AddWithValue(":OrderQty", MOQty) // cmd.Parameters.AddWithValue(":UnReleaseQty", MOQty) case false: { // add RODetail strSQL = "insert into tbloerodetail(rono,itemno,productno,orderqty,unreleaseqty,creator,createdate,rounitno,customerno,customername) " + "values('" + RONo.ToUpper() + "'," + ItemNo + ",'" + ProductNo.ToUpper() + "'," + MOQty + "," + MOQty + ",'" + Creator + "',To_Date('" + Strings.Format(CreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'" + MOUnitNo.ToLower() + "','" + CustomerNo.ToUpper() + "','" + ChkSingleQuation(CustomerName) + "')"; break; } // cmd.CommandText = _ // "insert into tbloerodetail(rono,itemno,productno,orderqty,unreleaseqty,description,creator,createdate,rounitno,customerno,customername) " & _ // "values(?,?,?,?,?,?,?,?,?,?,?)" // cmd.Parameters.AddWithValue(":RONo", RONo.ToUpper) // cmd.Parameters.AddWithValue(":ItemNo", ItemNo) // cmd.Parameters.AddWithValue(":ProductNo", ProductNo.ToUpper) // cmd.Parameters.AddWithValue(":OrderQty", MOQty) // cmd.Parameters.AddWithValue(":UnReleaseQty", MOQty) // cmd.Parameters.AddWithValue(":Description", DBNull.Value) // cmd.Parameters.AddWithValue(":Creator", Creator) // cmd.Parameters.AddWithValue(":CreateDate", CreateDate) // cmd.Parameters.AddWithValue(":ROUnitNo", MOUnitNo.ToLower) // cmd.Parameters.AddWithValue(":CustomerNo", CustomerNo.ToUpper) // cmd.Parameters.AddWithValue(":CustomerName", CustomerName) } CollectionSQL.Add(strSQL); // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() } // ----- MO ----- // 2019/08/16 Mantis60378: 新增FromERP欄位, 若來自EAI整合(TT、WF、T100),需填入1 // add MO Basis strSQLAddField = "insert into tblOEMOBasis(mono,mostate,moqty,productno,productversion,priority,planfinishdate," + "belongtomono,description,creator,createdate,issuestate,unreleaselotqty,mounitno,motypeno,mosource,engno,engversion,customerno,factoryno" + ", FromERP,wipEntityId,bomVersion,lcPlantype,faiFlag"; strSQLAddValue = "values('" + MONo.ToUpper() + "'," + MOState + "," + MOQty + ",'" + ProductNo.ToUpper() + "','" + ProductVersion.ToUpper() + "'," + Priority + ",To_Date('" + Strings.Format(PlanFinishDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'" + BelongToMONo + "','" + Description + "','" + Creator + "',To_Date('" + Strings.Format(CreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + IssueState + "," + MOQty + ",'" + MOUnitNo.ToLower() + "'," + MOTypeNo + "," + MOSource + ",'" + ENGNo + "','" + ENGVersion + "','" + CustomerNo.ToUpper() + "','" + FactoryNo + "'," + "1," + wipEntityId + ",'" + bomVersion + "','" + lcPlantype + "','" + faiFlag + "'"; if (string.IsNullOrEmpty(RONo) == true) { strSQLAddField += ",rono"; strSQLAddValue += ",'N/A'"; } else { strSQLAddField += ",rono"; strSQLAddValue += ",'" + RONo.ToUpper() + "'"; } if (string.IsNullOrEmpty(Orgcode) == true) { strSQLAddField += ",Orgcode"; strSQLAddValue += ",'N/A'"; } else { strSQLAddField += ",Orgcode"; strSQLAddValue += ",'" + Orgcode + "'"; } if (string.IsNullOrEmpty(OrgMono) == true) { strSQLAddField += ",OrgMono"; strSQLAddValue += ",'N/A'"; } else { strSQLAddField += ",OrgMono"; strSQLAddValue += ",'" + OrgMono + "'"; } if (string.IsNullOrEmpty(ItemNo) == true) { strSQLAddField += ",itemno"; strSQLAddValue += ",-1"; } else { strSQLAddField += ",itemno"; strSQLAddValue += "," + ItemNo; } if (!string.IsNullOrEmpty(CustomerLotNo)) { strSQLAddField += ",customerlotno"; strSQLAddValue += ",'" + CustomerLotNo + "'"; } // 2018/3/19 Vick 新增欄位 ERPMOLineNo if (ERPMOLineNo != defString) { strSQLAddField += ",ERPMOLineNo"; strSQLAddValue += ",'" + ERPMOLineNo + "'"; } if (PlanStartDate != default(DateTime)) { strSQLAddField += ",PlanStartDate"; strSQLAddValue += ", To_Date('" + Strings.Format(PlanStartDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; } strSQL = strSQLAddField + ")" + strSQLAddValue + ")"; CollectionSQL.Add(strSQL); // cmd.CommandText = _ // "insert into tbloemobasis(mono,rono,itemno,mostate,moqty,productno,productversion,priority,planfinishdate,belongtomono,description,creator,createdate," & _ // "issuestate,unreleaselotqty,mounitno,lotserial,motypeno,mosource,engno,engversion,customerno,incomingkey,customerlotno,factoryno) " & _ // "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // cmd.Parameters.AddWithValue(":MONo", MONo.ToUpper) // If String.IsNullOrEmpty(RONo) = True) // cmd.Parameters.AddWithValue(":RONo", "N/A") // Else // cmd.Parameters.AddWithValue(":RONo", RONo.ToUpper) // End If // If String.IsNullOrEmpty(ItemNo) = True) // cmd.Parameters.AddWithValue(":ItemNo", -1) // Else // cmd.Parameters.AddWithValue(":ItemNo", ItemNo) // End If // cmd.Parameters.AddWithValue(":MOState", MOState) // cmd.Parameters.AddWithValue(":MOQty", MOQty) // cmd.Parameters.AddWithValue(":ProductNo", ProductNo.ToUpper) // cmd.Parameters.AddWithValue(":ProductVersion", ProductVersion.ToUpper) // cmd.Parameters.AddWithValue(":Priority", Priority) // cmd.Parameters.AddWithValue(":PlanFinishDate", PlanFinishDate) // cmd.Parameters.AddWithValue(":BelongToMONo", BelongToMONo) // cmd.Parameters.AddWithValue(":Description", Description) // cmd.Parameters.AddWithValue(":Creator", Creator) // cmd.Parameters.AddWithValue(":CreateDate", CreateDate) // cmd.Parameters.AddWithValue(":IssueState", IssueState) // cmd.Parameters.AddWithValue(":UnReleaseLotQty", MOQty) // cmd.Parameters.AddWithValue(":MOUnitNo", MOUnitNo.ToLower) // cmd.Parameters.AddWithValue(":LotSerial", DBNull.Value) // cmd.Parameters.AddWithValue(":MOTypeNo", MOTypeNo) // cmd.Parameters.AddWithValue(":MOSource", MOSource) // cmd.Parameters.AddWithValue(":EngNo", ENGNo) // cmd.Parameters.AddWithValue(":EngVersion", ENGVersion) // cmd.Parameters.AddWithValue(":CustomerNo", CustomerNo.ToUpper) // cmd.Parameters.AddWithValue(":IncomingKey", DBNull.Value) // If CustomerLotNo = String.Empty) // cmd.Parameters.AddWithValue(":CustomerLotNo", DBNull.Value) // Else // cmd.Parameters.AddWithValue(":CustomerLotNo", CustomerLotNo) // End If // cmd.Parameters.AddWithValue(":FactoryNo", FactoryNo) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() // add MO Component // // add MO Material List // dtMTL: MONo, MaterialNo, MaterialLevel, StdQty, UnitNo, OPNo, PutInPlaceType, DecreaseRate, Specified, *MaterialType, CountWay, *CheckLotNo, *MaterialVersion, +*MaterialMONo, +SubstituteMaterialNo //if (dtMTL.Rows.Count > 0) //{ // if (!dtMTL.Columns.Contains("MaterialMONo")) // dtMTL.Columns.Add("MaterialMONo", Type.GetType("System.String")); // foreach (DataRow dr in dtMTL.Rows) // { // if (dr["MaterialMONo"] is DBNull || string.IsNullOrEmpty(dr["MaterialMONo"].ToString())) // dr["MaterialMONo"] = "N/A"; // bool blnAddMaterial = true; // 是否將工單用料加入tblOEMOMaterialList, True:是 False:否 // // 2019/09/25 Grace 增加檢查, 若有傳入DeliveryMethod且值=4, 這筆工單用料清單, 不加入至tblOEMOMaterialList;否或非4則不做任何處理 // // 材料型態tagname:DeliveryMethod (Optional參數,非必傳) // if (!(dr["DeliveryMethod"] is DBNull)) // { // if (dr["DeliveryMethod"].ToString() == "4") // { // blnAddMaterial = false; // } // } // if (blnAddMaterial) // { // // 2019/01/30 OwenLiu, Mantis: 0054631 工單拋轉時,避免oracle與SQLServer對於空字串('')處理不同 // // Oracle會將欄位值存成Null, SQLServer會將欄位值成空字串,造成後續功能判斷上的問題 // string strSQLAddMTLField, strSQLAddMTLValue; // // 先設定Not Null欄位 // strSQLAddMTLField = "INSERT INTO tblOEMOMaterialList(MONo,MaterialNo,MaterialLevel,StdQty,UnitNo"; // strSQLAddMTLValue = " VALUES('" + dr["MONo"].ToString().ToUpper() + "'" + ",'" + dr["MaterialNo"].ToString().ToUpper() + "'," + // dr["MaterialLevel"] + "," + dr["StdQty"] + ",'" + dr["UnitNo"].ToString().ToLower() + "'"; // strSQLAddMTLField += ",DecreaseRate,OPNo,Specified,PutinplaceType,MaterialMONo,MaterialType" + ",CountWay,CheckLotNo,SubstituteMaterialNo,mainItem,phantomItem,lockRequirement,operationSeqnum"; // strSQLAddMTLValue = strSQLAddMTLValue + "," + // dr["DecreaseRate"] + ",'" + dr["OPNo"].ToString().ToUpper() + "'," + dr["Specified"] + "," + dr["PutInPlaceType"] + ",'" + dr["MaterialMONo"] + // "'" + ",'" + dr["MaterialType"].ToString().ToUpper() + "'," + dr["CountWay"] + "," + dr["CheckLotNo"] + ",'" + dr["SubstituteMaterialNo"].ToString().ToUpper() + // "','" + dr["mainItem"] + "','" + dr["phantomItem"] + "','" + dr["lockRequirement"] + "','" + dr["operationSeqnum"] + "'"; // // RequireQty // if (!dr.IsNull("RequireQty") && !string.IsNullOrEmpty(dr["RequireQty"].ToString())) // { // strSQLAddMTLField += ",RequireQty"; // strSQLAddMTLValue = strSQLAddMTLValue + "," + dr["RequireQty"].ToString(); // } // // SubstituteStdQty // if (!dr.IsNull("SubstituteStdQty") && !string.IsNullOrEmpty(dr["SubstituteStdQty"].ToString())) // { // strSQLAddMTLField += ",SubstituteStdQty"; // strSQLAddMTLValue = strSQLAddMTLValue + "," + dr["SubstituteStdQty"].ToString(); // } // // MaterialVersion // if (!dr.IsNull("MaterialVersion") && !string.IsNullOrEmpty(dr["MaterialVersion"].ToString())) // { // strSQLAddMTLField += ",MaterialVersion"; // strSQLAddMTLValue = strSQLAddMTLValue + ",'" + dr["MaterialVersion"] + "'".ToString(); // } // // SubstituteMaterialLevel // if (!dr.IsNull("SubstituteMaterialLevel") && !string.IsNullOrEmpty(dr["SubstituteMaterialLevel"].ToString())) // { // strSQLAddMTLField += ",SubstituteMaterialLevel"; // strSQLAddMTLValue = strSQLAddMTLValue + "," + dr["SubstituteMaterialLevel"].ToString(); // } // strSQL = strSQLAddMTLField + ")" + strSQLAddMTLValue + ")"; // CollectionSQL.Add(strSQL); // } // // cmd.CommandText = _ // // "insert into tbloemomateriallist(mono,materialno,materiallevel,stdqty,unitno,opno,putinplacetype," & _ // // "decreaserate,specified,materialtype,countway,checklotno,materialversion,materialmono,substitutematerialno,SubstituteMaterialLevel,SubstituteStdQty,RequireQty) " & _ // // "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // // cmd.Parameters.AddWithValue(":MONo", dr("MONo").ToString.ToUpper) // // cmd.Parameters.AddWithValue(":MaterialNo", dr("MaterialNo").ToString.ToUpper) // // cmd.Parameters.AddWithValue(":MaterialLevel", dr("MaterialLevel")) // // cmd.Parameters.AddWithValue(":StdQty", dr("StdQty")) // // cmd.Parameters.AddWithValue(":UnitNo", dr("UnitNo").ToString.ToLower) // // cmd.Parameters.AddWithValue(":OPNo", dr("OPNo").ToString.ToUpper) // // cmd.Parameters.AddWithValue(":PutInPlaceType", dr("PutInPlaceType")) // // cmd.Parameters.AddWithValue(":DecreaseRate", dr("DecreaseRate")) // // cmd.Parameters.AddWithValue(":Specified", dr("Specified")) // // cmd.Parameters.AddWithValue(":MaterialType", dr("MaterialType").ToString.ToUpper) // // cmd.Parameters.AddWithValue(":CountWay", dr("CountWay")) // // cmd.Parameters.AddWithValue(":CheckLotNo", dr("CheckLotNo")) // // cmd.Parameters.AddWithValue(":MaterialVersion", dr("MaterialVersion")) // // cmd.Parameters.AddWithValue(":MaterialMONo", dr("MaterialMONo")) // // cmd.Parameters.AddWithValue(":SubstituteMaterialNo", dr("SubstituteMaterialNo").ToString.ToUpper) // // cmd.Parameters.AddWithValue(":SubstituteMaterialLevel", dr("SubstituteMaterialLevel")) '2012/12/26,Even,新增替代物料階 &數量 // // cmd.Parameters.AddWithValue(":SubstituteStdQty", dr("SubstituteStdQty")) '2012/12/28,Even,新增替代物標準數 // // cmd.Parameters.AddWithValue(":RequireQty", dr("RequireQty")) // // cmd.ExecuteNonQuery() // // cmd.Parameters.Clear() // } //} // add MO Process // 依產品、產品版本、工單類別找出工單流程 // 參考kcOE.ShowProductProcess、kcOE.UpdMOProcessbyProduct、MEStc_WellDown.addMO // 2012/07/26, Aaron, 修正取流程時無法取得多區段的流程 // 2018/11/19 OwenLiu, 透過共用Function 統一處理 MOProcess資料 ExamineMOProcess(MONo, ProductNo, ProductVersion, MOTypeNo, ref CollectionSQL, ref aryException, CustomerLotNo); if (aryException.Count > 0) goto exitfun; // add MO Property if (dtMOProperty.Rows.Count > 0) { foreach (DataRow dr in dtMOProperty.Rows) { strSQL = "insert into tbloemoproperty(mono,propertyno,propertyvalue) values('" + dr["MONo"].ToString().ToUpper() + "','" + dr["PropertyNo"] + "','" + dr["PropertyValue"] + "')"; CollectionSQL.Add(strSQL); // cmd.Parameters.AddWithValue(":MONo", dr("MONo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":PropertyNo", dr("PropertyNo")) // cmd.Parameters.AddWithValue(":PropertyValue", dr("PropertyValue")) // cmd.CommandText = "insert into tbloemoproperty(mono,propertyno,propertyvalue) values(?,?,?)" // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() strSQL = "insert into tbloemoproperty_recive(mono,propertyno,propertyvalue) values('" + dr["MONo"].ToString().ToUpper() + "','" + dr["PropertyNo"] + "','" + dr["PropertyValue"] + "')"; CollectionSQL.Add(strSQL); // cmd.Parameters.AddWithValue(":MONo", dr("MONo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":PropertyNo", dr("PropertyNo")) // cmd.Parameters.AddWithValue(":PropertyValue", dr("PropertyValue")) // cmd.CommandText = "insert into tbloemoproperty_recive(mono,propertyno,propertyvalue) values(?,?,?)" // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() } } // add MO SEMI Out // // trans.Commit() //string argstrDataBaseType = "Null"; ExecuteSQLNoneQuery_UPD(objSetting.GetDataBaseType(), objSetting.GetConnectionString(), CollectionSQL); r = true; clsERP.combineMessage(ref aryMessage, mmsg: "[%AddMOSuccess%]"); } catch (Exception ex) { // trans.Rollback() clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%AddMOFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } // End Using // End Using // End Using exitfun: ; } catch (Exception ex) { clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%AddMOFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } finally { CloseConnection(cnnTemp1); addMORet = r; } return addMORet; } public static string AddMOMaterialList(string MONo, string MaterialNo, int MaterialLevel, double StdQty, double DecreaseRate, string OPNo, int Specified, int PutInPlaceType, string UnitNo, int MOFlag, string MaterialMONo, string Description = defString, Collection colReturnSQL = null, string AdditionalXml = "", string MaterialVersion = defString, string SubstituteMaterialNo = defString, int SubstituteMaterialLevel = defInteger, decimal RequireQty = defInteger, decimal SubstituteStdQty = defInteger, string Creator = defString, DateTime CreateDate = default(DateTime),string AB=defString,string PositionCode=defString) { string AddMOMaterialListRet = default(string); // 此 Function 將新增一筆資料 // 傳入值: 各欄位新增值 // 傳回值: success(成功), fail(失敗) DbDataReader drTemp = null; string MaterialType = "N/A"; int CountWay = -1; int CheckLotNo = -1; IDbConnection cnnTemp = null; string strSQL = ""; string strSQLAddField = ""; string strSQLAddValue = ""; AppSettings objSetting = new AppSettings(); string strDataBaseType = objSetting.GetDataBaseType(); string strConnectionString = objSetting.GetConnectionString(strDataBaseType); try { cnnTemp = CreateConnection(strConnectionString); // //Create connection if (MaterialLevel == 0) // Material { strSQL = "Select MaterialType,CountWay,CheckLotNo From tblMTLMaterialBasis" + " Where MaterialNo ='" + MaterialNo + "'"; // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnTemp) drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); if (drTemp.Read()) { MaterialType = Conversions.ToString(drTemp["MaterialType"]); CountWay = Conversions.ToInteger(drTemp["CountWay"]); CheckLotNo = Conversions.ToInteger(drTemp["CheckLotNo"]); } else { throw new iMESException.MESException("0000-200003", "MaterialNo:" + MaterialNo + " is not exist!"); } drTemp.Close(); } // cmmTemp.Dispose() else if (MaterialLevel == 1) // Product { strSQL = "Select ProductType From tblPRDProductBasis Where ProductNo ='" + MaterialNo + "'"; // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnTemp) drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); if (drTemp.Read()) { MaterialType = Conversions.ToString(drTemp["ProductType"]); } else { throw new iMESException.MESException("0000-200003", "ProductNo:" + MaterialNo + " is not exist!"); } drTemp.Close(); CheckLotNo = 1; // 一律要Check Lot } // Combine SQL strSQLAddField = "Insert into tblOEMOMaterialList (MONo, MaterialNo, OrgMaterialNo, MaterialLevel, StdQty, UnitNo," + "DecreaseRate, OPNo, Specified, PutInPlaceType, MOFlag, MaterialType, CountWay, CheckLotNo "; strSQLAddValue = " Values ('" + MONo + "', '" + MaterialNo + "','" + MaterialNo + "'," + MaterialLevel + "," + StdQty + ",'" + UnitNo + "'," + DecreaseRate + ",'" + OPNo + "'," + Specified + "," + PutInPlaceType + "," + MOFlag + ",'" + MaterialType + "'," + CountWay + "," + CheckLotNo; if (MOFlag == 0) // Create MO,紀錄半成品的工單編號 { strSQLAddField = strSQLAddField + ",MaterialMONo"; strSQLAddValue = strSQLAddValue + ",'" + MaterialMONo + "'"; } else { strSQLAddField = strSQLAddField + ",MaterialMONo"; strSQLAddValue = strSQLAddValue + ",'N/A'"; } if (Description != defString) { strSQLAddField = strSQLAddField + ",Description"; strSQLAddValue = strSQLAddValue + ",'" + Description + "'"; } if (MaterialVersion != defString) { strSQLAddField = strSQLAddField + ",MaterialVersion"; strSQLAddValue = strSQLAddValue + ",'" + MaterialVersion + "'"; } if (SubstituteMaterialNo != defString) { strSQLAddField = strSQLAddField + ",SubstituteMaterialNo"; strSQLAddValue = strSQLAddValue + ",'" + SubstituteMaterialNo + "'"; } // 2012/12/27,Even,新增替代料等級及需求數量 if (SubstituteMaterialLevel != defInteger) { strSQLAddField = strSQLAddField + ",SubstituteMaterialLevel"; strSQLAddValue = strSQLAddValue + ",'" + SubstituteMaterialLevel + "'"; } if (SubstituteStdQty != defInteger) { strSQLAddField = strSQLAddField + ",SubstituteStdQty"; strSQLAddValue = strSQLAddValue + ",'" + SubstituteStdQty + "'"; } if (RequireQty != defInteger) { strSQLAddField = strSQLAddField + ",RequireQty"; strSQLAddValue = strSQLAddValue + ",'" + RequireQty + "'"; } if (Creator != defString) { strSQLAddField = strSQLAddField + ",Creator"; strSQLAddValue = strSQLAddValue + ",'" + Creator + "'"; } if (CreateDate != defDateTime) { strSQLAddField = strSQLAddField + ",CreateDate"; strSQLAddValue = strSQLAddValue + ",To_Date('" + Strings.Format(CreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; } if (string.IsNullOrEmpty(AdditionalXml)) { // 當沒有額外的欄位時,直接給定strSQL strSQL = strSQLAddField + ")" + strSQLAddValue + ")"; } else { // 加上additional的field & value 後傳回 strSQL = SeparateAddXML_Add(ref strSQLAddField, ref strSQLAddValue, AdditionalXml); } // 呼叫執行SQL指令 if (colReturnSQL == null) { ExecuteSQLNoneQuery(Conversions.ToString(strDataBaseType), strConnectionString, ref strSQL); } else { // 不執行指令,將指令傳出 colReturnSQL.Add(strSQL); } // Return success AddMOMaterialListRet = "success"; } catch (Exception e1) { AddMOMaterialListRet = "fail"; // 發生錯誤時丟回本身的Function Name及系統錯誤訊息 throw; } // New Exception("kcOE.AddMOMaterialList: " & e1.Message) finally { CloseConnection(cnnTemp); } return AddMOMaterialListRet; } /// /// 編輯工單(工單變更) /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public static bool editMO(string MONo, decimal MOQty, string RONo = null, string ItemNo = null, string CustomerNo = null, int MOTypeNo = defInteger, int Priority = defInteger, DateTime PlanFinishDate = default(DateTime), string Creator = null, DateTime CreateDate = default(DateTime), string Description = null, DataTable dtMTL = null, List aryMessage = null, List aryException = null, List aryAlert = null, DataTable dtMOProperty = null, string ERPMOLineNo = defString, bool PropertyFlag = false, string CustomerLotNo = null, DateTime PlanStartDate = default(DateTime), int wipEntityId = defInteger, string bomVersion = null, string lcPlantype = null, string faiFlag = null) // haoqian 221025 { bool editMORet = default(bool); bool r = false; var CollectionSQL = new Collection(); string strSQL = ""; try { // ----- Default Value ----- int MOSource = 0; // 0: RO, 1: RMA, 2: None int MOState = 0; // 0: Unconfirm, 1: Pending, 2: Confirm, 3: Release(允許開立生產批), 6: 已在客託倉或退貨倉的工單(允許開立生產批), 99:Close int IssueState = 0; string BelongToMONo = "N/A"; string ENGNo = "N/A"; string ENGVersion = "N/A"; //string CustomerLotNo = string.Empty; string FactoryNo = "N/A"; decimal AdjustQty = 0m; string OPNo = "LOTCREATE"; // ---- Get Value ----- string CustomerName = string.Empty; string ProductVersion = string.Empty; string ProcessNo = string.Empty; string ProcessVersion = string.Empty; bool isROExist = false; bool isRODetailExist = false; string ItemProperty = defString; // 2016-10-17, Joe, 新增料件屬性,P:採購件,M:自製件,S:外包件 int OutSourcingFlag = defInteger; // 2016-10-17, Joe, 0:off,1:on string ProductNo = defString; var ReleaseQty = default(decimal); // ----- 1. 檢查MO是否存在 ----- MONo = MONo.ToUpper(); using (var objOE = new clsOEBasis()) { var drOE = objOE.GetMOBasis(MONo.ToUpper()); if (drOE["MONo"] is DBNull == true) clsERP.combineException(ref aryException, mesmsg: "[%MONoNotExist%]"); // If drOE.Item("IssueState") < 0 Or drOE.Item("IssueState") > 2) clsERP.combineException(aryException, , , "[%MONoIssueStateCanNotEdit%]") if (!(drOE["MOState"] is DBNull)) { if (Convert.ToBoolean(Operators.ConditionalCompareObjectEqual(drOE["MOState"], 99, false))) clsERP.combineException(ref aryException, mesmsg: "[%MONoClosed%]"); } // 2020/08/11 Grace Mantis 76332 依據規格書說明調整:若訂單號碼有傳入,此項目應一併傳入,若未傳入則預設為1 if (string.IsNullOrEmpty(ItemNo) == true) ItemNo = "1"; // ----- 2. 檢查訂單資料 ----- if (string.IsNullOrEmpty(RONo) == false) { if (RONo.ToUpper() != drOE["RONo"].ToString()) clsERP.combineException(ref aryException, mesmsg: "[%RONoCanNotChange%]"); if (ItemNo != drOE["ItemNo"].ToString()) clsERP.combineException(ref aryException, mesmsg: "[%ROItemNoCanNotChange%]"); } // ----- 3. 檢查MO剩餘數量 ----- // If MOQty < drOE.Item("UnReleaseLotQty")) clsERP.combineException(aryException, , , "[%MOQtyLassThenUnReleaseLotQty%]") // 要修改的MOQty不可小於已下線數量:MOQtyLessThenReleaseLotQty, 2009/05/05,by yumei if (!(drOE["MOQty"] is DBNull)) { ReleaseQty = Convert.ToDecimal(Operators.SubtractObject(drOE["MOQty"], drOE["UnReleaseLotQty"])); if (MOQty < ReleaseQty) clsERP.combineException(ref aryException, mesmsg: "[%MOQtyLessThenReleaseLotQty%]"); } if (!(drOE["IssueState"] is DBNull)) { //檢查工單數量的變更是否合理 if (Conversions.ToInteger(drOE["IssueState"]) == 2) { var dsOEMOC = objOE.ShowMOComponent(MONo.ToUpper()); if (dsOEMOC.Tables[0].Rows.Count > 0) { //tblOEMOComponent.InventoryNo多筆相同 if (!(dsOEMOC.Tables[0].Rows[0]["InventoryNo"] is DBNull)) { clsERP.combineException(ref aryException, mesmsg: "[%EditMOQtyIsNotAllowed_InventoryNo%]"); } else { if (!(drOE["MOQty"] is DBNull)) { if (MOQty < Convert.ToDecimal(drOE["MOQty"])) { if (dsOEMOC.Tables[0].Rows.Count > MOQty) { clsERP.combineException(ref aryException, mesmsg: "[%EditMOQtyIsNotAllowed_WaferSouceType%]"); } } } } } } } ProductNo = drOE["ProductNo"].ToString(); } if (aryException.Count > 0) goto exitfun; // ----- 3. 檢查MOSource----- if (string.IsNullOrEmpty(RONo)) MOSource = 2; // MO來源為其他(暫不考慮RMA) // ----- 4. 檢查CustomerNo是否存在 ----- if (MOSource == 0) { if (string.IsNullOrEmpty(CustomerNo)) { // 未傳入 clsERP.combineException(ref aryException, mesmsg: "[%ROWithoutCustomerNo%]"); } else { // 有傳入=>檢查Customer主檔 using (var objENT = new clsCustomerBasis()) { var dr = objENT.GetCustomerBasis(CustomerNo.ToUpper()); if (dr["CustomerNo"] is DBNull == true) { // Customer主檔未建立 // clsERP.combineException(aryException, , , "[%CustomerNoNotExist%]") // 5.3 若拋入訂單號碼,則必須拋入客戶編號,系統應檢查tblENTCustomerBasis之中是否存在此客戶,若無則自動新增 objENT.AddCustomerBasis(CustomerNo.ToUpper(), CustomerNo, CustomerNo, "NULL", "NULL", "NULL", "NULL", "NULL", "NULL"); objENT.SetCustomerBasisIssueState(CustomerNo.ToUpper(), 2); } else { CustomerName = dr["CustomerName"].ToString(); } } } } // ----- 5. 檢查Product ----- // Using objPRD As New kcPRD.clsProduct // Dim dr As DataRow = objPRD.GetProduct(ProductNo.ToUpper) // If IsDBNull(dr("ProductNo")) = True) clsERP.combineException(aryException, , , "[%ProductNoNotExist%]") // If IsDBNull(dr("ProductNo")) = False AndAlso dr("IssueState") <> 2) clsERP.combineException(aryException, , , "[%ProductNotApproved%]") // '----- 6. 檢查MOUnitNo ----- // If IsDBNull(dr("ProductNo")) = False AndAlso dr("UnitNo").ToString.ToLower <> MOUnitNo.ToLower) clsERP.combineException(aryException, , , "[%ProductandMOwithdifferentUnitNo%]") // dr.Delete() // Try // ProductVersion = objPRD.GetProductCurVersion(ProductNo.ToUpper) // Catch ex As Exception // clsERP.combineException(aryException, , , "[%GetProductVersionFail%]") // End Try // End Using using (var objPRD = new clsProduct()) { try { ProductVersion = objPRD.GetProductCurVersion(ProductNo.ToUpper()); } catch (Exception ex) { clsERP.combineException(ref aryException, mesmsg: "[%GetProductVersionFail%]"); } // 2016-10-17, Joe, 取得ItemProperty var drItemProperty = objPRD.GetProductProperty(ProductNo, ProductVersion, "ItemProperty"); if (drItemProperty == null == false && drItemProperty["DefaultValue"] is DBNull == false) { ItemProperty = drItemProperty["DefaultValue"].ToString(); } } // 2016-10-17, Joe, 取得外包控制 using (var objSYS = new clsSYSParameter()) { OutSourcingFlag = Conversions.ToInteger(objSYS.GetParameterValue("OutSourcingFlag")); } // 2016-10-17, Joe, 若該產品品號屬性屬於S且外包控管參數為Off時,MES不做工單新增/修改,直接回應OK,但訊息應回傳『MES系統不支持外包工單』 if (ItemProperty == "S" & OutSourcingFlag == 0) { clsERP.combineMessage(ref aryMessage, mmsg: "[%ProductNo%]:" + ProductNo + ",[%ProductVersion%]:" + ProductVersion + ",[%Is%] [%OutSourcing%] [%Product%], MES [%IsNotSupported%] !"); if (aryMessage.Count > 0) goto exitfun; } // ----- 7. 檢查用料清單資料 ----- if (dtMTL.Rows.Count > 0) { bool blnWF = false; //2023/12/07,Ning,151196: [6.0.7] SDD231107_01-01_WF 工單整合接口調整 //取得目前ERP是否為WF using (var objSYSPar = new kcSYS.clsSYSParameter()) { var dsTemp = new DataSet(); dsTemp = objSYSPar.ShowERPSetting(ActiveERP: 1); if (dsTemp != null && dsTemp.Tables[0].Rows.Count > 0) { if (dsTemp.Tables[0].Rows[0]["ERP_Name"].ToString().ToUpper() == "WORKFLOW") { blnWF = true; } } } if (!dtMTL.Columns.Contains("MaterialMONo")) dtMTL.Columns.Add("MaterialMONo", Type.GetType("System.String")); // dtMTL: MONo, MaterialNo, MaterialLevel, StdQty, UnitNo, OPNo, PutInPlaceType, DecreaseRate, Specified, *MaterialType, CountWay, *CheckLotNo, *MaterialVersion, +MaterialMONo, +*SubstituteMaterialNo foreach (DataRow dr in dtMTL.Rows) { string strMaterialUnit = dr["UnitNo"].ToString(); decimal decTemp = 0m; try { if (string.IsNullOrEmpty(dr["MainItem"].ToString())) { // 未傳入 clsERP.combineException(ref aryException, mesmsg: "[%MainItem%]"); } //if (string.IsNullOrEmpty(dr["PhantomItem"].ToString())) //{ // // 未傳入 // clsERP.combineException(ref aryException, mesmsg: "[%PhantomItem%]"); //} if (string.IsNullOrEmpty(dr["LockRequirement"].ToString())) { // 未傳入 clsERP.combineException(ref aryException, mesmsg: "[%LockRequirement%]"); } if (string.IsNullOrEmpty(dr["OperationSeqnum"].ToString())) { // 未傳入 clsERP.combineException(ref aryException, mesmsg: "[%OperationSeqnum%]"); } if (blnWF == true) { if (Conversions.ToInteger(dr["StdQty"]) != Convert.ToDecimal(dr["StdQty"])) //若標準用量有小數, 需以ERP所傳入的該物料的需領用量(RequireQty)/預計產量(MOQty),並以無條件捨去取到小數六位數的值,做為該物料的標準用量 { decTemp = (Convert.ToDecimal(dr["RequireQty"]) / MOQty) * 1000000; decTemp = Math.Floor(decTemp); decTemp = decTemp / 1000000; dr["StdQty"] = decTemp; } if (Conversions.ToInteger(dr["SubstituteStdQty"]) != Convert.ToDecimal(dr["SubstituteStdQty"])) //若替代料標準用量有小數同標準用量處理 { decTemp = (Convert.ToDecimal(dr["RequireQty"]) / MOQty) * 1000000; decTemp = Math.Floor(decTemp); decTemp = decTemp / 1000000; dr["SubstituteStdQty"] = decTemp; } } if (dr["MaterialLevel"].ToString() == "0") { // 用料清單為物料 using (var objMTL = new clsMTLBasis()) { DataRow drMTL = null; bool errorFlag = false; dr["MONo"] = dr["MONo"].ToString().ToUpper(); drMTL = objMTL.GetMaterialBasis(dr["MaterialNo"].ToString().ToUpper()); // (skip) MONo, MaterialLevel, STDQty, DecreaseRate, OPNo, Specified, PutinPlaceType, MOFlag, CountWay, Description, OrgMaterialNo, EX_MTLList1, EX_MTLList2, MaterialVersion // MaterialNo if (drMTL["MaterialNo"] is DBNull == true) // 2013/02/19,Even,以物料編號在物料主檔中查詢,查不到表示該項為半成品,因為TIPTOP系統中,物料和產品在同一個table內,使用者可能挑選到產品卻以為是物料 { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: " [%MaterialNo%]:" + dr["MaterialNo"] + " [%MaterialNoNotExist%][%InMESSystem%]! [%MaterialLevel%][%IsMaterial%]."); goto SkipMaterialList; } else { dr["MaterialNo"] = dr["MaterialNo"].ToString().ToUpper(); } // UnitNo if (drMTL["UnitNo"].ToString().ToLower() != strMaterialUnit.ToLower()) { // 當用料清單和物料主檔的單位不同時 // 單位轉換 using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) { var colParameters = new Collection(); colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); colParameters.Add("*", "ProductVersion"); try { dr["StdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drMTL["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["StdQty"]), colParameters)); dr["SubstituteStdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drMTL["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["SubstituteStdQty"]), colParameters)); dr["UnitNo"] = drMTL["UnitNo"].ToString().ToLower(); } catch (Exception ex) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + dr["MaterialNo"]); clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); } } } else { dr["UnitNo"] = dr["UnitNo"].ToString().ToLower(); } // MaterialMONo (Default) dr["MaterialMONo"] = "N/A"; // MaterialType if (dr["MaterialType"] is DBNull == true) { dr["MaterialType"] = drMTL["MaterialType"]; } else if (Convert.ToBoolean(Operators.ConditionalCompareObjectEqual(dr["MaterialType"].ToString().ToUpper(), drMTL["MaterialType"], false))) { dr["MaterialType"] = dr["MaterialType"].ToString().ToUpper(); } else { clsERP.combineException(ref aryException, mesmsg: "[%MaterialListMaterialTypeDifferent%]" + " [%MaterialNo%]:" + dr["MaterialNo"]); } // CheckLotNo if (dr["CheckLotNo"] is DBNull == true) { dr["CheckLotNo"] = drMTL["CheckLotNo"]; } else if (Convert.ToBoolean(Operators.ConditionalCompareObjectNotEqual(dr["CheckLotNo"], drMTL["CheckLotNo"], false))) { clsERP.combineException(ref aryException, mesmsg: "[%MaterialListCheckLotNoDifferent%]" + " [%MaterialNo%]:" + dr["MaterialNo"]); } // 2013/02/20,Even,修改替代料檢查 if (dr["SubstituteMaterialNo"] is DBNull == true) { dr["SubstituteMaterialNo"] = dr["MaterialNo"]; dr["SubstituteMaterialLevel"] = dr["MaterialLevel"]; } // 2013/02/25,Even,判斷替代料,替代料可為半成品或是物料 else if (dr["SubstituteMaterialLevel"].ToString() == "0") // 為物料 { // 查詢替代料是否在物料主檔內,若無,則出現錯誤訊息 drMTL = objMTL.GetMaterialBasis(dr["SubstituteMaterialNo"].ToString().ToUpper()); if (drMTL["MaterialNo"] is DBNull == true) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + dr["SubstituteMaterialNo"] + " [%MaterialNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsMaterial%]."); goto SkipMaterialList; } else { dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); } } else // 為半成品 (SubstituteMaterialLevel = 1) { DataRow drPRD = null; // 檢查物料是否存在於產品主檔 using (var objPRD = new clsProduct()) { drPRD = objPRD.GetProduct(dr["SubstituteMaterialNo"].ToString().ToUpper()); } if (drPRD["ProductNo"] is DBNull == true) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + dr["SubstituteMaterialNo"] + " [%ProductNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsProduct%]."); goto SkipMaterialList; } else { dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); } } if (dr["SubstituteStdQty"] is DBNull == true) { dr["SubstituteStdQty"] = dr["StdQty"]; } // 2019/12/16 OwenLiu, Mantis:0065576 , 工單整合(新增)時用料需求數支援單位轉換 decimal decRequireQty = 0m; if (dr["RequireQty"] is DBNull == true) { // ERP未傳入需求數(RequireQty) // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 dr["RequireQty"] = Operators.MultiplyObject(Operators.MultiplyObject(MOQty, dr["StdQty"]), Operators.AddObject(1, dr["DecreaseRate"])); } else { decRequireQty = Convert.ToDecimal(dr["RequireQty"]); // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 if (drMTL["UnitNo"].ToString().ToLower() != strMaterialUnit.ToLower()) { // 當用料清單和物料主檔的單位不同時 using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) { var colParameters = new Collection(); colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); colParameters.Add("*", "ProductVersion"); try { dr["RequireQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drMTL["UnitNo"].ToString().ToLower(), (double)decRequireQty, colParameters)); } catch (Exception ex) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + dr["MaterialNo"]); clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); } } } else { dr["RequireQty"] = decRequireQty; } } // 檢查OPNo(用料作業站)是否存在 ----- if (dr["OPNo"].ToString().ToUpper() != "LOTCREATE") { // 有傳入=>檢查OP主檔 using (var objOP = new clsOpBasis()) { var drOP = objOP.GetOPBasis(dr["OPNo"].ToString().ToUpper()); if (drOP["OPNo"] is DBNull == true) { // OP主檔未建立 clsERP.combineException(ref aryException, mesmsg: "[%OPNoNotExist%]"); } } } } } else { // 用料清單為半成品 using (var objPRD = new clsProduct()) { DataRow drPRD = null; bool errorFlag = false; dr["MONo"] = dr["MONo"].ToString().ToUpper(); drPRD = objPRD.GetProduct(dr["MaterialNo"].ToString().ToUpper()); // (skip) MONo, MaterialLevel, STDQty, DecreaseRate, OPNo, Specified, PutinPlaceType, MOFlag, CountWay, Description, OrgMaterialNo, EX_MTLList1, EX_MTLList2, MaterialVersion // MaterialNo if (drPRD["ProductNo"] is DBNull == true) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: " [%MaterialNo%]:" + dr["MaterialNo"] + " [%ProductNoNotExist%][%InMESSystem%]! [%MaterialLevel%][%IsProduct%]."); goto SkipMaterialList; } else { dr["MaterialNo"] = dr["MaterialNo"].ToString().ToUpper(); } // UnitNo if (drPRD["UnitNo"].ToString().ToLower() != dr["UnitNo"].ToString().ToLower()) { // 當用料清單和物料主檔的單位不同時 // 單位轉換 using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) { var colParameters = new Collection(); colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); colParameters.Add("*", "ProductVersion"); try { dr["StdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drPRD["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["StdQty"]), colParameters)); dr["SubstituteStdQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drPRD["UnitNo"].ToString().ToLower(), Convert.ToDouble(dr["SubstituteStdQty"]), colParameters)); dr["UnitNo"] = drPRD["UnitNo"].ToString().ToLower(); } catch (Exception ex) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + dr["MaterialNo"]); clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); } } } else { dr["UnitNo"] = dr["UnitNo"].ToString().ToLower(); } // MaterialMONo (Default) dr["MaterialMONo"] = "N/A"; // MaterialType if (dr["MaterialType"] is DBNull == true) { dr["MaterialType"] = drPRD["ProductType"]; } else if (Convert.ToBoolean(Operators.ConditionalCompareObjectEqual(dr["MaterialType"].ToString().ToUpper(), drPRD["ProductType"], false))) { dr["MaterialType"] = dr["MaterialType"].ToString().ToUpper(); } else { clsERP.combineException(ref aryException, mesmsg: "[%MaterialListMaterialTypeDifferent%]" + " [%MaterialNo%]:" + dr["MaterialNo"]); } // CheckLotNo dr["CheckLotNo"] = 1; // 半成品固定為1 // SubstituteMaterialNo // ---2013/02/20,Even,替代料是否存在的檢查---- if (dr["SubstituteMaterialNo"] is DBNull == true) { dr["SubstituteMaterialNo"] = dr["MaterialNo"]; dr["SubstituteMaterialLevel"] = dr["MaterialLevel"]; } else { DataRow drMTL = null; // 2013/02/25,Even,判斷替代料,替代料可為半成品或是物料 if (dr["SubstituteMaterialLevel"].ToString() == "0") // 為物料 { // 查詢替代料是否在物料主檔內,若無,則出現錯誤訊息 using (var objMTL = new clsMTLBasis()) { drMTL = objMTL.GetMaterialBasis(dr["SubstituteMaterialNo"].ToString().ToUpper()); } if (drMTL["MaterialNo"] is DBNull == true) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + dr["SubstituteMaterialNo"] + " [%MaterialNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsMaterial%]."); goto SkipMaterialList; } else { dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); } } else // 為半成品 (SubstituteMaterialLevel = 1) { // 檢查物料是否存在於產品主檔 drPRD = objPRD.GetProduct(dr["SubstituteMaterialNo"].ToString().ToUpper()); if (drPRD["ProductNo"] is DBNull == true) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: " [%SubstituteMaterialNo%]:" + dr["SubstituteMaterialNo"] + " [%ProductNoNotExist%][%InMESSystem%]! [%SubstituteMaterialLevel%][%IsProduct%]."); goto SkipMaterialList; } else { dr["SubstituteMaterialNo"] = dr["SubstituteMaterialNo"].ToString().ToUpper(); } } } if (dr["SubstituteStdQty"] is DBNull == true) { dr["SubstituteStdQty"] = dr["StdQty"]; } // 2019/12/16 OwenLiu, Mantis:0065576 , 工單整合(新增)時用料需求數支援單位轉換 decimal decRequireQty = 0m; if (dr["RequireQty"] is DBNull == true) { // ERP未傳入需求數(RequireQty) // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 dr["RequireQty"] = Operators.MultiplyObject(Operators.MultiplyObject(MOQty, dr["StdQty"]), Operators.AddObject(1, dr["DecreaseRate"])); } else { decRequireQty = Convert.ToDecimal(dr["RequireQty"]); // 2019/12/23 OwenLiu, Mantis:0065953 修正工單整合 用料清單單位轉換的問題 if (drPRD["UnitNo"].ToString().ToLower() != strMaterialUnit.ToLower()) { // 當用料清單和產品主檔的單位不同時 using (var objUnit = new udUnitTransferFunction.clsUnitTransferFunction()) { var colParameters = new Collection(); colParameters.Add(dr["MaterialNo"].ToString().ToUpper(), "ProductNo"); colParameters.Add("*", "ProductVersion"); try { dr["RequireQty"] = Convert.ToDouble(objUnit.EXETransferQty(strMaterialUnit.ToLower(), drPRD["UnitNo"].ToString().ToLower(), (double)decRequireQty, colParameters)); } catch (Exception ex) { errorFlag = true; clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitNoDifferent%]" + " [%MaterialNo%]:" + dr["MaterialNo"]); clsERP.combineException(ref aryException, mesmsg: "[%MaterialListUnitTransferFail%]" + " " + ex.Message); } } } else { dr["RequireQty"] = decRequireQty; } } // 檢查OPNo(用料作業站)是否存在 ----- if (dr["OPNo"].ToString().ToUpper() != "LOTCREATE") { // 有傳入=>檢查OP主檔 using (var objOP = new clsOpBasis()) { var drOP = objOP.GetOPBasis(dr["OPNo"].ToString().ToUpper()); if (drOP["OPNo"] is DBNull == true) { // OP主檔未建立 clsERP.combineException(ref aryException, mesmsg: "[%OPNoNotExist%]"); } } } } } SkipMaterialList: ; } catch (Exception ex) { clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%doMaterialListFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } } } // ----- 8. 取得FactoryNo ----- // FactoryNo = "N/A" // ----- 檢查MO Property --- if (!(dtMOProperty == null) && dtMOProperty.Rows.Count > 0) { foreach (DataRow dr in dtMOProperty.Rows) { List argaryMessage = null; List argaryException = null; doSYSMOProperty(Convert.ToString(dr["PropertyNo"]), Convert.ToString(dr["DataType"]), aryMessage: argaryMessage, aryException: argaryException); } } // ----- 9. 檢查OPNo(用料作業站)是否存在 ----- if (dtMTL.Rows.Count > 0) { // dtMTL.Columns.Add("MaterialMONo", System.Type.GetType("System.String")) // dtMTL: MONo, MaterialNo, MaterialLevel, StdQty, UnitNo, OPNo, PutInPlaceType, DecreaseRate, Specified, *MaterialType, CountWay, *CheckLotNo, *MaterialVersion, +MaterialMONo foreach (DataRow dr in dtMTL.Rows) { try { // OPyNo <> "LOTCREATE" if (dr["OPNo"].ToString() != OPNo.ToString()) { // 有傳入=>檢查OP主檔 using (var objOP = new clsOpBasis()) { var drOP = objOP.GetOPBasis(dr["OPNo"].ToString()); if (drOP["OPNo"] is DBNull == true) { // OP主檔未建立 clsERP.combineException(ref aryException, mesmsg: "[%OPNoNotExist%]"); } } } } catch (Exception ex) { clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%doMaterialListFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } } } // ----- Exception => Fail ----- if (aryException.Count > 0) goto exitfun; // ----- Edit MO ----- AppSettings objSetting = new AppSettings(); // Using cn As New OleDbConnection(objSetting.GetConnectionString) // Using cmd As New OleDbCommand("", cn) // cn.Open() // Using trans As OleDbTransaction = cn.BeginTransaction // cmd.Transaction = trans try { // ----- MO ----- // edit MO Basis strSQL = "update tbloemobasis set " + "moqty=" + MOQty + ", " + "unreleaselotqty=" + (MOQty - ReleaseQty) + ", " + "priority=" + Priority + ", " + "planfinishdate=To_Date('" + Strings.Format(PlanFinishDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), " + "description=N'" + Description + "' "; // 2018/3/19 Vick 新增欄位 ERPMOLineNo if (ERPMOLineNo != defString) { strSQL += ",ERPMOLineNo ='" + ERPMOLineNo + "' "; } if (PlanStartDate != defDateTime) { strSQL += ",PlanStartDate = To_Date('" + Strings.Format(PlanStartDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; } strSQL += "where mono='" + MONo.ToUpper() + "'"; CollectionSQL.Add(strSQL); // cmd.CommandText = _ // "update tbloemobasis set " & _ // "moqty=?, " & _ // "unreleaselotqty=?, " & _ // "priority=?, " & _ // "planfinishdate=?, " & _ // "description=? " & _ // "where mono=?" // cmd.Parameters.AddWithValue(":MOQty", MOQty) // cmd.Parameters.AddWithValue(":UnReleaseLotQty", MOQty - ReleaseQty) 'UNRELEASELOTQTY // cmd.Parameters.AddWithValue(":Priority", Priority) // cmd.Parameters.AddWithValue(":PlanFinishDate", PlanFinishDate) // cmd.Parameters.AddWithValue(":Description", Description) // cmd.Parameters.AddWithValue(":MONo", MONo.ToUpper) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() // add MO Component // add MO Material List // dtMTL: MONo, MaterialNo, MaterialLevel, StdQty, UnitNo, OPNo, PutInPlaceType, DecreaseRate, Specified, *MaterialType, CountWay, *CheckLotNo, *MaterialVersion, +MaterialMONo, +*SubstituteMaterialNo if (dtMTL.Rows.Count > 0) { using (var objOE = new clsOEBasis()) { var dtTemp = objOE.ShowMOMaterialList(MONo.ToUpper()).Tables["MOMaterialList"]; strSQL = "delete from tbloemomateriallist where mono='" + MONo.ToUpper() + "'"; CollectionSQL.Add(strSQL); // cmd.CommandText = _ // "delete from tbloemomateriallist where mono=?" // cmd.Parameters.AddWithValue(":MONo", MONo.ToUpper) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() foreach (DataRow dr in dtMTL.Rows) { bool blnAddMaterial = true; // 是否將工單用料加入tblOEMOMaterialList, True:是 False:否 // 2019/09/25 Grace 增加檢查, 若有傳入DeliveryMethod且值=4, 這筆工單用料清單, 不加入至tblOEMOMaterialList;否或非4則不做任何處理 // 材料型態tagname:DeliveryMethod (Optional參數,非必傳) if (!(dr["DeliveryMethod"] is DBNull)) { if (dr["DeliveryMethod"].ToString() == "4") { blnAddMaterial = false; } } if (blnAddMaterial) { strSQL = "insert into tbloemomateriallist(mono,materialno,materiallevel,stdqty,unitno,opno,putinplacetype," + "decreaserate,specified,materialtype,countway,checklotno,materialversion,materialmono,substitutematerialno,SubstituteMaterialLevel,SubstituteStdQty,RequireQty,mainItem,phantomItem,lockRequirement,operationSeqnum) " + "values('" + dr["MONo"].ToString().ToUpper() + "','" + dr["MaterialNo"].ToString().ToUpper() + "'," + dr["MaterialLevel"] + "," + dr["StdQty"] + ",'" + dr["UnitNo"].ToString().ToLower() + "','" + dr["OPNo"].ToString().ToUpper() + "'," + dr["PutInPlaceType"] + "," + dr["DecreaseRate"] + "," + dr["Specified"] + ",'" + dr["MaterialType"].ToString().ToUpper() + "'," + dr["CountWay"] + "," + dr["CheckLotNo"] + ",'" + dr["MaterialVersion"] + "','" + dr["MaterialMONo"] + "','" + dr["SubstituteMaterialNo"].ToString().ToUpper() + "'," + dr["SubstituteMaterialLevel"] + "," + dr["SubstituteStdQty"] + "," + dr["RequireQty"] + ",'" + dr["mainItem"] + "','" + dr["phantomItem"] + "','" + dr["lockRequirement"] + "','" + dr["operationSeqnum"] + "')"; CollectionSQL.Add(strSQL); // cmd.CommandText = _ // "insert into tbloemomateriallist(mono,materialno,materiallevel,stdqty,unitno,opno,putinplacetype," & _ // "decreaserate,specified,materialtype,countway,checklotno,materialversion,materialmono,substitutematerialno,SubstituteMaterialLevel,SubstituteStdQty,RequireQty) " & _ // "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // cmd.Parameters.AddWithValue(":MONo", dr["MONo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":MaterialNo", dr["MaterialNo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":MaterialLevel", dr["MaterialLevel")) // cmd.Parameters.AddWithValue(":StdQty", dr["StdQty")) // cmd.Parameters.AddWithValue(":UnitNo", dr["UnitNo").ToString.ToLower) // cmd.Parameters.AddWithValue(":OPNo", dr["OPNo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":PutInPlaceType", dr["PutInPlaceType")) // cmd.Parameters.AddWithValue(":DecreaseRate", dr["DecreaseRate")) // cmd.Parameters.AddWithValue(":Specified", dr["Specified")) // cmd.Parameters.AddWithValue(":MaterialType", dr["MaterialType").ToString.ToUpper) // cmd.Parameters.AddWithValue(":CountWay", dr["CountWay")) // cmd.Parameters.AddWithValue(":CheckLotNo", dr["CheckLotNo")) // cmd.Parameters.AddWithValue(":MaterialVersion", dr["MaterialVersion")) // cmd.Parameters.AddWithValue(":MaterialMONo", dr["MaterialMONo")) // cmd.Parameters.AddWithValue(":SubstituteMaterialNo", dr["SubstituteMaterialNo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":SubstituteMaterialLevel", dr["SubstituteMaterialLevel")) '2012/12/26,Even,新增替代物料階 &數量 // cmd.Parameters.AddWithValue(":SubstituteStdQty", dr["SubstituteStdQty")) '2012/12/28,Even,新增替代物標準數 // cmd.Parameters.AddWithValue(":RequireQty", dr["RequireQty")) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() } // 將舊的OrgMaterialQty資料更新到tbloemomateriallist DataRow[] drTemp = dtTemp.Select("MONo='" + dr["MONo"].ToString().ToUpper() + "'" + " And MaterialNo='" + dr["MaterialNo"].ToString().ToUpper() + "'" + " And OPNo='" + dr["OPNo"] + "'" + " And SubstituteMaterialNo='" + dr["SubstituteMaterialNo"].ToString().ToUpper() + "'"); foreach (DataRow drOrgMaterialQty in drTemp) { strSQL = "update tbloemomateriallist set orgmaterialqty=" + drOrgMaterialQty["OrgMaterialQty"] + " where mono='" + dr["MONo"].ToString().ToUpper() + "' and materialno='" + dr["MaterialNo"].ToString().ToUpper() + "' and opno='" + dr["OPNo"].ToString().ToUpper() + "' and substitutematerialno='" + dr["SubstituteMaterialNo"].ToString().ToUpper() + "'"; CollectionSQL.Add(strSQL); // cmd.CommandText = _ // "update tbloemomateriallist set orgmaterialqty=?" & _ // " where mono=? and materialno=? and opno=? and substitutematerialno=?" // cmd.Parameters.AddWithValue(":OrgMaterialQty", drOrgMaterialQty("OrgMaterialQty")) // cmd.Parameters.AddWithValue(":MONo", dr["MONo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":MaterialNo", dr["MaterialNo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":OPNo", dr["OPNo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":SubstituteMaterialNo", dr["SubstituteMaterialNo").ToString.ToUpper) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() } } } } // add MO Process // 依目前規格書之「工單變更」: // 「4.1 單頭只能修改數量(MOQty)與預定完工日(PlanFinishDate)兩個欄位」, // 故工單流程暫不做修改 // add MO Property if (dtMOProperty.Rows.Count > 0) { if (PropertyFlag) // haoqian 221025 { strSQL = "delete from tbloemoproperty where mono='" + MONo.ToUpper() + "'"; CollectionSQL.Add(strSQL); // cmd.CommandText = "delete from tbloemoproperty where mono=?" // cmd.Parameters.AddWithValue(":MONo", MONo.ToUpper) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() strSQL = "delete from tbloemoproperty_recive where mono='" + MONo.ToUpper() + "'"; CollectionSQL.Add(strSQL); // cmd.CommandText = "delete from tbloemoproperty_recive where mono=?" // cmd.Parameters.AddWithValue(":MONo", MONo.ToUpper) // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() foreach (DataRow dr in dtMOProperty.Rows) { strSQL = "insert into tbloemoproperty(mono,propertyno,propertyvalue) values('" + dr["MONo"].ToString().ToUpper() + "','" + dr["PropertyNo"] + "','" + dr["PropertyValue"] + "')"; CollectionSQL.Add(strSQL); // cmd.Parameters.AddWithValue(":MONo", dr["MONo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":PropertyNo", dr["PropertyNo")) // cmd.Parameters.AddWithValue(":PropertyValue", dr["PropertyValue")) // cmd.CommandText = "insert into tbloemoproperty(mono,propertyno,propertyvalue) values(?,?,?)" // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() strSQL = "insert into tbloemoproperty_recive(mono,propertyno,propertyvalue) values('" + dr["MONo"].ToString().ToUpper() + "','" + dr["PropertyNo"] + "','" + dr["PropertyValue"] + "')"; CollectionSQL.Add(strSQL); // cmd.Parameters.AddWithValue(":MONo", dr["MONo").ToString.ToUpper) // cmd.Parameters.AddWithValue(":PropertyNo", dr["PropertyNo")) // cmd.Parameters.AddWithValue(":PropertyValue", dr["PropertyValue")) // cmd.CommandText = "insert into tbloemoproperty_recive(mono,propertyno,propertyvalue) values(?,?,?)" // cmd.ExecuteNonQuery() // cmd.Parameters.Clear() } } else // haoqian 221025 { foreach (DataRow dr in dtMOProperty.Rows) { strSQL = "update tbloemoproperty set propertyvalue = '" + dr["PropertyValue"] + "' where mono = '" + dr["MONo"].ToString().ToUpper() + "' and propertyno = '" + dr["PropertyNo"] + "'"; CollectionSQL.Add(strSQL); strSQL = "update tbloemoproperty_recive set propertyvalue = '" + dr["PropertyValue"] + "' where mono = '" + dr["MONo"].ToString().ToUpper() + "' and propertyno = '" + dr["PropertyNo"] + "'"; CollectionSQL.Add(strSQL); } } } // 78079 // ----- MOComponent ----- // edit MO Component using (var objOE = new clsOEBasis()) { using (var objSYS = new clsSYSEng()) { // Dim drOE As DataRow = objOE.GetMOBasis(MONo.ToUpper) var dsOEMOC = objOE.ShowMOComponent(MONo.ToUpper()); if (dsOEMOC.Tables[0].Rows.Count > 0) { if (MOQty > dsOEMOC.Tables[0].Rows.Count) { var dsCreateComponentNo = new DataSet(); dsCreateComponentNo = objSYS.InitComponentNo(true, (int)Math.Round(MOQty - dsOEMOC.Tables[0].Rows.Count), MONo.ToUpper(), FactoryNo, CustomerNo, ProductNo, ProductVersion); if (!(dsCreateComponentNo.Tables == null) && dsCreateComponentNo.Tables[0].Rows.Count > 0) { for (int i = 1, loopTo = dsCreateComponentNo.Tables[0].Rows.Count; i <= loopTo; i++) // MOQty - dsOEMOC.Tables[0].Rows.Count { strSQL = "Insert into tblOEMOComponent (MoNo, ComponentNo, GoodQty, UnitNo, ReleaseState)" + " Values ('" + MONo.ToUpper() + "', '" + dsCreateComponentNo.Tables[0].Rows[i - 1]["ComponentNo"].ToString() + "'," + dsOEMOC.Tables[0].Rows[0]["GoodQty"] + ",'" + dsOEMOC.Tables[0].Rows[0]["UnitNo"] + "', 0)"; CollectionSQL.Add(strSQL); } } if (dsCreateComponentNo != null) dsCreateComponentNo = null; } } if (dsOEMOC != null) dsOEMOC = null; } } // add MO SEMI Out // trans.Commit() //string argstrDataBaseType = "Null"; ExecuteSQLNoneQuery_UPD(objSetting.GetDataBaseType(), objSetting.GetConnectionString(), CollectionSQL); r = true; clsERP.combineMessage(ref aryMessage, mmsg: "[%EditMOSuccess%]"); } catch (Exception ex) { // trans.Rollback() clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%EditMOFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } // End Using // End Using // End Using exitfun: ; } catch (Exception ex) { clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%EditMOFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } finally { editMORet = r; } return editMORet; } /// /// 檢查SYS模組裡的工單屬性 /// /// /// /// /// /// /// /// public static object doSYSMOProperty(string PropertyNo, string DataType, int IssueState = 2, List aryMessage = null, List aryException = null) { object doSYSMOPropertyRet = default(object); bool r = false; try { // ----- 檢查MOProperty是否存在 ----- using (var objSYS = new clsSYSEng()) { var dr = objSYS.GetMOProperty(PropertyNo); // ----- MOProperty已存在 ----- if (dr["PropertyNo"] is DBNull == false) { r = true; goto exitfun; } // ----- MOProperty不存在=>新增MOProperty ----- // DataType: 0:Numeric, 1:String, 2:Percent, 3:DateTime, 4:Boolean int intType = 1; switch (DataType.ToUpper()) { case "NUMERIC": { intType = 0; break; } case "STRING": { intType = 1; break; } case "PERCENT": { intType = 2; break; } case "DATETIME": { intType = 3; break; } case "BOOLEAN": { intType = 4; break; } default: { intType = 1; // 預設為String break; } } try { objSYS.AddMOProperty(PropertyNo, PropertyNo, intType, 0); objSYS.SetMOPropertyIssueState(PropertyNo, IssueState); clsERP.combineMessage(ref aryMessage, mmsg: "[%AddSYSMOPropertySuccess%]"); } catch (Exception ex) { clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%AddSYSMOPropertyFail%]"); goto exitfun; } r = true; } exitfun: ; } catch (Exception ex) { clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%doSYSMOPropertyFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } finally { doSYSMOPropertyRet = r; } return doSYSMOPropertyRet; } /// /// 檢查工廠編號是否存在;不存在=>新增 /// /// /// /// /// /// /// /// /// public static object doFactoryNo(string FactoryNo, string Creator, DateTime CreateDate, int IssueState = 2, List strMessage = null, List strException = null) { object doFactoryNoRet = default(object); bool r = false; try { // ----- 檢查工廠編號是否存在 ----- using (var objSMD = new clsSMDBasis()) { var dr = objSMD.GetFactoryBasis(FactoryNo.ToUpper()); // ----- 工廠編號已存在 ----- if (dr["FactoryNo"] is DBNull == false) goto exitfun; // ----- 工廠編號不存在=>新增工廠編號 ----- try { objSMD.AddFactoryBasis(FactoryNo.ToUpper(), "(from ERP)", Creator: Creator, CreateDate: CreateDate); objSMD.SetFactoryBasisIssueState(FactoryNo.ToUpper(), IssueState); clsERP.combineMessage(ref strMessage, mmsg: "[%AddFactoryNoSuccess%]"); } catch (Exception ex) { clsERP.combineException(ref strException, sysmsg: ex.Message, mesmsg: "[%AddFactoryNoFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); goto exitfun; } } r = true; exitfun: ; } catch (Exception ex) { clsERP.combineException(ref strException, sysmsg: ex.Message, mesmsg: "[%doFactoryFail%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } finally { doFactoryNoRet = r; } return doFactoryNoRet; } private static bool ExamineMOProcess(string MONo, string ProductNo, string ProductVersion, int MOTypeNo, ref Collection colSQL, ref List aryException, string CustomerLotNo = null) { bool blnExecResult = false; AppSettings objSetting = new AppSettings(); IDbConnection cnnTemp = null; string strSQL = "", strSQLAddField = "", strSQLAddValue = ""; var CollectionSQL = new Collection(); string CustomerNo = "", DeviceNo = ""; try { string strDataBaseType = objSetting.GetDataBaseType(); string strConnectionString = objSetting.GetConnectionString(strDataBaseType); cnnTemp = CreateConnection(strConnectionString); DbDataReader drTemp; // 1.依據工單類型(MOTypeNo)找出預設的流程編號 // 先查詢指定的工單類型,找不到再用MOType=*的資料(MOTypeNo =-1) var dtPRDPSNoList = new DataTable(); var dtPorductProcess = new DataTable(); strSQL = "select CustomerNo,DeviceNo from tblPRDProductBasis where ProductNo = '" + ProductNo + "' And ProductVersion = '" + ProductVersion + "'"; drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); if (drTemp.Read()) { CustomerNo = drTemp["CustomerNo"].ToString(); DeviceNo = drTemp["DeviceNo"].ToString(); } drTemp.Close(); strSQL = "SELECT PSNo FROM (" + " SELECT PSNo,Min(PSOrder) AS PSOrder FROM tblPRDProductProcess" + " WHERE ProductNo = '" + ProductNo + "' AND ProductVersion = '" + ProductVersion + "'" + " GROUP BY PSNo )A ORDER BY PSOrder"; //using (var daTemp = new OleDbDataAdapter(strSQL, cnnTemp)) //{ // daTemp.Fill(dtPRDPSNoList); //} ExecuteSQLQuery_Adapter(strSQL, dtPRDPSNoList, cnnTemp); foreach (DataRow drData in dtPRDPSNoList.Rows) { var dtSinglePSNoProcess = new DataTable(); strSQL = "SELECT * FROM tblPRDProductProcess" + " WHERE ProductNo = '" + ProductNo + "' AND ProductVersion = '" + ProductVersion + "'" + " AND MOTypeNo = " + MOTypeNo + " AND DefaultProcess = 1" + " AND PSNo = '" + drData["PSNo"] + "' ORDER BY PSOrder"; //using (var daTemp = new OleDbDataAdapter(strSQL, cnnTemp)) //{ // daTemp.Fill(dtSinglePSNoProcess); //} ExecuteSQLQuery_Adapter(strSQL, dtSinglePSNoProcess, cnnTemp); if (dtSinglePSNoProcess.Rows.Count.Equals(0)) { strSQL = "SELECT * FROM tblPRDProductProcess" + " WHERE ProductNo = '" + ProductNo + "' AND ProductVersion = '" + ProductVersion + "'" + " AND MOTypeNo = -1 AND DefaultProcess = 1" + " AND PSNo = '" + drData["PSNo"] + "' ORDER BY PSOrder"; //using (var daTemp = new OleDbDataAdapter(strSQL, cnnTemp)) //{ // daTemp.Fill(dtSinglePSNoProcess); //} ExecuteSQLQuery_Adapter(strSQL, dtSinglePSNoProcess, cnnTemp); } dtPorductProcess.Merge(dtSinglePSNoProcess); } dtPRDPSNoList.Dispose(); if (CustomerNo != "N/A" && DeviceNo != "N/A") { string strMOTypeNo = MOTypeNo.ToString(); DataSet dsECN = new DataSet(); var dtECN = new DataTable(); var dtNewPorductProcess = new DataTable(); DataRow drECN; dtECN.Columns.Add("MONo", Type.GetType("System.String")); dtECN.Columns.Add("CustomerLotNo", Type.GetType("System.String")); drECN = dtECN.NewRow(); drECN["MONo"] = MONo; drECN["CustomerLotNo"] = CustomerLotNo; dtECN.Rows.Add(drECN); dsECN = ShowECNProcessData(ProductNo, ProductVersion, strMOTypeNo, ref aryException, dtECN); if (aryException.Count <= 0) { short intProcessOrder = 1; foreach (DataRow drProcess in dsECN.Tables["tblECNProcessData"].Rows) { string strProcessNo = drProcess["ProcessNo"].ToString(); string strProcessVersion = drProcess["ProcessVersion"].ToString(); strSQL = "SELECT * FROM tblPRDProductProcess" + " WHERE ProductNo = '" + ProductNo + "' AND ProductVersion = '" + ProductVersion + "'" + " And ProcessNo = '" + strProcessNo + "'" + " AND ProcessVersion = '" + strProcessVersion + "' AND MOTypeNo = " + MOTypeNo + ""; ExecuteSQLQuery_Adapter(strSQL, dtNewPorductProcess, cnnTemp); } foreach (DataRow drNewProcess in dtNewPorductProcess.Rows) { // 以指定流程版本新增工單流程 strSQL = "SELECT B.ProcessNo, B.ProcessVersion, B.NodeNo, B.NodeId" + " FROM tblPRSProcessBasis A join tblPRSNodeBasis B ON A.ProcessNo = B.ProcessNo AND A.ProcessVersion = B.ProcessVersion" + " WHERE A.ProcessNo = '" + drNewProcess["ProcessNo"].ToString() + "'" + " AND A.ProcessVersion = '" + drNewProcess["ProcessVersion"].ToString() + "'" + " AND B.NodeId = (" + " SELECT Min(B.ToNodeId)" + " FROM tblPRSProcessBasis A join tblPRSNodeRelation B ON A.ProcessNo = B.ProcessNo AND A.ProcessVersion = B.ProcessVersion" + " WHERE A.ProcessNo = '" + drNewProcess["ProcessNo"].ToString() + "'" + " AND A.ProcessVersion = '" + drNewProcess["ProcessVersion"].ToString() + "'" + " And B.FromNodeNo = 'START' GROUP BY A.ProcessNo)"; drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); if (drTemp.Read()) { // 應該只有一筆資料,每一個流程也只需要新增一筆資料 // 2019/01/23 OwenLiu, 修正工單流程存入ProcessVersion 為 * 的問題 strSQLAddField = "INSERT INTO tblOEMOProcess (MONo,PSNo,PSOrder,ProcessOrder,ProcessNo,ProcessVersion"; strSQLAddValue = " VALUES ('" + MONo + "','" + drNewProcess["PSNo"] + "'," + drNewProcess["PSOrder"] + "," + intProcessOrder.ToString() + ",'" + drNewProcess["ProcessNo"].ToString() + "'" + ",'" + drTemp["ProcessVersion"].ToString() + "'"; strSQLAddField += ",OPNo,NodeId,HaveComponent,HaveLevel"; strSQLAddValue = strSQLAddValue + ",'" + drTemp["NodeNo"] + "','" + drTemp["NodeId"] + "'" + "," + drNewProcess["HaveComponent"] + "," + drNewProcess["HaveLevel"]; strSQL = strSQLAddField + ")" + strSQLAddValue + ")"; CollectionSQL.Add(strSQL); intProcessOrder = (short)(intProcessOrder + 1); } drTemp.Close(); } } } else { short intProcessOrder = 1; foreach (DataRow drProcess in dtPorductProcess.Rows) { string strProcessNo = drProcess["ProcessNo"].ToString(); string strProcessVersion = drProcess["ProcessVersion"].ToString(); if (strProcessVersion == "*") { // 以目前最新流程新增工單流程 strSQL = "SELECT B.ProcessNo, B.ProcessVersion, B.NodeNo, B.NodeId" + " FROM tblPRSProcessBasis A join tblPRSNodeBasis B ON A.ProcessNo = B.ProcessNo AND A.ProcessVersion = B.ProcessVersion" + " WHERE A.ProcessNo = '" + drProcess["ProcessNo"] + "' AND A.CurVersion = 1" + " AND B.NodeId = (" + " SELECT Min(B.ToNodeId)" + " FROM tblPRSProcessBasis A join tblPRSNodeRelation B ON A.ProcessNo = B.ProcessNo AND A.ProcessVersion = B.ProcessVersion" + " WHERE A.ProcessNo = '" + drProcess["ProcessNo"] + "' AND A.CurVersion = 1" + " AND B.FromNodeNo = 'START' GROUP BY A.ProcessNo)"; } else { // 以指定流程版本新增工單流程 strSQL = "SELECT B.ProcessNo, B.ProcessVersion, B.NodeNo, B.NodeId" + " FROM tblPRSProcessBasis A join tblPRSNodeBasis B ON A.ProcessNo = B.ProcessNo AND A.ProcessVersion = B.ProcessVersion" + " WHERE A.ProcessNo = '" + drProcess["ProcessNo"] + "'" + " AND A.ProcessVersion = '" + strProcessVersion + "'" + " AND B.NodeId = (" + " SELECT Min(B.ToNodeId)" + " FROM tblPRSProcessBasis A join tblPRSNodeRelation B ON A.ProcessNo = B.ProcessNo AND A.ProcessVersion = B.ProcessVersion" + " WHERE A.ProcessNo = '" + drProcess["ProcessNo"] + "'" + " AND A.ProcessVersion = '" + strProcessVersion + "'" + " And B.FromNodeNo = 'START' GROUP BY A.ProcessNo)"; } //using (var cmdProcess = new OleDbCommand(strSQL, cnnTemp)) //{ //var drTemp = cmdProcess.ExecuteReader(); drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); if (drTemp.Read()) { // 應該只有一筆資料,每一個流程也只需要新增一筆資料 // 2019/01/23 OwenLiu, 修正工單流程存入ProcessVersion 為 * 的問題 strSQLAddField = "INSERT INTO tblOEMOProcess (MONo,PSNo,PSOrder,ProcessOrder,ProcessNo,ProcessVersion"; strSQLAddValue = " VALUES ('" + MONo + "','" + drProcess["PSNo"] + "'," + drProcess["PSOrder"] + "," + intProcessOrder.ToString() + ",'" + strProcessNo + "'" + ",'" + drTemp["ProcessVersion"].ToString() + "'"; strSQLAddField += ",OPNo,NodeId,HaveComponent,HaveLevel"; strSQLAddValue = strSQLAddValue + ",'" + drTemp["NodeNo"] + "','" + drTemp["NodeId"] + "'" + "," + drProcess["HaveComponent"] + "," + drProcess["HaveLevel"]; strSQL = strSQLAddField + ")" + strSQLAddValue + ")"; CollectionSQL.Add(strSQL); intProcessOrder = (short)(intProcessOrder + 1); } drTemp.Close(); //} } } // 將收集到的SQL語句加以回傳,由呼叫端統一執行 if (colSQL != null) { for (int i = 1, loopTo = CollectionSQL.Count; i <= loopTo; i++) colSQL.Add(CollectionSQL[i]); } blnExecResult = true; } catch (Exception ex) { clsERP.combineException(ref aryException, sysmsg: ex.Message, mesmsg: "[%ExamineMOProcess%]", stack: iMESCore.Base.iMESComXML.CInput(ex.StackTrace)); } finally { CloseConnection(cnnTemp); } return default(bool); } private static DataSet ShowECNProcessData(string ProductNo, string ProductVersion, string MOTypeNo, ref List aryException, DataTable dtECN) { DataSet ShowECNProcessDataRet = default(DataSet); // dtECN 傳入LotNo,OrgLotNo,CustomerLotNo,MONo 的資料只會有一筆 var CollectionSQL = new Collection(); var CreateDate = DateTime.Now; string strSQLAddField, strSQLAddValue; string strSQL = ""; var drTemp = default(DbDataReader); DbDataReader drSEN; DbDataReader drTECN; DbDataReader drECN; var dtProcess = new DataTable(); string tblECNProcessData; tblECNProcessData = "tblECNProcessData"; dtProcess.TableName = tblECNProcessData; dtProcess.Columns.Add("ECNNO", Type.GetType("System.String")); dtProcess.Columns.Add("PROCESSNO", Type.GetType("System.String")); dtProcess.Columns.Add("PROCESSVERSION", Type.GetType("System.String")); dtProcess.Columns.Add("ECNTYPE", Type.GetType("System.String")); AppSettings objSetting = new AppSettings(); bool blnAllProcess = false; // 用於判斷ECN是否有多條流程 var cnnTemp = default(IDbConnection); try { string strDataBaseType = objSetting.GetDataBaseType(); string strConnectionString = objSetting.GetConnectionString(strDataBaseType); cnnTemp = CreateConnection(strConnectionString); DataSet dsTemp; DataRow[] drSel; cnnTemp = CreateConnection(strConnectionString); // 檢查SEN strSQL = "Select * from TBLPRDECNPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNType='SEN' and ECNState=2 ORDER BY SENType Desc "; dsTemp = new DataSet(); ExecuteSQLQuery_Adapter(strSQL, dsTemp, "TBLPRDECNPROCESS", cnnTemp); drSel = dsTemp.Tables["TBLPRDECNPROCESS"].Select(); if (drSel.Length > 0) { foreach (DataRow r in drSel) { strSQL = "Select * from TBLPRDSENLOTDETAIL where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + r["ECNNO"].ToString() + "'"; ////cmmTemp = new IDbCommand(strSQL, cnnTemp); // Select data drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drTemp.Read()) // 比對有無相符的資料 { switch (drTemp["SENTYPE"].ToString()) { case "1": //客戶批號 { dtECN.DefaultView.RowFilter = "CustomerLotNo like '" + drTemp["LOTNO"].ToString() + "'"; if (dtECN.DefaultView.Count == 1) { // 以ECNNO跟工單類型尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + r["ECNNO"].ToString() + "' and MOTypeNo='" + MOTypeNo + "' "; ////cmmTemp = new IDbCommand(strSQL, cnnTemp); // Select data drSEN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drSEN.Read()) { dtProcess.Rows.Add(r["ECNNO"].ToString(), drSEN["PROCESSNO"].ToString(), drSEN["PROCESSVERSION"], "SEN"); blnAllProcess = true; } // 若目前工單類型找不到資料以*尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + r["ECNNO"].ToString() + "' and MOTypeNo='-1' "; ////cmmTemp = new IDbCommand(strSQL, cnnTemp); // Select data drSEN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drSEN.Read()) { dtProcess.Rows.Add(r["ECNNO"].ToString(), drSEN["PROCESSNO"].ToString(), drSEN["PROCESSVERSION"], "SEN"); blnAllProcess = true; } goto GoTonext; } break; } case "0": //工單編號 { dtECN.DefaultView.RowFilter = "MONo like '" + drTemp["LOTNO"].ToString() + "'"; if (dtECN.DefaultView.Count == 1) { // 以ECNNO跟工單類型尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + r["ECNNO"].ToString() + "' and MOTypeNo='" + MOTypeNo + "' "; ////cmmTemp = new IDbCommand(strSQL, cnnTemp); // Select data drSEN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drSEN.Read()) { dtProcess.Rows.Add(r["ECNNO"].ToString(), drSEN["PROCESSNO"].ToString(), drSEN["PROCESSVERSION"], "SEN"); blnAllProcess = true; } // 若目前工單類型找不到資料以*尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + r["ECNNO"].ToString() + "' and MOTypeNo='-1' "; ////cmmTemp = new IDbCommand(strSQL, cnnTemp); // Select data drSEN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drSEN.Read()) { dtProcess.Rows.Add(r["ECNNO"].ToString(), drSEN["PROCESSNO"].ToString(), drSEN["PROCESSVERSION"], "SEN"); blnAllProcess = true; } goto GoTonext; } break; } } } drTemp.Close(); ////cmmTemp.Dispose(); } } if (dsTemp != null) { dsTemp.Dispose(); } // 2020/03/17 Eric if (blnAllProcess == true) { goto GoTonext; } // 檢查TECN strSQL = "Select * from TBLPRDECNPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNType='TECN' and ECNState=2 " + "And StartTime <= To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') And EndTime > To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; // 2020/02/04 OwenLiu, 修正SQLServer 查詢問題 strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); if (drTemp.Read()) { // 以ECNNO跟工單類型尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + drTemp["ECNNO"].ToString() + "' and MOTypeNo='" + MOTypeNo + "' "; drTECN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drTECN.Read()) { dtProcess.Rows.Add(drTemp["ECNNO"].ToString(), drTECN["PROCESSNO"].ToString(), drTECN["PROCESSVERSION"], "TECN"); blnAllProcess = true; } // 若目前工單類型找不到資料以*尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + drTemp["ECNNO"].ToString() + "' and MOTypeNo='-1' "; ////cmmTemp = new IDbCommand(strSQL, cnnTemp); // Select data drTECN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drTECN.Read()) { dtProcess.Rows.Add(drTemp["ECNNO"].ToString(), drTECN["PROCESSNO"].ToString(), drTECN["PROCESSVERSION"], "TECN"); blnAllProcess = true; } // 若有ECNNO卻無流程編號及版本回拋錯誤 goto GoTonext; } drTemp.Close(); // 2020/03/17 Eric if (blnAllProcess == true) { goto GoTonext; } // 檢查ECN strSQL = "Select * from TBLPRDECNPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNType='ECN' and ECNState=2 "; drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); if (drTemp.Read()) { // 以ECNNO跟工單類型尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + drTemp["ECNNO"].ToString() + "' and MOTypeNo='" + MOTypeNo + "' "; drECN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drECN.Read()) dtProcess.Rows.Add(drTemp["ECNNO"].ToString(), drECN["PROCESSNO"].ToString(), drECN["PROCESSVERSION"], "ECN"); // 若目前工單類型找不到資料以*尋找 strSQL = "Select * from TBLPRDMOPROCESS where ProductNo='" + ProductNo + "' and productversion='" + ProductVersion + "' and ECNNO='" + drTemp["ECNNO"].ToString() + "' and MOTypeNo='-1' "; drECN = ExecuteSQLQuery_Reader(strSQL, cnnTemp); while (drECN.Read()) dtProcess.Rows.Add(drTemp["ECNNO"].ToString(), drECN["PROCESSNO"].ToString(), drECN["PROCESSVERSION"], "ECN"); // 若有ECNNO卻無流程編號及版本回拋錯誤 goto GoTonext; } GoTonext: ; drTemp.Close(); if (dtProcess.Rows.Count <= 0) { clsERP.combineException(ref aryException, mesmsg: "[%ProductNo%]:" + ProductNo + "[%CouldNotFindTheCorrespondingProcessData%]"); } //拋出找不到對應流程資料的錯誤,不允許新增工單 if (dsTemp != null) { dsTemp.Dispose(); } dsTemp.Tables.Add(dtProcess); ShowECNProcessDataRet = dsTemp; //LoadECNProcessDataRet = iMESCore.Base.iMESComXML.CombineXMLReturnValue("loadecnprocessdata", tblECNProcessData, "DataSet", iMESCore.Base.iMESComXML.FormatXMLSchema(dsTemp.GetXmlSchema()), dsTemp.GetXml(), ""); } catch (Exception e1) { // 發生錯誤時丟回本身的Function Name及系統錯誤訊息 throw; } finally { if (cnnTemp != null) { CloseConnection(cnnTemp); } } return ShowECNProcessDataRet; } #endregion } }