コード例 #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            textBox_login.BackColor    = SystemColors.Window;
            textBox_password.BackColor = SystemColors.Window;
            if (textBox_login.Text == "")
            {
                MessageBox.Show("Введите логин!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                textBox_login.BackColor = Color.Yellow;
                return;
            }
            sqlHandler = new SQLhandler(Database, DataSource, textBox_login.Text, textBox_password.Text);
            try
            {
                sqlHandler.ConnectOpen();
                sqlHandler.ConnectClose();
            }
            catch
            {
                MessageBox.Show("Проверьте подключение, логин и пароль", "Проблема с авторизацией", MessageBoxButtons.OK, MessageBoxIcon.Error);
                textBox_login.BackColor    = Color.Red;
                textBox_password.BackColor = Color.Red;
                return;
            }
            MessageBox.Show("Успешно", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

            authoriz.Login(textBox_login.Text, textBox_password.Text, checkBox_startTimer.Checked, Convert.ToDouble(numericUpDown_intervalTime.Value));

            this.Close();
        }
コード例 #2
0
        static void RefreshMetersLimits()
        {
            refreshTimer.Enabled = false;
            if (Sqlhandler_ == null)
            {
                return;
            }
            try
            {
                var sqlhandlerlocal_ = new SQLhandler(Sqlhandler_.database, Sqlhandler_.DataSource, Sqlhandler_.UserId, Sqlhandler_.Password);
                //sqlhandler2_.myConnec.

                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Mercury230_DatabaseSignals));

                foreach (Mercury230_DatabaseSignals meter in Meter230_arr)
                {
                    string    sqlselect = String.Format("select * from dumpmeters where addr={0} and id={1}", meter.address, meter.serial_number);
                    DataTable dt        = sqlhandlerlocal_.ReadSqlTable(sqlselect);
                    if (dt.Rows.Count > 0)
                    {
                        string objSerStr = dt.Rows[0]["dump"].ToString();
                        try
                        {
                            Mercury230_DatabaseSignals meterLocal =
                                (Mercury230_DatabaseSignals)serializer.ReadObject(new System.IO.MemoryStream(Encoding.ASCII.GetBytes(objSerStr)));
                            meter.Phases[0].current.CopyLimits(meterLocal.Phases[0].current);
                            meter.Phases[1].current.CopyLimits(meterLocal.Phases[1].current);
                            meter.Phases[2].current.CopyLimits(meterLocal.Phases[2].current);
                            meter.Phases[0].voltage.CopyLimits(meterLocal.Phases[0].voltage);
                            meter.Phases[1].voltage.CopyLimits(meterLocal.Phases[1].voltage);
                            meter.Phases[2].voltage.CopyLimits(meterLocal.Phases[2].voltage);
                            meter.Phases[0].power.CopyLimits(meterLocal.Phases[0].power);
                            meter.Phases[1].power.CopyLimits(meterLocal.Phases[1].power);
                            meter.Phases[2].power.CopyLimits(meterLocal.Phases[2].power);
                            meter.CommonActivePower.CopyLimits(meterLocal.CommonActivePower);
                            meter.CommonPower.CopyLimits(meterLocal.CommonPower);
                        }
                        catch (Exception exc)
                        {
                            Console.WriteLine("Ошибка чтения БД : {0}", exc.Message);
                        }
                    }
                }
                //else
                //{
                //    MessageBox.Show("Будут взяты данные по умолчанию\n\r", "Нет информации в БД", MessageBoxButtons.OK, MessageBoxIcon.Error);

                //}
            }
            catch (Exception exc)
            {
                logger.Error("Ошибка при чтении БД " + exc.Message);
                return;
            }
            logger.Debug("-----------Лимиты счетчиков обновлены--------------");
        }
コード例 #3
0
        private void EditMeterForm_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < meter_elem_arr_.Length; i++)
            {
                comboBox_addressMeter.Items.Add(meter_elem_arr_[i].ADDR_dgvCell.Value.ToString());
                comboBox_serialNumber.Items.Add(meter_elem_arr_[i].ID_dgvCell.Value.ToString());
                if (meter_elem_arr_[i].ADDR_dgvCell.Selected)
                {
                    comboBox_serialNumber.SelectedIndex = i;
                    comboBox_addressMeter.SelectedIndex = i;
                }
            }
            comboBox_serialNumber.SelectedIndexChanged += new EventHandler(comboBox_serialNumber_SelectedIndexChanged);
            comboBox_serialNumber.SelectedIndexChanged += new EventHandler(comboBox_serialNumber_SelectedIndexChanged2);
            comboBox_addressMeter.SelectedIndexChanged += new EventHandler(comboBox_addressMeter_SelectedIndexChanged);

            ControlsOffON();
            ShowZoneOnLabel();

            XmlNodeList xmlnode = xmldocument_.SelectNodes("//MeterServer");

            if (xmlnode.Count > 0)
            {
                try
                {
                    TCP_Host_s = xmlnode[0].Attributes["ipaddr"].Value;
                    TCP_port_i = int.Parse(xmlnode[0].Attributes["port"].Value);
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
            }
            else
            {
                MessageBox.Show("Ошибка чтения данных для связи с сервером", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            XmlNodeList Nodes = xmldocument_.SelectNodes("//DataBaseSQL");

            if (Nodes.Count > 0)
            {
                sqlhandler_ = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value);
            }
            else
            {
                MessageBox.Show("Ошибка в данных для подключения к БД", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #4
0
        /// <summary>
        /// Чтение конфигурационного файла
        /// </summary>
        static int readXMLdocument()
        {
            SerialPort  rs_port     = new SerialPort();
            XmlDocument xmlDocument = new XmlDocument();

            try
            {
                xmlDocument.Load("Meter_conf.xml");

                //meterTable = new DataTable("Meters");
                //meterTable.Columns.Add("Тип", typeof(string));
                //meterTable.Columns.Add("Адрес", typeof(string));
                //meterTable.Columns.Add("Статус", typeof(string));
                // rs_port = new System.IO.Ports.SerialPort();
                XmlNodeList devices = xmlDocument.SelectNodes("/Meters/DataBaseSQL");
                //Sqlhandler_ = new SQLhandler(devices[0].Attributes["Database"].Value, devices[0].Attributes["DataSource"].Value, devices[0].Attributes["UserId"].Value, devices[0].Attributes["Password"].Value);
                if (devices.Count > 0)
                {
                    Sqlhandler_ = new SQLhandler(devices[0].Attributes["Database"].Value, devices[0].Attributes["DataSource"].Value, devices[0].Attributes["UserId"].Value, devices[0].Attributes["Password"].Value);
                    progSettings.tblName_meter206 = devices[0].Attributes["tbl_206"].Value;
                    progSettings.tblName_meter230 = devices[0].Attributes["tbl_230"].Value;
                }

                devices = xmlDocument.SelectNodes("/Meters/autostart");

                if (devices.Count > 0)
                {
                    Console.WriteLine("Чтение параметров автозапуска");
                    string com = devices[0].Attributes["defaultCOMport"].Value;
                    progSettings.TCPport       = Convert.ToInt32(devices[0].Attributes["TCPport"].Value);
                    progSettings.timeoutSerial = Convert.ToInt32(devices[0].Attributes["timeout"].Value);
                    Int32 baudrate = Convert.ToInt32(devices[0].Attributes["baudRate"].Value);
                    System.IO.Ports.Parity   parity   = (Parity)Enum.Parse(typeof(Parity), devices[0].Attributes["parity"].Value, true);
                    System.IO.Ports.StopBits stopbits = (StopBits)Enum.Parse(typeof(StopBits), devices[0].Attributes["stopBits"].Value, true);
                    int dataBits = Convert.ToInt32(devices[0].Attributes["dataBits"].Value);
                    rs_port = new System.IO.Ports.SerialPort(com, baudrate, parity, dataBits, stopbits);
                    Console.WriteLine("Работа по последовательному порту " + com + "...");

                    // progSettings.start = devices[0].Attributes["serverStart"].Value == "yes";

                    //this.WindowState = WindowState.Normal;
                }

                int i = xmlDocument.SelectNodes("//meter[@type = 'Merc234']").Count;
                Meter230_arr = new Mercury230_DatabaseSignals[i];
                i            = xmlDocument.SelectNodes("//meter[@type = 'Merc206']").Count;
                Meter206_arr = new Mercury206_Database[i];
                i            = -1;

                foreach (XmlNode device in xmlDocument.SelectNodes("//meter[@type = 'Merc234']"))
                {
                    i++;
                    //meterTable.Rows.Add("Меркурий 234", device.Attributes["addr"].Value, "");
                    byte     addr         = Convert.ToByte(device.Attributes["addr"].Value);
                    string[] str_pasw_buf = device.Attributes["password_lvl1"].Value.Split(',');
                    byte[][] byte_pass    = new byte[2][];
                    byte_pass[0] = new byte[str_pasw_buf.Length];
                    for (int j = 0; j < str_pasw_buf.Length; j++)
                    {
                        byte_pass[0][j] = Convert.ToByte(str_pasw_buf[j]);
                    }
                    str_pasw_buf = device.Attributes["password_lvl2"].Value.Split(',');
                    byte_pass[1] = new byte[str_pasw_buf.Length];
                    for (int j = 0; j < str_pasw_buf.Length; j++)
                    {
                        byte_pass[1][j] = Convert.ToByte(str_pasw_buf[j]);
                    }
                    int serialnumber = Convert.ToInt32(device.Attributes["id"].Value);
                    Meter230_arr[i]             = new Mercury230_DatabaseSignals(rs_port, addr, serialnumber, byte_pass, progSettings.timeoutSerial);
                    Meter230_arr[i].ReloadData += ReloadDataGrid;
                    //    Meter230_arr[i].DataTime_nextPoint_recordSQL = DateTime.FromOADate(Sqlhandler_.NextTimetoSQLwrite(Meter230_arr[i], "meter230"));
                }
                i = -1;
                foreach (XmlNode device in xmlDocument.SelectNodes("//meter[@type = 'Merc206']"))
                {
                    i++;
                    uint addr         = Convert.ToUInt32(device.Attributes["addr"].Value);
                    int  serialnumber = Convert.ToInt32(device.Attributes["id"].Value);
                    Meter206_arr[i] = new Mercury206_Database(rs_port, addr, serialnumber, progSettings.timeoutSerial);
                    // Meter206_arr[i].ReloadData += ReloadDataGrid;

                    //  Meter206_arr[i].DataTime_nextPoint_recordSQL = DateTime.FromOADate(Sqlhandler_.NextTimetoSQLwrite(Meter206_arr[i], "meter206", 0));
                }



                // XmlDocument xmlDocument = new XmlDocument();
                // xmlDocument.Load("Meter_conf.xml");

                // dataGrid_meter.ItemsSource = "Meters";

                Console.WriteLine("Файл считан...");
                return(0);
            }
            catch (Exception e)
            {
                logger.Error("Ошибка загрузки настроек: {0}", e.Message);
                return(-1);
                //MessageBoxResult ti = MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                // ti = MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                // MessageBoxResult ti = MessageBox.Show("Проблема при старте сервера", "Ошибка сервера", MessageBoxButton.OK, MessageBoxImage.Error);


                //if (MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error) == MessageBoxResult.OK)
                //{
                //    return;
                //}
            }
        }
コード例 #5
0
        public void LoadWaterMeters()
        {
            Action <DataGridViewTextBoxCell, XmlNode, string> writeCellsValue =
                (datagridCell, nodes, atr) =>
            {
                //if (nodes.Count == 0)
                //    return;
                try
                {
                    datagridCell.Value = nodes.Attributes[atr].Value;
                }
                catch (ArgumentException)
                {
                    datagridCell.Value = "#error#";
                    return;
                }
                catch (NullReferenceException)
                {
                    datagridCell.Value = "н/д";
                    return;
                }
            };
            XmlDocument xmlDocument = new XmlDocument();

            // try
            // {
            xmlDocument.Load("waterMeter_conf.xml");
            // Настройка связи с БД
            XmlNodeList Nodes = xmlDocument.SelectNodes("//DataBaseSQL");

            if (Nodes.Count > 0)
            {
                sqlHandler               = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value);
                TableWatermetersData     = Nodes[0].Attributes["tabledata"].Value;
                TableWatermetersNameLink = Nodes[0].Attributes["tableLinkName"].Value;
            }
            //
            Nodes       = xmlDocument.SelectNodes("//watermeter");
            WaterMeters = new WaterMeter_Cells[Nodes.Count];
            DataGridViewRow row;

            if (Nodes.Count > 0)
            {
                for (int i = 0; i < Nodes.Count; i++)
                {
                    row            = new DataGridViewRow();
                    WaterMeters[i] = new WaterMeter_Cells();

                    row.Cells.AddRange(
                        //WaterMeters[i].Status,
                        WaterMeters[i].NameNode,
                        WaterMeters[i].Watermeter_SerialNumber,
                        WaterMeters[i].LocationNode,
                        WaterMeters[i].Consumer,
                        WaterMeters[i].Function,
                        WaterMeters[i].Data
                        );
                    this.dataGridView_watermeter.Rows.Add(row);
                    writeCellsValue(WaterMeters[i].NameNode, Nodes[i].ParentNode /*для имени нужен родительский узел*/, "name");
                    writeCellsValue(WaterMeters[i].LocationNode, Nodes[i].ParentNode /*нужен родительский узел*/, "location");
                    writeCellsValue(WaterMeters[i].Consumer, Nodes[i].ParentNode, "consumer");
                    writeCellsValue(WaterMeters[i].Watermeter_SerialNumber, Nodes[i], "snumber");
                    writeCellsValue(WaterMeters[i].Function, Nodes[i], "function");
                    // Подчитаываем сдвиг показаний
                    if (Nodes[i].ChildNodes != null)
                    {
                        foreach (XmlNode nd in Nodes[i].ChildNodes)
                        {
                            if (nd.Name == "point")
                            {
                                try
                                {
                                    WaterMeters[i].offsetPoint.SetTimePointFromStrings(nd.Attributes["time"].Value, nd.Attributes["data"].Value);
                                }
                                catch (ArgumentException)
                                {
                                    Console.WriteLine("Ошибка чтения сдвига для счетчика №{0}", WaterMeters[i].Watermeter_SerialNumber.Value);
                                }
                            }
                        }
                    }
                }
            }

            dataGridView_watermeter.AutoResizeColumns();

            /*
             * Перекресный запрос по номеру счетчика
             * SELECT mdate.*   FROM meternamelink mlink, float_watermeter_table_test mdate
             * where locate('55144578', mlink.NameMeter) > 0 and mlink.ChID = mdate.chID and flagsMask = 0 ;
             *
             *
             * */
            // Корректируем сдвиг показаний, сопоставля показания с прибора учета и базы данных
            Task readOffsetFromSql = Task.Factory.StartNew(delegate
            {
                for (int i = 0; i < WaterMeters.Length; i++)
                {
                    string sqlselect = "SELECT mdate.*   FROM " + TableWatermetersNameLink
                                       + " mlink, " + TableWatermetersData + " mdate where locate('" + WaterMeters[i].Watermeter_SerialNumber.Value.ToString() + "', mlink.NameMeter) > 0 and mlink.ChID = mdate.chID and mdate.flagsMask = 0 and mdate.oleDT < " +
                                       WaterMeters[i].offsetPoint.TimePoint.ToOADate().ToString(System.Globalization.CultureInfo.InvariantCulture) + " order by Id desc limit 1";
                    DataTable dt = new DataTable();
                    try
                    {
                        dt = sqlHandler.ReadSqlTable(sqlselect);
                    }
                    catch (Exception e) {
                        Console.WriteLine("Ошибка чтения к базе {0}", e.Message);
                        break;
                    }
                    if (dt.Rows.Count > 0)
                    {
                        //Console.WriteLine(" Счетчик {0} - Значение доп сдвига {1} время {2}", WaterMeters[i].Watermeter_SerialNumber.Value,
                        //                                                                    dt.Rows[0]["Value"],
                        //                                                                    DateTime.FromOADate((double)dt.Rows[0]["oleDT"]));
                        WaterMeters[i].offsetPoint.OffSetFromBase = (float)dt.Rows[0]["Value"];
                    }
                }
                Console.WriteLine("Сдвиги водосчетчиков считаны");
            });

            ReloadWaterMetersTimer           = new System.Timers.Timer(3000);
            ReloadWaterMetersTimer.Elapsed  += this.OnReloadWaterMetersFromMySql;
            ReloadWaterMetersTimer.AutoReset = false;
            //XmlNodeList devices = xmlDocument.SelectNodes("/watermeters/DataBaseSQL");
            //if (devices.Count > 0)
        }
コード例 #6
0
        public void ReadWaterBase(DateTime dateTime_start, DateTime dateTime_end)
        {
            var dt_start_local = new DateTime(dateTime_start.Year, dateTime_start.Month, dateTime_start.Day);
            var dt_end_local   = new DateTime(dateTime_end.Year, dateTime_end.Month, dateTime_end.Day);

            string jsTamplateAdminGroup = "adminGroupsArr.push(new AdminGroup(\"$name\", \"$idgroup\"));\n";
            string jsTamplateWaterNode  = "arr.push(new WaterNode(\"$nameid\", \"$info\", \"$idgroup\"));\n";
            string jsTamplateWatermeter = "arr[arr.length - 1].waterMeters.push(new Watermeter(\"$id\", \"$type\", $startdata, $enddata));\n";
            var    xmlDocument          = new XmlDocument();

            xmlDocument.Load("waterMeter_conf.xml");
            XmlNodeList Nodes = xmlDocument.SelectNodes("//DataBaseSQL");

            if (Nodes.Count > 0)
            {
                sqlHandler               = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value);
                TableWatermetersData     = Nodes[0].Attributes["tabledata"].Value;
                TableWatermetersNameLink = Nodes[0].Attributes["tableLinkName"].Value;
            }
            else
            {
                Console.WriteLine("Отсутствуют данные к подключению к базе!");
                return;
            }
            // получаем группы водомерных узлов
            XmlNodeList watermeterunits = xmlDocument.SelectNodes("watermeters/node");
            int         ComNumOfMeters  = xmlDocument.SelectNodes("//watermeter").Count;

            if (setMaxLevelProgressbar != null)
            {
                setMaxLevelProgressbar(ComNumOfMeters);
            }

            if (watermeterunits.Count > 0)
            {
                string jsString = "";

                foreach (XmlNode admingroup in xmlDocument.SelectNodes("watermeters/admin_groups/adgroup"))
                {
                    jsString += jsTamplateAdminGroup
                                .Replace("$name", admingroup.Attributes["name"].Value)
                                .Replace("$idgroup", admingroup.Attributes["idgroup"].Value);
                }

                foreach (XmlNode metersunit in watermeterunits)
                {
                    jsString += jsTamplateWaterNode
                                .Replace("$nameid", metersunit.Attributes["name"].Value)
                                .Replace("$info", metersunit.Attributes["consumer"].Value)
                                .Replace("$idgroup", metersunit.Attributes["idgroup"].Value);
                    foreach (XmlNode watermeter in metersunit.ChildNodes)
                    {
                        WaterMeterConsumption localmeter = GiveWaterData(watermeter, dt_start_local, dt_end_local);
                        jsString += jsTamplateWatermeter
                                    .Replace("$id", localmeter.meterId)
                                    .Replace("$type", localmeter.waterType)
                                    .Replace("$startdata", localmeter.ConsumptionStartPoint.ToString(CultureInfo.InvariantCulture))
                                    .Replace("$enddata", localmeter.ConsumptionEndPoint.ToString(CultureInfo.InvariantCulture));

                        if (invokeIncrementProgressbar != null)
                        {
                            invokeIncrementProgressbar();
                        }
                    }
                }
                string rangeStr = String.Format("c {0} по {1}", dateTime_start.ToString("dd.MM.yyyy"), dateTime_end.ToString("dd.MM.yyyy"));

                string tamplateStr = System.IO.File.ReadAllText(@"tamplates\WaterTamplate.report");
                tamplateStr = tamplateStr
                              .Replace("$comment", String.Format("Показания за период {0} <br>Общее количество счетчиков {1}", rangeStr, ComNumOfMeters.ToString()))
                              .Replace("$jscode", jsString);

                string nameFile = customSavePath ?? @"Reports\" + String.Format("Водосчетчики_за_Период_{0}_", rangeStr) +
                                  String.Format("-{0}_{1}_{2}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second) + ".html";

                System.IO.File.WriteAllText(nameFile, tamplateStr);
                if (openReportAfter)
                {
                    System.Diagnostics.Process.Start(nameFile);
                }
            }
        }
コード例 #7
0
        public void ReadElectricBase(DateTime dateTime_start, DateTime dateTime_end, bool forMonth = false, bool alldaysum = false)
        {
            string jsTamplateAdminGroup = "adminGroupsArr.push(new AdminGroup(\"$name\", \"$idgroup\"));\n";

            //DateTime date = new DateTime((int)Year_numericUpDown1.Value, month_comboBox.SelectedIndex + 1, 1);
            var xmlDocument = new XmlDocument();

            xmlDocument.Load("Meter_conf.xml");
            XmlNodeList Nodes = xmlDocument.SelectNodes("//DataBaseSQL");

            if (Nodes.Count > 0)
            {
                sqlHandler = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value);
            }
            else
            {
                Console.WriteLine("Отсутствуют данные к подключению к базе!");
                return;
            }
            var admingroups_nodes = xmlDocument.SelectNodes(@"//adgroup");
            int ComNumOfMeters    = xmlDocument.SelectNodes("//meter").Count;

            if (setMaxLevelProgressbar != null)
            {
                setMaxLevelProgressbar(ComNumOfMeters);
            }

            DateTime dt_start = dateTime_start;
            DateTime dt_end   = dateTime_end;


            // Хранилище выходного файла
            StringBuilder strbu = new StringBuilder();

            if (ComNumOfMeters > 0)
            {
                //string jsString = "";
                // Генерация списков с административными зонами
                foreach (XmlNode admingroup in admingroups_nodes /*xmlDocument.SelectNodes("watermeters/admin_groups/adgroup")*/)
                {
                    strbu.Append(jsTamplateAdminGroup
                                 .Replace("$name", admingroup.Attributes["name"].Value)
                                 .Replace("$idgroup", admingroup.Attributes["idgroup"].Value)
                                 );
                }
                strbu.Append(";electricGrid =");
                ReadElectGrid(dateTime_start, dateTime_end, xmlDocument.SelectNodes("/Meters/group"), strbu, forMonth, alldaysum);

                // Удалить последнюю запятую
                strbu.Remove(strbu.Length - 1, 1);
            }


            string rangeStr = $"c {dateTime_start.ToString("dd.MM.yyyy")} по {dateTime_end.ToString("dd.MM.yyyy")}";

            string tamplateStr = System.IO.File.ReadAllText(@"tamplates\electric_tamplate.report");

            tamplateStr = tamplateStr
                          .Replace("$comment", String.Format("Показания за период {0} <br>Общее количество счетчиков {1}", rangeStr, ComNumOfMeters))
                          .Replace("$arhive", strbu.ToString());

            string nameFile = customSavePath ?? @"Reports\" + String.Format("Электросчетчики_за_Период_{0}_", rangeStr) +
                              String.Format("-{0}_{1}_{2}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second) + ".html";

            System.IO.File.WriteAllText(nameFile, tamplateStr);
            if (openReportAfter)
            {
                System.Diagnostics.Process.Start(nameFile);
            }
        }