using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Stone.Common; using Stone.Entity; using Stone.WinModule.JISData; using Stone.WinBiz.JISAdmin; using Stone.WinBiz.JISData; using Gm_WMS.DataAccess.DataService; using Stone.WinBiz.Standard; namespace Stone.WinModule.Standard { public partial class frmJISVDAASN : Stone.WinModule.BasicData.frmBaseMain { public string asn_file = Application.StartupPath + "\\Report\\ASN.grf"; public frmJISVDAASN() { InitializeComponent(); this.tlbSelect.Visible = false; this.tlbAdd.Visible = false; this.tlbAddCopy.Visible = false; this.tlbEdit.Visible = false; //this.tlbDelete.Visible = false; this.tlbInput.Visible = false; this.tlbFilter.Visible = false; this.tlbExit.Visible = false; base.dgrdView.MultiSelect = true; this.toolStrip1.Padding = new Padding(0, 0, 460, 0); } public override void init() { Search(""); base.init(); } public override void Search(string code) { string d1 = MyDateTime.Format(this.dateTimePicker1.Value, MyDateTimeType.Date) + " 00:00:00"; string d2 = MyDateTime.Format(this.dateTimePicker2.Value, MyDateTimeType.Date) + " 23:59:59"; if (code == "") { strWhere = "1=1"; } else { strWhere = " [partNumber] like '%" + code + "%' or "; strWhere += " [AsnNumber] like '%" + code + "%' or "; strWhere += " [PackageNo] like '%" + code + "%'"; } if (this.chkUpload.Checked) { strWhere += " and [IsUpload]=0"; } else { strWhere = "[LabelDate]>='" + d1 + "' and [LabelDate]<='" + d2 + "'"; } strWhere += " and (" + strWhere + ")"; } private void frmJISLog_Load(object sender, EventArgs e) { ToolStripButton btnCancel = new ToolStripButton("撤销ASN"); btnCancel.Image = this.imageList1.Images[2]; btnCancel.TextImageRelation = TextImageRelation.ImageAboveText; btnCancel.Click += BtnCancel_Click; this.toolStrip1.Items.Insert(4, btnCancel); ToolStripButton btnUploadRe = new ToolStripButton("补传ASN"); btnUploadRe.Image = this.imageList1.Images[4]; btnUploadRe.TextImageRelation = TextImageRelation.ImageAboveText; btnUploadRe.Click += BtnUploadRe_Click; this.toolStrip1.Items.Insert(0, btnUploadRe); ToolStripButton btnUpload = new ToolStripButton("上传ASN"); btnUpload.Image = this.imageList1.Images[3]; btnUpload.TextImageRelation = TextImageRelation.ImageAboveText; btnUpload.Click += BtnUpload_Click; this.toolStrip1.Items.Insert(0, btnUpload); // ToolStripButton btnPrintRe = new ToolStripButton("补打ASN"); // btnPrintRe.Image = this.imageList1.Images[0]; // btnPrintRe.TextImageRelation = TextImageRelation.ImageAboveText; // btnPrintRe.Click += new EventHandler(btnPrintRe_Click); // this.toolStrip1.Items.Insert(0, btnPrintRe); // // ToolStripButton btnPrint = new ToolStripButton("打印ASN"); // btnPrint.Image = this.imageList1.Images[0]; // btnPrint.TextImageRelation = TextImageRelation.ImageAboveText; // btnPrint.Click += new EventHandler(btnPrint_Click); // this.toolStrip1.Items.Insert(0, btnPrint); // ToolStripButton btnPrintVDARight = new ToolStripButton("补打02标签"); // btnPrintVDARight.Image = this.imageList1.Images[0]; // btnPrintVDARight.TextImageRelation = TextImageRelation.ImageAboveText; // btnPrintVDARight.Click += new EventHandler(btnPrintVDARight_Click); // this.toolStrip1.Items.Insert(0, btnPrintVDARight); // // ToolStripButton btnPrintVDA = new ToolStripButton("补打01标签"); // btnPrintVDA.Image = this.imageList1.Images[0]; // btnPrintVDA.TextImageRelation = TextImageRelation.ImageAboveText; // btnPrintVDA.Click += new EventHandler(btnPrintVDA_Click); // this.toolStrip1.Items.Insert(0, btnPrintVDA); // ToolStripButton btnPrintLabel = new ToolStripButton("打印VDA标签"); // btnPrintLabel.Image = this.imageList1.Images[0]; // btnPrintLabel.TextImageRelation = TextImageRelation.ImageAboveText; // btnPrintLabel.Click += btnPrintLabel_Click; // this.toolStrip1.Items.Insert(0, btnPrintLabel); ToolStripButton btnCreateASN = new ToolStripButton("ASN单号创建"); btnCreateASN.Image = this.imageList1.Images[3]; btnCreateASN.TextImageRelation = TextImageRelation.ImageAboveText; btnCreateASN.Click += btnCreateASN_Click; this.toolStrip1.Items.Insert(0, btnCreateASN); ToolStripButton btnPREDN = new ToolStripButton("ASN发运"); btnPREDN.Image = this.imageList1.Images[1]; btnPREDN.TextImageRelation = TextImageRelation.ImageAboveText; btnPREDN.Click += btnPREDN_Click; this.toolStrip1.Items.Insert(0, btnPREDN); ToolStripButton btnImportDP = new ToolStripButton("拉动导入"); btnImportDP.Image = this.imageList1.Images[1]; btnImportDP.TextImageRelation = TextImageRelation.ImageAboveText; btnImportDP.Click += btnImportDP_Click; this.toolStrip1.Items.Insert(0, btnImportDP); } private void BtnUploadRe_Click(object sender, EventArgs e) { string LogID = "0"; try { if (this.dgrdView.SelectedRows.Count == 0) throw new Exception("请选择要补传的ASN"); string AsnNumber = this.dgrdView.SelectedRows[0].Cells["AsnNumber"].Value.ToString(); if (!ShowQuestionPop($"是否要补传 {AsnNumber} ?")) { return; } LogID = F_JIS_Log.WriteLogsStart($"补传ASN {AsnNumber}"); Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(); Entity_v_JIS_VDA v_JIS_VDA = new Entity_v_JIS_VDA(); DataSet dsData = v_JIS_VDA.GetData($"[AsnNumber]='{AsnNumber}'"); if (dsData.Tables[0].Rows.Count == 0) throw new Exception($"{AsnNumber} 不存在"); if (dsData.Tables[0].Select("[IsUpload]<>True").Length > 0) throw new Exception(AsnNumber + " 未上传,不能补传"); string filename = F_JIS5000_Print.WriteASN_VDA(new LocalDBService(), dsData, AsnNumber); F_JIS_Log.WriteLogsEnd(LogID, true, filename); MyMessageBox.ShowInfoMessage($"{AsnNumber} 补传成功"); } catch (Exception ex) { F_JIS_Log.WriteLogsEnd(LogID, false, ex.Message); } finally { } } private void BtnUpload_Click(object sender, EventArgs e) { Gm_WMS.DataAccess.DataService.LocalDBService db = null; string LogID = "0"; try { if (this.dgrdView.SelectedRows.Count == 0) throw new Exception("请选择要上传的ASN"); string AsnNumber = this.dgrdView.SelectedRows[0].Cells["AsnNumber"].Value.ToString(); if (!MyMessageBox.ShowQuestion($"是否要上传 {AsnNumber} ?")) return; if (!CheckASN(AsnNumber)) return; LogID = F_JIS_Log.WriteLogsStart($"上传ASN {AsnNumber}"); db = new Gm_WMS.DataAccess.DataService.LocalDBService(); db.BeginTrans(); Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(db); Entity_v_JIS_VDA v_JIS_VDA = new Entity_v_JIS_VDA(db); DataSet dsData = v_JIS_VDA.GetData($"[AsnNumber]='{AsnNumber}'"); if (dsData.Tables[0].Rows.Count == 0) throw new Exception($"{AsnNumber} 不存在"); if (dsData.Tables[0].Select("[IsUpload]=True").Length > 0) throw new Exception(AsnNumber + " 已经上传"); if (dsData.Tables[0].Select("[IsPrintASN]=False").Length > 0) throw new Exception(AsnNumber + " 未打印"); if (dsData.Tables[0].Select("[IsPackingVerification]=False").Length > 0) throw new Exception(AsnNumber + " 未完成装箱校验"); if (dsData.Tables[0].Select("[IsShipingVerification]=False").Length > 0) throw new Exception(AsnNumber + " 未完成装车校验"); DateTime UploadTime = t_JIS_VDA.GetDateTime(); for (int i = 0; i < dsData.Tables[0].Rows.Count; i++) { dsData.Tables[0].Rows[i]["UploadTime"] = UploadTime; } t_JIS_VDA.Edit( $"[UploadTime]='{UploadTime.ToString("yyyy-MM-dd HH:mm:ss")}', [IsUpload]=1", $"[AsnNumber]='{AsnNumber}'"); string filename = F_JIS5000_Print.WriteASN_VDA(db, dsData, AsnNumber); #region 计算累计发货数量 var strsql = ""; var dtPartOutQty = new DataTable(); strsql = "select * from t_PartOutQty"; dtPartOutQty = db.Exec_DataSet(strsql).Tables[0]; foreach (DataRow drData in dsData.Tables[0].Rows) { var code = drData["PartNumber"].ToString(); var outQty = decimal.Parse(drData["Qty"].ToString()); var asnNum = drData["AsnNumber"].ToString(); strsql = CreatePartOutSql(db,code, outQty, dtPartOutQty, asnNum,out dtPartOutQty); if (!string.IsNullOrEmpty(strsql)) { db.Exec_NonQuery(strsql); } } #endregion db.Commit(); try { UpdateGridView(); } catch { } F_JIS_Log.WriteLogsEnd(LogID, true, filename); MyMessageBox.ShowInfoMessage($"{AsnNumber} 上传成功"); } catch (Exception ex) { F_JIS_Log.WriteLogsEnd(LogID, false, ex.Message); if (db != null) db.Rollback(); MyMessageBox.ShowErrorMessage(ex.Message); } finally { if (db != null) db.EndTrans(); } } private bool CheckASN(string AsnNumber) { bool ret = true; Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(); DataTable dtASN = t_JIS_VDA.GetData( $"PartNumber, Date, Sum(Qty) as Qty", $"AsnNumber='{AsnNumber}' group by PartNumber, Date", $"PartNumber asc").Tables[0]; string msg = ""; Entity_t_JIS_Lab t_JIS_Lab = new Entity_t_JIS_Lab(); foreach (DataRow drASN in dtASN.Rows) { string PartNumber = drASN["PartNumber"].ToString(); string Date = Convert.ToDateTime(drASN["Date"]).ToString("yyyy-MM-dd"); int Qty = Convert.ToInt32(drASN["Qty"]); DataTable dtLab = t_JIS_Lab.GetData( $"[fileType]='{((F_JIS_VDA_ASN)m_Base).fileType}' " + "" + $" and [PartNumber]='{PartNumber}' and [StartDate]='{Date}'").Tables[0]; if (dtLab.Rows.Count == 0) { msg += $"{PartNumber} {Date} 在LAB中不存在\r\n"; } else if (Convert.ToInt32(dtLab.Rows[0]["quantity"]) != Qty) { msg += $"{PartNumber} {Date} 发货数量 {Qty} 和LAB需求数量 {dtLab.Rows[0]["quantity"]} 不一样\r\n"; } } string LogID = F_JIS_Log.WriteLogsStart($"检查ASN {AsnNumber}"); if (msg != "") { string show_str = "检测ASN发货数据时发现以下问题,是否要继续上传ASN?\r\n" + msg; if (!ShowQuestionPop(show_str)) { ret = false; F_JIS_Log.WriteLogsEnd(LogID, false, "您选择了取消上传【" + msg + "】"); } else { F_JIS_Log.WriteLogsEnd(LogID, false, "您选择了继续上传【" + msg + "】"); } } else { F_JIS_Log.WriteLogsEnd(LogID, true, ""); } return ret; } public bool ShowQuestionPop(string MessageInfo) { bool result = false; frmMessageQuestion frm = new frmMessageQuestion(); if (frm.ShowQuestion(MessageInfo) == DialogResult.OK) { result = true; } return result; } private void BtnCancel_Click(object sender, EventArgs e) { string LogID = "0"; try { if (this.dgrdView.SelectedRows.Count == 0) throw new Exception("请选择一行记录"); string AsnNumber = this.dgrdView.SelectedRows[0].Cells["AsnNumber"].Value.ToString(); Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(); DataTable dtData = t_JIS_VDA.GetData($"[AsnNumber]='{AsnNumber}'").Tables[0]; if (dtData.Rows.Count == 0) throw new Exception($"{AsnNumber} 在系统中不存在"); if (!Convert.ToBoolean(dtData.Rows[0]["IsUpload"])) throw new Exception($"{AsnNumber} 未上传不能撤销"); string location = dtData.Rows[0]["location"].ToString(); string fileType = dtData.Rows[0]["fileType"].ToString(); DataTable dtLast = t_JIS_VDA.GetData( $"top 1 *", $"[fileType]='{fileType}' and [location]='{location}'", $"[AsnNumber] desc").Tables[0]; if (dtLast.Rows.Count > 0) { if (dtLast.Rows[0]["AsnNumber"].ToString() != AsnNumber) throw new Exception($"只能撤销最后一个ASN {dtLast.Rows[0]["AsnNumber"]}"); } if (MyMessageBox.ShowQuestion($"是否要撤销 {AsnNumber} ?")) { LogID = F_JIS_Log.WriteLogsStart($"撤销ASN {AsnNumber}"); CancelASN(AsnNumber); //计算累计发货数量 var strSql = "UPDATE t_PartOutQty " + " set PartOutQty -= LastOutQty," + " LastOutQty = 0," + " LastOutTime = null," + " AsnNum = ''" + " where AsnNum = '" + AsnNumber + "'"; var db = new LocalDBService(); db.Exec_NonQuery(strSql); F_JIS_Log.WriteLogsEnd(LogID, true, ""); MyMessageBox.ShowInfoMessage($"{AsnNumber} 撤销成功"); } } catch (Exception ex) { F_JIS_Log.WriteLogsEnd(LogID, false, ex.Message); MyMessageBox.ShowErrorMessage(ex.Message); } } private void CancelASN(string AsnNumber) { LocalDBService db = null; try { db = new LocalDBService(); db.BeginTrans(); Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(db); t_JIS_VDA.Edit($"[IsUpload]=0, [UploadTime]=null,[PrintASNTime] = null,IsShipingVerification = 0,IsPrintASN = 0", $"[AsnNumber]='{AsnNumber}'"); db.Commit(); } catch (Exception ex) { if (db != null) db.Rollback(); throw ex; } finally { if (db != null) db.EndTrans(); } } private void btnPREDN_Click(object sender, EventArgs e) { try { var frmAsnScan = new frmASNScan(); frmAsnScan.ShowDialog(); frmAsnScan.Dispose(); if(frmAsnScan.DialogResult != DialogResult.OK) return; Search(""); btnSerach_Click(sender,null); } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } } private void btnCreateASN_Click(object sender, EventArgs e) { try { if (this.dgrdView.SelectedRows.Count == 0) throw new Exception("请选择要打印标签的ASN"); string AsnNumber = this.dgrdView.SelectedRows[0].Cells["AsnNumber"].Value.ToString(); if (!string.IsNullOrEmpty(AsnNumber)) { if (!MyMessageBox.ShowQuestion($"【{AsnNumber}】已创建,是否要重新生成?")) return; } string partCode = this.dgrdView.SelectedRows[0].Cells["PartNumber"].Value.ToString(); Search(""); btnSerach_Click(sender, null); } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } } private void btnPrintLabel_Click(object sender, EventArgs e) { Gm_WMS.DataAccess.DataService.LocalDBService db = null; string LogID = "0"; try { if (this.dgrdView.SelectedRows.Count == 0) throw new Exception("请选择要打印标签的ASN"); string AsnNumber = this.dgrdView.SelectedRows[0].Cells["AsnNumber"].Value.ToString(); if (!MyMessageBox.ShowQuestion($"是否要打印【{AsnNumber}】的所有未打印的标签?")) return; db = new Gm_WMS.DataAccess.DataService.LocalDBService(); db.BeginTrans(); Entity_v_JIS_VDA t_JIS_VDA = new Entity_v_JIS_VDA(db); Entity_v_JIS_VDA v_JIS_VDA = new Entity_v_JIS_VDA(db); DataTable dtData = v_JIS_VDA.GetData( "", $"[AsnNumber]='{AsnNumber}' and [IsPrintLabel]=0", "[PackageNo] asc").Tables[0]; if (dtData.Rows.Count == 0) throw new Exception("没有可打印的数据,如果需要请使用补打功能!"); LogID = F_JIS_Log.WriteLogsStart($"打印 {dtData.Rows.Count} 个VDA标签 {AsnNumber} "); int ret = PrintLabel(dtData, new List { "01", "02" }); t_JIS_VDA.Edit($"[IsPrintLabel]=1", $"[AsnNumber]='{AsnNumber}'"); db.Commit(); F_JIS_Log.WriteLogsEnd(LogID, true, ""); MyMessageBox.ShowInfoMessage($"{ret}个VDA标签打印完成!"); } catch (Exception ex) { if (db != null) db.Rollback(); F_JIS_Log.WriteLogsEnd(LogID, false, ex.Message); MyMessageBox.ShowErrorMessage(ex.Message); } } private void btnPrint_Click(object sender, EventArgs e) { Gm_WMS.DataAccess.DataService.LocalDBService db = null; try { if (this.dgrdView.SelectedRows.Count == 0) throw new Exception("请选择要打印的记录"); string AsnNumber = this.dgrdView.SelectedRows[0].Cells["AsnNumber"].Value.ToString(); if (!MyMessageBox.ShowQuestion($"是否要打印 {AsnNumber} ?")) return; db = new Gm_WMS.DataAccess.DataService.LocalDBService(); db.BeginTrans(); Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(db); Entity_v_JIS_VDA v_JIS_VDA = new Entity_v_JIS_VDA(db); DataSet dsData = v_JIS_VDA.GetData($"[AsnNumber]='{AsnNumber}'"); if (dsData.Tables[0].Rows.Count == 0) throw new Exception($"{AsnNumber} 不存在"); if (dsData.Tables[0].Select("[IsPackingVerification]=False").Length > 0) throw new Exception(AsnNumber + " 所属VDA未完成装箱校验"); if (dsData.Tables[0].Select("[IsPrintASN]=True").Length == dsData.Tables[0].Rows.Count) throw new Exception(AsnNumber + " 已经打印过了"); // if (dsData.Tables[0].Select("[IsShipingVerification]=False").Length > 0) // { // throw new Exception(AsnNumber + " 有数据做发货校验"); // } DateTime PrintASNTime = t_JIS_VDA.GetDateTime(); for (int i = 0; i < dsData.Tables[0].Rows.Count; i++) { dsData.Tables[0].Rows[i]["PrintASNTime"] = PrintASNTime; } t_JIS_VDA.Edit( $"[PrintASNTime]='{PrintASNTime.ToString("yyyy-MM-dd HH:mm:ss")}', [IsPrintASN]=1", $"[AsnNumber]='{AsnNumber}'"); //F_JIS5000_Print.WriteASN_VDA(db, dsData, AsnNumber); PrintASN(dsData); db.Commit(); try { UpdateGridView(); } catch { } } catch (Exception ex) { if (db != null) db.Rollback(); MyMessageBox.ShowErrorMessage(ex.Message); } finally { if (db != null) db.EndTrans(); } } private void PrintASN(DataSet dsData) { Entity_t_Location t_Location = new Entity_t_Location(); DataTable dtHead = new DataTable(); dtHead.Columns.Add("ASNNo"); dtHead.Columns.Add("ASNNo_New"); dtHead.Columns.Add("DNNumber"); dtHead.Columns.Add("Date"); dtHead.Columns.Add("Time"); dtHead.Columns.Add("DispatchDate"); dtHead.Columns.Add("DispatchTime"); dtHead.Columns.Add("PlantCode"); dtHead.Columns.Add("Address1"); dtHead.Columns.Add("Address2"); dtHead.Columns.Add("Address3"); dtHead.Columns.Add("SwetDate"); dtHead.Columns.Add("SwetTime"); DataRow drHead = dtHead.NewRow(); drHead["ASNNo"] = dsData.Tables[0].Rows[0]["AsnNumber"].ToString(); drHead["ASNNo_New"] = dsData.Tables[0].Rows[0]["AsnNumber"].ToString().Replace("ADT", ""); drHead["DNNumber"] = dsData.Tables[0].Rows[0]["AsnNumber"].ToString().Replace("ADT", ""); drHead["Date"] = Convert.ToDateTime(dsData.Tables[0].Rows[0]["LabelDate"]).ToString("dd.MM.yyyy"); drHead["Time"] = Convert.ToDateTime(dsData.Tables[0].Rows[0]["LabelDate"]).ToString("HH:mm:ss"); drHead["DispatchDate"] = Convert.ToDateTime(dsData.Tables[0].Rows[0]["PrintASNTime"]).ToString("dd.MM.yyyy"); drHead["DispatchTime"] = Convert.ToDateTime(dsData.Tables[0].Rows[0]["PrintASNTime"]).ToString("HH:mm:ss"); drHead["PlantCode"] = dsData.Tables[0].Rows[0]["fileType"].ToString(); DataTable dtLocation = t_Location.GetData("[Code]='" + dsData.Tables[0].Rows[0]["Location"].ToString() + "'").Tables[0]; if (dtLocation.Rows.Count > 0) { drHead["Address1"] = dtLocation.Rows[0]["Address1"].ToString(); drHead["Address2"] = dtLocation.Rows[0]["Address2"].ToString(); drHead["Address3"] = dtLocation.Rows[0]["Address3"].ToString(); } drHead["SwetDate"] = Convert.ToDateTime(dsData.Tables[0].Rows[0]["Date"]).ToString("dd.MM.yyyy"); dtHead.Rows.Add(drHead); MyReport6 report = new MyReport6(asn_file, dtHead, dsData.Tables[0]); report.Report.Printer.PrinterName = MyAppconfig.ReadValue("默认打印机"); report.Report.Print(false); } private void btnPrintRe_Click(object sender, EventArgs e) { try { if (this.dgrdView.SelectedRows.Count == 0) throw new Exception("请选择要补打的记录"); string ID = this.dgrdView.SelectedRows[0].Cells["ID"].Value.ToString(); Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(); Entity_v_JIS_VDA v_JIS_VDA = new Entity_v_JIS_VDA(); DataSet dsData = v_JIS_VDA.GetData("[ID]=" + ID); if (dsData.Tables[0].Rows.Count == 0) throw new Exception("补打的ASN不存在"); if (!Convert.ToBoolean(dsData.Tables[0].Rows[0]["IsPrintASN"])) throw new Exception("选择的记录未打印,不能补打"); string AsnNumber = dsData.Tables[0].Rows[0]["AsnNumber"].ToString(); if (!MyMessageBox.ShowQuestion("是否要补打 " + AsnNumber + " ?")) return; dsData = v_JIS_VDA.GetData("[AsnNumber]='" + AsnNumber + "'"); PrintASN(dsData); } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } finally { } } private void btnPrintVDA_Click(object sender, EventArgs e) { PrintReLabel("01"); } private void btnPrintVDARight_Click(object sender, EventArgs e) { PrintReLabel("02"); } //补打VDA标签 private void PrintReLabel(string num) { string LogID = "0"; try { int n = this.dgrdView.SelectedRows.Count; if (n == 0) throw new Exception("请选择要补打VDA标签的记录(可多选)"); if (!MyMessageBox.ShowQuestion($"是否要补打选择的【{n}】个VDA {num} 标签?")) return; string AsnNumber = this.dgrdView.SelectedRows[0].Cells["AsnNumber"].Value.ToString(); string ids = ""; for (int i = 0; i < this.dgrdView.SelectedRows.Count; i++) { ids += this.dgrdView.SelectedRows[i].Cells["ID"].Value.ToString() + ","; } if (ids.Length > 0) ids = ids.Substring(0, ids.Length - 1); LogID = F_JIS_Log.WriteLogsStart($"补打{n}个VDA {num} 标签 {AsnNumber}"); Entity_v_JIS_VDA v_JIS_VDA = new Entity_v_JIS_VDA(); DataTable dtData = v_JIS_VDA.GetData($"[ID] in ({ids})").Tables[0]; if (dtData.Rows.Count == 0) throw new Exception("补打的记录不存在"); PrintLabel(dtData, new List { num }); F_JIS_Log.WriteLogsEnd(LogID, true, ""); MyMessageBox.ShowInfoMessage("补打完成"); } catch (Exception ex) { F_JIS_Log.WriteLogsEnd(LogID, false, ex.Message); MyMessageBox.ShowErrorMessage(ex.Message); } } //打印VDA标签的(打印)函数 private int PrintLabel(DataTable dtData, List lst_num) { Entity_t_Location t_Location = new Entity_t_Location(); DataTable dtPrint = dtData.Clone(); dtPrint.Columns.Add("Address1"); //左上角三行地址 dtPrint.Columns.Add("Address2"); dtPrint.Columns.Add("Address3"); dtPrint.Columns.Add("PackageNoNew"); //新的koli号,后面加“-01”或“-02” dtPrint.Columns.Add("PackageNoNum"); //显示01或02 dtPrint.Columns.Add("AI"); //零件AI号,零件号的最后两位 int ret = 0; foreach (DataRow drData in dtData.Rows) { foreach (string num in lst_num) { DataRow drNew = dtPrint.NewRow(); foreach (DataColumn dc in dtData.Columns) { drNew[dc.ColumnName] = drData[dc.ColumnName]; } drNew["PackageNoNew"] = drData["PackageNo"].ToString() + "-" + num; drNew["PackageNoNum"] = num; drNew["AI"] = drData["PartNumber"].ToString().Substring(drData["PartNumber"].ToString().Length - 2, 2); DataTable dtLocation = t_Location.GetData("[Code]='" + drData["Location"].ToString() + "'").Tables[0]; if (dtLocation.Rows.Count > 0) { drNew["Address1"] = dtLocation.Rows[0]["Address1"].ToString(); drNew["Address2"] = dtLocation.Rows[0]["Address2"].ToString(); drNew["Address3"] = dtLocation.Rows[0]["Address3"].ToString(); } dtPrint.Rows.Add(drNew); } ret++; } string PrinterName = MyAppconfig.ReadValue("默认条码打印机"); string labelfile = Application.StartupPath + "\\Report\\VDA.grf"; MyReport6 report = new MyReport6(labelfile, new DataTable(), dtPrint); report.Report.Printer.PrinterName = PrinterName; report.Report.Print(false); return ret; } private void chkUpload_CheckedChanged(object sender, EventArgs e) { if (chkUpload.Checked) { this.dateTimePicker1.Enabled = false; this.dateTimePicker2.Enabled = false; } else { this.dateTimePicker1.Enabled = true; this.dateTimePicker2.Enabled = true; } } private static string CreatePartOutSql(LocalDBService db,string PartCode, decimal outQty, DataTable dt, string asnNum,out DataTable dtPartOutQty) { dtPartOutQty = dt; string strsql = ""; if (dtPartOutQty.Select(" Code = '" + PartCode + "'").Length > 0) { //继续校验该ASN是否维护累计发货数量信息 if (dtPartOutQty.Select(" Code = '" + PartCode + "' and AsnNum = '" + asnNum + "'").Length > 0) { strsql = "Update t_PartOutQty" + " set PartOutQty += " + outQty + "," + " LastOutQty += " + outQty + " where Code = '" + PartCode + "'" + " and AsnNum = '" + asnNum + "'"; } else { strsql = "Update t_PartOutQty" + " set PartOutQty += " + outQty + "," + " LastOutQty = " + outQty + "," + " LastOutTime = getdate()," + " AsnNum = '" + asnNum + "'" + " where Code = '" + PartCode + "'"; db.Exec_NonQuery(strsql); //DT重新赋值 strsql = "select * from t_PartOutQty"; dtPartOutQty = db.Exec_DataSet(strsql).Tables[0]; strsql = ""; } } else { //该零件未维护累计发货数量信息 strsql = "Insert into t_PartOutQty(Code,PartOutQty,LastOutQty,LastOutTime,AsnNum) values ('" + PartCode + "'," + outQty + "," + outQty + ",getdate(),'"+ asnNum + "')"; db.Exec_NonQuery(strsql); //DT重新赋值 strsql = "select * from t_PartOutQty"; dtPartOutQty = db.Exec_DataSet(strsql).Tables[0]; strsql = ""; } return strsql; } private void btnImportDP_Click(object sender, EventArgs e) { try { if (this.openFileDialog1.ShowDialog() == DialogResult.OK) { Input(this.openFileDialog1.FileName); UpdateGridView(); MyMessageBox.ShowInfoMessage("数据导入成功!"); } } catch (Exception ex) { MyMessageBox.ShowInfoMessage(ex.Message); } } private void Input(string filename) { DataSet dsInput = null; MyExcelDatabase.OpenDatabase(filename, true); var sheetName = GetSheetName(filename); dsInput = MyOleDbDatabase.ExecuteDataSet("select * from ["+sheetName+"]"); MyOleDbDatabase.CloseDatabase(); LocalDBService db = null; try { db = new LocalDBService(); db.BeginTrans(); InputData(dsInput, db); db.Commit(); } catch (Exception ex) { if (db != null) db.Rollback(); throw new Exception("导入数据失败!\r\n" + "原因为:\r\n" + ex.Message); } finally { if (db != null) db.EndTrans(); } Stone.WinBiz.BasicData.F_Log.WriteLog("导入Excel[" + filename + "]"); } private string GetSheetName(string filename) { string HDR = "HDR=YES;"; ; var m_oleconn = new OleDbConnection(); if (filename.ToLower().Substring(filename.Length - 3) == "xls") //excel 2003格式 { m_oleconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties='Excel 8.0;" + HDR + "'"); } else //excel 2007 格式 { m_oleconn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties='Excel 12.0 Xml;" + HDR + "'"); } m_oleconn.Open(); var m_olecmd = m_oleconn.CreateCommand(); DataTable dtSheetName = m_oleconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } // 选择第一个sheet进行操作 string sheetName = strTableNames[0]; return sheetName; } public void InputData(DataSet dsData, LocalDBService db) { Entity_t_JIS_VDA t_Input = new Entity_t_JIS_VDA(db); DataRow drInput = null; //第四行开始读日期,第五行是到货时间,第六行车型不要,第七行读零件和数量 int readDPDateRow = 4; //第7行是ASN int readASNRowIndex = 7; //导入的列数 var coloumnCount = dsData.Tables[0].Columns.Count; //零件号所在的行 从0开始 var partRowIndex = 6; //零件号所在的列数 从0 开始 var partIndex = 2; //校验零件号是否有订单信息 var dtPartPo = new DataTable(); var strCheckPO = CheckPartPO(dsData.Tables[0], partRowIndex, partIndex,out dtPartPo); if (strCheckPO != "OK") { throw new Exception("导入数据失败!\r\n" + "原因为:\r\n" + strCheckPO); } //删掉已导入的ASN DelDPDateHis(dsData.Tables[0]); //获取零件订单基础数据 var lstPartType = new List(); for (int i = 0; i < dsData.Tables[0].Rows.Count; i++) { if (i == readDPDateRow-1) { var drDate = dsData.Tables[0].Rows[i]; for (int n = 0; n < coloumnCount; n++) { //第六列开始是时间 if (n >= 5) { var date = drDate[n].ToString(); if (string.IsNullOrEmpty(date)) { continue; } date = GetDateTimeStyle4(date, MyDateTimeType.Date); //校验是否是日期,如果是日期,循环读入天的需求 if (DateTime.TryParse(date, out DateTime dt)) { var asnNum = dsData.Tables[0].Rows[readASNRowIndex-1][n].ToString(); //todo 校验ASN的规则 规则待定 var DPTime = dsData.Tables[0].Rows[i + 1][n].ToString(); //得到了发货日期 和 发货时间 //开始循坏要货明细 for (int nPart = i + 4; nPart < dsData.Tables[0].Rows.Count-1; nPart++) { //如果有数量 则填加 var dr = dsData.Tables[0].Rows[nPart]; var qty = dr[n].ToString(); if (int.TryParse(qty, out int planQty)) { if (planQty > 0) { drInput = t_Input.Table.NewRow(); drInput["fileType"] = "SY88"; drInput["LabelDate"] = dt.ToString("yyyy-MM-dd") + " " + DPTime + ":00"; drInput["Date"] = dt; drInput["AsnNumber"] = asnNum; drInput["PartNumber"] = dr[partIndex]; drInput["Qty"] = planQty; //todo 从基础数据表获取PO var partPO = dtPartPo.Select("Code = '" + dr[partIndex] + "'"); drInput["orderNumber"] = partPO[0]["PONumber"].ToString(); drInput["CheckQty"] = 0; //是否完成装箱校验 drInput["IsPackingVerification"] = 0; //是否发运 drInput["IsShipingVerification"] = 0; //是否生成ASN drInput["IsPrintASN"] = 0; //是否上传ASN drInput["IsUpload"] = 0; t_Input.Add(drInput); //添加零件类型 var partType = partPO[0]["PartType"].ToString(); if (!lstPartType.Contains(partType)) { lstPartType.Add(partType); } } } } } } } } } //对ASN进行赋值 foreach (var partType in lstPartType) { //背板是SJB00001和侧翼是SJC00002 var asnNum = GetVDA_AsnLiushui(db, partType, 5); t_Input.Edit( $"[AsnNumber]='{asnNum}'", $"[PartNumber] in (select Code from t_PartPONumber where PartType = '{partType}'"); } } private string GetVDA_AsnLiushui(LocalDBService db, string type, int len) { string value = db.Exec_Object("exec p_GetBillNo 'ASN流水号_"+type).ToString(); return type + MyStrings.PadLeftString(value, '0', len); } public static string GetDateTimeStyle4(string sDateTime, MyDateTimeType dType) { if (sDateTime.Length != 8) throw new Exception("[" + sDateTime + "]日期时间格式错误!"); string Result = ""; string year = sDateTime.Substring(0, 4); string month = sDateTime.Substring(4, 2); string day = sDateTime.Substring(6, 2); string h = "0"; string m = "0"; string s = "0"; string mi = "0"; if (month.Length == 1) month = "0" + month; if (day.Length == 1) day = "0" + day; if (h.Length == 1) h = "0" + h; if (m.Length == 1) m = "0" + m; if (s.Length == 1) s = "0" + s; if (mi.Length == 1) mi = "00" + mi; if (mi.Length == 2) mi = "0" + mi; if (dType == MyDateTimeType.DateTime) { Result = year + "-" + month + "-" + day + " " + h + ":" + m + ":" + s; } if (dType == MyDateTimeType.Date) { Result = year + "-" + month + "-" + day; } if (dType == MyDateTimeType.Time) { Result = h + ":" + m + ":" + s; } if (dType == MyDateTimeType.Batch) { Result = year.Substring(2, 2) + month + day; } if (dType == MyDateTimeType.BillNo) { Result = year + month + day + h + m + s + mi; } return Result; } private string CheckPartPO(DataTable dtImport,int startRowIndex,int columnIndex,out DataTable dtPartPo) { string strRtn = ""; Entity_t_PartPO partPO = new Entity_t_PartPO(); DataTable dtData = partPO.GetData($"1 = 1").Tables[0]; dtPartPo = dtData; if (dtData.Rows.Count == 0) { return "系统中没有定义零件号对应的订单信息!"; } for (int i = startRowIndex; i < dtImport.Rows.Count-1; i++) { var partCode = dtImport.Rows[i][columnIndex].ToString(); var row = dtData.Select("Code = '" + partCode + "'"); if (row.Length != 1) { strRtn += "零件号["+partCode + "]没有对应有效的订单号"+ Environment.NewLine; } else { if(string.IsNullOrEmpty(row[0]["PONumber"].ToString())) { strRtn += "零件号[" + partCode + "]没有对应有效的订单号" + Environment.NewLine; } } } if (string.IsNullOrEmpty(strRtn)) { strRtn = "OK"; } if (dtData.Rows.Count == 0) throw new Exception("补打的记录不存在"); return strRtn; } /// /// 删除历史导入的ASN单 根据发货的计划时间进行删除 /// private void DelDPDateHis(DataTable dtImport) { LocalDBService db = new LocalDBService(); var sql = ""; var deliverDate = ""; //日期 行位置 var dateRowIndex = 3; //时间 行位置 var timeRowIndex = 4; var dateRow = dtImport.Rows[dateRowIndex]; var timeRow = dtImport.Rows[timeRowIndex]; //ASN 列开始位置 var asnColumnStartIndex = 5; var strLabelDate = ""; for (int i = asnColumnStartIndex; i < dtImport.Columns.Count; i++) { if (!string.IsNullOrEmpty(dateRow[i].ToString())) { var date = dateRow[i].ToString(); date = GetDateTimeStyle4(date, MyDateTimeType.Date); var DPTime = timeRow[i].ToString(); var labelDate = DateTime.Parse(date).ToString("yyyy-MM-dd") + " " + DPTime + ":00"; strLabelDate += "'" + labelDate + "',"; } } if (strLabelDate.Length > 0) { strLabelDate = strLabelDate.Substring(0, strLabelDate.Length - 1); sql = $"delete from t_JIS_VDA where LabelDate in (" + strLabelDate + ")"; db.Exec_NonQuery(sql); } } /// /// 删除历史导入的ASN单 根据发货的计划时间进行删除 /// private void DelDPASNHis(DataTable dtImport) { LocalDBService db = new LocalDBService(); var sql = ""; var AsnNums = ""; //ASN 行位置 var asnRowIndex = 6; var asnRow = dtImport.Rows[asnRowIndex]; //ASN 列开始位置 var asnColumnStartIndex = 5; for (int i = asnColumnStartIndex; i < dtImport.Columns.Count; i++) { if (!string.IsNullOrEmpty(asnRow[i].ToString())) { AsnNums += "'" + asnRow[i].ToString() + "',"; } } if (AsnNums.Length > 0) { AsnNums = AsnNums.Substring(0, AsnNums.Length - 1); sql = $"delete from t_JIS_VDA where AsnNumber in (" + AsnNums + ")"; db.Exec_NonQuery(sql); } } } }