test/MESEAI/EAItc/clsOE.cs

2988 lines
178 KiB
C#
Raw Normal View History

2026-07-31 15:42:16 +08:00
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
/// <summary>
/// 新增工單
/// </summary>
/// <param name="MONo"></param>
/// <param name="MOUnitNo"></param>
/// <param name="ProductNo"></param>
/// <param name="MOQty"></param>
/// <param name="FactoryNo"></param>
/// <param name="RONo"></param>
/// <param name="ItemNo"></param>
/// <param name="CustomerNo"></param>
/// <param name="MOTypeNo"></param>
/// <param name="Priority"></param>
/// <param name="PlanFinishDate"></param>
/// <param name="Creator"></param>
/// <param name="CreateDate"></param>
/// <param name="Description"></param>
/// <param name="dtMTL"></param>
/// <param name="MOProperty"></param>
/// <param name="aryMessage"></param>
/// <param name="aryException"></param>
/// <param name="aryAlert"></param>
/// <param name="dtMOProperty"></param>
/// <returns></returns>
/// <remarks></remarks>
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<ArrayList> MOProperty = null, List<ArrayList> aryMessage = null, List<ArrayList> aryException = null,
List<ArrayList> 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:off1: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<ArrayList> argstrMessage = null;
List<ArrayList> 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<ArrayList> argaryMessage = null;
List<ArrayList> 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則不做任何處理
// // 材料型態tagnameDeliveryMethod (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;
}
/// <summary>
/// 編輯工單(工單變更)
/// </summary>
/// <param name="MONo"></param>
/// <param name="MOQty"></param>
/// <param name="RONo"></param>
/// <param name="ItemNo"></param>
/// <param name="CustomerNo"></param>
/// <param name="MOTypeNo"></param>
/// <param name="Priority"></param>
/// <param name="PlanFinishDate"></param>
/// <param name="Creator"></param>
/// <param name="CreateDate"></param>
/// <param name="Description"></param>
/// <param name="dtMTL"></param>
/// <param name="aryMessage"></param>
/// <param name="aryException"></param>
/// <param name="aryAlert"></param>
/// <param name="dtMOProperty"></param>
/// <returns></returns>
/// <remarks></remarks>
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<ArrayList> aryMessage = null, List<ArrayList> aryException = null, List<ArrayList> 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:off1: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<ArrayList> argaryMessage = null;
List<ArrayList> 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則不做任何處理
// 材料型態tagnameDeliveryMethod (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;
}
/// <summary>
/// 檢查SYS模組裡的工單屬性
/// </summary>
/// <param name="PropertyNo"></param>
/// <param name="DataType"></param>
/// <param name="IssueState"></param>
/// <param name="aryMessage"></param>
/// <param name="aryException"></param>
/// <returns></returns>
/// <remarks></remarks>
public static object doSYSMOProperty(string PropertyNo, string DataType, int IssueState = 2, List<ArrayList> aryMessage = null, List<ArrayList> 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;
}
/// <summary>
/// 檢查工廠編號是否存在;不存在=>新增
/// </summary>
/// <param name="FactoryNo"></param>
/// <param name="Creator"></param>
/// <param name="CreateDate"></param>
/// <param name="IssueState"></param>
/// <param name="strMessage"></param>
/// <param name="strException"></param>
/// <returns></returns>
/// <remarks></remarks>
public static object doFactoryNo(string FactoryNo, string Creator, DateTime CreateDate, int IssueState = 2, List<ArrayList> strMessage = null, List<ArrayList> 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<ArrayList> 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<ArrayList> 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
}
}