using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace СУБД_Швейная_фабрика { public partial class FormSpisMaterial : Form { public FormSpisMaterial() { InitializeComponent(); } private void FormSpisMaterial_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'fab2021DataSet1.Tkani' table. You can move, or remove it, as needed. this.tkaniTableAdapter.Fill(this.fab2021DataSet1.Tkani); // TODO: This line of code loads data into the 'fab2021DataSet1.Furnitura' table. You can move, or remove it, as needed. this.furnituraTableAdapter.Fill(this.fab2021DataSet1.Furnitura); } private void BtnToExcel_Click(object sender, EventArgs e) { // создать объект для связи с приложением Excel Excel.Application exapp = new Excel.Application(); // сделать приложение Excel видимым exapp.Visible = true; // открыть в Excel шаблон, находящийся в папке с exe-файлом в режиме только для чтения exapp.Workbooks.Open(Application.StartupPath + "\\Списание.xlsx", Type.Missing, true); // создать переменную list1 для связи с первым листом рабочей книги Excel.Worksheet list1 = (exapp.Worksheets.get_Item(1)); int RowExcel = 24; // в Excel начинать выводить с 24 строки // перебор тканей в DataGridView for (int i = 0; i <= DgvTkan.RowCount - 1; i++) { int CountSpis = 0; try { // сколько списать i-й ткани CountSpis = Convert.ToInt32(DgvTkan.Rows[i].Cells[3].Value); } catch { } // если человек указал 0, или не указал ничего, // перейти к следующей ткани if (CountSpis == 0) continue; // если человек ввел ненулевое кол-во для списания, // добавить i-ю ткань в документ list1.get_Range("A" + RowExcel).Value = DgvTkan.Rows[i].Cells[0].Value; list1.get_Range("H" + RowExcel).Value = "см"; list1.get_Range("J" + RowExcel).Value = "ткань"; // количество ткани для списания list1.get_Range("L" + RowExcel).Value = CountSpis; int WidthTkan = Convert.ToInt32(DgvTkan.Rows[i].Cells[1].Value); // площадь ткани для списания list1.get_Range("N" + RowExcel).Value = CountSpis * WidthTkan; // причина списания list1.get_Range("R" + RowExcel).Value = DgvTkan.Rows[i].Cells[4].Value; RowExcel++; // перейти в Excel к следующей строке } // перебор фурнитур в DataGridView for (int i = 0; i <= DgvFurnitura.RowCount - 1; i++) { int CountSpis = 0; try { // сколько списать i-й фурнитуры CountSpis = Convert.ToInt32(DgvFurnitura.Rows[i].Cells[2].Value); } catch { } // если человек указал 0, или не указал ничего, // перейти к следующей фурнитуре if (CountSpis == 0) continue; // если человек ввел ненулевое кол-во для списания, // добавить i-ю фурнитуру в документ list1.get_Range("A" + RowExcel).Value = DgvFurnitura.Rows[i].Cells[0].Value; list1.get_Range("H" + RowExcel).Value = "шт"; list1.get_Range("J" + RowExcel).Value = "фурнитура"; // количество фурнитуры для списания list1.get_Range("L" + RowExcel).Value = CountSpis; // причина списания list1.get_Range("R" + RowExcel).Value = DgvFurnitura.Rows[i].Cells[3].Value; RowExcel++; // перейти в Excel к следующей строке } } private void BtnSpisMaterial_Click(object sender, EventArgs e) { DialogResult rez = MessageBox.Show("Вы уверены, что нужно выбранные материалы?", "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Question); // если пользователь отказался списать, то выйти из процедуры if (rez == DialogResult.No) return; // перебор тканей в DataGridView for (int i = 0; i <= DgvTkan.RowCount - 1; i++) { int CountSpis = 0; try { // сколько списать i-й ткани CountSpis = Convert.ToInt32(DgvTkan.Rows[i].Cells[3].Value); } catch { } // если человек указал 0, или не указал ничего, // перейти к следующей ткани if (CountSpis == 0) continue; // если человек ввел ненулевое кол-во для списания, // списать ткань int LengthTkan = Convert.ToInt32(DgvTkan.Rows[i].Cells[2].Value); // уменьшить кол-во ткани на складе на кол-во списываемой ткани LengthTkan -= CountSpis; // записать в столбец с длиной рулона ткани на складе новое значение DgvTkan.Rows[i].Cells[2].Value = LengthTkan; } BsTkani.EndEdit(); this.tkaniTableAdapter.Update(this.fab2021DataSet1.Tkani); // перебор фурнитур в DataGridView for (int i = 0; i <= DgvFurnitura.RowCount - 1; i++) { int CountSpis = 0; try { // сколько списать i-й фурнитуры CountSpis = Convert.ToInt32(DgvFurnitura.Rows[i].Cells[2].Value); } catch { } // если человек указал 0, или не указал ничего, // перейти к следующей фурнитуре if (CountSpis == 0) continue; // если человек ввел ненулевое кол-во для списания, // списать фурнитуру // если человек ввел ненулевое кол-во для списания, // списать ткань int CountFur = Convert.ToInt32(DgvFurnitura.Rows[i].Cells[1].Value); // уменьшить кол-во фурнитур на складе на кол-во списываемых фурнитур CountFur -= CountSpis; // записать в столбец с кол-вом фурнитур на складе новое значение DgvFurnitura.Rows[i].Cells[1].Value = CountFur; } BsFurnitura.EndEdit(); this.furnituraTableAdapter.Update(this.fab2021DataSet1.Furnitura); } } }