/// <summary>
        /// Получение плановых значений
        /// </summary>
        /// <param name="type"></param>
        /// <param name="arQueryRanges">отрезок времени</param>
        /// <param name="idPeriod">период времени</param>
        /// <param name="err"></param>
        /// <returns>таблица значений</returns>
        public DataTable getPlanOnMonth(TaskCalculate.TYPE type
                                        , DateTimeRange[] arQueryRanges
                                        , ID_PERIOD idPeriod, out int err)
        {
            string strQuery = string.Empty;

            for (int i = 0; i < arQueryRanges.Length; i++)
            {
                strQuery = "SELECT  p.ID as ID_PUT"
                           + @", " + _Session.m_Id + @" as [ID_SESSION]"
                           + @", v.QUALITY as QUALITY, v.VALUE as VALUE"
                           + @",v.DATE_TIME as WR_DATETIME,  ROW_NUMBER() OVER(ORDER BY p.ID) as [EXTENDED_DEFINITION] "
                           + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + "] a"
                           + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + "] p"
                           + @" ON a.ID = p.ID_ALG"
                           + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_"
                           + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v "
                           + @" ON v.ID_PUT = p.ID"
                           + @" WHERE  ID_TASK = " + (int)IdTask
                           + @" AND [DATE_TIME] >= '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                           + @" AND [DATE_TIME] < '" + arQueryRanges[i].End.AddMonths(1).ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                           + @" AND v.ID_TIME = 24";
            }

            return(Select(strQuery, out err));
        }
Beispiel #2
0
        /// <summary>
        /// Получение корр. входных значений
        /// из INVAL
        /// </summary>
        /// <param name="type">тип задачи</param>
        /// <param name="arQueryRanges"></param>
        /// <param name="idPeriod">тек. период</param>
        /// <param name="err">Индентификатор ошибки</param>
        /// <returns>таблица значений</returns>
        public DataTable GetInVal(TaskCalculate.TYPE type
                                  , DateTimeRange[] arQueryRanges
                                  , ID_PERIOD idPeriod
                                  , out int err)
        {
            string strQuery  = string.Empty;
            bool   bLastItem = false;

            for (int i = 0; i < arQueryRanges.Length; i++)
            {
                bLastItem = !(i < (arQueryRanges.Length - 1));

                strQuery += @"SELECT v.ID, v.ID_PUT, v.ID_USER, v.ID_SOURCE, v.DATE_TIME, v.ID_TIME"
                            + ", v.ID_TIMEZONE, v.QUALITY, v.VALUE, v.WR_DATETIME"
                            + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + "] a"
                            + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + "] p"
                            + @" ON a.ID = p.ID_ALG"
                            + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_"
                            + arQueryRanges[i].End.ToString(@"yyyyMM") + @"] v"
                            + @" ON v.ID_PUT = p.ID"
                            + @" WHERE  ID_TASK = " + (int)IdTask
                            + @" AND [DATE_TIME] > '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                            + @" AND [DATE_TIME] <= '" + arQueryRanges[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                            + @" AND v.ID_TIME = " + (int)idPeriod
                            + @" AND ID_TIMEZONE = " + (int)_Session.m_currIdTimezone;

                if (bLastItem == false)
                {
                    strQuery += @" UNION ALL ";
                }
            }
            strQuery += @" ORDER BY [DATE_TIME] ";

            return(Select(strQuery, out err));
        }
        /// <summary>
        /// Вставить в таблицу БД идентификатор новой сессии
        /// </summary>
        /// <param name="id">Идентификатор сессии</param>
        /// <param name="idPeriod">Идентификатор периода расчета</param>
        /// <param name="cntBasePeriod">Количество базовых периодов расчета в интервале расчета</param>
        /// <param name="idTimezone">Идентификатор часового пояса</param>
        /// <param name="dtRange">Диапазон даты/времени для интервала расчета</param>
        /// <param name="err">Идентификатор ошибки при выполнеинии функции</param>
        private void insertIdSession(int id
                                     , ID_PERIOD idPeriod
                                     , int cntBasePeriod
                                     , ID_TIMEZONE idTimezone
                                     , DateTimeRange dtRange
                                     , out int err)
        {
            err = -1;

            string strQuery = string.Empty;

            // подготовить содержание запроса при вставке значений, идентифицирующих новую сессию
            strQuery = @"INSERT INTO " + HandlerDbTaskCalculate.s_NameDbTables[(int)INDEX_DBTABLE_NAME.SESSION] + @" ("
                       + @"[ID_CALCULATE]"
                       + @", [ID_TASK]"
                       + @", [ID_USER]"
                       + @", [ID_TIME]"
                       + @", [ID_TIMEZONE]"
                       + @", [DATETIME_BEGIN]"
                       + @", [DATETIME_END]) VALUES ("
            ;

            strQuery += id;
            strQuery += @"," + (int)ID_TASK.TEP;
            strQuery += @"," + HTepUsers.Id;
            strQuery += @"," + (int)idPeriod;
            strQuery += @"," + (int)idTimezone;
            strQuery += @",'" + dtRange.Begin.ToString(System.Globalization.CultureInfo.InvariantCulture) + @"'"; // @"yyyyMMdd HH:mm:ss"
            strQuery += @",'" + dtRange.End.ToString(System.Globalization.CultureInfo.InvariantCulture) + @"'";   // @"yyyyMMdd HH:mm:ss"

            strQuery += @")";

            //Вставить в таблицу БД строку с идентификтором новой сессии
            DbTSQLInterface.ExecNonQuery(ref _dbConnection, strQuery, null, null, out err);
        }
Beispiel #4
0
 public void Initialize(long id, ID_PERIOD idPeriod, ID_TIMEZONE idTimezone, int curOffsetUTC, DateTimeRange rangeDatetime)
 {
     m_Id             = id;
     m_currIdPeriod   = idPeriod;
     m_currIdTimezone = idTimezone;
     m_curOffsetUTC   = curOffsetUTC;
     m_rangeDatetime  = rangeDatetime;
 }
Beispiel #5
0
        /// <summary>
        /// Возвратить объект-таблицу со значенями по умолчанию
        /// </summary>
        /// <param name="idPeriod">Идентификатор </param>
        /// <param name="err">Признак выполнения функции</param>
        /// <returns>Объект-таблица со значенями по умолчанию</returns>
        public DataTable GetValuesDef(ID_PERIOD idPeriod, out int err)
        {
            DataTable tableRes = new DataTable();

            err = -1;

            tableRes = DbTSQLInterface.Select(ref _dbConnection, getQueryValuesDef(idPeriod), null, null, out err);

            return(tableRes);
        }
        protected override DataTable getDefaultTableValues(ID_PERIOD idPeriod, out int err)
        {
            DataTable tableRes = new DataTable();

            err = -1;

            tableRes = base.getDefaultTableValues(idPeriod, out err);

            return(tableRes);
        }
        /// <summary>
        /// Возвратить объект-таблицу со значенями по умолчанию
        /// </summary>
        /// <param name="idPeriod">Идентификатор </param>
        /// <param name="err">Признак выполнения функции</param>
        /// <returns>Объект-таблица со значенями по умолчанию</returns>
        public override DataTable GetValuesDef(ID_PERIOD idPeriod, out int err)
        {
            DataTable tableRes = new DataTable();

            string query = @"SELECT  d.[ID_PUT],d.[ID_TIME],d.[VALUE],d.[WR_ID_USER],d.[WR_DATETIME] from [TEP_NTEC_5].[dbo].[inalg] a left join [TEP_NTEC_5].[dbo].[input] i on a.id=i.ID_ALG inner join inval_def d on d.ID_PUT=i.ID where a.ID_TASK=2 and d.[ID_TIME] = " + (int)idPeriod;

            err = -1;

            tableRes = DbTSQLInterface.Select(ref _dbConnection, query, null, null, out err);

            return(tableRes);
        }
Beispiel #8
0
        /// <summary>
        /// Запрос для получения значений "по умолчанию"
        /// </summary>
        private string getQueryValuesDef(ID_PERIOD idPeriod)
        {
            string strRes = string.Empty;

            strRes = @"SELECT"
                     + @" *"
                     + @" FROM [dbo].[" + HandlerDbTaskCalculate.s_NameDbTables[(int)INDEX_DBTABLE_NAME.INVAL_DEF] + @"] v"
                     + @" WHERE [ID_TIME] = " + (int)idPeriod //(int)_currIdPeriod
            ;

            return(strRes);
        }
        protected override DataTable getArchiveTableValues(TaskCalculate.TYPE type
                                                           , ID_PERIOD idPeriod
                                                           , int cntBasePeriod
                                                           , ASUTP.Core.DateTimeRange [] arQueryRanges
                                                           , out int err)
        {
            err = 0;

            DataTable tableRes = base.getArchiveTableValues(type, idPeriod, cntBasePeriod, arQueryRanges, out err);

            return(tableRes);
        }
Beispiel #10
0
        /// <summary>
        /// Возвратить объект-таблицу со значениями из таблицы с сохраняемыми значениями из источников информации
        /// </summary>
        /// <param name="cntBasePeriod">Количество периодов расчета в интервале запрашиваемых данных</param>
        /// <param name="arQueryRanges">Массив диапазонов даты/времени - интервал(ы) заправшиваемых данных</param>
        /// <param name="err">Признак выполнения функции</param>
        /// <returns>Таблица со значенями</returns>
        public DataTable GetValuesVar(TaskCalculate.TYPE type
                                      , ID_PERIOD idPeriod
                                      , int cntBasePeriod
                                      , DateTimeRange[] arQueryRanges
                                      , out int err)
        {
            DataTable tableRes = new DataTable();

            err = -1;

            tableRes = DbTSQLInterface.Select(ref _dbConnection
                                              , getQueryValuesVar(type
                                                                  , idPeriod
                                                                  , cntBasePeriod
                                                                  , arQueryRanges)
                                              , null, null
                                              , out err);

            return(tableRes);
        }
Beispiel #11
0
            /// <summary>
            /// Установка периода
            /// </summary>
            /// <param name="idPeriod"></param>
            public DateTimeRange SetPeriod(ID_PERIOD idPeriod)
            {
                DateTimeRange rangeRes = new DateTimeRange();

                HDateTimePicker hdtpBegin = Controls.Find(INDEX_CONTROL_BASE.HDTP_BEGIN.ToString(), true)[0] as HDateTimePicker
                , hdtpEnd = Controls.Find(INDEX_CONTROL_BASE.HDTP_END.ToString(), true)[0] as HDateTimePicker;

                //Выполнить запрос на получение значений для заполнения 'DataGridView'
                switch (idPeriod)
                {
                case ID_PERIOD.HOUR:
                    break;

                case ID_PERIOD.DAY:
                    break;

                case ID_PERIOD.MONTH:
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.MONTH;
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , DateTime.Now.Month
                                                   , 1
                                                   , 0
                                                   , 0
                                                   , 0);
                    break;

                case ID_PERIOD.YEAR:
                    break;

                default:
                    break;
                }

                rangeRes.Set(hdtpBegin.Value, hdtpEnd.Value);

                return(rangeRes);
            }
        /// <summary>
        /// Получение корр. PUT's
        /// </summary>
        /// <param name="type"></param>
        /// <param name="arQueryRanges"></param>
        /// <param name="idPeriod">период</param>
        /// <param name="err"></param>
        /// <returns></returns>
        public DataTable getInPut(TaskCalculate.TYPE type
                                  , DateTimeRange[] arQueryRanges
                                  , ID_PERIOD idPeriod
                                  , out int err)
        {
            string strQuery = string.Empty;

            for (int i = 0; i < arQueryRanges.Length; i++)
            {
                strQuery += @"SELECT DISTINCT v.ID,v.ID_PUT, v.ID_USER, v.ID_SOURCE,v.DATE_TIME, v.ID_TIME"
                            + ", v.ID_TIMEZONE,v.QUALITY,v.VALUE,v.WR_DATETIME"
                            + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + "] a"
                            + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + "] p"
                            + @" ON a.ID = p.ID_ALG"
                            + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_"
                            + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v "
                            + @" ON v.ID_PUT = p.ID"
                            + @" WHERE  ID_TASK = " + (int)IdTask
                            + @" AND v.ID_TIME = " + (int)idPeriod + " AND v.ID_SOURCE = 0"
                            + @" ORDER BY ID";
            }
            return(Select(strQuery, out err));
        }
        /// <summary>
        /// Возвратить объект-таблицу со значениями из таблицы с сохраняемыми значениями из источников информации
        ///  + для текущей задачи "растиражировать" плановые значения за месяц
        /// </summary>
        /// <param name="idPeriod">Идентификатор расчета (HOUR, DAY, MONTH, YEAR)</param>
        /// <param name="cntBasePeriod">Количество периодов расчета в интервале запрашиваемых данных</param>
        /// <param name="arQueryRanges">Массив диапазонов даты/времени - интервал(ы) запрашиваемых данных</param>
        /// <param name="err">Признак выполнения функции</param>
        /// <returns>Таблица со значениями</returns>
        protected override DataTable getVariableTableValues(TaskCalculate.TYPE type
                                                            , ID_PERIOD idPeriod
                                                            , int cntBasePeriod
                                                            , ASUTP.Core.DateTimeRange [] arQueryRanges
                                                            , out int err)
        {
            DataTable tableRes = new DataTable()
            , tableMonthPlan;

            int iDay               = -1
            , periodTotalDays      = -1
            , iColumnDataDate      = -1;
            DateTime datetimeValue = DateTime.MinValue;

            object[] rowValues;
            double   dayPlan = -1F;

            ASUTP.Core.DateTimeRange [] arMonthPlanQueryRanges;

            err = -1;

            tableRes = base.getVariableTableValues(type, idPeriod, cntBasePeriod, arQueryRanges, out err);
            // дополнительно прочитаем плановые значения (план выработки - входной параметр)
            if ((type & TaskCalculate.TYPE.IN_VALUES) == TaskCalculate.TYPE.IN_VALUES)
            {
                // для плана выработки индивидуальный диапазон даты/времени
                arMonthPlanQueryRanges = HandlerDbTaskCalculate.GetDateTimeRangeVariableValues(ID_PERIOD.MONTH, _Session.m_DatetimeRange, _Session.m_curOffsetUTC, MODE_DATA_DATETIME.Ended);
                // для плана выработки индивидуальный запрос значений
                tableMonthPlan = Select(HandlerDbTaskCalculate.GetQueryVariableValues(IdTask
                                                                                      , _Session.m_Id
                                                                                      , type
                                                                                      , ID_PERIOD.MONTH
                                                                                      , 1
                                                                                      , arMonthPlanQueryRanges
                                                                                      , getWhereRangeAlg(type)
                                                                                      , MODE_AGREGATE_GETVALUES.OFF
                                                                                      , MODE_DATA_DATETIME.Ended)
                                        , out err);

                if (tableMonthPlan.Rows.Count == 1)
                {
                    periodTotalDays = (int)(_Session.m_DatetimeRange.End - _Session.m_DatetimeRange.Begin).TotalDays;
                    dayPlan         = (double)tableMonthPlan.Rows[0][@"VALUE"] / periodTotalDays;

                    rowValues = new object[tableMonthPlan.Columns.Count];

                    foreach (DataColumn column in tableMonthPlan.Columns)
                    {
                        if (column.ColumnName.Equals(@"VALUE") == true)
                        {
                            rowValues[column.Ordinal] = dayPlan;
                        }
                        else
                        {
                            if (column.ColumnName.Equals(@"EXTENDED_DEFINITION") == true)
                            {
                                iColumnDataDate = column.Ordinal;
                                if (DateTime.TryParse((string)tableMonthPlan.Rows[0][column.Ordinal], out datetimeValue) == true)
                                {
                                    ////??? в запросе добавляется период(месяц)
                                    //datetimeValue = datetimeValue.AddMonths(-1)
                                    ;
                                }
                                else
                                {
                                    Logging.Logg().Error(string.Format(@"HandlerDbTaskAutobookMonthValuesCalculate::getVariableTableValues () - не распознано значение в {0}...", column.ColumnName), Logging.INDEX_MESSAGE.NOT_SET);
                                }
                            }
                            else
                            {
                                ;
                            }

                            rowValues[column.Ordinal] = tableMonthPlan.Rows[0][column.Ordinal];
                        }
                    }

                    if (datetimeValue.Equals(DateTime.MinValue) == false)
                    {
                        for (iDay = 0; iDay < periodTotalDays; iDay++)
                        {
                            rowValues[iColumnDataDate] = string.Format(@"{0:s}", datetimeValue.AddDays(-1 * iDay));

                            tableRes.Rows.Add(rowValues);
                        }

                        tableRes.AcceptChanges();
                    }
                    else
                    {
                        Logging.Logg().Error(string.Format(@"HandlerDbTaskAutobookMonthValuesCalculate::getVariableTableValues () - не удалось преобразовать метку даты/времени {0} планового значения"
                                                           , tableMonthPlan.Rows[0][iColumnDataDate])
                                             , Logging.INDEX_MESSAGE.NOT_SET);
                    }
                }
                else
                {
                    Logging.Logg().Error(string.Format(@"HandlerDbTaskAutobookMonthValuesCalculate::getVariableTableValues () - нет плановых значений за {0:s} - {1:s}"
                                                       , _Session.m_DatetimeRange.Begin, _Session.m_DatetimeRange.End)
                                         , Logging.INDEX_MESSAGE.NOT_SET);
                }
            }
            else
            {
                // план только во входных значениях, в выходных его нет
                ;
            }

            return(tableRes);
        }
        /// <summary>
        /// Инициализация объектов формы
        /// </summary>
        /// <param name="err">номер ошибки</param>
        /// <param name="errMsg">текст ошибки</param>
        protected override void initialize(out int err, out string errMsg)
        {
            err    = 0;
            errMsg = string.Empty;

            ID_TIMEZONE idProfileTimezone = ID_TIMEZONE.UNKNOWN;
            ID_PERIOD   idProfilePeriod   = ID_PERIOD.UNKNOWN;
            string      strItem           = string.Empty;
            Control     ctrl = null;

            //Заполнить таблицы со словарными, проектными величинами
            // PERIOD, TIMWZONE, COMP, PARAMETER, RATIO
            initialize
            //m_markTableDictPrj = new HMark
                (new ID_DBTABLE[] { /*ID_DBTABLE.PERIOD
                                     * , */ID_DBTABLE.TIME, ID_DBTABLE.TIMEZONE
                        , ID_DBTABLE.COMP_LIST
                        , IsInParameters == true ? ID_DBTABLE.IN_PARAMETER : ID_DBTABLE.UNKNOWN
                        , IsOutParameters == true ? ID_DBTABLE.OUT_PARAMETER : ID_DBTABLE.UNKNOWN
                        , ID_DBTABLE.RATIO
                }
                , out err, out errMsg
                );

            HandlerDb.FilterDbTableTimezone = TepCommon.HandlerDbTaskCalculate.DbTableTimezone.Msk;
            HandlerDb.FilterDbTableTime     = TepCommon.HandlerDbTaskCalculate.DbTableTime.Month;
            HandlerDb.FilterDbTableCompList = HandlerDbTaskCalculate.DbTableCompList.Tg;

            //активность_кнопки_сохранения
            try {
                if (Enum.IsDefined(typeof(MODE_CORRECT), m_dictProfile.GetAttribute(HTepUsers.ID_ALLOWED.ENABLED_CONTROL)) == true)
                {
                    (Controls.Find(PanelManagementVedomostBl.INDEX_CONTROL.BUTTON_SAVE.ToString(), true)[0] as Button).Enabled =
                        (MODE_CORRECT)MODE_CORRECT.Parse(typeof(MODE_CORRECT), m_dictProfile.GetAttribute(HTepUsers.ID_ALLOWED.ENABLED_CONTROL)) == MODE_CORRECT.ENABLE;
                }
                else
                {
                    (Controls.Find(PanelManagementVedomostBl.INDEX_CONTROL.BUTTON_SAVE.ToString(), true)[0] as Button).Enabled = false;
                }
            } catch (Exception e) {
                // ???
                Logging.Logg().Exception(e, string.Format(@"PanelTaskVedomostBl::initialize () - BUTTON_SAVE.Enabled..."), Logging.INDEX_MESSAGE.NOT_SET);

                err = -2;
            }

            if (err == 0)
            {
                try {
                    //???
                    m_bflgClear = !m_bflgClear;

                    //Заполнить элемент управления с часовыми поясами
                    idProfileTimezone = ID_TIMEZONE.MSK;
                    PanelManagement.FillValueTimezone(HandlerDb.m_dictTableDictPrj[ID_DBTABLE.TIMEZONE]
                                                      , idProfileTimezone);
                    //Заполнить элемент управления с периодами расчета
                    idProfilePeriod = (ID_PERIOD)int.Parse(m_dictProfile.GetAttribute(HTepUsers.ID_ALLOWED.PERIOD));
                    PanelManagement.FillValuePeriod(HandlerDb.m_dictTableDictPrj[ID_DBTABLE.TIME]
                                                    , idProfilePeriod);

                    PanelManagement.AllowUserTimezoneChanged = false;
                    PanelManagement.AllowUserPeriodChanged   = false;
                } catch (Exception e) {
                    Logging.Logg().Exception(e, @"PanelTaskVedomostBl::initialize () - ...", Logging.INDEX_MESSAGE.NOT_SET);
                }
            }
            else
            {
                Logging.Logg().Error(MethodBase.GetCurrentMethod(), @"...", Logging.INDEX_MESSAGE.NOT_SET);
            }
        }
        /// <summary>
        /// Запрос к БД по получению редактируемых значений (автоматически собираемые значения)
        ///  , структура таблицы совместима с [inval], [outval]
        /// </summary>
        /// <param name="type"></param>
        /// <param name="idPeriod">период</param>
        /// <param name="cntBasePeriod"></param>
        /// <param name="arQueryRanges">диапазон времени запроса</param>
        /// <returns></returns>
        public override string getQueryValuesVar(TaskCalculate.TYPE type, ID_PERIOD idPeriod
                                                 , int cntBasePeriod, DateTimeRange[] arQueryRanges)
        {
            string strRes     = string.Empty
            , whereParameters = string.Empty;

            if (!(type == TaskCalculate.TYPE.UNKNOWN))
            {
                // аналог в 'GetQueryParameters'
                //whereParameters = getWhereRangeAlg(type);
                //if (whereParameters.Equals(string.Empty) == false)
                //    whereParameters = @" AND a." + whereParameters;
                //else
                //    ;

                int  i         = -1;
                bool bLastItem = false
                , bEquDatetime = false;

                for (i = 0; i < arQueryRanges.Length; i++)
                {
                    if (arQueryRanges[i].Begin < DateTime.Now)
                    {
                        bLastItem = !(i < (arQueryRanges.Length - 1));

                        strRes += @"SELECT v.ID_PUT, v.QUALITY, v.[VALUE]"
                                  + @", " + _Session.m_Id + @" as [ID_SESSION]"
                                  + @",[DATE_TIME]"
                                  + @", m.[AVG]"
                                  + @", [EXTENDED_DEFINITION] = " + i
                                  //+ @", GETDATE () as [WR_DATETIME]"
                                  + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v"
                                  + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] p ON p.ID = v.ID_PUT"
                                  + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + @"] a ON a.ID = p.ID_ALG AND a.ID_TASK = " + (int)IdTask + whereParameters
                                  + @" LEFT JOIN [dbo].[measure] m ON a.ID_MEASURE = m.ID"
                                  + @" WHERE v.[ID_TIME] = " + (int)idPeriod //???ID_PERIOD.HOUR //??? _currIdPeriod
                        ;
                        // при попадании даты/времени на границу перехода между отчетными периодами (месяц)
                        // 'Begin' == 'End'
                        if (bLastItem == true)
                        {
                            bEquDatetime = arQueryRanges[i].Begin.Equals(arQueryRanges[i].End);
                        }
                        else
                        {
                            ;
                        }

                        if (bEquDatetime == false)
                        {
                            strRes += @" AND [DATE_TIME] >= '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                                      + @" AND [DATE_TIME] < '" + arQueryRanges[i].End.AddDays(1).ToString(@"yyyyMMdd HH:mm:ss") + @"'";
                        }

                        if (bLastItem == false)
                        {
                            strRes += @" UNION ALL ";
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        // исключить лишнюю запятую
                        strRes = strRes.Substring(0, strRes.Length - (" UNION ALL ".Length - 1));
                        break;
                    }
                }

                strRes = " " + @" SELECT v.ID_PUT" // as [ID]"
                         + @", " + _Session.m_Id + @" as [ID_SESSION]"
                         + @", [QUALITY]"
                         + ",[VALUE]"
                         + ",[DATE_TIME] as [WR_DATETIME]"
                         + @",[EXTENDED_DEFINITION]"
                         + @" FROM (" + strRes + @") as v"
                         + @" ORDER BY  v.ID_PUT,v.DATE_TIME";
            }
            else
            {
                Logging.Logg().Error(@"TepCommon.HandlerDbTaskCalculate::getQueryValuesVar () - неизветстный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET);
            }

            return(strRes);
        }
Beispiel #16
0
            private void setModeDatetimeRange()
            {
                ID_PERIOD idPeriod = IdPeriod;

                HDateTimePicker hdtpBegin = findControl(INDEX_CONTROL_BASE.HDTP_BEGIN.ToString()) as HDateTimePicker
                , hdtpEnd = findControl(INDEX_CONTROL_BASE.HDTP_END.ToString()) as HDateTimePicker;

                //Выполнить запрос на получение значений для заполнения 'DataGridView'
                switch (idPeriod)
                {
                case ID_PERIOD.HOUR:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , DateTime.Now.Month
                                                   , DateTime.Now.Day
                                                   , DateTime.Now.Hour
                                                   , 0
                                                   , 0).AddHours(-1);
                    hdtpEnd.Value    = hdtpBegin.Value.AddHours(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.HOUR;
                    break;

                //case ID_PERIOD.SHIFTS:
                //    hdtpBegin.Mode = HDateTimePicker.MODE.HOUR;
                //    hdtpEnd.Mode = HDateTimePicker.MODE.HOUR;
                //    break;
                case ID_PERIOD.DAY:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , DateTime.Now.Month
                                                   , DateTime.Now.Day
                                                   , 0
                                                   , 0
                                                   , 0).AddDays(-1);
                    hdtpEnd.Value    = hdtpBegin.Value.AddDays(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.DAY;
                    break;

                case ID_PERIOD.MONTH:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , DateTime.Now.Month
                                                   , 1
                                                   , 0
                                                   , 0
                                                   , 0) /*.AddMonths(-1)*/;
                    hdtpEnd.Value    = hdtpBegin.Value.AddMonths(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.MONTH;
                    break;

                case ID_PERIOD.YEAR:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , 1
                                                   , 1
                                                   , 0
                                                   , 0
                                                   , 0).AddYears(0);
                    hdtpEnd.Value    = hdtpBegin.Value.AddYears(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.YEAR;
                    break;

                default:
                    break;
                }
            }
        /// <summary>
        /// Создать новую сессию для расчета
        ///  - вставить входные данные во временную таблицу
        /// </summary>
        /// <param name="idSession">Идентификатор сессии</param>
        /// <param name="idPeriod">Идентификатор периода расчета</param>
        /// <param name="cntBasePeriod">Количество базовых периодов расчета в интервале расчета</param>
        /// <param name="idTimezone">Идентификатор часового пояса</param>
        /// <param name="tablePars">Таблица характеристик входных параметров</param>
        /// <param name="tableSessionValues">Таблица значений входных параметров</param>
        /// <param name="tableDefValues">Таблица значений по умолчанию входных параметров</param>
        /// <param name="dtRange">Диапазон даты/времени для интервала расчета</param>
        /// <param name="err">Идентификатор ошибки при выполнеинии функции</param>
        /// <param name="strErr">Строка текста сообщения при наличии ошибки</param>
        public void CreateSession(int idSession
                                  , ID_PERIOD idPeriod
                                  , int cntBasePeriod
                                  , ID_TIMEZONE idTimezone
                                  , DataTable tablePars
                                  , ref DataTable [] arTableValues
                                  , DateTimeRange dtRange
                                  , out int err, out string strErr)
        {
            err    = 0;
            strErr = string.Empty;

            int    iAVG     = -1;
            string strQuery = string.Empty;

            // строки для удаления из таблицы значений "по умолчанию"
            // при наличии дубликатов строк в таблице с загруженными из источников с данными
            DataRow[] rowsSel = null;

            // удалить строки из таблицы со значениями "по умолчанию"
            foreach (DataRow rValVar in arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows)
            {
                rowsSel = arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.DEFAULT].Select(@"ID_PUT=" + rValVar[@"ID"]);
                foreach (DataRow rToRemove in rowsSel)
                {
                    arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.DEFAULT].Rows.Remove(rToRemove);
                }
            }
            // вставить строки из таблицы со значениями "по умолчанию"
            foreach (DataRow rValDef in arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.DEFAULT].Rows)
            {
                rowsSel = tablePars.Select(@"ID=" + rValDef[@"ID_PUT"]);
                if (rowsSel.Length == 1)
                {
                    iAVG = (Int16)rowsSel[0][@"AVG"];

                    arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows.Add(new object[]
                    {
                        rValDef[@"ID_PUT"]
                        //, HUsers.Id //ID_USER
                        //, -1 //ID_SOURCE
                        , idSession                                                                           //ID_SESSION
                        , (int)HandlerDbTaskCalculate.ID_QUALITY_VALUE.DEFAULT                                //QUALITY
                        , (iAVG == 0) ? cntBasePeriod * (double)rValDef[@"VALUE"] : (double)rValDef[@"VALUE"] //VALUE
                        , HDateTime.ToMoscowTimeZone()                                                        //??? GETADTE()
                    }
                                                                                                   );
                }
                else
                {
                    ; // по идентификатору найден не единственный парпметр расчета
                }
            }

            if ((arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Columns.Count > 0) &&
                (arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows.Count > 0))
            {
                //Вситвить строку с идентификатором новой сессии
                insertIdSession(idSession, idPeriod, cntBasePeriod, idTimezone, dtRange, out err);
                //Вставить строки в таблицу БД со входными значениями для расчета
                insertInValues(arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION], out err);
                //Вставить строки в таблицу БД со выходными значениями для расчета
                insertOutValues(idSession, out err);

                // необходимость очистки/загрузки - приведение структуры таблицы к совместимому с [inval]
                arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows.Clear();
                // получить входные для расчета значения для возможности редактирования
                strQuery = @"SELECT [ID_PUT] as [ID], [ID_SESSION], [QUALITY], [VALUE], [WR_DATETIME]"
                           + @" FROM [" + s_NameDbTables[(int)INDEX_DBTABLE_NAME.INVALUES] + @"]"
                           + @" WHERE [ID_SESSION]=" + idSession;
                arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION] = Select(strQuery, out err);
            }
            else
            {
                Logging.Logg().Error(@"HandlerDbTaskCalculate::CreateSession () - отсутствуют строки для вставки ...", Logging.INDEX_MESSAGE.NOT_SET);
            }
        }
Beispiel #18
0
 public void FillValuePeriod(DataTable tableValues, ID_PERIOD idSelected)
 {
     fillComboBoxValues(tableValues.Rows.Cast <DataRow>(), INDEX_CONTROL_BASE.CBX_PERIOD, (int)idSelected, @"DESCRIPTION", cbxPeriod_SelectedIndexChanged);
 }
Beispiel #19
0
 public void SetCurrentPeriod(ID_PERIOD idPeriod)
 {
     m_currIdPeriod = idPeriod;
 }
            public void SetPeriod(ID_PERIOD idPeriod)
            {
                HDateTimePicker hdtpBegin = Controls.Find(INDEX_CONTROL_BASE.HDTP_BEGIN.ToString(), true)[0] as HDateTimePicker
                , hdtpEnd = Controls.Find(INDEX_CONTROL_BASE.HDTP_END.ToString(), true)[0] as HDateTimePicker;

                //Выполнить запрос на получение значений для заполнения 'DataGridView'
                switch (idPeriod)
                {
                case ID_PERIOD.HOUR:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , DateTime.Now.Month
                                                   , DateTime.Now.Day
                                                   , DateTime.Now.Hour
                                                   , 0
                                                   , 0).AddHours(-1);
                    hdtpEnd.Value    = hdtpBegin.Value.AddHours(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.HOUR;
                    break;

                //case ID_PERIOD.SHIFTS:
                //    hdtpBegin.Mode = HDateTimePicker.MODE.HOUR;
                //    hdtpEnd.Mode = HDateTimePicker.MODE.HOUR;
                //    break;
                case ID_PERIOD.DAY:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , DateTime.Now.Month
                                                   , DateTime.Now.Day
                                                   , 0
                                                   , 0
                                                   , 0).AddDays(-1);
                    hdtpEnd.Value    = hdtpBegin.Value.AddDays(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.DAY;
                    break;

                case ID_PERIOD.MONTH:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , DateTime.Now.Month
                                                   , 1
                                                   , 0
                                                   , 0
                                                   , 0).AddMonths(-1);
                    hdtpEnd.Value    = hdtpBegin.Value.AddMonths(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.MONTH;
                    break;

                case ID_PERIOD.YEAR:
                    hdtpBegin.Value = new DateTime(DateTime.Now.Year
                                                   , 1
                                                   , 1
                                                   , 0
                                                   , 0
                                                   , 0).AddYears(-1);
                    hdtpEnd.Value    = hdtpBegin.Value.AddYears(1);
                    hdtpBegin.Mode   =
                        hdtpEnd.Mode =
                            HDateTimePicker.MODE.YEAR;
                    break;

                default:
                    break;
                }
            }
Beispiel #21
0
        /// <summary>
        /// Запрос к БД по получению редактируемых значений (автоматически собираемые значения)
        ///  , структура таблицы совместима с [inval], [outval]
        /// </summary>
        public virtual string getQueryValuesVar(TaskCalculate.TYPE type
                                                , ID_PERIOD idPeriod
                                                , int cntBasePeriod
                                                , DateTimeRange[] arQueryRanges)
        {
            string strRes     = string.Empty
            , whereParameters = string.Empty;

            if (!(type == TaskCalculate.TYPE.UNKNOWN))
            {
                // аналог в 'GetQueryParameters'
                whereParameters = getWhereRangeAlg(type);
                if (whereParameters.Equals(string.Empty) == false)
                {
                    whereParameters = @" AND a." + whereParameters;
                }
                else
                {
                    ;
                }

                int  i         = -1;
                bool bLastItem = false
                , bEquDatetime = false;

                for (i = 0; i < arQueryRanges.Length; i++)
                {
                    bLastItem = !(i < (arQueryRanges.Length - 1));

                    strRes += @"SELECT v.ID_PUT, v.QUALITY, v.[VALUE]"
                              + @", " + _Session.m_Id + @" as [ID_SESSION]"
                              + @", m.[AVG]"
                              //+ @", GETDATE () as [WR_DATETIME]"
                              + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v"
                              + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] p ON p.ID = v.ID_PUT"
                              + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + @"] a ON a.ID = p.ID_ALG AND a.ID_TASK = " + (int)_iIdTask + whereParameters
                              + @" LEFT JOIN [dbo].[measure] m ON a.ID_MEASURE = m.ID"
                              + @" WHERE v.[ID_TIME] = " + (int)idPeriod //???ID_PERIOD.HOUR //??? _currIdPeriod
                    ;
                    // при попадании даты/времени на границу перехода между отчетными периодами (месяц)
                    // 'Begin' == 'End'
                    if (bLastItem == true)
                    {
                        bEquDatetime = arQueryRanges[i].Begin.Equals(arQueryRanges[i].End);
                    }
                    else
                    {
                        ;
                    }

                    if (bEquDatetime == false)
                    {
                        strRes += @" AND [DATE_TIME] > '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                                  + @" AND [DATE_TIME] <= '" + arQueryRanges[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'";
                    }
                    else
                    {
                        strRes += @" AND [DATE_TIME] = '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'";
                    }

                    if (bLastItem == false)
                    {
                        strRes += @" UNION ALL ";
                    }
                    else
                    {
                        ;
                    }
                }

                strRes = @"SELECT v.ID_PUT" // as [ID]"
                         + @", " + _Session.m_Id + @" as [ID_SESSION]"
                         + @", CASE"
                         + @" WHEN COUNT (*) = " + cntBasePeriod + @" THEN MIN(v.[QUALITY])"
                         + @" WHEN COUNT (*) = 0 THEN " + (int)ID_QUALITY_VALUE.NOT_REC
                         + @" ELSE " + (int)ID_QUALITY_VALUE.PARTIAL
                         + @" END as [QUALITY]"
                         + @", CASE"
                         + @" WHEN v.[AVG] = 0 THEN SUM (v.[VALUE])"
                         + @" WHEN v.[AVG] = 1 THEN AVG (v.[VALUE])"
                         + @" ELSE MIN (v.[VALUE])"
                         + @" END as [VALUE]"
                         + @", GETDATE () as [WR_DATETIME]"
                         + @" FROM (" + strRes + @") as v"
                         + @" GROUP BY v.ID_PUT"
                         + @", v.[AVG]"
                ;
            }
            else
            {
                Logging.Logg().Error(@"HandlerDbTaskCalculate::getQueryValuesVar () - неизветстный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET);
            }

            return(strRes);
        }
Beispiel #22
0
        /// <summary>
        /// Запрос к БД по получению редактируемых значений (автоматически собираемые значения)
        ///  , структура таблицы совместима с [inval], [outval]
        /// </summary>
        /// <param name="type">тип задачи</param>
        /// <param name="idPeriod">период</param>
        /// <param name="cntBasePeriod">период(день,месяц,год)</param>
        /// <param name="arQueryRanges">диапазон времени запроса</param>
        /// <returns>строка запроса</returns>
        public override string GetQueryValuesVar(TaskCalculate.TYPE type, ID_PERIOD idPeriod
                                                 , int cntBasePeriod, DateTimeRange[] arQueryRanges)
        {
            string strRes     = string.Empty
            , whereParameters = string.Empty;

            if (!(type == TaskCalculate.TYPE.UNKNOWN))
            {
                // аналог в 'GetQueryParameters'
                //whereParameters = getWhereRangeAlg(type);
                //if (whereParameters.Equals(string.Empty) == false)
                //    whereParameters = @" AND a." + whereParameters;
                //else
                //    ;

                int  i         = -1;
                bool bLastItem = false
                , bEquDatetime = false;

                for (i = 0; i < arQueryRanges.Length; i++)
                {
                    bLastItem = !(i < (arQueryRanges.Length - 1));

                    strRes += @"SELECT v.ID_PUT, v.QUALITY, v.[VALUE]"
                              + @", " + _Session.m_Id + @" as [ID_SESSION]"
                              + @", [DATE_TIME]"
                              + @", CONVERT(varchar, [DATE_TIME], 127) as [EXTENDED_DEFINITION] "
                              + @"FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + @"] a "
                              + @"LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] p "
                              + @"ON a.ID = p.ID_ALG AND a.ID_TASK = " + (int)IdTask + " "
                              + @"LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_"
                              + arQueryRanges[i].End.ToString(@"yyyyMM") + @"] v "
                              + @"ON p.ID = v.ID_PUT "
                              + @"WHERE v.[ID_TIME] = " + (int)idPeriod //+ " AND [ID_SOURCE] > 0 "
                              + @" AND ID_TIMEZONE = " + (int)_Session.m_currIdTimezone
                    ;
                    // при попадании даты/времени на границу перехода между отчетными периодами (месяц)
                    // 'Begin' == 'End'
                    if (bLastItem == true)
                    {
                        bEquDatetime = arQueryRanges[i].Begin.Equals(arQueryRanges[i].End);
                    }

                    if (bEquDatetime == false)
                    {
                        strRes += @" AND [DATE_TIME] > '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                                  + @" AND [DATE_TIME] <= '" + arQueryRanges[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'";
                    }

                    if (bLastItem == false)
                    {
                        strRes += @" UNION ALL ";
                    }
                }

                strRes = "" + @"SELECT v.ID_PUT"
                         + @", " + _Session.m_Id + @" as [ID_SESSION]"
                         + @", [QUALITY]"
                         + @", [VALUE]"
                         + @", [DATE_TIME] as [WR_DATETIME]"
                         + @", [EXTENDED_DEFINITION] "
                         + @"FROM (" + strRes + @") as v "
                         + @"ORDER BY v.ID_PUT,v.DATE_TIME";
            }
            else
            {
                Logging.Logg().Error(@"TepCommon.HandlerDbTaskCalculate::getQueryValuesVar () - неизветстный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET);
            }

            return(strRes);
        }
 public void Load(ID_PERIOD idTime)
 {
 }