private static void AddMNDate(ref MNDates[] data, DataRow rows) { Array.Resize(ref data, data.Length + 1); data[data.Length - 1].Month = Convert.ToInt32(rows.ItemArray[2]); data[data.Length - 1].Year = Convert.ToInt32(rows.ItemArray[3]); }
private static bool IsItMNDate(MNDates[] data, DataRow row) { bool flag = false; for (int i = 0; i < data.Length; i++) if (data[i].Month == Convert.ToInt32(row.ItemArray[2]) && data[i].Year == Convert.ToInt32(row.ItemArray[3])) { flag = true; break; } return flag; }
/// <summary> /// Генерация строки с названием файла и путем с ведомостью для потребностей материалов для заданного месяца /// </summary> /// <param name="date">Заданная дата отчета (месяц и год)</param> /// <returns>Возвращает путь и название файла отчета</returns> public static string GetMNReportFileName(MNDates date) { return String.Format(@"{0}\Reports\MaterialsNeedsReport_{1}_{2}.html", GlobalVars.AppDir, date.Month, date.Year); }
/// <summary> /// Генерация строки с названием и путем к файлу с ведомостью нормативной трудоемкости произв. программы по цехам /// </summary> /// <param name="date">Заданная дата отчета (месяц и год)</param> /// <returns>Возвращает путь к файлу с ведомостью</returns> public static string GetСSPReportFileName(MNDates date) { return String.Format(@"{0}\Reports\ComplexityShopProgramReport_{1}_{2}.html", GlobalVars.AppDir, date.Month, date.Year); }
/// <summary> /// Функция для определения количества и дат для ведомостей по потребности в материалах по месяцам /// </summary> /// <param name="count">Найденное количество дат (=>ведомостей)</param> /// <returns>Возвращает массив найденных дат</returns> public static MNDates[] GetMNDatesCount(ref int count) { // выберем данные из таблицы "ПВИ" DatabaseLib.Select sel = new DatabaseLib.Select(); sel.From("PlanProducts"); DataTable dt = DBWorker.dbf.Execute(sel); MNDates[] data = new MNDates[0]; // подсчитаем количество уникальных месяцев для производства изделий for (int i = 0; i < dt.Rows.Count; i++) { if (!IsItMNDate(data, dt.Rows[i])) // если нет такой даты, AddMNDate(ref data, dt.Rows[i]); // то добавим ее в массив } count = data.Length; return data; }
/// <summary> /// Определение количества и кодов изделий, выпускаемых в текущем месяце по дате /// </summary> /// <param name="count"></param> /// <returns></returns> private static long[] GetProdCountInMonth(ref int count, out int[] plans, MNDates date) { // выборка данных по условию из ТБД "ПВИ" string str = String.Format("SELECT DISTINCT PlanProducts.ProductCode, PlanProducts.PlanCount FROM PlanProducts WHERE PlanProducts.Month = {0} and PlanProducts.Year = {1};", date.Month, date.Year); DataTable dt = DBWorker.dbf.Execute(str); count = dt.Rows.Count; long[] res = new long[count]; // коды изделий plans = new int[count]; // кол-во по плану для изделий for (int i = 0; i < count; i++) { res[i] = dt.Rows[i].Field<long>(0); plans[i] = Convert.ToInt32(dt.Rows[i].ItemArray[1]); } return res; }
public static void GenerateMaterialsNeedsReport(MNDates date, string fname) { // создание файла и запись в него ведомости StreamWriter file = new StreamWriter(fname); // загрузка данных из ТБД "СТМ" DataTable dtm = DBWorker.SelectDataFromTable("СТМ"); // загрузка данных из ТБД "СЕИ" DataTable dtu = DBWorker.SelectDataFromTable("СЕИ"); // формирование заголовка HTML файла string Header = @"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html xmlns='http://www.w3.org/1999/xhtml'> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> <title>Сводная ведомость потребности в материалах в разрезе изделий</title> <style type='text/css'> .h1 { text-align: center; font-family: 'Times New Roman', Times, serif; color: #008; text-decoration: underline; } .MyP1 { font-size: 24px; font-weight: bold; color: #900; } </style> </head>"; file.WriteLine(Header); // начало тела HTML файла file.WriteLine("<body>"); // формирование заголовка отчета file.WriteLine(String.Format("<h1 class='h1'>Сводная ведомость потребности в материалах в разрезе изделий на {0} месяц {1} года</h1>", GlobalFunctions.GetMonthString(date.Month), date.Year)); // определение количества изделий, выпускаемых в данном месяце int count = 0; int[] Plans; long[] Roots = GetProdCountInMonth(ref count, out Plans, date); // для каждого изделия формирование своей таблицы string str; DataTable dt; for (int i = 0; i < count; i++) { // выборка из таблицы СНП описания продукции для корня str = String.Format("SELECT ProductKey, Name, Designation FROM ProductNames WHERE ProductNames.ProductKey = {0}", Roots[i]); dt = DBWorker.dbf.Execute(str); // формирование заголовка таблицы и самой таблицы file.WriteLine("<p align = 'center'><table border='1' cellspacing='0' width='90%'>"); file.WriteLine(String.Format(@"<tr class='MyP1'> <th>Код, наименование изделия</th> <td>{0}</td> <th>План выпуска изделий</th> <td>{1}</td> </tr>", String.Format("{0} {1}", dt.Rows[0].ItemArray[0], dt.Rows[0].ItemArray[1], dt.Rows[0].ItemArray[2]), Plans[i])); // формируем заголовок для материалов и их норм file.WriteLine("<tr> <th colspan='2'>Код, наименование материала</th> <th>Потребность в материале</th> <th>Единица измерения</th> </tr>"); // выбираем сведения по материалам из таблицы "ПМТВ" для текущего изделия str = String.Format(@"SELECT MaterialsNeeds.MaterialCode, MaterialsNeeds.PlanCount FROM MaterialsNeeds INNER JOIN ProdNameStand ON (ProdNameStand.ProductCode = MaterialsNeeds.ProductCode and ProdNameStand.MaterialCode = MaterialsNeeds.MaterialCode) WHERE ProdNameStand.ProductCode = {0};", Roots[i]); dt = DBWorker.dbf.Execute(str); // пишем данные о потребностях материалов в отчет for (int j = 0; j < dt.Rows.Count; j++) { file.WriteLine(String.Format("<tr align='left'> <td colspan='2'>{0}</td> <td>{1}</td> <td>{2}</td> </tr>", GetMaterialData(dtm, Convert.ToInt64(dt.Rows[j].ItemArray[0])), dt.Rows[j].ItemArray[1], GetMaterialUnit(dtm, dtu, Convert.ToInt64(dt.Rows[j].ItemArray[0])))); } // завершение таблицы file.WriteLine("</table></p> <p> </p>"); } // завершение тела HTML файла file.WriteLine("</p></body></html>"); // закрытие файла file.Close(); }
public static void GenerateMaterialsNeeds2Report(MNDates date, string fname) { // создание файла и запись в него ведомости StreamWriter file = new StreamWriter(fname); // загрузка данных из ТБД "СТМ" DataTable dtm = DBWorker.SelectDataFromTable("СТМ"); // загрузка данных из ТБД "СЕИ" DataTable dtu = DBWorker.SelectDataFromTable("СЕИ"); // формирование заголовка HTML файла string Header = @"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html xmlns='http://www.w3.org/1999/xhtml'> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> <title>Сводная ведомость потребности в материалах</title> <style type='text/css'> .h1 { text-align: center; font-family: 'Times New Roman', Times, serif; color: #008; text-decoration: underline; } .MyP1 { font-size: 24px; font-weight: bold; color: #900; } </style> </head>"; file.WriteLine(Header); // начало тела HTML файла file.WriteLine("<body>"); // формирование заголовка отчета file.WriteLine(String.Format("<h1 class='h1'>Сводная ведомость потребности в материалах на {0} месяц {1} года</h1>", GlobalFunctions.GetMonthString(date.Month), date.Year)); // для каждого изделия формирование своей таблицы string str; DataTable dt; // формирование заголовка таблицы и самой таблицы file.WriteLine("<p align = 'center'><table border='1' cellspacing='0' width='90%'>"); // формируем заголовок для материалов и их норм file.WriteLine("<tr> <th>Код, наименование материала</th> <th>Потребность в материале</th> <th>Единица измерения</th> </tr>"); // выбираем сведения по материалам из таблицы "ПМТВ" для текущего изделия str = String.Format(@"SELECT MaterialsNeeds2.MaterialCode, MaterialsNeeds2.PlanCount FROM MaterialsNeeds2 WHERE MaterialsNeeds2.Month = {0} and MaterialsNeeds2.Year = {1};", date.Month, date.Year); dt = DBWorker.dbf.Execute(str); // пишем данные о потребностях материалов в отчет for (int j = 0; j < dt.Rows.Count; j++) { file.WriteLine(String.Format("<tr align='left'> <td>{0}</td> <td>{1}</td> <td>{2}</td> </tr>", GetMaterialData(dtm, Convert.ToInt64(dt.Rows[j].ItemArray[0])), dt.Rows[j].ItemArray[1], GetMaterialUnit(dtm, dtu, Convert.ToInt64(dt.Rows[j].ItemArray[0])))); } // завершение таблицы file.WriteLine("</table></p> <p> </p>"); // завершение тела HTML файла file.WriteLine("</p></body></html>"); // закрытие файла file.Close(); }
public static void GenerateComplexityProgramReport(MNDates date, string fname) { // создание файла и запись в него ведомости StreamWriter file = new StreamWriter(fname); // загрузка данных из ТБД "СНП" DataTable dtp = DBWorker.SelectDataFromTable("СНП"); // формирование заголовка HTML файла string Header = @"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html xmlns='http://www.w3.org/1999/xhtml'> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> <title>Ведомость нормативной трудоемкости производственной программы</title> <style type='text/css'> .h1 { text-align: center; font-family: 'Times New Roman', Times, serif; color: #008; text-decoration: underline; } .MyP1 { font-size: 24px; font-weight: bold; color: #900; } </style> </head>"; file.WriteLine(Header); // начало тела HTML файла file.WriteLine("<body>"); // формирование заголовка отчета file.WriteLine(String.Format("<h1 class='h1'>Ведомость нормативной трудоемкости производственной программы на {0} месяц {1} года</h1>", GlobalFunctions.GetMonthString(date.Month), date.Year)); // формирование заголовка таблицы и самой таблицы file.WriteLine("<p align = 'center'><table border='1' cellspacing='0' width='90%'>"); // формируем заголовок для таблицы file.WriteLine("<tr class='MyP1'> <th>Код изделия</th> <th>Наименование изделия</th> <th>План выпуска</th> <th>Трудоемкость на изделие</th> <th>Трудоемкость по плану</th> </tr>"); // выборка данных из таблицы "НТПП" string str = String.Format(@"SELECT ComplexityProgram.ProductCode, ComplexityProgram.PlanCount, ComplexityProgram.Tshk, ComplexityProgram.Tshk * ComplexityProgram.PlanCount FROM ComplexityProgram WHERE ComplexityProgram.Month = {0} and ComplexityProgram.Year = {1};", date.Month, date.Year); DataTable dt = DBWorker.dbf.Execute(str); // итоговая трудоемкость по плану float sum = 0, tmp; // формирование строк таблицы for (int i = 0; i < dt.Rows.Count; i++) { tmp = Convert.ToSingle(dt.Rows[i].ItemArray[3]); file.WriteLine(String.Format("<tr> <td>{0}</td> <td>{1}</td> <td>{2}</td> <td>{3}</td> <td>{4}</td> </tr>", dt.Rows[i].ItemArray[0], GetProductData2(dtp, dt.Rows[i].Field<long>(0)), dt.Rows[i].ItemArray[1], dt.Rows[i].ItemArray[2], tmp)); // подсчет трудоемкости по плану для итогов sum += tmp; } // вывод итогов в конце таблицы file.WriteLine(String.Format("<tr> <th>Итого:</th> <td colspan='3' align='center'>-</td> <td>{0}</td> </tr>", sum)); // завершение таблицы file.WriteLine("</table></p> <p> </p>"); // завершение тела HTML файла file.WriteLine("</p></body></html>"); // закрытие файла file.Close(); }