/// <summary>СОБЫТИЕ Нажали на кнопку Обновить Страховые компании</summary> private void PART_ButtonLoadFile_Click(object sender, RoutedEventArgs e) { string _Tf_okato = ""; int _Smocod = 0; string _Nam_smok = ""; string _D_end = ""; string _Ogrn = ""; PRI_Context = new StarahReestrDataContext(MySql.MET_ConSql()); ((Paragraph)PART_RichTextBox.Document.Blocks.FirstBlock).LineHeight = 2; XmlTextReader _TextReader = new XmlTextReader(PRI_FileName); while (_TextReader.Read()) { if (_TextReader.NodeType == XmlNodeType.Element) { switch (_TextReader.Name) { case "tf_okato": _TextReader.Read(); _Tf_okato = _TextReader.Value; break; case "smocod": _TextReader.Read(); _Smocod = Convert.ToInt32(_TextReader.Value); break; case "nam_smok": _TextReader.Read(); _Nam_smok = _TextReader.Value; break; case "d_end": _TextReader.Read(); _D_end = _TextReader.Value == "" ? "" : "old"; break; case "Ogrn": _TextReader.Read(); _Ogrn = _TextReader.Value; break; } } if (_TextReader.NodeType == XmlNodeType.EndElement && _TextReader.Name == "insCompany") { // Связь с SQL, в принципе не очень то и нужен, только для разового сохраниения в StrahFile try { bool _Er = false; PRI_StrahComp = PRI_Context.s_StrahComp.Single(n => n.KOD == _Smocod); if (_Nam_smok != PRI_StrahComp.TKOD) { _Er = true; PART_RichTextBox.AppendText("Несовпадает название:\n"); } if (_Ogrn != PRI_StrahComp.OGRN) { _Er = true; PART_RichTextBox.AppendText("Несовпадает ОГРН:\n"); } if (_D_end != PRI_StrahComp.NewTKod) { _Er = true; PART_RichTextBox.AppendText("Несовпадает дата закрытия:\n"); } if (_Er) { PART_RichTextBox.AppendText(_Smocod + "\n"); PART_RichTextBox.AppendText("ОГРН старое/новое: " + PRI_StrahComp.OGRN + " / " + _Ogrn + "\n"); PART_RichTextBox.AppendText("Устаревшее старое/новое: " + PRI_StrahComp.NewTKod + " / " + _D_end + "\n"); PART_RichTextBox.AppendText("старое:" + PRI_StrahComp.TKOD + "\n"); PART_RichTextBox.AppendText("новое: " + _Nam_smok + "\n\n"); PRI_StrahComp.OGRN = _Ogrn; PRI_StrahComp.NewTKod = _D_end; PRI_StrahComp.TKOD = _Nam_smok; } //// Запись файла StrahFile //PRI_StrahFile = new StrahFile //{ // Cod = PRI_Context.StrahFile.Max(e => e.Cod + 1), // DateN = PROP_DateN, // DateK = PROP_DateK, // Korekt = PROP_Korekt, // StrahComp = (byte?)PRI_Strah, // SUMMAV = 0, // Tip = 1, // YEAR = PROP_DateK.Year, // MONTH = PROP_DateK.Month, // NSCHET = PROP_Schet, // DSCHET = PROP_DateSchet, // pHide = 0, // pParent = PROP_Parent //}; } catch (InvalidOperationException) { PART_RichTextBox.AppendText("Новая компания:\n"); PART_RichTextBox.AppendText(_Smocod + " " + _Ogrn + " " + _D_end + "\n"); PART_RichTextBox.AppendText(_Nam_smok + "\n"); PRI_StrahComp.KOD = _Smocod; PRI_StrahComp.OGRN = _Ogrn; PRI_StrahComp.NewTKod = _D_end; PRI_StrahComp.TKOD = _Nam_smok; try { PRI_Oblast = PRI_Context.s_Oblast.Single(n => n.NewKod == _Tf_okato); PART_RichTextBox.AppendText("ОКАТО: " + _Tf_okato + " область:" + PRI_Oblast.kod + " / " + PRI_Oblast.NAIM + "\n\n"); } catch (InvalidOperationException) { PART_RichTextBox.AppendText("область НЕ найдена \n\n"); } } catch { // } } } PART_RichTextBox.AppendText("Усё"); }
/// <summary>МЕТОД 2. Запуск расчета</summary> private void MET_StartCalc() { // Сохраняем значение ProgressBar double _BarValue = 0; // Создание делегата и привязка к изменению свойства ProgressBar UpdateProgressBarDelegate _Progress = PART_ProgressBar.SetValue; // Ну начинаем PROP_ProgressLabel = "Подгружаем данные с сервера"; // Всё больше форму НЕ трогаем, можем только закрыть PART_UserPage.IsEnabled = false; // Даем поток, для обновления формы Dispatcher.Invoke(_Progress, DispatcherPriority.Background, RangeBase.ValueProperty, _BarValue); // Связь с SQL, в принципе не очень то и нужен, только для разового сохраниения в StrahFile try { PRI_Context = new StarahReestrDataContext(MySql.MET_ConSql()); // Запись файла StrahFile PRI_StrahFile = new StrahFile { Cod = PRI_Context.StrahFile.Max(e => e.Cod + 1), DateN = PROP_DateN, DateK = PROP_DateK, Korekt = 0, StrahComp = 4, VMP = (byte?)PRI_TipReestr, SUMMAV = 0, Tip = 1, YEAR = PROP_DateK.Year, MONTH = PROP_DateK.Month, NSCHET = PROP_Schet, DSCHET = PROP_DateSchet, pPaket = PRI_MainCorrect == 1 ? (byte?)124 : (byte?)123, pHide = 0, pParent = PROP_ParentCod }; } catch (Exception e) { MessageBox.Show(e.Message); } // Стартовые номера для поля N_ZAP int.TryParse($"{PRI_TipReestr}{PROP_DateK.Month:00}00000", out PRI_ReeN_Zap); PRI_ReeNom_Zap = PRI_ReeN_Zap; DataRelation _DataRelation; DataColumn[] _ReStrahReestr = new DataColumn[] { MyGlo.DataSet.Tables["ReStrahReestr"].Columns["Cod"], MyGlo.DataSet.Tables["ReStrahReestr"].Columns["LPU_ST"] }; if (PRI_TipReestr == 3 || PRI_TipReestr == 4) { // Поликлиника 1. Apac (только конечные посещения) MySql.MET_DsAdapterFill(MyQuery.ReApac_Select_4(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReApac"); // Связываем по колонками DataColumn[] _ReApac = new DataColumn[] { MyGlo.DataSet.Tables["ReApac"].Columns["Cod"], MyGlo.DataSet.Tables["ReApac"].Columns["LPU_ST"] }; // Связь Реестр - Apac _DataRelation = new DataRelation("ReReestr_Apac", _ReStrahReestr, _ReApac, false); MyGlo.DataSet.Relations.Add(_DataRelation); // Поликлиника 2. (промежуточные посещения) MySql.MET_DsAdapterFill(MyQuery.ReApac_Select_5(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "RePol"); // Связь Apac - Pol _DataRelation = new DataRelation("ReApac_Pol", MyGlo.DataSet.Tables["ReApac"].Columns["NumberFirstTap"], MyGlo.DataSet.Tables["RePol"].Columns["NumberFirstTap"], false); // Запретим создание ограничений, на "осиротевшие" записи в RePol MyGlo.DataSet.Relations.Add(_DataRelation); // Поликлиника 3. (консилиумы) MySql.MET_DsAdapterFill(MyQuery.ReApac_Select_6(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "RePolCons"); // Связь Apac - PolCons _DataRelation = new DataRelation("ReApac_PolCons", MyGlo.DataSet.Tables["ReApac"].Columns["Cod"], MyGlo.DataSet.Tables["RePolCons"].Columns["Cod"], false); // Запретим создание ограничений, на "осиротевшие" записи в RePolCons MyGlo.DataSet.Relations.Add(_DataRelation); } // Стационар 1. Apstac MySql.MET_DsAdapterFill(MyQuery.ReApstac_Select_4(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReApstac"); // Связываем по колонками DataColumn[] _ReApstac = new DataColumn[] { MyGlo.DataSet.Tables["ReApstac"].Columns["Ind"], MyGlo.DataSet.Tables["ReApstac"].Columns["LPU_ST"] }; // Связь Реестр - Apstac _DataRelation = new DataRelation("ReReestr_Apstac", _ReStrahReestr, _ReApstac, false); MyGlo.DataSet.Relations.Add(_DataRelation); // Стационар 2. Ksg MySql.MET_DsAdapterFill(MyQuery.ReApstac_Select_5(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReKsg"); // Связь Apstac - Ksg _DataRelation = new DataRelation("ReApstac_Ksg", MyGlo.DataSet.Tables["ReApstac"].Columns["Ind"], MyGlo.DataSet.Tables["ReKsg"].Columns["Ind"], false); MyGlo.DataSet.Relations.Add(_DataRelation); // Стационар 3. (консилиумы) MySql.MET_DsAdapterFill(MyQuery.ReApstac_Select_6(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReApstacCons"); // Связь Apstac - ApstacCons _DataRelation = new DataRelation("ReApstac_ApstacCons", MyGlo.DataSet.Tables["ReApstac"].Columns["Ind"], MyGlo.DataSet.Tables["ReApstacCons"].Columns["Ind"], false); MyGlo.DataSet.Relations.Add(_DataRelation); if (PRI_TipReestr == 4) { // Параклиника 1. Par MySql.MET_DsAdapterFill(MyQuery.RePar_Select_2(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "RePar"); // Связываем по колонками DataColumn[] _RePar = new DataColumn[] { MyGlo.DataSet.Tables["RePar"].Columns["Cod"], MyGlo.DataSet.Tables["RePar"].Columns["LPU_ST"] }; // Связь Реестр - RePar _DataRelation = new DataRelation("ReReestr_Par", _ReStrahReestr, _RePar, false); MyGlo.DataSet.Relations.Add(_DataRelation); } // Страховые компании. StrahComp if (MyGlo.DataSet.Tables["ReStrahComp"] == null) // если ещё не загруженна { MySql.MET_DsAdapterFill(MyQuery.ReStrahComp_Select_1(), "ReStrahComp"); DataTable _Table = MyGlo.DataSet.Tables["ReStrahComp"]; _Table.PrimaryKey = new[] { _Table.Columns["Cod"] }; } // Загружаем справочники StrahSpr PRI_N002 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N002")); PRI_N003 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N003")); PRI_N004 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N004")); PRI_N005 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N005")); PRI_N008 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N008")); PRI_N009 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N009")); PRI_N011 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N011")); PRI_N012 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N012")); PRI_StrahStacSv = new List <StrahStacSv>(PRI_Context.StrahStacSv); // Максимум ProgressBar PART_ProgressBar.Maximum = MyGlo.DataSet.Tables["ReStrahReestr"].Rows.Count; // Сохраним запись в StrahFile PRI_Context.StrahFile.InsertOnSubmit(PRI_StrahFile); PRI_Context.SubmitChanges(); // Создаем файл с ошибками (шапачку там) PRI_ErrorToExcel = new MyExcel(PRI_StrahFile); // Перебераем все записи foreach (DataRow _Reestr in MyGlo.DataSet.Tables["ReStrahReestr"].Rows) { PRI_RowReestr = _Reestr; PRI_StrahReestr = new StrahReestr(); PRI_Sl = new MySL(); // Тип услуги PRI_TipUsl = (eTipUsl)m.MET_PoleInt("LPU_ST", PRI_RowReestr); PRI_ErrorRow = false; // ошибок нет (ну это пока) // Заранее готовим информацию для будущей ошибки PRI_ErrorToExcel.PROP_StrahReestr = PRI_StrahReestr; PRI_ErrorToExcel.PROP_RowReestr = PRI_RowReestr; PRI_ErrorToExcel.PROP_Nom++; PRI_ErrorToExcel.PROP_Tip = new[] { "", "Кр. Стационар", "Дн. Стационар", "Поликлиника", "Параклиника", "Гистология" }[(int)PRI_TipUsl]; switch (PRI_TipUsl) { case eTipUsl.StacKr: case eTipUsl.StacDn: MET_CalcStac(); // считаем стационар break; case eTipUsl.Pol: MET_CalcPol(); // считаем поликлинику break; case eTipUsl.Par: case eTipUsl.Gist: MET_CalcPar(); // считаем параклинику break; } // Изменения прогресса PROP_ProgressLabel = $"Загружено: {++_BarValue} из {PART_ProgressBar.Maximum}"; Dispatcher.Invoke(_Progress, DispatcherPriority.Background, RangeBase.ValueProperty, _BarValue); // Сохраним строку в StrahReestr (если ошибок нет) if (!PRI_ErrorRow) { MET_SaveSql(); } } // Для корректрирующих реестров пересчитаем нумерацию if (PROP_ParentCod > 0) { MySql.MET_QueryNo(MyQuery.StrahReestr_Update_2(PRI_StrahFile.Cod, PROP_ParentCod)); } // Пересчитаем поле Сумму MySql.MET_QueryNo(MyQuery.StrahFile_Update_1(PRI_StrahFile.Cod)); // Подчистим связи if (PRI_TipReestr == 3 || PRI_TipReestr == 4) { MyGlo.DataSet.Tables["ReApac"].ChildRelations.Clear(); MyGlo.DataSet.Tables["RePol"].ChildRelations.Clear(); MyGlo.DataSet.Tables["RePolCons"].ChildRelations.Clear(); MyGlo.DataSet.Tables["RePol"].Clear(); MyGlo.DataSet.Tables["RePolCons"].Clear(); MyGlo.DataSet.Tables["ReApac"].Clear(); } MyGlo.DataSet.Tables["ReApstac"].ChildRelations.Clear(); MyGlo.DataSet.Tables["ReKsg"].ChildRelations.Clear(); MyGlo.DataSet.Tables["ReApstacCons"].ChildRelations.Clear(); MyGlo.DataSet.Tables["ReKsg"].Clear(); MyGlo.DataSet.Tables["ReApstacCons"].Clear(); MyGlo.DataSet.Tables["ReApstac"].Clear(); if (PRI_TipReestr == 4) { MyGlo.DataSet.Tables["RePar"].Clear(); } MyGlo.DataSet.Relations.Clear(); // Усё MessageBox.Show(string.Format("Реестр №{0} сформирован!", PRI_StrahFile.Cod)); // Показываем ошибки PRI_ErrorToExcel.MET_End(); }