Esempio n. 1
0
        /// <summary>КОНСТРУКТОР </summary>
        /// <param name="pStrahFile">Строка файла реестра</param>
        public MyExcel(StrahFile pStrahFile)
        {
            // Используя NuGet пакет LinqToExcel (https://code.google.com/p/linqtoexcel/) подключаемся к книге Excel
            // Работа с Excel http://wladm.narod.ru/C_Sharp/comexcel.html
            PRI_StrahFile = pStrahFile;
            // Наш объект Excel
            PRI_ExcelApp = new e.Application();
            // Одна страница в книге
            PRI_ExcelApp.SheetsInNewWorkbook = 1;
            // Добавляем книгу
            PRI_ExcelApp.Workbooks.Add(Type.Missing);
            // Колллекция страниц
            e.Sheets _Sheets = PRI_ExcelApp.Workbooks.Item[1].Worksheets;
            // Рабочая страница
            PRI_Worksheet = (e.Worksheet)_Sheets.Item[1];
            // Заголовок
            string _Value = "Реестр №" + PRI_StrahFile.Cod;

            MET_Print("A1", _Value);
            // Шапка
            // 1
            MET_Print("A3", "Номер");
            MET_ColumnWidth("A", 6);
            // 2
            MET_Print("B3", "Тип");
            MET_ColumnWidth("B", 13);
            // 3
            MET_Print("C3", "Поступил");
            MET_ColumnWidth("C", 10);
            // 4
            MET_Print("D3", "ФИО");
            MET_ColumnWidth("D", 22);
            // 5
            MET_Print("E3", "Д.Р.");
            MET_ColumnWidth("E", 10);
            // 6
            MET_Print("F3", "Код ошибки");
            // 7
            MET_Print("G3", "Описание ошибки");
            MET_ColumnWidth("G", 80);
            // 8
            MET_Print("H3", "Код");
            MET_ColumnWidth("H", 16);
        }
Esempio n. 2
0
        /// <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();
        }