using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using UAS_MES.DataOperate; using UAS_MES.Entity; using UAS_MES.PublicMethod; namespace UAS_MES.Warehouse { public partial class Warehouse_FinishedProductOut : Form { DataTable dbfind; AutoSizeFormClass asc = new AutoSizeFormClass(); LogStringBuilder sql = new LogStringBuilder(); DataTable dt; DataHelper dh; DataTable dta; DataTable dtpi; DataTable dtform; DataTable dtms; Warehouse_NewPiInOut newpi; string needMakeIn; public Warehouse_FinishedProductOut() { InitializeComponent(); } private void Warehouse_FinishedProductOut_Load(object sender, EventArgs e) { pi_inoutno.TableName = "prodinout"; pi_inoutno.DBTitle = "出货单查询"; pi_inoutno.SelectField = "pi_id # ID,pi_title # 客户名称,pi_inoutno # 出货单号,pi_type # 出货类型"; pi_inoutno.SetValueField = new string[] { "pi_title", "pi_inoutno", "pi_id", "pi_type" }; pi_inoutno.FormName = Name; pi_inoutno.Condition = "pi_pdastatus<>'已出库' and pi_class='出货单'"; pi_inoutno.DbChange += Pi_inoutno_DbChange; asc.controllInitializeSize(this); dh = SystemInf.dh; needMakeIn = dh.GetConfig("needMakeIn", "MESSetting").ToString(); input.Focus(); OperateResult.AppendText("请输入栈板进行采集\n", Color.Black, input); } private void Pi_inoutno_DbChange(object sender, EventArgs e) { dbfind = pi_inoutno.ReturnData; BaseUtil.SetFormValue(this.Controls, dbfind); LoadFormData(); LoadGridData(); } /// /// j加载Form数据 /// private void LoadFormData() { BaseUtil.CleanControls(panel1.Controls); sql.Clear(); sql.Append("select pi_id,pi_title,pi_inoutno,pi_type from prodinout where pi_inoutno = '" + pi_inoutno.Text + "'"); dtpi = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtpi.Rows.Count > 0) { BaseUtil.SetFormValue(this.Controls, dtpi); } if (pi_type.Text == "按订单出货") { sql.Clear(); sql.Append("select nvl((select sum(pd_outqty) from prodiodetail where pd_piid=" + pi_id.Text + "),0)outqty,nvl((select count(1)cn from prodiomac where pim_inoutno=pd_inoutno),0) getqty "); sql.Append(" from prodiodetail where pd_piid='" + pi_id.Text + "' "); dtform = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtform.Rows.Count > 0) { int boxqtycount = 0; BaseUtil.SetFormValue(this.Controls, dtform); ungetqty.Text = (int.Parse(dtform.Rows[0]["outqty"].ToString()) - int.Parse(dtform.Rows[0]["getqty"].ToString())).ToString(); sql.Clear(); sql.Append("select pim_type,pim_outboxcode from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and NVL(PIM_OUTBOXCODE,' ')<>' ' AND pim_type ='BOX' GROUP BY pim_outboxcode,pim_type"); DataTable dtout = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); boxqtycount += dtout.Rows.Count; boxqtycount += int.Parse(dh.getFieldDataByCondition("package left join PACKAGEDETAIL on pd_outboxcode = pa_outboxcode left join prodiomac on pim_mac =pd_barcode and pim_prodcode = pd_prodcode and pa_mothercode = pim_outboxcode", "count(DISTINCT pa_outboxcode)", " pim_inoutno='" + pi_inoutno.Text + "' and NVL(PIM_OUTBOXCODE,' ')<>' ' AND pim_type ='PALLET'").ToString()); boxqty.Text = boxqtycount.ToString(); } pi_type_check.Checked = true; } else { sql.Clear(); sql.Append("select count(1)getqty from prodiomac where pim_inoutno = '" + pi_inoutno.Text + "'"); dtform = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtform.Rows.Count > 0) { int boxqtycount = 0; BaseUtil.SetFormValue(this.Controls, dtform); sql.Clear(); sql.Append("select pim_type,pim_outboxcode from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and NVL(PIM_OUTBOXCODE,' ')<>' ' AND pim_type ='BOX' GROUP BY pim_outboxcode,pim_type"); DataTable dtout = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); boxqtycount += dtout.Rows.Count; boxqtycount += int.Parse(dh.getFieldDataByCondition("package left join PACKAGEDETAIL on pd_outboxcode = pa_outboxcode left join prodiomac on pim_mac =pd_barcode and pim_prodcode = pd_prodcode and pa_mothercode = pim_outboxcode", "count(DISTINCT pa_outboxcode)", " pim_inoutno='" + pi_inoutno.Text + "' and NVL(PIM_OUTBOXCODE,' ')<>' ' AND pim_type ='PALLET'").ToString()); boxqty.Text = boxqtycount.ToString(); } pi_type_check.Checked = false; } } /// /// 加载Grid数据 /// private void LoadGridData() { sql.Clear(); sql.Append("select pim_outboxcode,pim_mac,pim_prodcode,pr_detail,pr_spec from prodiomac "); sql.Append("left join product on pr_code=pim_prodcode where pim_inoutno='" + pi_inoutno.Text + "' order by pim_id asc"); DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); BaseUtil.FillDgvWithDataTable(InOutDetailDGV, dt); } private void Warehouse_FinishedProductOut_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void NewProdInOut_Click(object sender, EventArgs e) { newpi = new Warehouse_NewPiInOut(); newpi.Controls["Confirm"].Click += newpi_clck; BaseUtil.SetFormCenter(newpi); newpi.ShowDialog(); } private void newpi_clck(object sender, EventArgs e) { if (newpi.generate) { pi_inoutno.Text = newpi.pi_inoutno_text; LoadFormData(); LoadGridData(); newpi.Close(); } } private void ProdDetail_Click(object sender, EventArgs e) { Warehouse_ProdDetail newpd = new Warehouse_ProdDetail(pi_inoutno.Text, pi_id.Text); BaseUtil.SetFormCenter(newpd); newpd.ShowDialog(); } private void ConfirmOut_Click(object sender, EventArgs e) { if (ungetqty.Text == "" || int.Parse(ungetqty.Text.ToString()) >= 0) { String dialog = MessageBox.Show("是否确认出货", "提示", MessageBoxButtons.OKCancel).ToString(); if (dialog != "OK") { OperateResult.AppendText("取消确认出货\n", Color.Black); return; } else { sql.Clear(); sql.Append("select nvl(pi_pdastatus,'未备货')pi_pdastatus,pi_id,pi_type from prodinout where pi_inoutno='" + pi_inoutno.Text + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { if (dt.Rows[0]["pi_pdastatus"].ToString() == "已出库") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "已经出库,无需重复确认\n", Color.Red); return; } else if (dt.Rows[0]["pi_pdastatus"].ToString() == "未备货") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "尚未备货,无法确认出货\n", Color.Red); return; } else if (dt.Rows[0]["pi_type"].ToString() == "按订单出货" && dt.Rows[0]["pi_pdastatus"].ToString() == "备货中") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "未完成备货,无法确认出货\n", Color.Red); return; } else { sql.Clear(); sql.Append("select DISTINCT pd_outboxcode from PACKAGEDETAIL where pd_barcode in (select pim_mac from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_inorout='OUT' and PIM_TYPE = ' ')"); DataTable datatable = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (datatable.Rows.Count > 0) { for (int i = 0; i < datatable.Rows.Count; i++) { if (dh.getFieldDataByCondition("makeserial left join PACKAGEDETAIL on pd_barcode = ms_sncode and pd_makecode = ms_makecode", "count(1)", "pd_outboxcode = '" + datatable.Rows[i]["pd_outboxcode"].ToString() + "' and ms_outno is null").ToString() == "0") { dh.UpdateByCondition("package", "pa_iostatus=2", "pa_outboxcode = '" + datatable.Rows[i]["pd_outboxcode"].ToString() + "'"); } } } List ExeSQL = new List(); ExeSQL.Add("update package set pa_iostatus=2 where exists (select 1 from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_outboxcode=pa_outboxcode and ((pim_type='PALLET' AND PA_TYPE=3) OR (PIM_TYPE='BOX' AND PA_TYPE IN(1,2)))) AND PA_OUTNO='" + pi_inoutno.Text + "'"); ExeSQL.Add("update makeserial set ms_iostatus=2,ms_enddate = sysdate where ms_outno='" + pi_inoutno.Text + "' and exists(select 1 from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_mac=ms_sncode and pim_inorout='OUT')"); ExeSQL.Add("update prodinout set pi_pdastatus='已出库' where pi_inoutno='" + pi_inoutno.Text + "'"); ExeSQL.Add("insert into messagelog(ml_id,ml_date,ml_man,ml_content,ml_result,ml_search)values(messagelog_seq.nextval,sysdate,'" + User.UserName + "','确认出货','确认出货成功','ProdInOut!Sale|pi_id=" + pi_id.Text + "')"); dh.ExecuteSQLTran(ExeSQL.ToArray()); LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, "", User.UserLineCode, User.UserSourceCode, "出货单" + pi_inoutno.Text + "确认出货", "出货单" + pi_inoutno.Text + "确认出货成功", pi_inoutno.Text, ""); OperateResult.AppendText("出货单" + pi_inoutno.Text + "出库成功\n", Color.Black, pi_inoutno); BaseUtil.CleanDGVData(InOutDetailDGV); BaseUtil.CleanControls(panel1.Controls); } } else { OperateResult.AppendText("出货单" + pi_inoutno.Text + "不存在\n", Color.Red, pi_inoutno); return; } } } else { OperateResult.AppendText("出货单" + pi_inoutno.Text + "待采集数不能为负\n", Color.Red); return; } } private void input_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { needMakeIn = dh.GetConfig("needMakeIn", "MESSetting").ToString(); if (input.Text == "") { OperateResult.AppendText("录入信息不能为空\n", Color.Red, input); return; } sql.Clear(); sql.Append("select nvl(pi_pdastatus,'未备货')pi_pdastatus,pi_type from prodinout where pi_inoutno='" + pi_inoutno.Text + "'"); dta = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dta.Rows.Count > 0) { if (!cancel.Checked) { if (dta.Rows[0]["pi_pdastatus"].ToString() == "已出库") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "已经出库不允许备货\n", Color.Red); return; } if (palletBtn.Checked) { string pa_makecode = ""; sql.Clear(); sql.Append("select pa_outboxcode,pa_status,nvl(pa_iostatus,0) pa_iostatus,pa_makecode,pa_mothercode,nvl(pa_downstatus,0)pa_downstatus,pa_outno from package where pa_outboxcode='" + input.Text + "' and pa_type=3"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { if (!checkinput(dt, "栈板号", input.Text)) return; pa_makecode = dt.Rows[0]["pa_makecode"].ToString(); } else { OperateResult.AppendText("栈板号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } if (!checkinsertprodiomac("栈板号")) return; //更新箱号对应的出货单号 dh.UpdateByCondition("package", "pa_outno = '" + pi_inoutno.Text + "'", "pa_outboxcode = '" + input.Text + "'"); //.UpdateByCondition("makeserial", "ms_outno='" + pi_inoutno.Text + "'", "ms_id in (select max(ms_id) from makeserial where ms_sncode in (select v_barcode from MES_PACKAGE_VIEW where v_outboxcode = '" + input.Text + "') and ms_outno is null GROUP BY ms_sncode)"); List v_barcode = new List(); List v_makecode = new List(); DataTable datatable = (DataTable)dh.ExecuteSql("select v_makecode,v_barcode from MES_PACKAGE_VIEW where v_outboxcode = '" + input.Text + "'", "select"); for (int i = 0; i < datatable.Rows.Count; i++) { v_barcode.Add(datatable.Rows[i]["v_barcode"].ToString()); v_makecode.Add(datatable.Rows[i]["v_makecode"].ToString()); } dh.BatchInsert("update makeserial set ms_outno='" + pi_inoutno.Text + "' where ms_sncode = :v_barcode and ms_makecode = :v_makecode and ms_outno is null", new string[] { "v_barcode", "v_makecode" }, v_barcode.ToArray(), v_makecode.ToArray()); LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, pa_makecode, User.UserLineCode, User.UserSourceCode, "栈板" + input.Text + "出货备货", "栈板" + input.Text + "出货备货成功", input.Text, ""); } else if (bigboxBtn.Checked) { string outboxcode = dh.getFieldDataByCondition("makeserial", "ms_outboxcode", "ms_sncode = '" + input.Text + "'").ToString(); string pa_makecode = ""; string pa_mothercode = ""; string pa_id = ""; if (outboxcode != "") { input.Text = outboxcode; } sql.Clear(); sql.Append("select pa_id,pa_outboxcode,pa_makecode,pa_status,nvl(pa_iostatus,0) pa_iostatus,nvl(pa_downstatus,0)pa_downstatus,pa_outno, pa_mothercode from package where pa_outboxcode='" + input.Text + "' and pa_type in(1,2)"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { pa_makecode = dt.Rows[0]["pa_makecode"].ToString(); pa_mothercode = dt.Rows[0]["pa_mothercode"].ToString(); pa_id = dt.Rows[0]["pa_id"].ToString(); if (pa_mothercode != "") { sql.Clear(); sql.Append("select pa_outboxcode,pa_status,pa_type,nvl(pa_iostatus,0) pa_iostatus,pa_makecode,pa_mothercode,nvl(pa_downstatus,0)pa_downstatus,pa_outno from package where pa_outboxcode='" + pa_mothercode + "'"); DataTable dtpall = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtpall.Rows.Count > 0) { if (dtpall.Rows[0]["pa_mothercode"].ToString() == "") { if (dtpall.Rows[0]["pa_type"].ToString() == "2") { if (!checkinput(dtpall, "箱号", pa_mothercode)) return; } else if (dtpall.Rows[0]["pa_type"].ToString() == "3") { if (!checkinput(dtpall, "栈板", pa_mothercode)) return; } } else { sql.Clear(); sql.Append("select pa_outboxcode,pa_status,pa_type,nvl(pa_iostatus,0) pa_iostatus,pa_makecode,pa_mothercode,nvl(pa_downstatus,0)pa_downstatus,pa_outno from package where pa_outboxcode='" + dtpall.Rows[0]["pa_mothercode"].ToString() + "'"); DataTable dtpalltwo = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtpalltwo.Rows.Count > 0) { if (dtpalltwo.Rows[0]["pa_type"].ToString() == "2") { if (!checkinput(dtpalltwo, "箱号", dtpall.Rows[0]["pa_mothercode"].ToString())) return; } else if (dtpalltwo.Rows[0]["pa_type"].ToString() == "3") { if (!checkinput(dtpalltwo, "栈板", dtpall.Rows[0]["pa_mothercode"].ToString())) return; } } else { OperateResult.AppendText("箱号" + input.Text + "已装大箱或栈板" + pa_mothercode + "不存在,出货失败\n", Color.Red, input); return; } } //if (needMakeIn != "0") //{ // dh.UpdateByCondition("package", "pa_iostatus = 1", "pa_outboxcode = '" + input.Text + "'"); //} } else { OperateResult.AppendText("箱号" + input.Text + "已装大箱或栈板" + pa_mothercode + "不存在,出货失败\n", Color.Red, input); return; } } if (!checkinput(dt, "箱号", input.Text)) return; } else { OperateResult.AppendText("箱号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } if (!checkinsertprodiomac("箱号")) return; //更新箱号对应的出货单号 dh.UpdateByCondition("package", "pa_outno = '" + pi_inoutno.Text + "'", "pa_outboxcode = '" + input.Text + "'"); List v_barcode = new List(); List v_makecode = new List(); DataTable datatable = (DataTable)dh.ExecuteSql("select v_makecode,v_barcode from MES_PACKAGE_VIEW where v_outboxcode = '" + input.Text + "'", "select"); for (int i = 0; i < datatable.Rows.Count; i++) { v_barcode.Add(datatable.Rows[i]["v_barcode"].ToString()); v_makecode.Add(datatable.Rows[i]["v_makecode"].ToString()); } dh.BatchInsert("update makeserial set ms_outno='" + pi_inoutno.Text + "' where ms_sncode = :v_barcode and ms_makecode = :v_makecode and ms_outno is null", new string[] { "v_barcode", "v_makecode" }, v_barcode.ToArray(), v_makecode.ToArray()); LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, pa_makecode, User.UserLineCode, User.UserSourceCode, "箱号" + input.Text + "出货备货", "箱号" + input.Text + "出货备货成功", input.Text, ""); } else if (serBtn.Checked) { string ms_id = dh.getFieldDataByCondition("makeserial", "max(ms_id)ms_id", "ms_sncode='" + input.Text + "'").ToString(); if (ms_id == "") { OperateResult.AppendText("序列号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } else { sql.Clear(); sql.Append("select ms_status,ms_outno,ms_makecode,nvl(ms_downstatus,0)ms_downstatus,ms_outboxcode,nvl(ms_iostatus,0)ms_iostatus,ms_prodcode,ms_salecode from makeserial where ms_id='" + ms_id + "'"); dtms = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); string ms_downstatus = dtms.Rows[0]["ms_downstatus"].ToString(); string ms_status = dtms.Rows[0]["ms_status"].ToString(); string ms_outboxcode = dtms.Rows[0]["ms_outboxcode"].ToString(); string ms_iostatus = dtms.Rows[0]["ms_iostatus"].ToString(); string ms_outno = dtms.Rows[0]["ms_outno"].ToString(); string ms_prodcode = dtms.Rows[0]["ms_prodcode"].ToString(); string ms_makecode = dtms.Rows[0]["ms_makecode"].ToString(); if (ms_status != "2") { OperateResult.AppendText("序列号" + input.Text + "未完工,不允许出货\n", Color.Red, input); return; } if (ms_outboxcode != "") { //OperateResult.AppendText("序列号" + input.Text + "有外箱号,不允许单独出货\n", Color.Red, input); //return; string outpackcode = dh.getFieldDataByCondition("MES_PACKAGE_VIEW", "max(v_outboxcode)", "V_BARCODE = '" + input.Text + "'").ToString(); sql.Clear(); sql.Append("select pa_outboxcode,pa_status,pa_type,nvl(pa_iostatus,0) pa_iostatus,pa_makecode,pa_mothercode,nvl(pa_downstatus,0)pa_downstatus,pa_outno from package where pa_outboxcode='" + outpackcode + "'"); DataTable dtpall = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtpall.Rows.Count > 0) { if (dtpall.Rows[0]["pa_mothercode"].ToString() == "") { if (dtpall.Rows[0]["pa_type"].ToString() == "2") { if (!checkinput(dtpall, "箱号", outpackcode)) return; } else if (dtpall.Rows[0]["pa_type"].ToString() == "3") { if (!checkinput(dtpall, "栈板", outpackcode)) return; } } } else { OperateResult.AppendText("序列号" + input.Text + "已装箱或栈板" + outpackcode + "不存在,出货失败\n", Color.Red, input); return; } } if (ms_downstatus != "0") { OperateResult.AppendText("序列号" + input.Text + "处于下地状态,不允许出货\n", Color.Red, input); return; } if (ms_iostatus == "2") { OperateResult.AppendText("序列号" + input.Text + "已出库,出库单号:" + ms_outno + "\n", Color.Red, input); return; } if (ms_iostatus == "3") { OperateResult.AppendText("序列号" + input.Text + "出入库状态异常\n", Color.Red, input); return; } if (needMakeIn != "0") { if (ms_iostatus != "1") { OperateResult.AppendText("序列号" + input.Text + "必须完工入库才允许出库\n", Color.Red, input); return; } } if (ms_outno != "") { OperateResult.AppendText("序列号" + input.Text + "已经被出货单:" + ms_outno + "采集\n", Color.Red, input); return; } if (dta.Rows[0]["pi_type"].ToString() == "按订单出货") { string pr_packrule = dh.getFieldDataByCondition("product", "pr_packrule", "pr_code = '" + dtms.Rows[0]["ms_prodcode"].ToString() + "'").ToString(); if (pr_packrule == "SALE") { sql.Clear(); sql.Append("select cn,outqty,outqty-nvl((select count(1) from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_prodcode='" + dtms.Rows[0]["ms_prodcode"].ToString() + "'),0)ungetqty from"); sql.Append("(select nvl(sum(pd_outqty),0) outqty ,count(1)cn from prodiodetail where pd_piid=" + pi_id.Text + " and pd_ordercode='" + dtms.Rows[0]["ms_salecode"].ToString() + "' and pd_prodcode='" + dtms.Rows[0]["ms_prodcode"].ToString() + "')"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows[0]["cn"].ToString() == "0") { OperateResult.AppendText("序列号" + input.Text + "所属产品:" + dtms.Rows[0]["ms_prodcode"].ToString() + ",合同号:" + dtms.Rows[0]["ms_salecode"].ToString() + ",不在出货单" + pi_inoutno.Text + "中\n", Color.Red, input); return; } else if (int.Parse(dt.Rows[0]["cn"].ToString()) > 0 && int.Parse(dt.Rows[0]["ungetqty"].ToString()) <= 0) { OperateResult.AppendText("出货单产品" + dtms.Rows[0]["ms_prodcode"].ToString() + "+合同" + dtms.Rows[0]["ms_salecode"].ToString() + ",已经完成出货采集\n", Color.Red, input); return; } updatesn(ms_id); } else { sql.Clear(); sql.Append("select cn,outqty,outqty-nvl((select count(1) from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_prodcode='" + dtms.Rows[0]["ms_prodcode"].ToString() + "'),0)ungetqty from"); sql.Append("(select nvl(sum(pd_outqty),0) outqty ,count(1)cn from prodiodetail where pd_piid=" + pi_id.Text + " and pd_prodcode='" + dtms.Rows[0]["ms_prodcode"].ToString() + "')"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows[0]["cn"].ToString() == "0") { OperateResult.AppendText("序列号" + input.Text + "所属产品:" + dtms.Rows[0]["ms_prodcode"].ToString() + ",不在出货单" + pi_inoutno.Text + "中\n", Color.Red, input); return; } else if (int.Parse(dt.Rows[0]["cn"].ToString()) > 0 && int.Parse(dt.Rows[0]["ungetqty"].ToString()) <= 0) { OperateResult.AppendText("出货单产品" + dtms.Rows[0]["ms_prodcode"].ToString() + "已经完成出货采集\n", Color.Red, input); return; } updatesn(ms_id); } } else if (dta.Rows[0]["pi_type"].ToString() == "自由出货") { updatesn(ms_id); } LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_makecode, User.UserLineCode, User.UserSourceCode, "序列号" + input.Text + "出货备货", "序列号" + input.Text + "出货备货成功", input.Text, ""); } } else { OperateResult.AppendText("未选择录入数据类型\n", Color.Red, input); return; } LoadFormData(); LoadGridData(); if (dta.Rows[0]["pi_type"].ToString() == "按订单出货") { if (int.Parse(dtform.Rows[0]["outqty"].ToString()) > int.Parse(dtform.Rows[0]["getqty"].ToString())) { dh.UpdateByCondition("prodinout", "pi_pdastatus='备货中'", "pi_inoutno='" + pi_inoutno.Text + "'"); OperateResult.AppendText("出货单" + pi_inoutno.Text + "备货成功,备货数据:" + input.Text + "\n", Color.Black, input); } else { dh.UpdateByCondition("prodinout", "pi_pdastatus='已备货'", "pi_inoutno='" + pi_inoutno.Text + "'"); OperateResult.AppendText("出货单" + pi_inoutno.Text + "已完成备货,备货数据:" + input.Text + "\n", Color.Black, input); ConfirmOut_Click(sender, e); return; } } else if (dta.Rows[0]["pi_type"].ToString() == "自由出货") { dh.UpdateByCondition("prodinout", "pi_pdastatus='备货中'", "pi_inoutno='" + pi_inoutno.Text + "'"); OperateResult.AppendText("出货单" + pi_inoutno.Text + "备货成功,备货数据:" + input.Text + "\n", Color.Black, input); } } else { if (dta.Rows[0]["pi_pdastatus"].ToString() == "已出库") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "已经出库不允许取消备货\n", Color.Red); return; } else if (dta.Rows[0]["pi_pdastatus"].ToString() == "未备货") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "尚未备货,无法取消\n", Color.Red); return; } if (palletBtn.Checked) { sql.Clear(); sql.Append("select pa_id,pa_outboxcode,pa_status,nvl(pa_downstatus,0)pa_downstatus, "); sql.Append("pa_outno, nvl(pa_iostatus,0) pa_iostatus,pa_makecode from package "); sql.Append("where pa_outboxcode='" + input.Text + "' and pa_type=3"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { string pa_iostatus = dt.Rows[0]["pa_iostatus"].ToString(); string pa_outno = dt.Rows[0]["pa_outno"].ToString(); string pa_makecode = dt.Rows[0]["pa_makecode"].ToString(); if (pa_iostatus != "0" && pa_iostatus != "1") { OperateResult.AppendText("栈板号" + input.Text + "不是备货状态,无法取消备货\n", Color.Red, input); return; } if (pa_outno == "") { OperateResult.AppendText("栈板号" + input.Text + "无所属出货单号\n", Color.Red, input); return; } if (pa_outno != pi_inoutno.Text) { OperateResult.AppendText("栈板号" + input.Text + "所属出货单号" + pa_outno + "与当前所选出货单号" + pi_inoutno.Text + "\n", Color.Red, input); return; } List pim_mac = new List(); List pim_prodcode = new List(); DataTable datatable = (DataTable)dh.ExecuteSql("select pim_prodcode,pim_mac from prodiomac where pim_outboxcode = '" + input.Text + "' and pim_type='PALLET' and pim_inorout='OUT' AND pim_class='出货'", "select"); for (int i = 0; i < datatable.Rows.Count; i++) { pim_mac.Add(datatable.Rows[i]["pim_mac"].ToString()); pim_prodcode.Add(datatable.Rows[i]["pim_prodcode"].ToString()); } dh.BatchInsert("update makeserial set ms_outno='' where ms_sncode = :pim_mac and ms_prodcode = :pim_prodcode and ms_outno = '" + pi_inoutno.Text + "'", new string[] { "pim_mac", "pim_prodcode" }, pim_mac.ToArray(), pim_prodcode.ToArray()); dh.ExecuteSql("delete from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_outboxcode='" + input.Text + "' and pim_type='PALLET' and pim_inorout='OUT' AND pim_class='出货'", "delete"); dh.UpdateByCondition("package", "pa_outno=''", "pa_outboxcode='" + input.Text + "'"); OperateResult.AppendText("栈板号" + input.Text + "取消备货成功\n", Color.Black, input); LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, pa_makecode, User.UserLineCode, User.UserSourceCode, "栈板" + input.Text + "取消出货备货", "栈板" + input.Text + "取消出货备货成功", input.Text, ""); } else { OperateResult.AppendText("栈板号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } } else if (bigboxBtn.Checked) { string outboxcode = dh.getFieldDataByCondition("makeserial", "ms_outboxcode", "ms_sncode = '" + input.Text + "'").ToString(); if (outboxcode != "") { input.Text = outboxcode; } sql.Clear(); sql.Append("select pa_id,pa_outboxcode,pa_status,nvl(pa_downstatus,0)pa_downstatus, "); sql.Append("pa_outno,nvl(pa_iostatus,0) pa_iostatus,pa_makecode,pa_mothercode from package "); sql.Append("where pa_outboxcode='" + input.Text + "' and pa_type in (1,2)"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { string pa_iostatus = dt.Rows[0]["pa_iostatus"].ToString(); string pa_outno = dt.Rows[0]["pa_outno"].ToString(); string pa_mothercode = dt.Rows[0]["pa_mothercode"].ToString(); string pa_makecode = dt.Rows[0]["pa_makecode"].ToString(); if (pa_iostatus != "0" && pa_iostatus != "1") { OperateResult.AppendText("箱号" + input.Text + "不是备货状态,无法取消备货\n", Color.Red, input); return; } if (pa_outno == "") { OperateResult.AppendText("箱号" + input.Text + "无所属出货单号\n", Color.Red, input); return; } if (pa_outno != pi_inoutno.Text) { OperateResult.AppendText("箱号" + input.Text + "所属出货单号" + pa_outno + "与当前所选出货单号" + pi_inoutno.Text + "\n", Color.Red, input); return; } //if (pa_mothercode != "") //{ // OperateResult.AppendText("箱号" + input.Text + "已经装大箱或栈板:" + pa_mothercode + ",不允许单独操作\n", Color.Red, input); // return; //} dh.UpdateByCondition("package", "pa_outno=''", "pa_outboxcode='" + input.Text + "'"); List pim_mac = new List(); List pim_prodcode = new List(); DataTable datatable = (DataTable)dh.ExecuteSql("select pim_prodcode,pim_mac from prodiomac where pim_outboxcode = '" + input.Text + "' and pim_type='BOX' and pim_inorout='OUT' AND pim_class='出货'", "select"); for (int i = 0; i < datatable.Rows.Count; i++) { pim_mac.Add(datatable.Rows[i]["pim_mac"].ToString()); pim_prodcode.Add(datatable.Rows[i]["pim_prodcode"].ToString()); } dh.BatchInsert("update makeserial set ms_outno='' where ms_sncode = :pim_mac and ms_prodcode = :pim_prodcode and ms_outno = '" + pi_inoutno.Text + "'", new string[] { "pim_mac", "pim_prodcode" }, pim_mac.ToArray(), pim_prodcode.ToArray()); dh.ExecuteSql("delete from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_outboxcode='" + input.Text + "' and pim_type='BOX' and pim_inorout='OUT' AND pim_class='出货'", "delete"); OperateResult.AppendText("箱号" + input.Text + "取消备货成功\n", Color.Black, input); LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, pa_makecode, User.UserLineCode, User.UserSourceCode, "箱号" + input.Text + "取消出货备货", "箱号" + input.Text + "取消出货备货成功", input.Text, ""); } else { OperateResult.AppendText("箱号" + input.Text + "不在备货数据中\n", Color.Red, input); return; } } else if (serBtn.Checked) { string ms_id = dh.getFieldDataByCondition("makeserial", "max(ms_id)ms_id", "ms_sncode='" + input.Text + "'").ToString(); if (ms_id == "") { OperateResult.AppendText("序列号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } sql.Clear(); sql.Append("select ms_status,nvl(ms_downstatus,0)ms_downstatus,ms_outboxcode,ms_makecode,"); sql.Append("nvl(ms_iostatus,0)ms_iostatus,ms_prodcode,ms_outno from makeserial where ms_id='" + ms_id + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { string ms_outboxcode = dt.Rows[0]["ms_outboxcode"].ToString(); string ms_outno = dt.Rows[0]["ms_outno"].ToString(); string ms_iostatus = dt.Rows[0]["ms_iostatus"].ToString(); string ms_makecode = dt.Rows[0]["ms_makecode"].ToString(); if (ms_iostatus != "0" && ms_iostatus != "1") { OperateResult.AppendText("序列号号" + input.Text + "不是备货状态,无法取消备货\n", Color.Red, input); return; } if (ms_outno == "") { OperateResult.AppendText("序列号" + input.Text + "无所属出货单号\n", Color.Red, input); return; } if (ms_outno != pi_inoutno.Text) { OperateResult.AppendText("序列号" + input.Text + "所属出货单号" + ms_outno + "与当前所选出货单号" + pi_inoutno.Text + "\n", Color.Red, input); return; } //if (ms_outboxcode != "") //{ // OperateResult.AppendText("箱号" + input.Text + "已经装大箱:" + ms_outboxcode + ",不允许单独操作\n", Color.Red, input); // return; //} dh.ExecuteSql("delete from prodiomac where pim_id in (select pim_id from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_mac='" + input.Text + "' and pim_inorout='OUT' and pim_class='出货')", "delete"); dh.UpdateByCondition("makeserial", " ms_outno = ''", "ms_id = '" + ms_id + "'"); LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_makecode, User.UserLineCode, User.UserSourceCode, "序列号" + input.Text + "取消出货备货", "序列号" + input.Text + "取消出货备货成功", input.Text, ""); OperateResult.AppendText("序列号" + input.Text + "取消备货成功\n", Color.Black, input); } else { OperateResult.AppendText("序列号" + input.Text + "不在备货数据中\n", Color.Red, input); return; } } else { OperateResult.AppendText("未选择录入数据类型\n", Color.Red, input); return; } LoadFormData(); LoadGridData(); } } else { OperateResult.AppendText("出货单" + pi_inoutno.Text + "不存在\n", Color.Red, pi_inoutno); return; } } } private void updatesn(string ms_id) { //更新操作 sql.Clear(); sql.Append("insert into prodiomac(pim_id,pim_inoutno,pim_piid,pim_prodcode,pim_mac,pim_indate,pim_inman,pim_type,pim_inorout,pim_class)"); sql.Append("values(prodiomac_seq.nextval,'" + pi_inoutno.Text + "','" + pi_id.Text + "','" + dtms.Rows[0]["ms_prodcode"].ToString() + "','" + input.Text + "',sysdate,'" + User.UserCode + "',' ','OUT','出货')"); dh.ExecuteSql(sql.GetString(), "insert"); dh.UpdateByCondition("makeserial", "ms_outno='" + pi_inoutno.Text + "'", " ms_id='" + ms_id + "'"); } //插入prodiomac表 private void insertprodiomac(string type) { string pib_type = ""; if (type == "栈板号") { pib_type = "PALLET"; } else if (type == "箱号") { pib_type = "BOX"; } sql.Clear(); sql.Append("insert into prodiomac(pim_id,pim_inoutno,pim_piid,pim_prodcode,pim_mac,pim_indate,pim_inman,pim_type,pim_outboxcode,pim_inorout,pim_class)"); sql.Append("select prodiomac_seq.nextval,'" + pi_inoutno.Text + "','" + pi_id.Text + "',v_prodcode,ms_sncode,sysdate,'" + User.UserCode + "','" + pib_type + "','" + input.Text + "','OUT','出货' from mes_package_view left join makeserial on ms_sncode=v_barcode and ms_makecode=v_makecode where v_outboxcode='" + input.Text + "' and ms_outno is null"); dh.ExecuteSql(sql.GetString(), "insert"); } private Boolean checkinsertprodiomac(string type) { sql.Clear(); sql.Append("select wm_concat(v_barcode)data,count(1)cn from mes_package_view left join makeserial on ms_sncode=v_barcode and ms_makecode=v_makecode where v_outboxcode='" + input.Text + "' and nvl(ms_status,0)<>2 and rownum<20"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows[0]["data"].ToString() != "" && int.Parse(dt.Rows[0]["cn"].ToString()) > 0) { OperateResult.AppendText(type + input.Text + "内序列号未完工,序列号:" + dt.Rows[0]["data"].ToString() + "\n", Color.Red, input); return false; } if (dta.Rows[0]["pi_type"].ToString() == "按订单出货") { //获取进行出库的产品的包装规则 string pr_packrule = dh.getFieldDataByCondition("product left join package on pr_code = pa_prodcode", "pr_packrule", "pa_outboxcode = '" + input.Text + "'").ToString(); if (pr_packrule == "SALE") { sql.Clear(); sql.Append("select ms_prodcode,ms_salecode,cn from (select nvl(ms_prodcode,' ') ms_prodcode,nvl(ms_salecode,' ') ms_salecode,count(1)cn from mes_package_view left join makeserial on ms_sncode=v_barcode and ms_makecode=v_makecode where v_outboxcode='" + input.Text + "' "); sql.Append("and ms_outno is null group by ms_prodcode,ms_salecode) left join (select pd_ordercode,pd_prodcode,outqty-nvl((select count(1) from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_prodcode=pd_prodcode),0)ungetqty"); sql.Append(" from (select pd_ordercode,pd_prodcode,sum(pd_outqty)outqty from prodiodetail where pd_piid=" + pi_id.Text + " group by pd_prodcode,pd_ordercode)) on 1=1 where ms_prodcode<>pd_prodcode or ms_salecode<>pd_ordercode or (cn>nvl(ungetqty,0))"); DataTable dtAA = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtAA.Rows.Count > 0) { string badmessgae = ""; for (int i = 0; i < dtAA.Rows.Count; i++) { badmessgae += "产品号:" + dtAA.Rows[i]["ms_prodcode"].ToString() + ",订单号:" + dtAA.Rows[i]["ms_salecode"].ToString() + ",数量:" + dtAA.Rows[i]["cn"].ToString() + "\n"; } OperateResult.AppendText(type + input.Text + "内的序列号中的产品+订单不在出货单中或者所装的序列号的数量大于剩余出货数," + badmessgae, Color.Red, input); return false; } else { //插入prodiomac表 insertprodiomac(type); return true; } } else { sql.Clear(); sql.Append("select ms_prodcode,cn from (select nvl(ms_prodcode,' ') ms_prodcode,count(1)cn from mes_package_view left join makeserial on ms_sncode=v_barcode and ms_makecode=v_makecode where v_outboxcode='" + input.Text + "' "); sql.Append("and ms_outno is null group by ms_prodcode) left join (select pd_prodcode,outqty-nvl((select count(1) from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_prodcode=pd_prodcode),0)ungetqty"); sql.Append(" from (select pd_prodcode,sum(pd_outqty)outqty from prodiodetail where pd_piid=" + pi_id.Text + " group by pd_prodcode)) on 1=1 where ms_prodcode<>pd_prodcode or (cn>nvl(ungetqty,0))"); DataTable dtAA = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dtAA.Rows.Count > 0) { string badmessgae = ""; for (int i = 0; i < dtAA.Rows.Count; i++) { badmessgae += "产品号:" + dtAA.Rows[i]["ms_prodcode"].ToString() + ",数量:" + dtAA.Rows[i]["cn"].ToString() + "\n"; } OperateResult.AppendText(type + input.Text + "内的序列号中的产品不在出货单中或者所装的序列号的数量大于剩余出货数," + badmessgae, Color.Red, input); return false; } else { //插入prodiomac表 insertprodiomac(type); return true; } } } else if (dta.Rows[0]["pi_type"].ToString() == "自由出货") { insertprodiomac(type); return true; } return true; } private Boolean checkinput(DataTable dt, string type, string inputmessage) { if (dt.Rows[0]["pa_status"].ToString() != "1") { OperateResult.AppendText(type + inputmessage + "未封装,请重新输入\n", Color.Red, input); return false; } else if (dt.Rows[0]["pa_status"].ToString() == "2") { OperateResult.AppendText(type + inputmessage + "已出库,请重新输入\n", Color.Red, input); return false; } if (needMakeIn != "0") { if (dt.Rows[0]["pa_iostatus"].ToString() != "1" && dt.Rows[0]["pa_mothercode"].ToString() == "") { OperateResult.AppendText(type + inputmessage + "必须完工入库才允许出库\n", Color.Red, input); return false; } } if (dt.Rows[0]["pa_downstatus"].ToString() != "0") { OperateResult.AppendText(type + inputmessage + "处于下地状态,若需出货,请先取消下地\n", Color.Red, input); return false; } if (input.Text == inputmessage) { if (dt.Rows[0]["pa_iostatus"].ToString() == "2") { OperateResult.AppendText(type + inputmessage + "已经出货\n", Color.Red, input); return false; } if (dt.Rows[0]["pa_iostatus"].ToString() == "3") { OperateResult.AppendText(type + inputmessage + "处于销售退货状态\n", Color.Red, input); return false; } if (dt.Rows[0]["pa_outno"].ToString() != "") { OperateResult.AppendText(type + inputmessage + "已经被出货单" + dt.Rows[0]["pa_outno"].ToString() + "采集\n", Color.Red, input); return false; } } return true; } private void Clean_Click(object sender, EventArgs e) { sql.Clear(); sql.Append("select nvl(pi_pdastatus,'未备货')pi_pdastatus,pi_id from prodinout where pi_inoutno='" + pi_inoutno.Text + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { if (dt.Rows[0]["pi_pdastatus"].ToString() == "已出库") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "已经出库,不允许取消明细\n", Color.Red); return; } else if (dt.Rows[0]["pi_pdastatus"].ToString() == "未备货") { OperateResult.AppendText("出货单" + pi_inoutno.Text + "尚未备货,无法取消明细\n", Color.Red); return; } List ExeSQL = new List(); ExeSQL.Add("update makeserial set ms_outno = '' where exists (select 1 from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_mac=ms_sncode and pim_prodcode=ms_prodcode ) and ms_status=2"); ExeSQL.Add("update package set pa_outno = '' where exists (select 1 from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_outboxcode=pa_outboxcode and ((pim_type='PALLET' AND PA_TYPE=3) OR (PIM_TYPE='BOX' AND PA_TYPE IN(1,2)))) AND PA_OUTNO='" + pi_inoutno.Text + "'"); ExeSQL.Add("delete from prodiomac where pim_inoutno='" + pi_inoutno.Text + "'"); ExeSQL.Add("update prodinout set pi_pdastatus='未备货' where pi_inoutno='" + pi_inoutno.Text + "'"); ExeSQL.Add("insert into messagelog(ml_id,ml_date,ml_man,ml_content,ml_result,ml_search)values(messagelog_seq.nextval,sysdate,'" + User.UserName + "','清除全部备货明细','清除备货明细成功','ProdInOut!Sale|pi_id=" + pi_id.Text + "')"); dh.ExecuteSQLTran(ExeSQL.ToArray()); OperateResult.AppendText("出货单" + pi_inoutno.Text + "取消明细成功\n", Color.Black, input); } else { OperateResult.AppendText("出货单" + pi_inoutno.Text + "不存在\n", Color.Red, pi_inoutno); return; } LoadFormData(); LoadGridData(); } private void serBtn_Click(object sender, EventArgs e) { if (((RadioButton)sender).Checked == true) { if (((RadioButton)sender).Name == "serBtn") { input.Focus(); OperateResult.AppendText("请输入序列号进行采集\n", Color.Black, input); } else if (((RadioButton)sender).Name == "bigboxBtn") { input.Focus(); OperateResult.AppendText("请输入箱号进行采集\n", Color.Black, input); } else if (((RadioButton)sender).Name == "palletBtn") { input.Focus(); OperateResult.AppendText("请输入栈板进行采集\n", Color.Black, input); } } } private void pallecode_UserControlTextChanged(object sender, EventArgs e) { if (pallecode.Text.Length == 0 && dh != null) { input.Enabled = true; LoadFormData(); LoadGridData(); } } private void Search_Click(object sender, EventArgs e) { if (pallecode.Text.Length >= 0 && dh != null) { sql.Clear(); sql.Append("select pim_outboxcode,pim_mac,pim_prodcode,pr_detail,pr_spec from prodiomac "); sql.Append("left join product on pr_code=pim_prodcode where pim_inoutno='" + pi_inoutno.Text + "'and pim_outboxcode like '%" + pallecode.Text + "%' and pim_inorout='OUT' AND pim_class='出货' order by pim_id asc"); DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); BaseUtil.FillDgvWithDataTable(InOutDetailDGV, dt); input.Enabled = false; } } private void InOutDetailDGV_DataSourceChanged(object sender, EventArgs e) { datacount.Text = InOutDetailDGV.Rows.Count.ToString(); } } }