锐腾搅拌上料功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1278 lines
50 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ICSSoft.Base.Config.AppConfig;
using System.Data.Linq;
using System.Linq;
using ICSSoft.Base.Language.Tool;
using System.Reflection;
using ICSSoft.Base.Report.GridReport;
using ICSSoft.Base.Config.DBHelper;
using ICSSoft.Base.ReferForm;
using ICSSoft.Base.Report;
using ICSSoft.Base.ReferForm.AppReferForm;
using ICSSoft.Frame.Data.Entity;
using ICSSoft.Frame.Data.BLL;
using ICSSoft.Base.UserControl.FormControl;
using ICSSoft.Base.Report.Filter;
using DevExpress.XtraGrid.Views.BandedGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid;
using System.Text.RegularExpressions;
namespace ICSSoft.Frame.APP
{
public partial class FormICSITEMLOTAdd : DevExpress.XtraEditors.XtraForm
{
DataRow rowGroup;
private DataTable dataSource = null;
private string sqltxt = "";
private string sqlconn = "";
Regex rex = new Regex(@"^\d+$|^\d+\.\d+$");
#region 系统
#region 构造函数
public FormICSITEMLOTAdd()
{
InitializeComponent();
}
#endregion
#region 构造函数
public FormICSITEMLOTAdd(string receiptno,int receiptline)
{
InitializeComponent();
this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
SearchItemLotInfo(receiptno, receiptline);
}
#endregion
private void SearchItemLotInfo(string receiptno, int receiptline)
{
btnSTNO.Text = receiptno;
btnSTNO.Enabled = false;
btnSTNO.Properties.ReadOnly = true;
comNUM.Enabled = false;
comNUM.Text = receiptline.ToString();
comNUM_SelectedIndexChanged(null,null);
}
#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 操作权限
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<Control> ControlList = new List<Control>();
ControlList.Add(btnCreate);
ControlList.Add(btnModify);
ControlList.Add(btnDel);
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 gridView3_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
private void gridView4_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 btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void simpleButton2_Click(object sender, EventArgs e)
{
this.Close();
}
#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)
{
DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等...");
try
{
_wait.Show();
gridView3_Load(null, null);
_wait.Close();
}
catch (Exception ex)
{
MessageBox.Show("异常:" + ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
_wait.Close();
}
}
#endregion
#region 全选
private void btnSelectAll_Click(object sender, EventArgs e)
{
gv3.PostEditor();
this.Validate();
for (int i = 0; i < gv3.RowCount; i++)
{
gv3.SetRowCellValue(i, coSelect, "Y");
}
}
#endregion
#region 全消
private void btnCancelAll_Click(object sender, EventArgs e)
{
gv3.PostEditor();
this.Validate();
for (int i = 0; i < gv3.RowCount; i++)
{
gv3.SetRowCellValue(i, coSelect, "");
}
}
#endregion
#region 过滤方法
private void FormContainerManager_FormClosing(object sender, FormClosingEventArgs e)
{
AppConfig.DropTemTable(tempTableName);
}
#endregion
#region 绑定数据源
private void btnConfig_Click(object sender, EventArgs e)
{
if (AppConfig.UserCode.ToLower() != "demo")
{
ICSBaseSimpleCode.AppshowMessageBox("您没有权限设置数据源,请联系软件提供商!");
return;
}
FormDataSource fdata = new FormDataSource(AppConfig.GetMenuId(this.Tag.ToString()), btnConfig.Name);
fdata.ShowDialog();
}
#endregion
#endregion
#region [入库单号]点击事件
private void btnSTNO_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
{
btnSTNO.Text = "";
ButtonEdit btn = (ButtonEdit)sender;
string sql = @"select DISTINCT STNO as [入库单号] from ICSASNIQCDETAIL
where STDSTATUS='已检未入库' and CHECKSTATUS='合格'
and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
FormDataRefer reForm = new FormDataRefer();
reForm.FormTitle = "入库单号信息";
DataTable menuData = data;
reForm.DataSource = menuData;
reForm.MSelectFlag = false;
reForm.RowIndexWidth = 35;
reForm.HideCols.Add("ID");
reForm.FormWidth = 800;
reForm.FormHeight = 600;
reForm.FilterKey = btn.Text; //gridView3.GetRowCellValue(gridView3.FocusedRowHandle, gridView3.FocusedColumn).ToString().Trim();
if (reForm.ShowDialog() == DialogResult.OK)
{
DataTable retData = reForm.ReturnData;
foreach (DataRow dr in retData.Rows)
{
btnSTNO.Text = dr["入库单号"].ToString();
}
}
}
#endregion
#region 选择入库单后,为行号下拉框添加项
private void btnSTNO_EditValueChanged(object sender, EventArgs e)
{
string sql = @"select STLINE from ICSASNIQCDETAIL
where STNO='" + btnSTNO.Text + "' and STDSTATUS='已检未入库' and CHECKSTATUS='合格' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
comNUM.Items.Clear();
foreach (DataRow dr in data.Rows)
{
comNUM.Items.Add(dr[0].ToString());
}
}
#endregion
#region 选择行号后对后续box 赋值
private void comNUM_SelectedIndexChanged(object sender, EventArgs e)
{
string sql = @"select DISTINCT a.ITEMCODE,b.VENDORCODE,a.UNIT,b.INVCONTROLTYPE,c.QualifyQTY,a.MEMO from ICSASNIQCDETAIL as a,ICSINVENTORY as b,ICSINVReceiptDetail as c
where a.ITEMCODE=b.INVCODE and a.STNO=c.ReceiptNO and a.STLINE=c.ReceiptLine and a.STNO='" + btnSTNO.Text + "' and a.STLINE='" + comNUM.Text + "' and a.WorkPoint='" + AppConfig.WorkPointCode + "' and b.WorkPoint='" + AppConfig.WorkPointCode + "' and c.WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
foreach(DataRow dr in data.Rows)
{
txtITEMCODE.Text=dr["ITEMCODE"].ToString();
txtVENDORCODE.Text=dr["VENDORCODE"].ToString();
txtUNIT.Text=dr["UNIT"].ToString();
txtINVCONTROLTYPE.Text = dr["INVCONTROLTYPE"].ToString();
txtQualifyQTY.Text = dr["QualifyQTY"].ToString();
txtMEMO.Text=dr["MEMO"].ToString();
}
int s = 0;
//统计已维护过的[合格数量]的和
string str = "select LOTQTY from ICSITEMLot where TransNO='" + btnSTNO.Text + "' and TransLine='" + comNUM .Text+ "'";
str = string.Format(str);
DataTable dat = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, str).Tables[0];
foreach (DataRow dr in dat.Rows)
{
s += int.Parse(dr[0].ToString().Split('.')[0].ToString());
}
labMAIN.Text = s.ToString();
grdDetail.DataSource = "";
gridView3_Load(null,null);
if (txtINVCONTROLTYPE.Text == "单件管控")
{
NODE(null, 0);
}
}
#endregion
#region 管控类型的值变化时
private void txtINVCONTROLTYPE_EditValueChanged(object sender, EventArgs e)
{
if (txtINVCONTROLTYPE.Text == "批次管控")
{
radNUM.Enabled = false;
txtNUM.Enabled = false;
radBEGNUM.Enabled = false;
txtBEGNUM.Enabled = false;
txtCOUNT.Enabled = false;
btnSERIAL.Enabled = false;
radLOGIN.Enabled = false;
btnREFER.Enabled = false;
btnModify.Enabled = true;
radACOUNTMIN.Enabled = true;
txtCOUNTMIN.Enabled = true;
radBAGNUM.Enabled = true;
txtBAGNUM.Enabled = true;
}
else if (txtINVCONTROLTYPE.Text == "单件管控")
{
radNUM.Enabled = true;
txtNUM.Enabled = true;
radBEGNUM.Enabled = true;
txtBEGNUM.Enabled = true;
txtCOUNT.Enabled = true;
btnSERIAL.Enabled = true;
radLOGIN.Enabled = true;
btnREFER.Enabled = true;
btnModify.Enabled = false;
radACOUNTMIN.Enabled = false;
txtCOUNTMIN.Enabled=false;
radBAGNUM.Enabled=false;
txtBAGNUM.Enabled = false;
}
}
#endregion
#region gridview显示数据
//gridview中生成数据
private void btnNEW_Click(object sender, EventArgs e)
{
int i = 0, j = 0, m = 0, r = 0;// i,m-1 j,最后一行数量 m,项数
try
{
DataTable dd = new DataTable();
//除新增项外其他项的select变成false
for (int n = 0; n < dd.Rows.Count; n++)
{
dd.Rows[n]["coSelect"] = "";
}
if (txtQualifyQTY.Text != "" && txtCOUNTMIN.Text != ""&&radACOUNTMIN.Checked==true)
{
string[] txtqty = txtQualifyQTY.Text.Split('.');
string a = txtqty[0];
i = int.Parse(txtqty[0]) / int.Parse(txtCOUNTMIN.Text);
j = int.Parse(txtqty[0]) % int.Parse(txtCOUNTMIN.Text);
if (j != 0)
{
m = i + 1;
}
else
{
m = i;
}
}
if(txtQualifyQTY.Text!=""&&txtBAGNUM.Text!=""&&radBAGNUM.Checked==true)
{
string[] txtqty = txtQualifyQTY.Text.Split('.');
string a = txtqty[0];
m = int.Parse(txtBAGNUM.Text);
i=int.Parse(txtqty[0]) % int.Parse(txtBAGNUM.Text);
r = int.Parse(txtqty[0]) / int.Parse(txtBAGNUM.Text);
if ( i!= 0)
{
j = r + i;
}
else
{
j = r ;
}
}
//查询物料描述
string sql = @"select INVDESC from ICSINVENTORY where INVCODE='" + txtITEMCODE.Text + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
//先给新建表赋值已存在的批号
DataTable ds = new DataTable();
dd = Dtable().Copy();
for (int n = 0; n < Dtable().Rows.Count;n++ )
{
if (data.Rows[0][0].ToString() != "")
{
dd.Rows[n]["INVDESC"] = data.Rows[0][0].ToString();
}
}
//如果是 单件管控 只产生一行
if (txtINVCONTROLTYPE.Text == "单件管控")
{
m = 1;
}
#region 表中行赋值
//再赋值自定义的批号
for (int n = 0; n < m; n++)
{
//生成批次
string lotno = "LOT" + AppConfig.GetSeverDateTime("yyyy-MM-dd").ToString("yyyyMMdd");
lotno = AppConfig.GetSerialCode(AppConfig.FrameConnectString, AppConfig.WorkPointCode, "ICSWareHouseLotInfo", "LotNo", lotno, 4);
//给新建表的行赋值
rowGroup = dd.NewRow();
rowGroup["ID"] = txtID.Text;
rowGroup["coSelect"] = "Y";
rowGroup["LotNO"] = lotno;
rowGroup["ItemCode"] = txtITEMCODE.Text;
if(radACOUNTMIN.Checked==true&&txtCOUNTMIN.Text!="")
{
if (n == m - 1 && j != 0)
{
rowGroup["LOTQTY"] = j;
}
else
{
rowGroup["LOTQTY"] = txtCOUNTMIN.Text;
}
}
if (radBAGNUM.Checked == true && txtBAGNUM.Text != "")
{
if (i == 0)
{
rowGroup["LOTQTY"] = j;
}
else
{
if (n == m - 1 && j != 0)
{
rowGroup["LOTQTY"] = j;
}
else
{
rowGroup["LOTQTY"] = r;
}
}
}
//如果是单件管控 数量为0
if (txtINVCONTROLTYPE.Text != "")
{
if (txtINVCONTROLTYPE.Text=="单件管控")
{
rowGroup["LOTQTY"] = 0;
}
}
rowGroup["PRODUCTDATE"] = Convert.ToDateTime("1991-1-1");
rowGroup["VENDORITEMCODE"] = "";
rowGroup["VenderLotNO"] = "";
if (data.Rows[0][0].ToString() != "")
{
rowGroup["INVDESC"] = data.Rows[0][0].ToString();
}
rowGroup["MUSERName"] = AppConfig.UserName;
rowGroup["MTIME"] = AppConfig.GetSeverDateTime("yyyy-MM-dd hh:mm:ss").ToString();
dd.Rows.Add(rowGroup);
}
#endregion
grdDetail.DataSource = dd;
if(txtINVCONTROLTYPE.Text=="单件管控")
{
btnModify_Click(null,null);
}
}
catch(Exception ex)
{
ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
}
}
#endregion
#region ICSITEMLot表中数据查询
public DataTable Dtable()
{
string sql = @"select '' as coSelect,INVDESC,a.* from ICSITEMLOT as a,ICSINVENTORY as b where a.TransNO='" + btnSTNO.Text + "' and a.TransLine='" + comNUM.Text + "' and a.ItemCode=b.INVCODE and a.WorkPoint='" + AppConfig.WorkPointCode + "' and b.WorkPoint='" + AppConfig.WorkPointCode + "' order by LotNO,LOTQTY";
sql = string.Format(sql);
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
return data;
}
#endregion
#region 页面初始加载事件
private void gridView3_Load(object sender, EventArgs e)
{
grdDetail.DataSource = "";
grdDetail.DataSource=Dtable();
//统计已维护过的[合格数量]的和
if (btnSTNO.Text != "" && comNUM.Text!="")
{
int s = 0;
string str = "select LOTQTY from ICSITEMLot where TransNO='" + btnSTNO.Text + "' and TransLine='" + comNUM.Text + "'";
str = string.Format(str);
DataTable dat = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, str).Tables[0];
foreach (DataRow dr in dat.Rows)
{
s += int.Parse(dr[0].ToString().Split('.')[0].ToString());
}
labMAIN.Text = s.ToString();
}
if (txtINVCONTROLTYPE.Text == "单件管控")
{
NODE(null, 0);
}
gv3.BestFitColumns();
}
#endregion
#region [单件管控]生成序列号
private void simpleButton1_Click(object sender, EventArgs e)
{
if (radNUM.Checked == true && txtNUM.Text != "")
{
NODE(txtNUM.Text,0);
gridView3_Load(null, null);
}
if (radBEGNUM.Checked == true && txtBEGNUM.Text != "" && txtCOUNT.Text!="")
{
NODE(txtBEGNUM.Text,int.Parse(txtCOUNT.Text));
gridView3_Load(null, null);
}
}
#endregion
#region 保存
private void btnModify_Click(object sender, EventArgs e)
{
int h = 0;
int s = int.Parse(labMAIN.Text);
List<string> lotlist = new List<string>();
//统计所选项的[合格数量]的和
for (int n = 0; n < Dtable().Rows.Count; n++)
{
if (Dtable().Rows[n]["ItemCode"].ToString() == txtITEMCODE.Text)
{
if (txtQualifyQTY.Text != "")
{
h += int.Parse(Dtable().Rows[n]["LOTQTY"].ToString().Split('.')[0].ToString());
}
}
}
if (s+h <= int.Parse(txtQualifyQTY.Text.Split('.')[0]))
{
if (txtINVCONTROLTYPE.Text == "单件管控")
{
lotlist.Add( gv3.GetRowCellValue(Dtable().Rows.Count,LotNO).ToString());
if (SaveBool(lotlist) == true)
{
Save(Dtable().Rows.Count);
}
}
if (txtINVCONTROLTYPE.Text == "批次管控")
{
int l = 0;
for (int n = 0; n < gv3.RowCount; n++)
{
if (gv3.GetRowCellValue(n, coSelect).ToString() == "Y")
{
lotlist.Add(gv3.GetRowCellValue(n, LotNO).ToString());
l += int.Parse(gv3.GetRowCellValue(n, LOTQTY).ToString().Split('.')[0].ToString());
}
}
bool b=SaveBool(lotlist);
if (b == true)
{
for (int n = 0; n < gv3.RowCount; n++)
{
if (gv3.GetRowCellValue(n, coSelect).ToString() == "Y")
{
Save(n);
}
}
//修改到货单 入库数量
string sql = @"update ICSINVReceiptDetail set ACTQTY+='" + l + "' where ReceiptNO='" + btnSTNO.Text + "' and ReceiptLine='" + comNUM.Text + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
ICSBaseSimpleCode.AppshowMessageBox("操作成功!");
gridView3_Load(null, null);
}
}
}
else
{
ICSBaseSimpleCode.AppshowMessageBox("该物料维护的数量已大于此物料的[合格数量]");
}
}
public bool SaveBool(List<string> lotlist)
{
bool savebool = true;
string st = "select LotNO from ICSITEMLot where WorkPoint='" + AppConfig.WorkPointCode + "' ";
st = string.Format(st);
DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st).Tables[0];
for (int i = 0; i < lotlist.Count; i++)
{
foreach (DataRow dr in dt.Rows)
{
string a = lotlist[i].ToString();
string b = dr[0].ToString();
if (lotlist[i].ToString() == dr[0].ToString())
{
ICSBaseSimpleCode.AppshowMessageBox("序列号已存在!");
savebool = false;
}
}
}
return savebool;
}
public void Save(int n)
{
string sql = @"select ReceiptNO,ReceiptLine from ICSINVReceiptDetail where ITEMCODE='" + txtITEMCODE.Text + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
//保存
ICSITEMLot itemlot = new ICSITEMLot();
itemlot.ID = AppConfig.GetGuid();
itemlot.LotNO = gv3.GetRowCellValue(n, LotNO).ToString();
itemlot.ItemCode = txtITEMCODE.Text;
itemlot.TransNO = btnSTNO.Text;
//itemlot.TransLine = int.Parse(comNUM.Text);
itemlot.TransLine = comNUM.Text;
itemlot.VENDORITEMCODE = gv3.GetRowCellValue(n, VENDORITEMCODE).ToString();
itemlot.VenderLotNO = gv3.GetRowCellValue(n, VenderLotNO).ToString();
if (gv3.GetRowCellValue(n, PRODUCTDATE).ToString() != "")
{
itemlot.PRODUCTDATE = Convert.ToDateTime(gv3.GetRowCellValue(n, PRODUCTDATE).ToString());
}
else
{
itemlot.PRODUCTDATE = Convert.ToDateTime("1900-1-1");
}
if (gv3.GetRowCellValue(n, LOTQTY).ToString() != "")
{
itemlot.LOTQTY = int.Parse(gv3.GetRowCellValue(n, LOTQTY).ToString().Split('.')[0].ToString());
}
itemlot.ACTIVE = "Y";
itemlot.Exdate = Convert.ToDateTime("2999-12-31");
itemlot.WorkPoint = AppConfig.WorkPointCode;
itemlot.MUSER = AppConfig.UserCode;
itemlot.MUSERName = AppConfig.UserName;
itemlot.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
ICSITEMLOTBLL.AddandEdit(itemlot, AppConfig.AppConnectString);
}
#endregion
#region 过滤
private string tempTableName = "";
private void btnFilter_Click(object sender, EventArgs e)
{
FormFilter filter = new FormFilter(AppConfig.GetSourceId(this.Tag.ToString(), btnConfig.Name));
filter.OldTempTableName = tempTableName;
DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等...");
try
{
// string lotno = "LOT" + AppConfig.GetSeverDateTime("yyyy-MM-dd").ToString("yyyyMMdd");
// lotno = AppConfig.GetSerialCode(AppConfig.FrameConnectString, AppConfig.WorkPointCode, "ITEMLot", "LotNO", lotno, 4);
_wait.Show();
tempTableName = filter.NewTempTableName;
sqltxt = filter.SqlText;
sqlconn = filter.FilterConnectString;
dataSource = filter.FilterData.Tables[0];
DataTable dt = new DataTable();
//DataRow dn = dm.NewRow();
foreach (DataRow dr in dataSource.Rows)
{
string sql = "select SERIALNO from ICSITEMLotDetail where WorkPoint='"+AppConfig.WorkPointCode+"' and LotNO='"+dr["LotNO"]+"'";
sql = string.Format(sql);
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
if (data.Rows.Count != 0)
{
dt.Rows.Add(dr);
}
}
// DATASET 中必须要有主表和子表
//filter.FilterData.Tables.Add(dt);
//建立主要和子表之间的关系列
DataRelation drl = new DataRelation("物料批号", new DataColumn[] { filter.FilterData.Tables[0].Columns["LotNO"] }, new DataColumn[] { filter.FilterData.Tables[1].Columns["PRONUM"] }); //new一个表关系,绑定2个表的键
filter.FilterData.Relations.Add(drl);
grdDetail.DataSource = dataSource;
_wait.Close();
}
catch (Exception ex)
{
MessageBox.Show("异常:" + ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
_wait.Close();
}
}
#endregion
#region 删除
private void btnDel_Click(object sender, EventArgs e)
{
string lot = "";
List<int> count = new List<int>();
List<string> codeList = new List<string>();
List<string> node = new List<string>();
List<string> no = new List<string>();
for (int i = 0; i < gridView4.RowCount; i++)
{
if (gridView4.GetRowCellValue(i, colSelect).ToString() == "True")
{
node.Add(gridView4.GetRowCellValue(i, PRONUM).ToString());
no.Add(gridView4.GetRowCellValue(i, colLotNO).ToString());
}
}
if (node.Count != 0)
{
if (node.Count == 0 || node == null)
{
ICSBaseSimpleCode.AppshowMessageBox("请选择数据");
return;
}
if (ICSBaseSimpleCode.AppshowMessageBoxRepose("确定删除该条物料追溯信息吗?信息删除后无法恢复,确定吗?") != DialogResult.OK)
{
btnCancelAll_Click(sender, e);
return;
}
try
{
ICSITEMLOTBLL.Detaildelete(node, AppConfig.AppConnectString);
for (int i = 0; i < node.Count;i++ )
{
string st = "update ICSITEMLot set LOTQTY-='" + 1 + "' where WorkPoint='" + AppConfig.WorkPointCode + "' and LotNO='" + no[i].ToString() + "'";
st = string.Format(st);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st);
SysSave(node[i],1);//删除Sys_Sys_HisSerailCodes表
string sql = @"update ICSINVReceiptDetail set ACTQTY-='" + 1 + "' where ReceiptNO='" + btnSTNO.Text + "' and ReceiptLine='" + comNUM.Text + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
}
}
catch (Exception ex)
{
ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
}
}
for (int i = 0; i < gv3.RowCount; i++)
{
if (gv3.GetRowCellValue(i, coSelect).ToString() == "Y")
{
codeList.Add(gv3.GetRowCellValue(i, ID).ToString());
lot = gv3.GetRowCellValue(i, LotNO).ToString();
string sql = @"select * from ICSITEMLotDetail where LotNO='" + lot + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
count.Add(DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0].Rows.Count);
}
}
if (codeList.Count != 0)
{
if (codeList.Count == 0 || codeList == null)
{
ICSBaseSimpleCode.AppshowMessageBox("请选择数据");
return;
}
foreach (int i in count)
{
if (i > 0)
{
ICSBaseSimpleCode.AppshowMessageBox("请先删除从表中的数据再删除主表!");
return;
}
}
if (ICSBaseSimpleCode.AppshowMessageBoxRepose("确定删除该条物料追溯信息吗?信息删除后无法恢复,确定吗?") != DialogResult.OK)
{
btnCancelAll_Click(sender, e);
return;
}
try
{
ICSITEMLOTBLL.delete(codeList, AppConfig.AppConnectString);
for (int i = 0; i < gv3.RowCount; i++)
{
if (gv3.GetRowCellValue(i, coSelect).ToString() == "Y")
{
lot = gv3.GetRowCellValue(i, LotNO).ToString();
int lotqty = int.Parse(gv3.GetRowCellValue(i, LOTQTY).ToString().Split('.')[0].ToString());
SysSave(lot, 1);//删除Sys_Sys_HisSerailCodes表
string sql = @"update ICSINVReceiptDetail set ACTQTY-='" + lotqty + "' where ReceiptNO='" + btnSTNO.Text + "' and ReceiptLine='" + comNUM.Text + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
}
}
}
catch (Exception ex)
{
ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
}
}
gridView3_Load(null, null);
}
#endregion
#region 双击事件
private void gridControl1_DoubleClick(object sender, EventArgs e)
{
if (gv3.FocusedRowHandle < 0)
{
return;
}
if (gv3.FocusedColumn == coSelect)
{
string m = gv3.GetRowCellValue(gv3.FocusedRowHandle, LotNO).ToString();
if (gv3.GetRowCellValue(gv3.FocusedRowHandle, coSelect).ToString() == "")
{
gv3.SetRowCellValue(gv3.FocusedRowHandle, coSelect, "Y");
for (int i = 0; i < gridView4.RowCount; i++)
{
if (gridView4.GetRowCellValue(i, colLotNO).ToString() == gv3.GetRowCellValue(gv3.FocusedRowHandle, LotNO).ToString())
{
gridView4.SetRowCellValue(i,colSelect,true);
}
}
}
else
{
gv3.SetRowCellValue(gv3.FocusedRowHandle, coSelect, "");
for (int i = 0; i < gridView4.RowCount; i++)
{
if (gridView4.GetRowCellValue(i, colLotNO).ToString() == gv3.GetRowCellValue(gv3.FocusedRowHandle, LotNO).ToString())
{
gridView4.SetRowCellValue(i, colSelect, false);
}
}
}
}
}
#endregion
#region 获取焦点
private void radACOUNTMIN_CheckedChanged(object sender, EventArgs e)
{
if (radACOUNTMIN.Text == "True")
{
txtCOUNTMIN.Focus();
}
}
private void radBEGNUM_CheckedChanged(object sender, EventArgs e)
{
if (radBEGNUM.Text == "True")
{
txtBAGNUM.Focus();
}
}
private void radNUM_CheckedChanged(object sender, EventArgs e)
{
if (radNUM.Text == "True")
{
txtNUM.Focus();
}
}
private void radBAGNUM_CheckedChanged(object sender, EventArgs e)
{
if (radBAGNUM.Text == "True")
{
txtBAGNUM.Focus();
}
}
#endregion
#region 主子节点 显示 及 保存操作
public void NODE(string str,int count)
{
bool p;
DataTable dt = new DataTable();
dt.TableName = "Sub";
dt.Columns.Add("colSelect");
dt.Columns["colSelect"].DataType=typeof(bool);
dt.Columns.Add("PRONUM");
dt.Columns.Add("colLotNO");
dt.Columns["PRONUM"].Caption = "序列号";
dt.Columns["colSelect"].Caption = "选择";
dt.Columns["colLotNO"].Caption = "批次";
foreach (DataRow dr in Dtable().Rows)
{
string m = dr["LotNO"].ToString();
string st = "select SERIALNO,LotNO from ICSITEMLotDETAIL where WorkPoint='" + AppConfig.WorkPointCode + "' and LotNO='" + dr["LotNO"].ToString() + "' order by SERIALNO";
st = string.Format(st);
DataTable da = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st).Tables[0];
for (int i = 0; i < da.Rows.Count;i++ )
{
DataRow dn = dt.NewRow();
dn["colSelect"] = false;
dn["PRONUM"] = da.Rows[i]["SERIALNO"];
dn["colLotNO"] = da.Rows[i]["LotNO"];
dt.Rows.Add(dn);
}
}
#region 选择数量 生成序列号
if (count != 0)
{
String id = "";
List<string> editList = new List<string>();
for (int i = 0; i < gv3.RowCount; i++)
{
if (gv3.GetRowCellValue(i, coSelect).ToString() == "Y")
{
id = gv3.GetRowCellValue(i, LotNO).ToString();
editList.Add(id);
}
}
if (editList.Count != 1)
{
ICSBaseSimpleCode.AppshowMessageBox("请选择数据,且只能选择一条进行编辑!!!");
return;
}
try
{
string num = txtBEGNUM.Text;
for (int i = 0; i < count; i++)
{
string lotnum = id + num;
DataRow dn = dt.NewRow();
dn["colSelect"] = true;
dn["PRONUM"] = lotnum;
dn["colLotNO"] = id;
dt.Rows.Add(dn);
p=save(lotnum,id,txtITEMCODE.Text);//保存
num = (int.Parse(num) + 1).ToString().PadLeft(5, '0');//序列号递增
if (p == true)
{
SysSave(lotnum,0);//再次保存至Sys_Sys_HisSerailCodes表
string sql = @"update ICSINVReceiptDetail set ACTQTY+='" + 1 + "' where ReceiptNO='" + btnSTNO.Text + "' and ReceiptLine='" + comNUM.Text + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
string st = "update ICSITEMLot set LOTQTY+='" + 1 + "' where WorkPoint='" + AppConfig.WorkPointCode + "' and LotNO='" + dn["colLotNO"] + "'";
st = string.Format(st);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st);
}
gridView3_Load(null, null);
}
}
catch (Exception ex)
{
ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
}
}
#endregion
#region 不选择数量 生成序列号
if(count==0 && str!=null) //不选择数量
{
String id = "";
List<string> editList = new List<string>();
for (int i = 0; i < gv3.RowCount; i++)
{
if (gv3.GetRowCellValue(i, coSelect).ToString() == "Y")
{
id = gv3.GetRowCellValue(i, LotNO).ToString();
editList.Add(id);
}
}
if (editList.Count != 1)
{
ICSBaseSimpleCode.AppshowMessageBox("请选择数据,且只能选择一条进行编辑!!!");
return;
}
try
{
DataRow dn = dt.NewRow();
dn["colSelect"] = true;
dn["PRONUM"] = str;
dn["colLotNO"] = id;
dt.Rows.Add(dn);
p=save(str,id,txtITEMCODE.Text);
if (p == true)
{
SysSave(str,0);//再次保存至Sys_Sys_HisSerailCodes表
string st = "update ICSITEMLot set LOTQTY+='" + 1 + "' where WorkPoint='" + AppConfig.WorkPointCode + "' and LotNO='" + dn["colLotNO"] + "'";
st = string.Format(st);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st);
string sql = @"update ICSINVReceiptDetail set ACTQTY+='" + 1 + "' where ReceiptNO='" + btnSTNO.Text + "' and ReceiptLine='" + comNUM.Text + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
sql = string.Format(sql);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
}
gridView3_Load(null,null);
}
catch (Exception ex)
{
ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
}
#endregion
}
DataTable dm = new DataTable();
dm = Dtable().Copy();
// DATASET 中必须要有主表和子表
DataSet ds = new DataSet();
ds.Tables.Add(dm);
ds.Tables.Add(dt);
//gridView3.DataSource = ds;
//建立主要和子表之间的关系列
DataRelation drl = new DataRelation("物料批号",new DataColumn[]{ds.Tables[0].Columns["LotNO"] },new DataColumn[]{ ds.Tables[1].Columns["colLotNO"]} ); //new一个表关系,绑定2个表的键
ds.Relations.Add(drl);
grdDetail.DataSource = dm;
}
#endregion
#region 按 回车键 显示及保存 序列号
private void txtNUM_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
if (radNUM.Checked == true && txtNUM.Text != "")
{
NODE(txtNUM.Text, 0);
gridView3_Load(null,null);
}
}
}
private void txtCOUNT_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
if (radBEGNUM.Checked == true && txtBEGNUM.Text != "" && txtCOUNT.Text != "")
{
NODE(txtBEGNUM.Text, int.Parse(txtCOUNT.Text));
gridView3_Load(null, null);
}
}
}
private void txtBEGNUM_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
if (!rex.Match(txtBEGNUM.Text).Success || int.Parse(txtBEGNUM.Text) > 99999)
{
ICSBaseSimpleCode.AppshowMessageBox("[数量]是正整数!");
return;
}
if (radBEGNUM.Checked == true && txtBEGNUM.Text != "" && txtCOUNT.Text != "")
{
NODE(txtBEGNUM.Text, int.Parse(txtCOUNT.Text));
gridView3_Load(null, null);
}
}
}
#endregion
#region 保存 子节点 数据
public bool save(string sertalno,string LotNO,string mcode)
{
if (radNUM.Checked == true)
{
if (txtNUM.Text == "")
{
ICSBaseSimpleCode.AppshowMessageBox("不可为空!");
return false;
}
if (!rex.Match(txtNUM.Text).Success || int.Parse(txtNUM.Text) > 99999)
{
ICSBaseSimpleCode.AppshowMessageBox("[序列号]是小于六位的正整数!");
return false;
}
}
if (radBEGNUM.Checked == true)
{
if (txtBEGNUM.Text == "" && txtCOUNT.Text == "")
{
ICSBaseSimpleCode.AppshowMessageBox("不可为空!");
return false;
}
if (!rex.Match(txtBEGNUM.Text).Success || int.Parse(txtCOUNT.Text) > 99999)
{
ICSBaseSimpleCode.AppshowMessageBox("[起始序列号]是小于六位正整数!");
return false;
}
if (!rex.Match(txtCOUNT.Text).Success)
{
ICSBaseSimpleCode.AppshowMessageBox("[数量]只能输入正整数!");
return false;
}
}
string st = "select SERIALNO from ICSITEMLotDETAIL where WorkPoint='" + AppConfig.WorkPointCode + "' ";
st = string.Format(st);
DataTable dt= DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st).Tables[0];
foreach(DataRow dr in dt.Rows)
{
if (sertalno == dr[0].ToString())
{
ICSBaseSimpleCode.AppshowMessageBox("序列号已存在!");
return false;
}
}
ICSITEMLotDetail itemlotd = new ICSITEMLotDetail();
itemlotd.ID = AppConfig.GetGuid();
itemlotd.SERIALNO = sertalno;
itemlotd.LotNO = LotNO;
itemlotd.ItemCode = mcode;
itemlotd.StorageCODE = "";
itemlotd.StackCODE = "";
itemlotd.SerialStatus = "不在库";
itemlotd.WorkPoint = AppConfig.WorkPointCode;
itemlotd.MUSER = AppConfig.UserCode;
itemlotd.MUSERName = AppConfig.UserName;
itemlotd.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
ICSITEMLOTBLL.DetailAddandEdit(itemlotd,AppConfig.AppConnectString);
return true;
}
#endregion
#region 页面编辑
private void gridView3_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
if(e.Column.FieldName=="LotNO"||e.Column.FieldName=="ItemCode"||e.Column.FieldName=="MUSERName"||e.Column.FieldName=="MTIME"||e.Column.FieldName=="PRODUCTDATE"
||e.Column.FieldName=="INVDESC"|| e.Column.FieldName == "LOTQTY")
{
ICSBaseSimpleCode.AppshowMessageBox("此列不可编辑!");
gridView3_Load(null, null);
}
}
private void gridView3_ShowingEditor(object sender, CancelEventArgs e)
{
if (gv3.FocusedColumn.FieldName == "coSelect")
{
e.Cancel = true;
}
}
#endregion
private void gridView3_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)
{
gridView4 = gv3.GetDetailView(e.RowHandle, e.RelationIndex) as DevExpress.XtraGrid.Views.Grid.GridView;
if (gridView4 != null)
{
gridView4.Columns["colLotNO"].Visible = false;    //gridView4就是子View,设置LotNO 列为隐藏
gridView4.BestFitColumns();
}
}
#region 保存数据至Sys_HisSerailCodes表
public void SysSave(string lotno,int n)
{
if (n == 0)
{
string st = "insert into Sys_HisSerailCodes values('" + AppConfig.GetGuid() + "','" + AppConfig.WorkPointCode + "','ICSITEMLotDETAIL','LotNO','" + lotno + "') ";
st = string.Format(st);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st);
}
if (n == 1)
{
string st = "delete Sys_HisSerailCodes where FiledName='LotNO' and MValue='"+lotno+"' and WorkPointCode= '" + AppConfig.WorkPointCode + "' ";
st = string.Format(st);
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, st);
}
}
#endregion
}
}