protected override void OnCreateReport(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.DoWorkEventArgs e) { base.OnCreateReport(nsgBackgroundReporter, e); string url = "http://cbrates.rbc.ru/tsv/cb/" + $"{Валюта.Value.КодВалюты}.tsv"; // создаем переменную url в которой хранится адрес сайта HttpWebRequest myHttwebrequest = (HttpWebRequest)HttpWebRequest.Create(url); // выполняем запрос по указонному адресу HttpWebResponse myHttpWebresponse = (HttpWebResponse)myHttwebrequest.GetResponse(); // получаем ответ StreamReader strm = new StreamReader(myHttpWebresponse.GetResponseStream()); // создаем считыватель var text = strm.ReadToEnd().Split('\n'); // записываем данные с сайта в массив удаляя enter, тем самым получая массив с одной строкой var period = ИсторияКурсов.Новый(); // создаем объект for (int i = 0; i < text.Length; i++) // цикл для перебора массива text { var row = text[i].Split('\t'); // записываем данные в массив удаляя отступы и получая массив с тремя элементами DateTime date = DateTime.ParseExact(row[0], "yyyyMMdd", CultureInfo.InvariantCulture); // преобрауем 1-ый элемент массива в тип DateTime var firstCompare = date.CompareTo(nsgPeriodPicker1.Period.Begin); // сравниваем date с данными из PeriodPicker var secondCompare = date.CompareTo(nsgPeriodPicker1.Period.End); // --//-- if ((firstCompare == 1 | secondCompare == -1) & (firstCompare == 1 | secondCompare == 0) & (firstCompare == 1 | secondCompare == 0)) { period.New(); // создаем новые строки объекста period period.ДатаВремя = date; // присваиваем полю ДатаВремя переменную date period.Значение = Math.Round(Convert.ToDecimal(row[2], NumberFormatInfo.InvariantInfo), 2); // присваиваем полю Значение 3-ий элемент массива конвертируя его в тип decimal и округляя до 2 знаков после запятой period.Валюта = Валюта.Value; // присваиваем полю Валюта поле Валюта period.Post(); // связываем с БД } } NsgCompare cmp = new NsgCompare().Add(ИсторияКурсов.Names.Валюта, Валюта.Value.Наименование, NsgComparison.Contain); // добавляем в сравнение новое условие сравнения поля Валюты из объекта ИсторияКурсов и поля Валюта из объекта ЗаполнениеКурса NsgSorting sort = new NsgSorting(new NsgSortingParam(ИсторияКурсов.Names.ДатаВремя, NsgSortDirection.Descending)); // сортируем по ... полю ДатаВремя наверное???? var pole = period.FindAll(cmp); // получаем массив объектов с условием которое записано в переменной cmp var max = pole[pole.Length - 1]; // берем последний элемент массива pole var currency = Валюты.Новый(); // создаем объект NsgCompare cmp2 = new NsgCompare().Add(Валюты.Names.Наименование, Валюта.Value.Наименование, NsgComparison.Contain); // добавляем в сравнение новое условие сравнения поля Наименования из объекта Валюты и поля Валюта из объекта ЗаполнениеКурса currency.Find(cmp2); // заполняем объект из БД по условию cmp2 currency.Edit(); // переводим объект в режим редактирования currency.ТекущийКурс = max.Значение; // изменяем значение поля ТекущийКурс на значение поля Значение объекта ИсторияКурсов currency.Post(); // связываем с БД }
protected override void OnCreateReportCompleted(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.RunWorkerCompletedEventArgs e) { base.OnCreateReportCompleted(nsgBackgroundReporter, e); }
protected override void OnCreateReport(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.DoWorkEventArgs e) { base.OnCreateReport(nsgBackgroundReporter, e); // Формируем строку запроса string uri; bool requsetHasDate = Период.Value.Year >= 2000; if (requsetHasDate) { uri = $"{Валюта.Value.Код}/{Период.Value.Year}/{Период.Value.Month.ToString("00")}/{Период.Value.Day.ToString("00")}.tsv"; } else { if (MessageBox.Show("Загрузка курсов за все время может быть долгой. Продолжить?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { return; } uri = $"cb/{Валюта.Value.Код}.tsv"; } // Делаем запрос HttpWebRequest webRequest = HttpWebRequest.Create(Path.Combine(@"http://cbrates.rbc.ru/tsv", uri)) as HttpWebRequest; WebResponse response; try { response = webRequest.GetResponse(); } catch (WebException x) { Console.WriteLine(x.Message); MessageBox.Show(x.Message + "\n\nStack trace:\n" + x.StackTrace, "Ошибка", MessageBoxButtons.OK); return; } // Считываем ответ string[] res; using (var reader = new StreamReader(response.GetResponseStream())) { res = reader.ReadToEnd().Split('\n'); } //MessageBox.Show(uri + '\n' + res[res.Length - 1]); //Console.WriteLine(res[res.Length - 1]); // БД ИсторияКурсов history = ИсторияКурсов.Новый(); NsgCompare nsgCompare = new NsgCompare(); nsgCompare.Add(ИсторияКурсов.Names.Валюты, Валюта.Value, NsgSoft.Database.NsgComparison.Equal); if (requsetHasDate) // если в запросе была дата, учитывать её { nsgCompare.Add(ИсторияКурсов.Names.ДатаВремя, Период.Value.Date, NsgSoft.Database.NsgComparison.GreaterOrEqual); nsgCompare.Add(ИсторияКурсов.Names.ДатаВремя, Период.Value.AddDays(1).Date, NsgSoft.Database.NsgComparison.Less); } history.DeleteArray(nsgCompare); string[] resItem; // хранение текущей записи if (res.Length > 1) // если вернулось больше одной записи, каждая строка res имеет вид "[время] 1 [курс]" { // вносим всё в БД for (int i = 0; i < res.Length; i++) { ReportProgress(i * 100 / res.Length, "Ждём-с!"); resItem = res[i].Split('\t'); history.New(); history.Валюты = Валюта.Value; history.ДатаВремя = DateTime.ParseExact(resItem[0], "yyyyMMdd", CultureInfo.InvariantCulture); history.Значение = Convert.ToDecimal(resItem[2], CultureInfo.InvariantCulture); history.Post(); } } else if (res.Length == 1) // единственная строка res имеет вид "1 [курс]" { // вносим её в БД resItem = res[0].Split('\t'); history.New(); history.Валюты = Валюта.Value; history.ДатаВремя = Период.Value.Date; history.Значение = Convert.ToDecimal(resItem[1], CultureInfo.InvariantCulture); history.Post(); } nsgCompare.RemoveParameters(ИсторияКурсов.Names.ДатаВремя); // поиск за период нам больше не нужен // Присвоить валюте последний курс var sorting = new NsgSorting(new NsgSortingParam(ИсторияКурсов.Names.ДатаВремя, NsgSoft.Database.NsgSortDirection.Descending)); int one = 1; var last = history.FindAll(ref one, 0, sorting, nsgCompare)[0]; Валюта.Value.Edit(); Валюта.Value.ТекущийКурс = last.Значение; Валюта.Value.Post(); }
protected override void OnBeforeCreateReport(NsgBackgroundWorker nsgBackgroundReporter) { base.OnBeforeCreateReport(nsgBackgroundReporter); }
protected override void OnCreateReport(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.DoWorkEventArgs e) { base.OnCreateReport(nsgBackgroundReporter, e); }