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; Warehouse_NewPiInOut newpi; 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_inoutno.FormName = Name; pi_inoutno.Condition = "pi_pdastatus<>'已出库' and pi_class='出货单'"; pi_inoutno.DbChange += Pi_inoutno_DbChange; dh = new DataHelper(); asc.controllInitializeSize(this); } 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() { sql.Clear(); sql.Append("select pi_id,pi_title,pi_inoutno,pi_type from prodinout where pi_inoutno = '" + pi_inoutno.Text + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { BaseUtil.SetFormValue(this.Controls, dt); } sql.Clear(); sql.Append("select nvl((select sum(pd_outqty) from prodiodetail where pd_piid=''),0)outqty,nvl((select count(1)cn from prodiomac where pim_inoutno=pd_inoutno),0) getqty , "); sql.Append("nvl((select sum(CASE WHEN pim_type='BOX' then 1 else nvl((select pa_packageqty from package where pa_outboxcode=pim_outboxcode),0)end) from prodiomac "); sql.Append("where pim_inoutno='" + pi_inoutno.Text + "' and NVL(PIM_OUTBOXCODE,' ')<>' ' AND pim_type in('BOX','PALLET')),0) boxqty from prodiodetail where pd_piid='" + pi_id.Text + "' "); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { BaseUtil.SetFormValue(this.Controls, dt); ungetqty.Text = (int.Parse(dt.Rows[0]["outqty"].ToString()) - int.Parse(dt.Rows[0]["getqty"].ToString())).ToString(); } } /// /// 加载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 + "'"); 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) { 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(); BaseUtil.SetFormCenter(newpd); newpd.ShowDialog(); } private void ConfirmOut_Click(object sender, EventArgs e) { } private void input_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { 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 (palletBtn.Checked) { sql.Clear(); sql.Append("select pa_outboxcode,pa_status,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, "栈板号")) return; } else { OperateResult.AppendText("栈板号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } checkinsertprodiomac("栈板号"); } else if (bigboxBtn.Checked) { sql.Clear(); sql.Append("select pa_outboxcode,pa_status,nvl(pa_downstatus,0)pa_downstatus,pa_outno, pa_mothercode from package where pa_outboxcode='" + input.Text + "' and pa_type=(1,2)"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { if (dt.Rows[0]["pa_mothercode"].ToString() != "") { OperateResult.AppendText("箱号" + input.Text + "已经装大箱或者栈板,不允许单独出货\n", Color.Red, input); return; } if (!checkinput(dt, "箱号")) return; } else { OperateResult.AppendText("箱号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } checkinsertprodiomac("箱号"); //更新箱号对应的出货单号 dh.UpdateByCondition("package", "pa_outno = '" + pi_inoutno.Text + "'", "pa_outboxcode = '" + input.Text + "'"); } else if (serBtn.Checked) { if (dh.getFieldDataByCondition("makeserial", "max(ms_id)ms_id", "ms_sncode='" + input.Text + "'").ToString() == "") { OperateResult.AppendText("序列号" + input.Text + "不存在,请重新输入\n", Color.Red, input); return; } } } } else { OperateResult.AppendText("出货单" + pi_inoutno.Text + "不存在\n", Color.Red, pi_inoutno); return; } } } //插入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,pib_type,pim_outboxcode)"); sql.Append("select prodiomac_seq.nextval,'" + pi_inoutno.Text + "','" + pi_id.Text + "',v_prodcode,v_barcode,sysdate,'" + User.UserCode + "','"+ pib_type + "','" + input.Text + "' from mes_package_view where v_outboxcode='" + input.Text + "'"); dh.ExecuteSql(sql.GetString(), "insert"); } private void 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; } if (dta.Rows[0]["pi_type"].ToString() == "订单出库") { sql.Clear(); sql.Append("select ms_prodcode,ms_salecode,cn from (select ms_prodcode,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(" 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_inoutno.Text + "' group by pd_prodcode,pd_ordercode)) on ms_prodcode=pd_prodcode and ms_salecode=pd_ordercode where nvl(pd_prodcode,' ')<>' ' or nvl(pd_ordercode,' ')<>' ' or cn>nvl(ungetqty,0)"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (int.Parse(dt.Rows[0]["cn"].ToString()) > 0) { OperateResult.AppendText(type + input.Text + "内的序列号中的物料+订单不在出货单中或者栈板内中序列号的数量大于剩余出货数,栈板内物料号:" + dt.Rows[0]["ms_prodcode"].ToString() + ",订单号:" + dt.Rows[0]["ms_salecode"].ToString() + ",数量:" + dt.Rows[0]["cn"].ToString() + "\n", Color.Red, input); return; } else { //插入prodiomac表 insertprodiomac(type); } } else if (dta.Rows[0]["pi_type"].ToString() == "自由出货") { insertprodiomac(type); } } private Boolean checkinput(DataTable dt, string type) { if (dt.Rows[0]["pa_outno"].ToString() != "") { OperateResult.AppendText(type + input.Text + "已经被出货单:" + dt.Rows[0]["pa_outno"].ToString() + "采集,请重新输入\n", Color.Red, input); return false; } if (dt.Rows[0]["pa_status"].ToString() == "0") { OperateResult.AppendText(type + input.Text + "未封装,请重新输入\n", Color.Red, input); return false; } else if (dt.Rows[0]["pa_status"].ToString() == "2") { OperateResult.AppendText(type + input.Text + "已出库,请重新输入\n", Color.Red, input); return false; } if (dt.Rows[0]["pa_downstatus"].ToString() != "0") { OperateResult.AppendText(type + input.Text + "处于下地状态,若需出货,请先取消下地\n", Color.Red, input); return false; } return true; } } }