using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Linq; using System.Linq; using System.Drawing; using System.Text; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.BandedGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid; using System.IO; using System.Threading; using ICSSoft.Base.Language.Tool; using ICSSoft.Base.Config.AppConfig; using ICSSoft.Base.UserControl.MessageControl; using ICSSoft.Base.Config.DBHelper; using ICSSoft.Base.Report.Filter; using ICSSoft.Base.UserControl.FormControl; using ICSSoft.Base.Report.GridReport; using ICSSoft.Base.ReferForm.AppReferForm; using ICSSoft.Frame.Data.BLL; using ICSSoft.Frame.Data.Entity; namespace ICSSoft.Frame.APP { public partial class FormICSONWIPCheckNCR : DevExpress.XtraEditors.XtraForm { string 不良起源 = ""; string 不合格责任方 = ""; private string sqltxt = ""; private string sqlconn = ""; private DataTable dataSource = null; public string Code = ""; #region 构造函数 public FormICSONWIPCheckNCR() { InitializeComponent(); this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); this.WindowState = FormWindowState.Maximized; } #endregion #region 操作权限 public DataTable RightOfExute() { DataTable rData = new DataTable(); rData.Columns.Add("BtnName"); rData.Columns.Add("ActionName"); //查看权限(必须有) DataRow seeRow = rData.NewRow(); seeRow["BtnName"] = "see"; seeRow["ActionName"] = "查看"; rData.Rows.Add(seeRow); List ControlList = new List(); ControlList.Add(btnCreate); ControlList.Add(btnModify); ControlList.Add(btnOutPut); foreach (Control ctr in ControlList) { if (ctr.GetType() == typeof(SimpleButton)) { DataRow dr = rData.NewRow(); dr["BtnName"] = ctr.Name; dr["ActionName"] = ctr.Text; rData.Rows.Add(dr); } } rData.AcceptChanges(); return rData; } public DataTable RightOfData()// 数据权限 { DataTable rData = new DataTable(); rData.Columns.Add("BodyName"); rData.Columns.Add("ControlName"); rData.Columns.Add("ControlCaption"); rData.AcceptChanges(); return rData; } #endregion #region 退出 private void btnClose_Click(object sender, EventArgs e) { AppConfig.CloseFormShow(this.Text); this.Close(); } private void btnExit_Click(object sender, EventArgs e) { AppConfig.CloseFormShow(this.Text); this.Close(); } #endregion #region 移动窗体 private const int WM_NCHITTEST = 0x84; private const int HTCLIENT = 0x1; private const int HTCAPTION = 0x2; //首先必须了解Windows的消息传递机制,当有鼠标活动消息时, //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION , //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。 //重写窗体,使窗体可以不通过自带标题栏实现移动 protected override void WndProc(ref Message m) { //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息, //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体, //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。 //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。 switch (m.Msg) { case WM_NCHITTEST: base.WndProc(ref m); if ((int)m.Result == HTCLIENT) m.Result = (IntPtr)HTCAPTION; return; } //拦截双击标题栏、移动窗体的系统消息 if (m.Msg != 0xA3) { base.WndProc(ref m); } } #endregion #region 列表 private void grvDetail_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) { if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString(); } #endregion #region 全选 private void btnSelectAll_Click(object sender, EventArgs e) { grvDetail.PostEditor(); this.Validate(); for (int i = 0; i < grvDetail.RowCount; i++) { grvDetail.SetRowCellValue(i, colisSelect, true); } } #endregion #region 全消 private void btnCancelAll_Click(object sender, EventArgs e) { grvDetail.PostEditor(); this.Validate(); for (int i = 0; i < grvDetail.RowCount; i++) { grvDetail.SetRowCellValue(i, colisSelect, false); } } #endregion #region 导出 private void btnOutPut_Click(object sender, EventArgs e) { FormOutExcel foe = new FormOutExcel(this.Tag.ToString(), grdDetail); foe.ShowDialog(); } #endregion #region 刷新 private void btnRefresh_Click(object sender, EventArgs e) { SearchData(); } #endregion #region 上传OA private void btnCreate_Click(object sender, EventArgs e) { int limitResOPs = 29; DataRow[] drArr = GetSelectedRows(); if (drArr == null) { return; } List listNotSelectedMsg = new List(); foreach (DataRow dr in drArr) { if (!Convert.ToBoolean(dr["isSelect"])) { if (listNotSelectedMsg.Count == 0) { listNotSelectedMsg.Add("当前是批量处理,以下不良行未选取,是否选取全部?"); } listNotSelectedMsg.Add("不良类型:" + dr["UNIT"].ToString() + "数量:" + dr["SetValue"].ToString() + "不良备注:" + dr["不良备注"].ToString()); } } if (listNotSelectedMsg.Count > 0) { DialogResult drSelectAll = MessageBox.Show(string.Join(Environment.NewLine, listNotSelectedMsg), "提示", MessageBoxButtons.OKCancel); if (drSelectAll != DialogResult.OK) { return; } for (int i = 0; i < drArr.Length; i++) { if (Convert.ToBoolean(drArr[i]["isSelect"]) == false) { drArr[i]["isSelect"] = true; } } } DialogResult drUpload2OA = MessageBox.Show("确定上传OA吗", "提示", MessageBoxButtons.YesNo); if (drUpload2OA != DialogResult.Yes) { return; } DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在保存...请稍等..."); _wait.Show(); string LOTNO = drArr[0]["LOTNO"].ToString(); int OPSEQ = Convert.ToInt32(drArr[0]["OPSEQ"]); try { DateTime dt = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); List list = new List(); string ncr = ""; foreach (DataRow item in drArr) { ICSLOTONWIPCheckNCR Info = new ICSLOTONWIPCheckNCR(); Info.ID = AppConfig.GetGuid(); Info.CheckID = item["ID"].ToString(); Info.Status = "处理中"; Info.UpDateTime = dt; Info.NCRNo = null; Info.DownDateTime = null; Info.Memo = item["Memo"].ToString(); Info.Type = item["CheckMode"].ToString(); Info.IsInput = false; Info.MUSER = AppConfig.UserCode; Info.MUSERName = AppConfig.UserName; Info.MTIME = dt; Info.WorkPoint = AppConfig.WorkPointCode; list.Add(Info); } string FLOW_ID = ICSLOTONWIPCheckBLL.GetFLOW_ID(AppConfig.AppConnectString, AppConfig.WorkPointCode);//20,25 string Source = ICSSys_EnumValuesBLL.GetNcrNGSource(AppConfig.AppConnectString, AppConfig.WorkPointCode); DataTable dtOPs = ICSResOPBLL.GetResOPList(LOTNO, OPSEQ, AppConfig.WorkPointCode); if (dtOPs.Rows.Count > limitResOPs) { throw new Exception("途径工序超过" + limitResOPs.ToString() + "道"); } ICSLOTONWIPCheckBLL.AddNCROA(list, dtOPs, FLOW_ID, Source, AppConfig.AppConnectString); _wait.Close(); btnRefresh_Click(null, null); } catch (Exception ex) { _wait.Close(); ICSBaseSimpleCode.AppshowMessageBox("异常:" + ex.Message); } } #endregion #region 直接判定 public void GetDirectlyResult(string Result, string ErrOP) { txtResult.Text = Result; txtErrOP.Text = ErrOP; } private void btnModify_Click(object sender, EventArgs e) { try { DataRow[] drArr = GetSelectedRows(); if (drArr == null) { return; } FormICSONWIPCheckNCRSelect FrmSuspend = new FormICSONWIPCheckNCRSelect(drArr); FrmSuspend.action += new Action(GetDirectlyResult); DialogResult dr = FrmSuspend.ShowDialog(); if (dr != DialogResult.OK) { return; } string result = txtResult.Text.Trim(); if (string.IsNullOrWhiteSpace(result)) { ICSBaseSimpleCode.AppshowMessageBox("请选择结果判定!"); return; } DialogResult dr2 = MessageBox.Show("确定直接判定:" + result + "?", "提示", MessageBoxButtons.YesNo); if (dr2 != DialogResult.Yes) { return; } NcrNotFromOA(drArr, result); //saveData(result); btnRefresh_Click(null, null); } catch (Exception ex) { ICSBaseSimpleCode.AppshowMessageBox(ex.Message); } finally { txtResult.Text = ""; txtErrOP.Text = ""; } } /// /// NCR直接判定 /// /// /// private void NcrNotFromOA(DataRow[] drArr, string result) { DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在保存...请稍等..."); try { _wait.Show(); DateTime timeNow = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); List list = new List(); for (int i = 0; i < drArr.Length; i++) { string chkmode = drArr[i]["CheckMode"].ToString(); //if (status == "让步接受" && chkmode != "工序检验" && chkmode != "委外检验") //{ // throw new Exception("过程检验不可让步接受"); //} ICSLOTONWIPCheckNCR Info = new ICSLOTONWIPCheckNCR(); Info.ID = AppConfig.GetGuid(); Info.NCRNo = null; Info.CheckID = drArr[i]["ID"].ToString(); Info.Status = result; Info.UpDateTime = timeNow; Info.DownDateTime = timeNow; Info.Memo = drArr[i]["Memo"].ToString(); Info.Type = chkmode; Info.IsInput = true;//判定和结算工费合并,这里直接true,结算工费是不再更新此字段 Info.MUSER = AppConfig.UserCode; Info.MUSERName = AppConfig.UserName; Info.MTIME = timeNow; Info.WorkPoint = AppConfig.WorkPointCode; Info.EATTRIBUTE1 = null; Info.ResOP = txtErrOP.Text;//责任工序 list.Add(Info); } ICSLOTONWIPCheckBLL.AddNCR2(list, AppConfig.AppConnectString); _wait.Close(); } catch (Exception ex) { _wait.Close(); ICSBaseSimpleCode.AppshowMessageBox("异常:" + ex.Message); } } #endregion /// /// 选择,同跟踪单,工序,检验方式,且未处理的行 /// 批量时,是同批次所有行,包含未选取的行 /// /// private DataRow[] GetSelectedRows() { if (dataSource == null) { return null; } DataRow[] drArr = dataSource.Select("(Status is null or Status='') and isSelect=true"); if (drArr.Count() == 0) { return null; } if (drArr.GroupBy(a => new { LOTNO = a.Field("LOTNO"), OPCODE = a.Field("OPCODE") }).Count() > 1) { throw new Exception("所有行只能选择同一跟踪单,工序"); } if (drArr.GroupBy(a => a.Field("CheckMode")).Count() > 1) { throw new Exception("所有行只能选择一种检验类型,过程/工序/委外"); } if (Convert.ToBoolean(drArr[0]["IsBatch"]) == true) { //只有委外才有批量和非批量,其他全是非批量 string LOTNO = drArr[0]["LOTNO"].ToString(); string OPCODE = drArr[0]["OPCODE"].ToString(); string OPSEQ = drArr[0]["OPSEQ"].ToString(); drArr = dataSource.Select(string.Format("(Status is null or Status='') and CheckMode='委外检验' and LOTNO='{0}' and OPSEQ={1} and OPCODE='{2}' ", LOTNO, OPSEQ, OPCODE)); } return drArr; } #region 加载&查询数据 private void FormICSONWIPCheckNCR_Load(object sender, EventArgs e) { try { SearchData(); } catch (Exception ex) { ICSBaseSimpleCode.AppshowMessageBox("异常:" + ex.Message); } } private void SearchData() { DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等..."); try { _wait.Show(); #region SQL // string sql = @"SELECT CAST( 0 AS BIT ) AS isSelect,CASE WHEN us.EATTRIBUTE1='0' THEN '工序检验' ELSE '委外检验' END AS CheckMode, // us.MOCODE,us.MOSEQ,a.ITEMCODE,b.INVNAME,b.INVSTD,a.LOTNO,a.OPCODE,d.OPDESC,ncr.IsInput,ncr.Status,a.LOTQTY AS Quantity,a.EQPCODE,eqp.EQPName, // chkdet.ID,ncr.ID AS NcrID,ncr.MTIME,ncr.MUSERName,ncr.Memo,NCRNo,chk.Status AS Result,chkdet.SetValue,chkdet.UNIT // FROM ICSLOTONWIP a // INNER JOIN ICSINVENTORY b ON a.ITEMCODE=b.INVCODE AND a.WorkPoint=b.WorkPoint // LEFT JOIN ICSEquipment eqp ON a.EQPCODE=eqp.EQPCode AND a.WorkPoint=eqp.WorkPoint // INNER JOIN ICSMO2User us ON a.LOTNO=us.LOTNO AND a.OPCODE=us.OPCODE AND a.WorkPoint=us.WorkPoint // INNER JOIN ICSITEMROUTE2OPLot lot ON a.LOTNO=lot.LOTNO AND a.OPCODE=lot.OPCODE AND a.WorkPoint=lot.WorkPoint // INNER JOIN ICSOP d ON a.OPCODE=d.OPCODE AND a.WorkPoint=d.WorkPoint // INNER JOIN ICSLOTONWIPCheck chk ON a.ID=chk.FORTRANID AND a.WorkPoint=chk.WorkPoint AND chk.Enable='1' //-- INNER JOIN (SELECT WorkPoint,FORTRANID,SUM(CONVERT(DECIMAL,ISNULL(SetValue,0))) AS SetValue, STUFF((SELECT ';'+UNIT FROM (select DISTINCT UNIT from ICSLOTONWIPCheckDetail where Type='不良' AND FORTRANID=b.FORTRANID AND WorkPoint=b.WorkPoint)a for xml path('')),1,1,'') AS UNIT //-- FROM ICSLOTONWIPCheckDetail b //-- WHERE Type='不良' //-- GROUP BY WorkPoint,FORTRANID) det ON chk.ID=det.FORTRANID AND chk.WorkPoint=det.WorkPoint // INNER JOIN ICSLOTONWIPCheckDetail chkdet ON chkdet.FORTRANID=chk.ID AND chkdet.WorkPoint=chk.WorkPoint AND chkdet.Type='不良' // LEFT JOIN ICSLOTONWIPCheckNCR ncr ON chkdet.ID=ncr.CheckID AND chkdet.WorkPoint=ncr.WorkPoint // WHERE a.WorkPoint='{0}' AND chk.Status='不良' // UNION ALL // SELECT CAST( 0 AS BIT ) AS isSelect,e.CheckMode, // us.MOCODE,us.MOSEQ,a.ITEMCODE,b.INVNAME,b.INVSTD,a.LOTNO,a.OPCODE,d.OPDESC,ncr.IsInput,ncr.Status,a.LOTQTY AS Quantity,a.EQPCODE,eqp.EQPName, // chkdet.ID,ncr.ID AS NcrID,ncr.MTIME,ncr.MUSERName,ncr.Memo,NCRNo,chk.Status AS Result,chkdet.SetValue,chkdet.UNIT // FROM ICSLOTONWIP a // INNER JOIN ICSINVENTORY b ON a.ITEMCODE=b.INVCODE AND a.WorkPoint=b.WorkPoint // LEFT JOIN ICSEquipment eqp ON a.EQPCODE=eqp.EQPCode AND a.WorkPoint=eqp.WorkPoint // INNER JOIN ICSMO2User us ON a.LOTNO=us.LOTNO AND a.OPCODE=us.OPCODE AND a.WorkPoint=us.WorkPoint // INNER JOIN ICSITEMROUTE2OPLot lot ON a.LOTNO=lot.LOTNO AND a.OPCODE=lot.OPCODE AND a.WorkPoint=lot.WorkPoint // INNER JOIN ICSOP d ON a.OPCODE=d.OPCODE AND a.WorkPoint=d.WorkPoint // INNER JOIN ICSLOTONWIPDetail Wipdet ON Wipdet.LOTNO=a.LOTNO AND Wipdet.OPCode=a.OPCODE AND a.WorkPoint=Wipdet.WorkPoint // INNER JOIN ICSLOTONWIPInspection e ON Wipdet.ID=e.DetailID AND Wipdet.WorkPoint=e.WorkPoint // INNER JOIN ICSLOTONWIPCheck chk ON e.ID=chk.FORTRANID AND e.WorkPoint=chk.WorkPoint AND chk.Enable='1' //-- INNER JOIN (SELECT WorkPoint,FORTRANID,SUM(CONVERT(DECIMAL,ISNULL(SetValue,0))) AS SetValue, STUFF((SELECT ';'+UNIT FROM (select DISTINCT UNIT from ICSLOTONWIPCheckDetail where Type='不良' AND FORTRANID=b.FORTRANID AND WorkPoint=b.WorkPoint)a for xml path('')),1,1,'') AS UNIT //-- FROM ICSLOTONWIPCheckDetail b //-- WHERE Type='不良' //-- GROUP BY WorkPoint,FORTRANID) det ON chk.ID=det.FORTRANID AND chk.WorkPoint=det.WorkPoint // INNER JOIN ICSLOTONWIPCheckDetail chkdet ON chkdet.FORTRANID=chk.ID AND chkdet.WorkPoint=chk.WorkPoint AND chkdet.Type='不良' // LEFT JOIN ICSLOTONWIPCheckNCR ncr ON chkdet.ID=ncr.CheckID AND chkdet.WorkPoint=ncr.WorkPoint // WHERE a.WorkPoint='{0}' AND chk.Status='不良' ORDER BY ncr.MTIME,a.LOTNO // // select EnumText as [不合格责任方] from Sys_EnumValues WHERE EnumKey='00102' AND WorkPointCode='{0}' // select EnumText as [不良起源] from Sys_EnumValues WHERE EnumKey='00101' AND WorkPointCode='{0}' // select EnumText as [结果判定] from Sys_EnumValues WHERE EnumKey='00103' AND WorkPointCode='{0}'"; string sql = @" SELECT CAST( 0 AS BIT ) AS isSelect,CASE WHEN us.EATTRIBUTE1='0' THEN '工序检验' ELSE '委外检验' END AS CheckMode, us.MOCODE,us.MOSEQ,a.ITEMCODE,b.INVNAME,b.INVSTD,a.LOTNO,a.OPSEQ,a.OPCODE,d.OPDESC,ncr.IsInput,ISNULL(ncr.OAError,ncr.Status)AS Status,a.LOTQTY AS Quantity,a.EQPCODE,eqp.EQPName, chkdet.ID,ncr.ID AS NcrID,ncr.MTIME,ncr.MUSERName,ncr.Memo,NCRNo,chk.Status AS Result,chkdet.SetValue,chkdet.UNIT, b.[version] AS 物料版本,b.INVMODELGROUP AS 客户料号,b.INVGROUPDESC AS 材料号, mo.MOVER AS 批次号,u.UserName AS 检验员,chkdet.CKGROUPMETH AS 不良备注,ISNULL(chk.IsBatch,CONVERT(BIT,0)) IsBatch,ISNULL(lot.ISWWRW,CONVERT(BIT,0)) ISWWRW FROM ICSLOTONWIP a INNER JOIN ICSINVENTORY b ON a.ITEMCODE=b.INVCODE AND a.WorkPoint=b.WorkPoint LEFT JOIN ICSEquipment eqp ON a.EQPCODE=eqp.EQPCode AND a.WorkPoint=eqp.WorkPoint INNER JOIN ICSMO2User us ON a.LOTNO=us.LOTNO AND a.OPCODE=us.OPCODE AND a.WorkPoint=us.WorkPoint INNER JOIN dbo.ICSMO mo ON mo.MOCODE=us.MOCODE AND mo.MOSEQ=us.MOSEQ AND mo.WorkPoint=us.WorkPoint INNER JOIN ICSITEMROUTE2OPLot lot ON a.LOTNO=lot.LOTNO AND a.OPCODE=lot.OPCODE AND a.WorkPoint=lot.WorkPoint INNER JOIN ICSOP d ON a.OPCODE=d.OPCODE AND a.WorkPoint=d.WorkPoint INNER JOIN ICSLOTONWIPCheck chk ON a.ID=chk.FORTRANID AND a.WorkPoint=chk.WorkPoint AND chk.Enable='1' LEFT JOIN Sys_User u ON u.UserCode=chk.EATTRIBUTE1 AND u.WorkPointCode=chk.WorkPoint -- INNER JOIN (SELECT WorkPoint,FORTRANID,SUM(CONVERT(DECIMAL,ISNULL(SetValue,0))) AS SetValue, STUFF((SELECT ';'+UNIT FROM (select DISTINCT UNIT from ICSLOTONWIPCheckDetail where Type='不良' AND FORTRANID=b.FORTRANID AND WorkPoint=b.WorkPoint)a for xml path('')),1,1,'') AS UNIT -- FROM ICSLOTONWIPCheckDetail b -- WHERE Type='不良' -- GROUP BY WorkPoint,FORTRANID) det ON chk.ID=det.FORTRANID AND chk.WorkPoint=det.WorkPoint INNER JOIN ICSLOTONWIPCheckDetail chkdet ON chkdet.FORTRANID=chk.ID AND chkdet.WorkPoint=chk.WorkPoint AND chkdet.Type='不良' LEFT JOIN ICSLOTONWIPCheckNCR ncr ON chkdet.ID=ncr.CheckID AND chkdet.WorkPoint=ncr.WorkPoint WHERE a.WorkPoint='{0}' AND chk.Status='不良' UNION ALL SELECT CAST( 0 AS BIT ) AS isSelect,e.CheckMode, us.MOCODE,us.MOSEQ,a.ITEMCODE,b.INVNAME,b.INVSTD,a.LOTNO,a.OPSEQ,a.OPCODE,d.OPDESC,ncr.IsInput,ncr.Status,a.LOTQTY AS Quantity,a.EQPCODE,eqp.EQPName, chkdet.ID,ncr.ID AS NcrID,ncr.MTIME,ncr.MUSERName,ncr.Memo,NCRNo,chk.Status AS Result,chkdet.SetValue,chkdet.UNIT, b.[version] AS 物料版本,b.INVMODELGROUP AS 客户料号,b.INVGROUPDESC AS 材料号, mo.MOVER AS 批次号,u.UserName AS 检验员,chkdet.CKGROUPMETH AS 不良备注,ISNULL(chk.IsBatch,CONVERT(BIT,0)) IsBatch,ISNULL(lot.ISWWRW,CONVERT(BIT,0)) ISWWRW FROM ICSLOTONWIP a INNER JOIN ICSINVENTORY b ON a.ITEMCODE=b.INVCODE AND a.WorkPoint=b.WorkPoint LEFT JOIN ICSEquipment eqp ON a.EQPCODE=eqp.EQPCode AND a.WorkPoint=eqp.WorkPoint INNER JOIN ICSMO2User us ON a.LOTNO=us.LOTNO AND a.OPCODE=us.OPCODE AND a.WorkPoint=us.WorkPoint INNER JOIN dbo.ICSMO mo ON mo.MOCODE=us.MOCODE AND mo.MOSEQ=us.MOSEQ AND mo.WorkPoint=us.WorkPoint INNER JOIN ICSITEMROUTE2OPLot lot ON a.LOTNO=lot.LOTNO AND a.OPCODE=lot.OPCODE AND a.WorkPoint=lot.WorkPoint INNER JOIN ICSOP d ON a.OPCODE=d.OPCODE AND a.WorkPoint=d.WorkPoint INNER JOIN ICSLOTONWIPDetail Wipdet ON Wipdet.LOTNO=a.LOTNO AND Wipdet.OPCode=a.OPCODE AND a.WorkPoint=Wipdet.WorkPoint INNER JOIN ICSLOTONWIPInspection e ON Wipdet.ID=e.DetailID AND Wipdet.WorkPoint=e.WorkPoint INNER JOIN ICSLOTONWIPCheck chk ON e.ID=chk.FORTRANID AND e.WorkPoint=chk.WorkPoint AND chk.Enable='1' LEFT JOIN Sys_User u ON u.UserCode=chk.EATTRIBUTE1 AND u.WorkPointCode=chk.WorkPoint -- INNER JOIN (SELECT WorkPoint,FORTRANID,SUM(CONVERT(DECIMAL,ISNULL(SetValue,0))) AS SetValue, STUFF((SELECT ';'+UNIT FROM (select DISTINCT UNIT from ICSLOTONWIPCheckDetail where Type='不良' AND FORTRANID=b.FORTRANID AND WorkPoint=b.WorkPoint)a for xml path('')),1,1,'') AS UNIT -- FROM ICSLOTONWIPCheckDetail b -- WHERE Type='不良' -- GROUP BY WorkPoint,FORTRANID) det ON chk.ID=det.FORTRANID AND chk.WorkPoint=det.WorkPoint INNER JOIN ICSLOTONWIPCheckDetail chkdet ON chkdet.FORTRANID=chk.ID AND chkdet.WorkPoint=chk.WorkPoint AND chkdet.Type='不良' LEFT JOIN ICSLOTONWIPCheckNCR ncr ON chkdet.ID=ncr.CheckID AND chkdet.WorkPoint=ncr.WorkPoint WHERE a.WorkPoint='{0}' AND chk.Status='不良' ORDER BY ncr.MTIME,a.LOTNO select EnumText as [不合格责任方] from Sys_EnumValues WHERE EnumKey='00102' AND WorkPointCode='{0}' select EnumText as [不良起源] from Sys_EnumValues WHERE EnumKey='00101' AND WorkPointCode='{0}' select EnumText as [结果判定] from Sys_EnumValues WHERE EnumKey='00103' AND WorkPointCode='{0}' "; #endregion sql = string.Format(sql, AppConfig.WorkPointCode); DataSet ds = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql); dataSource = ds.Tables[0]; grdDetail.DataSource = dataSource; grvDetail.BestFitColumns(); //#region 不合格责任方 //txtNG.Properties.ValueMember = "不合格责任方"; //txtNG.Properties.DisplayMember = "不合格责任方"; //txtNG.Properties.DataSource = ds.Tables[1]; //txtNG.Properties.NullText = "";//空时的值 //txtNG.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体 //txtNG.Properties.ValidateOnEnterKey = true;//回车确认 //txtNG.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard //txtNG.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容 ////自适应宽度 //txtNG.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup; //#endregion //#region 不良起源 //txtSource.Properties.ValueMember = "不良起源"; //txtSource.Properties.DisplayMember = "不良起源"; //txtSource.Properties.DataSource = ds.Tables[2]; //txtSource.Properties.NullText = "";//空时的值 //txtSource.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体 //txtSource.Properties.ValidateOnEnterKey = true;//回车确认 //txtSource.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard //txtSource.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容 ////自适应宽度 //txtSource.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup; //if (ds.Tables[2] == null || ds.Tables[2].Rows.Count <= 0) // throw new Exception("不良起源未维护!"); //else // txtSource.Text = ds.Tables[2].Rows[0][0].ToString(); //#endregion //#region 结果判定 //txtResult.Properties.ValueMember = "结果判定"; //txtResult.Properties.DisplayMember = "结果判定"; //txtResult.Properties.DataSource = ds.Tables[3]; //txtResult.Properties.NullText = "";//空时的值 //txtResult.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体 //txtResult.Properties.ValidateOnEnterKey = true;//回车确认 //txtResult.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard //txtResult.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容 ////自适应宽度 //txtResult.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup; //#endregion _wait.Close(); } catch (Exception ex) { _wait.Close(); ICSBaseSimpleCode.AppshowMessageBox("异常:" + ex.Message); } } #endregion #region 保存数据 private void saveData(string status) { DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在保存...请稍等..."); try { _wait.Show(); DateTime dt = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); List list = new List(); for (int i = 0; i < grvDetail.RowCount; i++) { if (Convert.ToBoolean(grvDetail.GetRowCellValue(i, colisSelect)) && string.IsNullOrWhiteSpace(grvDetail.GetRowCellValue(i, colStatus).ToString())) { string chkmode = grvDetail.GetRowCellValue(i, colCheckMode).ToString(); //if (status == "让步接受" && chkmode != "工序检验" && chkmode != "委外检验") //{ // throw new Exception("过程检验不可让步接受"); //} ICSLOTONWIPCheckNCR Info = new ICSLOTONWIPCheckNCR(); Info.ID = AppConfig.GetGuid(); Info.CheckID = grvDetail.GetRowCellValue(i, colID).ToString(); Info.Status = status; Info.UpDateTime = dt; Info.DownDateTime = dt; Info.Memo = grvDetail.GetRowCellValue(i, colMemo).ToString(); Info.Type = chkmode; Info.IsInput = false; Info.MUSER = AppConfig.UserCode; Info.MUSERName = AppConfig.UserName; Info.MTIME = dt; Info.WorkPoint = AppConfig.WorkPointCode; Info.EATTRIBUTE1 = null; Info.ResOP = txtErrOP.Text == "" ? null : txtErrOP.Text; list.Add(Info); } } if (list.Count == 0) { _wait.Close(); ICSBaseSimpleCode.AppshowMessageBox("请选择数据!"); return; } ICSLOTONWIPCheckBLL.AddNCR(list, AppConfig.AppConnectString); _wait.Close(); } catch (Exception ex) { _wait.Close(); ICSBaseSimpleCode.AppshowMessageBox("异常:" + ex.Message); } } #endregion #region 结算工费 private void btnCalculate_Click(object sender, EventArgs e) { List IDs = new List(); for (int i = 0; i < grvDetail.RowCount; i++) { if (Convert.ToBoolean(grvDetail.GetRowCellValue(i, colisSelect)) && grvDetail.GetRowCellValue(i, colCheckMode).ToString().Equals("委外检验") && grvDetail.GetRowCellValue(i, colStatus).ToString().Equals("让步接受") && !Convert.ToBoolean(grvDetail.GetRowCellValue(i, colIsInput))) { IDs.Add(grvDetail.GetRowCellValue(i, colNcrID).ToString()); } } if (IDs.Count <= 0) { ICSBaseSimpleCode.AppshowMessageBox("请选择数据!"); return; } DialogResult DDR = MessageBox.Show("确定结算工费吗?", "提示", MessageBoxButtons.YesNo); if (DDR != DialogResult.Yes) { return; } DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在保存...请稍等..."); try { _wait.Show(); ICSLOTONWIPCheckBLL.AddNCRNC(IDs, AppConfig.AppConnectString); _wait.Close(); btnRefresh_Click(null, null); } catch (Exception ex) { _wait.Close(); ICSBaseSimpleCode.AppshowMessageBox("异常:" + ex.Message); } } #endregion } }