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(); // связываем с БД }
/// <summary> /// Метод поиска строк в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new АвтосервисКонтрагентыТаблица.Строка[] FindRows(NsgCompare compare) { return(convertRowsArray(base.FindRows(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual НастройкиПользователей[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска одной строки в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new НастройкиПользователей.Строка FindRow(NsgCompare compare) { return(base.FindRow(compare) as НастройкиПользователей.Строка); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual Строка[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual ИмпортДанных[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска в БД на полное совпадение по одному и более реквизитов /// c ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// но не более заданного предела. /// </remarks> /// <param name="count">Ограничение на количество объектов в результате.</param> /// <param name="sorting">Параметры сортировки.</param> /// <param name="paramAll">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual АвтосервисРасходнаяНакладнаяТаблица[] FindAll(ref int count, Int64 row_start, NsgSorting sorting, NsgCompare compare) { return(convertArray(base.FindAll(ref count, row_start, sorting, compare))); }
/// <summary> /// Метод поиска строк в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new АвтосервисРасходнаяНакладнаяТаблица.Строка[] FindRows(NsgCompare compare) { return(convertRowsArray(base.FindRows(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual ТаблицаЭлементаМенюПользователя[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска строк в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new ТаблицаЭлементаМенюПользователя.Строка[] FindRows(NsgCompare compare) { return(convertRowsArray(base.FindRows(compare))); }
/// <summary> /// Метод поиска одной строки в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new ТаблицаЭлементаМенюПользователя.Строка FindRow(NsgCompare compare) { return(base.FindRow(compare) as ТаблицаЭлементаМенюПользователя.Строка); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual Контрагенты[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual ОбменДанными[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual БазыДанныхДляОбмена[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual АвтосервисКонтрагентыТаблица[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual ольПользователяМеню[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска одной строки в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new АвтосервисРасходнаяНакладнаяТаблица.Строка FindRow(NsgCompare compare) { return(base.FindRow(compare) as АвтосервисРасходнаяНакладнаяТаблица.Строка); }
/// <summary> /// Метод поиска в БД на полное совпадение по одному и более реквизитов /// c ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// но не более заданного предела. /// </remarks> /// <param name="count">Ограничение на количество объектов в результате.</param> /// <param name="sorting">Параметры сортировки.</param> /// <param name="paramAll">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual ТаблицаЭлементаМенюПользователя[] FindAll(ref int count, Int64 row_start, NsgSorting sorting, NsgCompare compare) { return(convertArray(base.FindAll(ref count, row_start, sorting, compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual АвтосервисРасходнаяНакладнаяТаблица[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
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(); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual ЗагрузкаКурсов[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска одной строки в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new олиПользователя.Строка FindRow(NsgCompare compare) { return(base.FindRow(compare) as олиПользователя.Строка); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual СервисноеОбслуживание[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска одной строки в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new PeriodicTable.Строка FindRow(NsgCompare compare) { return(base.FindRow(compare) as PeriodicTable.Строка); }
/// <summary> /// Метод поиска в БД на полное совпадение по одному и более реквизитов /// c ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// но не более заданного предела. /// </remarks> /// <param name="count">Ограничение на количество объектов в результате.</param> /// <param name="sorting">Параметры сортировки.</param> /// <param name="paramAll">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual Строка[] FindAll(ref int count, Int64 row_start, NsgSorting sorting, NsgCompare compare) { return(convertArray(base.FindAll(ref count, row_start, sorting, compare))); }
/// <summary> /// Метод поиска строк в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new PeriodicTable.Строка[] FindRows(NsgCompare compare) { return(convertRowsArray(base.FindRows(compare))); }
/// <summary> /// Метод поиска строк в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new НастройкиПользователей.Строка[] FindRows(NsgCompare compare) { return(convertRowsArray(base.FindRows(compare))); }
/// <summary> /// Метод поиска в БД по одному и более реквизитов с ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// </remarks> /// <param name="compare">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual PeriodicTable[] FindAll(NsgCompare compare) { return(convertArray(base.FindAll(compare))); }
/// <summary> /// Метод поиска в БД на полное совпадение по одному и более реквизитов /// c ограничением количества результатов. /// </summary> /// <remarks> /// Результатом являются все строки, удовлетворяющие критериям поиска, /// но не более заданного предела. /// </remarks> /// <param name="count">Ограничение на количество объектов в результате.</param> /// <param name="sorting">Параметры сортировки.</param> /// <param name="paramAll">Параметры запроса.</param> /// <returns>Список найденных объектов.</returns> public new virtual НастройкиПользователей[] FindAll(ref int count, Int64 row_start, NsgSorting sorting, NsgCompare compare) { return(convertArray(base.FindAll(ref count, row_start, sorting, compare))); }
/// <summary> /// Метод поиска одной строки в таблице, соответствующих заданным параметрам. /// </summary> /// <param name="compare">Критерии поиска.</param> /// <returns>Найденные строки.</returns> public new АвтосервисКонтрагентыТаблица.Строка FindRow(NsgCompare compare) { return(base.FindRow(compare) as АвтосервисКонтрагентыТаблица.Строка); }