private void btnOK_Click(object sender, EventArgs e) { number = maskedTbNumber.Text.Replace(',', '.'); PelengEntities pe = new PelengEntities(); if (number.EndsWith("0")) { var specs = (from m in pe.Сборки where m.НомерСборки == number select m); if (specs.Count() == 0) { MessageBox.Show("Спецификация с таким номером не существует!", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error); this.DialogResult = DialogResult.None; } } else { var specs = (from m in pe.Детали where m.НомерДетали == number select m); if (specs.Count() == 0) { MessageBox.Show("Спецификация с таким номером не существует!", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error); this.DialogResult = DialogResult.None; } } }
private void btnSave_Click(object sender, EventArgs e) { PelengEntities pe = new PelengEntities(); var det = (from m in pe.Детали where (m.НомерДетали == this.ParentForm.Text) select m); var mat = (from m in pe.Материалы where (m.НаименованиеМатериала == tbMat.Text) select m); if (det.Count() != 0) { det.First().ВыходДеталей = (int)numericUpDown1.Value; det.First().НормаРасхода = double.Parse(mtbRate.Text); det.First().МатериалID = mat.First().МатериалID; if (maskedTextBox2.Visible) { det.First().ДлинаЗаготовки = double.Parse(maskedTextBox2.Text); det.First().ШиринаЗаготовки = double.Parse(maskedTextBox1.Text); } else { det.First().ДлинаЗаготовки = double.Parse(maskedTextBox1.Text); det.First().ШиринаЗаготовки = null; } pe.SaveChanges(); } else { if (((specificationWork)ParentForm).WayID != 0 & ((specificationWork)ParentForm).ItemName != "") { Детали d = new Детали(); d.Наименование = ((specificationWork)ParentForm).ItemName; d.НомерДетали = this.ParentForm.Text; d.МаршрутID = ((specificationWork)ParentForm).WayID; d.МатериалID = ((Материалы)tbMat.Tag).МатериалID; d.ВыходДеталей = (int)numericUpDown1.Value; d.НормаРасхода = double.Parse(mtbRate.Text); if (maskedTextBox2.Visible) { d.ДлинаЗаготовки = double.Parse(maskedTextBox2.Text); d.ШиринаЗаготовки = double.Parse(maskedTextBox1.Text); } else { d.ДлинаЗаготовки = double.Parse(maskedTextBox1.Text); d.ШиринаЗаготовки = null; } pe.AddToДетали(d); pe.SaveChanges(); } else { MessageBox.Show("Необходимо правильно заполнить все поля в разделе с основной информацией", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } }
private void typeTwo(Excel.Worksheet sheet, Dictionary <string, Dictionary <string, int> > dt) { PelengEntities pe = new PelengEntities(); int c = 1, row = 7; addExcelCell(sheet, 3, 1, "Полная входимость с цепочкой", "Times New Roman", 16, true); addExcelCell(sheet, 6, 1, "№", "Times New Roman", 14, true); addExcelCell(sheet, 6, 2, "Входимость", "Times New Roman", 14, true); addExcelCell(sheet, 6, 5, "Номер изделия", "Times New Roman", 14, true); addExcelCell(sheet, 6, 3, "Кол-во", "Times New Roman", 14, true); addExcelCell(sheet, 6, 4, "Общее кол-во", "Times New Roman", 14, true); (sheet.get_Range("A6", "E6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "E6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "E6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "E6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "E6") as Excel.Range).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlDouble; foreach (string s in dt.Keys) { var assembly = (from m in pe.Сборки where m.НомерСборки == s select m); int firstRow = row; int fullN = 0; foreach (string way in dt[s].Keys) { addExcelCell(sheet, row, 1, c++.ToString(), "Times New Roman", 14, true); addExcelCell(sheet, row, 2, way, "Times New Roman", 14, true); addExcelCell(sheet, row, 3, dt[s][way].ToString(), "Times New Roman", 14, true); fullN += dt[s][way]; for (int i = 1; i <= 5; i++) { (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlDouble; } Excel.Range cellOne, cellTwo; cellOne = sheet.Cells[firstRow, 5]; cellTwo = sheet.Cells[row, 5]; sheet.get_Range(cellOne, cellTwo).Merge(); (sheet.Cells[row, 5] as Excel.Range).VerticalAlignment = Excel.XlHAlign.xlHAlignCenter; (sheet.Cells[row, 5] as Excel.Range).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; cellOne = sheet.Cells[firstRow, 4]; cellTwo = sheet.Cells[row, 4]; sheet.get_Range(cellOne, cellTwo).Merge(); (sheet.Cells[row, 4] as Excel.Range).VerticalAlignment = Excel.XlHAlign.xlHAlignCenter; (sheet.Cells[row, 4] as Excel.Range).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; addExcelCell(sheet, row, 5, s, "Times New Roman", 14, true); row++; } addExcelCell(sheet, firstRow, 4, fullN.ToString(), "Times New Roman", 14, true); sheet.Columns.AutoFit(); ((Excel.Range)sheet.Columns["A"]).ColumnWidth = 5; } }
private void btnChoose_Click(object sender, EventArgs e) { material.НаименованиеМатериала = dataGridView1.CurrentRow.Cells[0].Value.ToString(); PelengEntities pe = new PelengEntities(); var mats = (from m in pe.Материалы where m.НаименованиеМатериала == material.НаименованиеМатериала select m); material = mats.Single(); }
private void btnOK_Click(object sender, EventArgs e) { string addNumber = maskedTbNumber.Text.Replace(',', '.'); add.Количество = (int)numericUpDown1.Value; PelengEntities pe = new PelengEntities(); var assemblies = (from m in pe.Сборки where m.НомерСборки == addNumber select m); List <string> inAssemblies = new List <string>(); listAssembly(add.НомерСборки, inAssemblies); if (assemblies.Count() != 0) { if (addNumber == add.НомерСборки) { string message = "Сборка " + addNumber + " не может входить сама в себя!"; MessageBox.Show(message, "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error); this.DialogResult = DialogResult.None; } else if (!inAssemblies.Contains(addNumber)) { add.НомерВхСборки = addNumber; } else { string message = "Сборка " + addNumber + " не может входить в сборку " + add.НомерСборки + " !"; MessageBox.Show(message, "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error); this.DialogResult = DialogResult.None; } } else { if (MessageBox.Show("Спецификация с таким номером не существует.\nСоздать данную спецификацию?", "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { specificationWork specWork = new specificationWork(addNumber); if (specWork.ShowDialog(this.ParentForm) == DialogResult.OK) { add.НомерВхСборки = addNumber; this.DialogResult = DialogResult.OK; } else { this.DialogResult = DialogResult.Cancel; } } else { this.DialogResult = DialogResult.None; } } }
private void tsBtnAdd_Click(object sender, EventArgs e) { PelengEntities pe = new PelengEntities(); var currentAssembly = (from m in pe.Сборки where m.НомерСборки == number select m); if (currentAssembly.Count() == 0) { if (MessageBox.Show("Текущая спецификация не внесена в базу.\nСохранить данную спецификацию?", "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.No) { return; } else { if (btnSave.Enabled) { btnSave_Click(sender, e); } else { MessageBox.Show("Необходимо правильно заполнить все поля", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); tabSpecification.SelectedTab = tabMain; return; } } } addAssembly add = new addAssembly(number); if (add.ShowDialog(this) == DialogResult.OK) { bool exist = false; foreach (DataGridViewRow dr in dataGridView1.Rows) { if (dr.Cells[0].Value.ToString() == add.AddAssembly.НомерВхСборки) { exist = true; break; } } if (!exist) { pelengDataSet.ВходящиеСборки.Rows.Add(add.AddAssembly.НомерВхСборки, add.AddAssembly.Количество, number); } } }
private void tsBtnEdit_Click(object sender, EventArgs e) { if (dataGridView1.SelectedCells.Count != 0) { int index = dataGridView1.SelectedCells[0].RowIndex; string current = dataGridView1.Rows[index].Cells[0].Value.ToString(); int k = (int)dataGridView1.Rows[index].Cells[1].Value; addAssembly add = new addAssembly(number, current, k); PelengEntities pe = new PelengEntities(); if (add.ShowDialog(this) == DialogResult.OK) { if (add.AddAssembly.НомерВхСборки == current && add.AddAssembly.Количество == k) { return; } if (add.AddAssembly.НомерВхСборки == current) { dataGridView1.Rows[index].Cells[1].Value = add.AddAssembly.Количество; } else { bool exist = false; int newIndex = 0; foreach (DataGridViewRow dr in dataGridView1.Rows) { if (dr.Cells[0].Value.ToString() == add.AddAssembly.НомерВхСборки) { exist = true; newIndex = dr.Index; } } if (!exist) { dataGridView1.Rows.RemoveAt(index); pelengDataSet.ВходящиеСборки.Rows.Add(add.AddAssembly.НомерВхСборки, add.AddAssembly.Количество, number); } else { dataGridView1.Rows[newIndex].Cells[1].Value = add.AddAssembly.Количество; dataGridView1.Rows.RemoveAt(index); } } } } }
private void typeOne(Excel.Worksheet sheet, Dictionary <string, Dictionary <string, int> > dt) { PelengEntities pe = new PelengEntities(); int c = 1, row = 7; addExcelCell(sheet, 3, 1, "Полная входимость без цепочки", "Times New Roman", 16, true); addExcelCell(sheet, 6, 1, "№", "Times New Roman", 14, true); addExcelCell(sheet, 6, 2, "Номер изделия", "Times New Roman", 14, true); addExcelCell(sheet, 6, 3, "Наименование", "Times New Roman", 14, true); addExcelCell(sheet, 6, 4, "Кол-во", "Times New Roman", 14, true); (sheet.get_Range("A6", "D6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "D6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "D6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "D6") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.get_Range("A6", "D6") as Excel.Range).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlDouble; foreach (string s in dt.Keys) { var assembly = (from m in pe.Сборки where m.НомерСборки == s select m); int fullN = 0; foreach (string way in dt[s].Keys) { fullN += dt[s][way]; for (int i = 1; i <= 4; i++) { (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlDouble; (sheet.Cells[row, i] as Excel.Range).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlDouble; } } addExcelCell(sheet, row, 1, c++.ToString(), "Times New Roman", 14, true); addExcelCell(sheet, row, 2, s, "Times New Roman", 14, true); addExcelCell(sheet, row, 3, assembly.First().Наименование, "Times New Roman", 14, true); addExcelCell(sheet, row, 4, fullN.ToString(), "Times New Roman", 14, true); row++; sheet.Columns.AutoFit(); ((Excel.Range)sheet.Columns["A"]).ColumnWidth = 5; } }
private void btnCompute_Click(object sender, EventArgs e) { computeRate rateForm = new computeRate(); Детали det = new Детали(); PelengEntities pe = new PelengEntities(); var mat = (from m in pe.Материалы where (m.МатериалID == det.МатериалID) select m); if (rateForm.ShowDialog(this) == DialogResult.OK) { det = rateForm.Det; mtbRate.Text = det.НормаРасхода.ToString(); epA.Clear(); epB.Clear(); epX.Clear(); if (det.ШиринаЗаготовки.HasValue) { maskedTextBox1.Text = det.ШиринаЗаготовки.ToString(); maskedTextBox2.Text = det.ДлинаЗаготовки.ToString(); maskedTextBox2.Visible = true; label6.Visible = true; lbType.Visible = false; } else { maskedTextBox1.Text = det.ДлинаЗаготовки.ToString(); maskedTextBox2.Visible = false; label6.Visible = false; lbType.Visible = true; lbType.Text = "\u00d8"; } numericUpDown1.Value = det.ВыходДеталей; lbGabarit.Text = mat.First().Габарит.ToString(); tbMat.Text = mat.First().НаименованиеМатериала; tbMat.Tag = mat.First(); label5.Visible = true; maskedTextBox1.Visible = true; } }
private void tbWay_TextChanged(object sender, EventArgs e) { if (tbWay.TextLength > 84) { epWay.SetError(tbWay, "Слишком длинный маршрут!"); Validate(); return; } string [] subWays = tbWay.Text.Split('-'); bool rightWay = false; PelengEntities pe = new PelengEntities(); List <string> listWays = (from m in pe.Подразделения select m.НомерПодразделения).ToList(); foreach (string s in subWays) { if (s.Length == 0) { continue; } if (listWays.Contains(s)) { rightWay = true; } else { rightWay = false; break; } } if (rightWay) { epWay.Clear(); } else { epWay.SetError(tbWay, "Ошибка в кодировке подразделения!"); } Validate(); }
private void listAssembly(string number, List <string> assemblies) { PelengEntities pe = new PelengEntities(); List <string> newAssemblies = new List <string>(); var listAssemblies = (from m in pe.ВходящиеСборки where m.НомерВхСборки == number select m); foreach (var l in listAssemblies) { if (!assemblies.Contains(l.НомерСборки)) { newAssemblies.Add(l.НомерСборки); } } assemblies.AddRange(newAssemblies); if (newAssemblies.Count != 0) { foreach (string s in newAssemblies) { listAssembly(s, assemblies); } } }
private void btnSave_Click(object sender, EventArgs e) { if (tbWay.Text.StartsWith("-")) { tbWay.Text = tbWay.Text.Remove(0, 1); } if (tbWay.Text.EndsWith("-")) { tbWay.Text = tbWay.Text.Remove(tbWay.TextLength - 1); } PelengEntities pe = new PelengEntities(); var det = (from m in pe.Детали where (m.НомерДетали == number) select m); var sb = (from m in pe.Сборки where (m.НомерСборки == number) select m); Dictionary <int, string> waysDiction = new Dictionary <int, string>(); var grouped = from p in pe.Маршруты orderby p.МаршрутID group p by p.МаршрутID into grp select new { ID = grp.Key, objWay = grp }; foreach (var w in grouped.ToList()) { string s = ""; foreach (var r in w.objWay) { s += r.НомерПодразделения + "-"; } s = s.Remove(s.Length - 1); waysDiction.Add(w.ID, s); } int numberWay = 0; foreach (int n in waysDiction.Keys) { if (tbWay.Text == waysDiction[n]) { numberWay = n; break; } } string[] subWays = tbWay.Text.Split('-'); if (numberWay == 0) { int z = 1; foreach (string s in subWays) { pe.Маршруты.AddObject(new Маршруты { МаршрутID = waysDiction.Count + 1, ПорядковыйНомер = z++, НомерПодразделения = s }); } pe.SaveChanges(); waysDiction.Add(numberWay = waysDiction.Count + 1, tbWay.Text); } tbWay.AutoCompleteCustomSource.AddRange(waysDiction.Values.ToArray()); if (det.Count() != 0) { det.First().Наименование = tbName.Text; det.First().МаршрутID = numberWay; pe.SaveChanges(); } else if (sb.Count() != 0) { sb.First().Наименование = tbName.Text; sb.First().МаршрутID = numberWay; pe.SaveChanges(); } else if (number.EndsWith("0")) { Сборки assembly = new Сборки(); assembly.Наименование = tbName.Text; assembly.МаршрутID = numberWay; assembly.НомерСборки = number; pe.Сборки.AddObject(assembly); pe.SaveChanges(); } else { tabSpecification.SelectedTab = tabMaterial; } currentName = tbName.Text; currentWay = tbWay.Text; this.DialogResult = DialogResult.OK; }
public specificationWork(string number) : this() { this.number = this.Text = tbNumber.Text = number; PelengEntities pe = new PelengEntities(); var det = (from m in pe.Детали where (m.НомерДетали == number) select m); var sb = (from m in pe.Сборки where (m.НомерСборки == number) select m); int way = 0; if (det.Count() != 0) { tbName.Text = currentName = det.First().Наименование; way = det.First().МаршрутID; btnSave.Enabled = true; this.DialogResult = DialogResult.OK; } else if (sb.Count() != 0) { tbName.Text = currentName = sb.First().Наименование; way = sb.First().МаршрутID; btnSave.Enabled = true; this.DialogResult = DialogResult.OK; } else { btnSave.Enabled = false; this.DialogResult = DialogResult.OK; } if (way != 0) { var ways = (from m in pe.Маршруты where (m.МаршрутID == way) select m).ToList(); foreach (var w in ways) { tbWay.Text += w.НомерПодразделения + "-"; } tbWay.Text = currentWay = tbWay.Text.Remove(tbWay.Text.Length - 1); } var grouped = from p in pe.Маршруты orderby p.МаршрутID group p by p.МаршрутID into grp select new { ID = grp.Key, objWay = grp }; Dictionary <int, string> waysDiction = new Dictionary <int, string>(); foreach (var w in grouped.ToList()) { string s = ""; foreach (var r in w.objWay) { s += r.НомерПодразделения + "-"; } s = s.Remove(s.Length - 1); waysDiction.Add(w.ID, s); } tbWay.AutoCompleteMode = AutoCompleteMode.SuggestAppend; tbWay.AutoCompleteSource = AutoCompleteSource.CustomSource; tbWay.AutoCompleteCustomSource.AddRange(waysDiction.Values.ToArray()); }
private void tabSpecification_SelectedIndexChanged(object sender, EventArgs e) { if (tabSpecification.SelectedTab == tabAssembly) { if (number.EndsWith("0")) { входящиеСборкиTableAdapter.Fill(pelengDataSet.ВходящиеСборки, number); } else { tsBtnAdd.Enabled = false; tsBtnDelete.Enabled = false; tsBtnEdit.Enabled = false; btnSaveAssembly.Enabled = false; } } if (tabSpecification.SelectedTab == tabMain) { tbNumber.Text = number; tbName_TextChanged(sender, e); tbWay_TextChanged(sender, e); } if (tabSpecification.SelectedTab == tabMaterial) { if (!number.EndsWith("0")) { ItemMaterial im = new ItemMaterial(); im.Dock = System.Windows.Forms.DockStyle.Fill; PelengEntities pe = new PelengEntities(); var det = (from m in pe.Детали where (m.НомерДетали == number) select m); if (det.Count() != 0) { foreach (Детали d in det) { im.Length = d.ДлинаЗаготовки; im.Rate = d.НормаРасхода; im.Material = d.Материалы; im.Gabarit = d.Материалы.Габарит; im.N = d.ВыходДеталей; if (d.ШиринаЗаготовки.HasValue) { im.Weight = d.ШиринаЗаготовки.Value; } } } else { Детали d = new Детали(); d.НомерДетали = number; d.Наименование = tbName.Text; d.Материалы = im.Material; d.ДлинаЗаготовки = im.Length; } tabMaterial.Controls.Add(im); } } }
private void listRate(float a, float b, float c, int n, float x) { listView1.Items.Clear(); PelengEntities pe = new PelengEntities(); var matsDiam = (from m in pe.Материалы where ((m.Профили.ВидПрофиля.Contains("Круг") || m.Профили.ВидПрофиля.Contains("Пруток")) && m.МаркиМатериала.НаименованиеМарки == cbMark.SelectedValue) orderby m.Габарит select m).ToList <Материалы>(); var matsList = (from m in pe.Материалы where ((!m.Профили.ВидПрофиля.Contains("Круг") & !m.Профили.ВидПрофиля.Contains("Пруток")) && m.МаркиМатериала.НаименованиеМарки == cbMark.SelectedValue) orderby m.Габарит select m).ToList <Материалы>(); if (cbProfile.SelectedIndex == 1) { diam = computeDiam(a, b); } else { diam = a; } List <Детали> listDet = new List <Детали>(); foreach (var m in matsDiam) { if (m.Габарит >= allowanceDiam(diam)) { listDet.Add(new Детали() { ДлинаЗаготовки = (int)((c + 2 + calcCut(m.Габарит)) * n + x + 0.6F), ВыходДеталей = n, МатериалID = m.МатериалID, НормаРасхода = Math.Round(m.МаркиМатериала.Плотность / 1E6 * Math.PI * m.Габарит * m.Габарит / 4 * ((int)((c + 2 + calcCut(m.Габарит)) * n + x + 0.6F) + calcCutX(m.Габарит)) / n, 4) }); break; } } if (cbProfile.SelectedIndex == 1) { diam = computeDiam(a, c); foreach (var m in matsDiam) { if (m.Габарит >= allowanceDiam(diam)) { listDet.Add(new Детали() { ДлинаЗаготовки = (int)((b + 2 + calcCut(m.Габарит)) * n + x + 0.6F), ВыходДеталей = n, МатериалID = m.МатериалID, НормаРасхода = Math.Round(m.МаркиМатериала.Плотность / 1E6 * Math.PI * m.Габарит * m.Габарит / 4 * ((int)((b + 2 + calcCut(m.Габарит)) * n + x + 0.6F) + calcCutX(m.Габарит)) / n, 4) }); break; } } diam = computeDiam(c, b); foreach (var m in matsDiam) { if (m.Габарит >= allowanceDiam(diam)) { listDet.Add(new Детали() { ДлинаЗаготовки = (int)((a + 2 + calcCut(m.Габарит)) * n + x + 0.6F), ВыходДеталей = n, МатериалID = m.МатериалID, НормаРасхода = Math.Round(m.МаркиМатериала.Плотность / 1E6 * Math.PI * m.Габарит * m.Габарит / 4 * ((int)((a + 2 + calcCut(m.Габарит)) * n + x + 0.6F) + calcCutX(m.Габарит)) / n, 4) }); break; } } } foreach (var m in matsList) //расчёт единичных заготовок из листа { if (m.Габарит >= allowanceList(a)) { if (cbProfile.SelectedIndex == 0) { b = a; } int weight, length; if ((m.Длина > m.Ширина) & (c > b)) { weight = (int)((b + calcCutList(m.Габарит)) + 0.6F); length = (int)((c + calcCutList(m.Габарит)) + 0.6F); if ((m.Ширина >= b) & (m.Ширина < weight)) { weight = m.Ширина.Value; } if ((m.Длина >= c) & (m.Длина < length)) { length = m.Длина.Value; } } else { weight = (int)((c + calcCutList(m.Габарит)) + 0.6F); length = (int)((b + calcCutList(m.Габарит)) + 0.6F); if ((m.Ширина >= c) & (m.Ширина < weight)) { weight = m.Ширина.Value; } if ((m.Длина >= b) & (m.Длина < length)) { length = m.Длина.Value; } } if ((m.Ширина >= weight) & (m.Длина >= length)) { listDet.Add(new Детали() { ДлинаЗаготовки = length, ШиринаЗаготовки = weight, ВыходДеталей = 1, МатериалID = m.МатериалID, НормаРасхода = Math.Round((m.МаркиМатериала.Плотность / 1E6 * m.Габарит * ((int)((b + calcCutList(m.Габарит)) + 0.6F) + calcCutXList(m.Габарит)) * ((int)((c + calcCutList(m.Габарит)) + 0.6F) + calcCutXList(m.Габарит))), 4) }); } break; } } listDet.Sort(); listView1.BeginUpdate(); foreach (Детали detal in listDet) { var mat = (from m in pe.Материалы where m.МатериалID == detal.МатериалID select m).ToList <Материалы>(); ListViewItem lvi; listView1.Items.Add(lvi = new ListViewItem(new string[] { mat.First().Ширина.HasValue?mat.First().Габарит + " x " + detal.ШиринаЗаготовки + " x " + detal.ДлинаЗаготовки:"\u00d8 " + mat.First().Габарит + " x " + detal.ДлинаЗаготовки, detal.НормаРасхода.ToString(), detal.ВыходДеталей.ToString(), mat.First().НаименованиеМатериала })); lvi.Tag = detal; } listView1.EndUpdate(); if (listView1.Items.Count != 0) { btnSelect.Enabled = true; listView1.Focus(); listView1.Items[0].Selected = true; } else { btnSelect.Enabled = false; } }
private void ведомостьВходимостиToolStripMenuItem_Click(object sender, EventArgs e) { reportItemEnter report = new reportItemEnter(); if (report.ShowDialog(this) == DialogResult.OK) { PelengEntities pe = new PelengEntities(); string name; List <Dictionary <string, int> > fullList = new List <Dictionary <string, int> >(); List <string> needRead = new List <string>(); if (report.Number.EndsWith("0")) { var specs = (from m in pe.Сборки where m.НомерСборки == report.Number select m).First(); name = specs.Наименование; var inAssembly = (from m in pe.ВходящиеСборки where m.НомерВхСборки == report.Number select m).ToList(); foreach (ВходящиеСборки vs in inAssembly) { Dictionary <string, int> dt = new Dictionary <string, int>(); dt.Add(vs.НомерСборки, vs.Количество); fullList.Add(dt); needRead.Add(vs.НомерСборки); } } else { var specs = (from m in pe.Детали where m.НомерДетали == report.Number select m).First(); name = specs.Наименование; var inAssembly = (from m in pe.СборкиДетали where m.НомерДетали == report.Number select m).ToList(); foreach (СборкиДетали d in inAssembly) { Dictionary <string, int> dt = new Dictionary <string, int>(); dt.Add(d.НомерСборки, d.Количество); fullList.Add(dt); needRead.Add(d.НомерСборки); } } while (needRead.Count != 0) { string s = needRead[0]; for (int i = 0; i < fullList.Count; i++) { if (fullList[i].Last().Key == s) { var newAssembly = (from m in pe.ВходящиеСборки where m.НомерВхСборки == s select m).ToList(); int c = 0; IDictionary <string, int> dt = new Dictionary <string, int>(); foreach (string key in fullList[i].Keys) { dt.Add(key, fullList[i][key]); } foreach (ВходящиеСборки vs in newAssembly) { c++; if (c > 1) { dt.Add(vs.НомерСборки, vs.Количество); fullList.Add(new Dictionary <string, int>(dt)); dt.Remove(vs.НомерСборки); } else { fullList[i].Add(vs.НомерСборки, vs.Количество); } needRead.Add(vs.НомерСборки); } } } needRead.Remove(s); } Dictionary <string, int> dtTypeNull = new Dictionary <string, int>(); Dictionary <string, Dictionary <string, int> > listDtOne = new Dictionary <string, Dictionary <string, int> >(); foreach (Dictionary <string, int> dt in fullList) { string str = report.Number; int n = 1; foreach (string s in dt.Keys) { str += " (" + dt[s] + ") --> " + s; n *= dt[s]; } if (report.TypeReport == 0) { if (!dtTypeNull.ContainsKey(dt.First().Key)) { dtTypeNull.Add(dt.First().Key, dt.First().Value); } } else { if (!listDtOne.ContainsKey(dt.Last().Key)) { Dictionary <string, int> lastDt = new Dictionary <string, int>(); lastDt.Add(str, n); listDtOne.Add(dt.Last().Key, lastDt); } else { listDtOne[dt.Last().Key].Add(str, n); } } n = 1; } Excel.Application application = new Excel.Application(); Object missing = Type.Missing; //добавили книгу application.Workbooks.Add(missing); Excel.Worksheet sheet = (Excel.Worksheet)application.ActiveSheet; if (report.TypeReport == 0) { if (dtTypeNull.Count != 0) { typeNull(sheet, dtTypeNull); } else { addExcelCell(sheet, 3, 1, "Первичная входимость", "Times New Roman", 16, true); if (report.Number.EndsWith("0")) { addExcelCell(sheet, 6, 1, "Данная сборка не входит ни в одно изделие!", "Times New Roman", 14, true); } else { addExcelCell(sheet, 6, 1, "Данная деталь не входит ни в одно изделие!", "Times New Roman", 14, true); } } } else if (report.TypeReport == 1) { if (listDtOne.Count != 0) { typeOne(sheet, listDtOne); } else { addExcelCell(sheet, 3, 1, "Полная входимость без цепочки", "Times New Roman", 16, true); if (report.Number.EndsWith("0")) { addExcelCell(sheet, 6, 1, "Данная сборка не входит ни в одно изделие!", "Times New Roman", 14, true); } else { addExcelCell(sheet, 6, 1, "Данная деталь не входит ни в одно изделие!", "Times New Roman", 14, true); } } } else { if (listDtOne.Count != 0) { typeTwo(sheet, listDtOne); } else { addExcelCell(sheet, 3, 1, "Полная входимость с цепочкой", "Times New Roman", 16, true); if (report.Number.EndsWith("0")) { addExcelCell(sheet, 6, 1, "Данная сборка не входит ни в одно изделие!", "Times New Roman", 14, true); } else { addExcelCell(sheet, 6, 1, "Данная деталь не входит ни в одно изделие!", "Times New Roman", 14, true); } } } addExcelCell(sheet, 1, 1, System.DateTime.Now.ToString(), "Times New Roman", 12, true); addExcelCell(sheet, 4, 1, report.Number + " " + name, "Times New Roman", 16, true); (sheet.get_Range("A3", "D3") as Excel.Range).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlDouble; application.Visible = true; } }