Beispiel #1
0
 /// <summary>
 /// Построение дерева и создание ТБД "ПП"
 /// </summary>
 public static void BuiltTreeAndCreateFATable()
 {
     // загрузим данные из ТБД "Состав изделий"
     DatabaseLib.Select str = new DatabaseLib.Select();
     str.From("CompositionProducts");
     DataTable dt = DBWorker.dbf.Execute(str);
     // построим дерево классом для деревьев
     CompositionRow[] data = Converter.ConvertDataTableToCompositionRow(dt);
     Tree tr = new Tree(data);
     // подсчитаем полную применяемость изделий
     if (!tr.IsCalculated) // если еще не рассчитана полная применяемость
     {
         // подсчитаем кол-во деталей в изделиях
         FullApplicationRow[] calc = tr.CalculateFullApplication();
         // заполним таблицу БД ПП
         DBWorker.CreateAndFillFullApplicationTable(calc);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Генератор отчета по таблице "Полная применяемость"
        /// </summary>
        /// <param name="tr">Дерево разузлования</param>
        public static void GenerateFullApplicationReport(Tree tr)
        {
            // создание файла и запись в него ведомости
            StreamWriter file = new StreamWriter(GlobalVars.AppDir + @"\Reports\FullApllicationTableReport.html");

            // формирование заголовка 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'>
                              .h2 {
                                    text-align: left;
                                    display: table-caption;
                                    font-family: 'Times New Roman', Times, serif;
                                    color: #009;
                                    text-decoration: underline;
                                  }
                              </style>
                              </head>";
            file.WriteLine(Header);

            // начало тела HTML файла
            file.WriteLine("<body><p align = 'center'>");

            // определение количества корневых узлов (изделий)
            int count = tr.Root.Length;

            // для каждого изделия формирование своей таблицы
            string str;
            DataTable dt;
            for (int i = 0; i < count; i++)
            {
                // выборка из таблицы СНП описания продукции для корня
                str = String.Format("SELECT * FROM ProductNames WHERE ProductNames.ProductKey = {0}", tr.Root[i].PRootCode);
                dt = DBWorker.dbf.Execute(str);
                str = String.Format("{0} {1} {2}", dt.Rows[0].ItemArray[0], dt.Rows[0].ItemArray[1], dt.Rows[0].ItemArray[2]);

                // формирование заголовка таблицы и самой таблицы
                file.WriteLine("<table border='1' cellspacing='0' width='90%'>");
                file.WriteLine(String.Format("<caption align='left'><h2 class='h2'>Ведомость изделия: {0} </h2></caption>", str));
                file.WriteLine(@"<tr>
                                    <th>Код детали</th>
                                    <th>Наименование, обозначение детали</th>
                                    <th>Количество деталей, входящее в изделие</th>
                                </tr>");

                // загрузка данных для выбранного корня (изделия)
                str = String.Format(@"SELECT
                                                ProductNames.ProductKey,
                                                ProductNames.Name || ' ' || ProductNames.Designation AS NameDes,
                                                FullApplication.Count
                                            FROM
                                                FullApplication
                                                INNER JOIN ProductNames ON (FullApplication.PackageDetails = ProductNames.ProductKey)
                                            WHERE
                                                FullApplication.ProductCode = {0}", tr.Root[i].PRootCode);
                dt = DBWorker.dbf.Execute(str);
                // формирование таблицы ведомости для данного изделия
                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    file.WriteLine("<tr align = 'left'>");
                    for (int k = 0; k < dt.Columns.Count; k++)
                        file.Write(String.Format("<td>{0}</td> ", dt.Rows[j].ItemArray[k].ToString()));
                    file.WriteLine("</tr>");
                }
                // завершение таблицы
                file.WriteLine("</table>");
            }

            // заврешение тела HTML файла
            file.WriteLine("</p></body></html>");

            // закрытие файла
            file.Close();
        }