public static void FromVmeshTable(this List <FloutecInterData> interData, OleDbDataReader reader)
        {
            var data = new FloutecInterData
            {
                DAT    = DateTime.ParseExact(GetReaderValue(reader, "DAT", "").Trim(), datetimeFormats, new CultureInfo("en-US"), DateTimeStyles.None),
                CH_PAR = GetReaderValue(reader, "CH_PAR", 0)
            };

            data.GetValues(reader);

            interData.Add(data);
        }
        private static void GetValues(this FloutecInterData data, OleDbDataReader reader)
        {
            var bval11 = GetReaderValue(reader, "BVAL11", (byte)0);
            var bval12 = GetReaderValue(reader, "BVAL12", (byte)0);
            var bval13 = GetReaderValue(reader, "BVAL13", (byte)0);
            var bval14 = GetReaderValue(reader, "BVAL14", (byte)0);

            var bval21 = GetReaderValue(reader, "BVAL21", (byte)0);
            var bval22 = GetReaderValue(reader, "BVAL22", (byte)0);
            var bval23 = GetReaderValue(reader, "BVAL23", (byte)0);
            var bval24 = GetReaderValue(reader, "BVAL24", (byte)0);

            if (data.CH_PAR == 0)
            {
                byte[] oldChars = { bval11, bval12, bval13, bval14 };
                byte[] newChars = { bval21, bval22, bval23, bval24 };

                data.VAL_OLD = Encoding.UTF8.GetString(oldChars);
                data.VAL_NEW = Encoding.UTF8.GetString(newChars);
            }
            else if ((data.CH_PAR >= 1 && data.CH_PAR <= 11) ||
                     (data.CH_PAR >= 13 && data.CH_PAR <= 27) ||
                     (data.CH_PAR >= 33 && data.CH_PAR <= 37) ||
                     (data.CH_PAR >= 48 && data.CH_PAR <= 60) ||
                     data.CH_PAR == 129 || data.CH_PAR == 132 || data.CH_PAR == 138 ||
                     data.CH_PAR == 142 || data.CH_PAR == 143 ||
                     (data.CH_PAR >= 147 && data.CH_PAR <= 150) ||
                     (data.CH_PAR >= 153 && data.CH_PAR <= 177) ||
                     (data.CH_PAR >= 181 && data.CH_PAR <= 185))
            {
                data.VAL_OLD = GetReaderValue(reader, "SVAL1", 0.0).ToString(CultureInfo.InvariantCulture);
                data.VAL_NEW = GetReaderValue(reader, "SVAL2", 0.0).ToString(CultureInfo.InvariantCulture);
            }
            else
            {
                switch (data.CH_PAR)
                {
                case 12:
                    switch (bval11)
                    {
                    case 0:
                        data.VAL_OLD = "Угловой";
                        break;

                    case 1:
                        data.VAL_OLD = "Фланцевый";
                        break;

                    default:
                        data.VAL_OLD = "";
                        break;
                    }

                    switch (bval21)
                    {
                    case 0:
                        data.VAL_NEW = "Угловой";
                        break;

                    case 1:
                        data.VAL_NEW = "Фланцевый";
                        break;

                    default:
                        data.VAL_NEW = "";
                        break;
                    }
                    break;

                case 28:
                case 29:
                    var oldDayFormat = (bval12 & (1 << 7)) != 0;
                    var newDayFormat = (bval22 & (1 << 7)) != 0;

                    if (bval11 > 0)
                    {
                        if (!oldDayFormat)
                        {
                            if (bval13 == 1 || bval13 == 21)
                            {
                                data.VAL_OLD = bval13 + " час ";
                            }
                            else if ((bval13 >= 2 && bval13 <= 4) || (bval13 >= 22 && bval13 <= 24))
                            {
                                data.VAL_OLD = bval13 + " часа ";
                            }
                            else
                            {
                                data.VAL_OLD = bval13 + " часов ";
                            }

                            data.VAL_OLD = data.VAL_OLD + (bval12 >> 4) + "-го " + GetMonthName(bval11);
                        }
                        else
                        {
                            var dayCountDirection = (bval12 & (1 << 5)) != 0;
                            var dayOfWeek         = (bval12 >> 3) & 7;
                            var weekOfMonth       = (bval12 >> 0) & 7;

                            data.VAL_OLD = !dayCountDirection?GetDayName(weekOfMonth, dayOfWeek) : GetOrdinalDayName(weekOfMonth, dayOfWeek);

                            data.VAL_OLD = data.VAL_OLD + " " + GetMonthName(bval11) + ", ";

                            if (bval13 == 1 || bval13 == 21)
                            {
                                data.VAL_OLD = data.VAL_OLD + bval13 + " час";
                            }
                            else if ((bval13 >= 2 && bval13 <= 4) || (bval13 >= 22 && bval13 <= 24))
                            {
                                data.VAL_OLD = data.VAL_OLD + bval13 + " часа";
                            }
                            else
                            {
                                data.VAL_OLD = data.VAL_OLD + bval13 + " часов";
                            }
                        }
                    }
                    else
                    {
                        data.VAL_OLD = "Запрет перехода";
                    }

                    if (bval21 > 0)
                    {
                        if (!newDayFormat)
                        {
                            if (bval23 == 1 || bval23 == 21)
                            {
                                data.VAL_NEW = bval23 + " час ";
                            }
                            else if ((bval23 >= 2 && bval23 <= 4) || (bval23 >= 22 && bval23 <= 24))
                            {
                                data.VAL_NEW = bval23 + " часа ";
                            }
                            else
                            {
                                data.VAL_NEW = bval23 + " часов ";
                            }

                            data.VAL_NEW = data.VAL_NEW + (bval22 >> 4) + "-го " + GetMonthName(bval21);
                        }
                        else
                        {
                            var dayCountDirection = (bval22 & (1 << 6)) != 0;
                            var dayOfWeek         = (bval22 >> 3) & 7;
                            var weekOfMonth       = (bval22 >> 0) & 7;

                            data.VAL_NEW = !dayCountDirection?GetDayName(weekOfMonth, dayOfWeek) : GetOrdinalDayName(weekOfMonth, dayOfWeek);

                            data.VAL_NEW = data.VAL_NEW + " " + GetMonthName(bval21) + ", ";

                            if (bval23 == 1 || bval23 == 21)
                            {
                                data.VAL_NEW = data.VAL_NEW + bval23 + " час";
                            }
                            else if ((bval23 >= 2 && bval23 <= 4) || (bval23 >= 22 && bval23 <= 24))
                            {
                                data.VAL_NEW = data.VAL_NEW + bval23 + " часа";
                            }
                            else
                            {
                                data.VAL_NEW = data.VAL_NEW + bval23 + " часов";
                            }
                        }
                    }
                    else
                    {
                        data.VAL_NEW = "Запрет перехода";
                    }
                    break;

                default:
                    if ((data.CH_PAR >= 30 && data.CH_PAR <= 32) || data.CH_PAR == 46 || data.CH_PAR == 47 ||
                        data.CH_PAR == 130 || data.CH_PAR == 131 ||
                        (data.CH_PAR >= 186 && data.CH_PAR <= 188) || data.CH_PAR == 191 || data.CH_PAR == 192)
                    {
                        data.VAL_OLD = bval11.ToString();
                        data.VAL_NEW = bval21.ToString();
                    }
                    else if (data.CH_PAR >= 38 && data.CH_PAR <= 40) // Модели ?????
                    {
                        data.VAL_OLD = "";
                        data.VAL_NEW = "";
                    }
                    else
                    {
                        switch (data.CH_PAR)
                        {
                        case 41:
                            switch (bval11)
                            {
                            case 0:
                                data.VAL_OLD = "кг/см2";
                                break;

                            case 1:
                                data.VAL_OLD = "МПа";
                                break;

                            default:
                                data.VAL_OLD = "";
                                break;
                            }

                            switch (bval21)
                            {
                            case 0:
                                data.VAL_NEW = "кг/см2";
                                break;

                            case 1:
                                data.VAL_NEW = "МПа";
                                break;

                            default:
                                data.VAL_NEW = "";
                                break;
                            }
                            break;

                        case 42:
                            switch (bval11)
                            {
                            case 0:
                                data.VAL_OLD = "кг/м2";
                                break;

                            case 1:
                                data.VAL_OLD = "кПа";
                                break;

                            default:
                                data.VAL_OLD = "";
                                break;
                            }

                            switch (bval21)
                            {
                            case 0:
                                data.VAL_NEW = "кг/м2";
                                break;

                            case 1:
                                data.VAL_NEW = "кПа";
                                break;

                            default:
                                data.VAL_NEW = "";
                                break;
                            }
                            break;

                        case 43:
                            data.VAL_OLD = "";
                            data.VAL_NEW = "";
                            break;

                        case 44:
                            switch (bval11)
                            {
                            case 0:
                                data.VAL_OLD = "Абсолютное";
                                break;

                            case 1:
                                data.VAL_OLD = "Избыточное";
                                break;

                            default:
                                data.VAL_OLD = "";
                                break;
                            }

                            switch (bval21)
                            {
                            case 0:
                                data.VAL_NEW = "Абсолютное";
                                break;

                            case 1:
                                data.VAL_NEW = "Избыточное";
                                break;

                            default:
                                data.VAL_NEW = "";
                                break;
                            }
                            break;

                        case 45:
                            switch (bval11)
                            {
                            case 0:
                                data.VAL_OLD = "Ненужный";
                                break;

                            case 1:
                                data.VAL_OLD = "Необходимый";
                                break;

                            default:
                                data.VAL_OLD = "";
                                break;
                            }

                            switch (bval21)
                            {
                            case 0:
                                data.VAL_NEW = "Ненужный";
                                break;

                            case 1:
                                data.VAL_NEW = "Необходимый";
                                break;

                            default:
                                data.VAL_NEW = "";
                                break;
                            }
                            break;

                        default:
                            if (data.CH_PAR >= 61 && data.CH_PAR <= 72)
                            {
                                switch (bval11)
                                {
                                case 0:
                                    data.VAL_OLD = "Выключено";
                                    break;

                                case 1:
                                    data.VAL_OLD = "Включено";
                                    break;

                                default:
                                    data.VAL_OLD = "";
                                    break;
                                }

                                switch (bval21)
                                {
                                case 0:
                                    data.VAL_NEW = "Выключено";
                                    break;

                                case 1:
                                    data.VAL_NEW = "Включено";
                                    break;

                                default:
                                    data.VAL_NEW = "";
                                    break;
                                }
                            }
                            else if (data.CH_PAR >= 61 && data.CH_PAR <= 72)
                            {
                                switch (bval11)
                                {
                                case 0:
                                    data.VAL_OLD = "Перепад";
                                    break;

                                case 1:
                                    data.VAL_OLD = "Счётчик";
                                    break;

                                default:
                                    data.VAL_OLD = "";
                                    break;
                                }

                                switch (bval21)
                                {
                                case 0:
                                    data.VAL_NEW = "Перепад";
                                    break;

                                case 1:
                                    data.VAL_NEW = "Счётчик";
                                    break;

                                default:
                                    data.VAL_NEW = "";
                                    break;
                                }
                            }
                            else
                            {
                                switch (data.CH_PAR)
                                {
                                case 128:
                                    var oldTime = new DateTime(1, 1, 1, bval11, bval12, bval13);
                                    var newTime = new DateTime(1, 1, 1, bval21, bval22, bval23);

                                    data.VAL_OLD = oldTime.ToString("HH:mm:ss");
                                    data.VAL_NEW = newTime.ToString("HH:mm:ss");
                                    break;

                                case 144:
                                case 179:
                                    data.T_PARAM = bval11;
                                    data.VAL_OLD = "Измерение";
                                    data.VAL_NEW = GetReaderValue(reader, "SVAL2", 0.0).ToString(CultureInfo.InvariantCulture);
                                    break;

                                case 145:
                                case 180:
                                    data.T_PARAM = bval21;
                                    data.VAL_NEW = "Измерение";
                                    data.VAL_OLD = GetReaderValue(reader, "SVAL1", 0.0).ToString(CultureInfo.InvariantCulture);
                                    break;

                                case 146:
                                case 151:
                                    data.T_PARAM = bval11;
                                    data.VAL_NEW = "";
                                    data.VAL_OLD = "";
                                    break;

                                case 178:
                                    data.T_PARAM = bval11;
                                    data.VAL_NEW = "";
                                    data.VAL_OLD = "HART команда " + bval21;
                                    break;

                                case 189:
                                    switch (bval11)
                                    {
                                    case 0:
                                        data.VAL_OLD = "LE,le";
                                        break;

                                    case 1:
                                        data.VAL_OLD = "LE,be";
                                        break;

                                    case 2:
                                        data.VAL_OLD = "BE,le";
                                        break;

                                    case 3:
                                        data.VAL_OLD = "BE,be";
                                        break;

                                    default:
                                        data.VAL_OLD = "";
                                        break;
                                    }

                                    switch (bval21)
                                    {
                                    case 0:
                                        data.VAL_NEW = "LE,le";
                                        break;

                                    case 1:
                                        data.VAL_NEW = "LE,be";
                                        break;

                                    case 2:
                                        data.VAL_NEW = "BE,le";
                                        break;

                                    case 3:
                                        data.VAL_NEW = "BE,be";
                                        break;

                                    default:
                                        data.VAL_NEW = "";
                                        break;
                                    }
                                    break;

                                case 190:
                                    switch (bval11)
                                    {
                                    case 0:
                                        data.VAL_OLD = "ASCII";
                                        break;

                                    case 1:
                                        data.VAL_OLD = "RTU";
                                        break;

                                    default:
                                        data.VAL_OLD = "";
                                        break;
                                    }

                                    switch (bval21)
                                    {
                                    case 0:
                                        data.VAL_NEW = "ASCII";
                                        break;

                                    case 1:
                                        data.VAL_NEW = "RTU";
                                        break;

                                    default:
                                        data.VAL_NEW = "";
                                        break;
                                    }
                                    break;

                                default:
                                    data.VAL_OLD = "";
                                    data.VAL_NEW = "";
                                    break;
                                }
                            }
                            break;
                        }
                    }
                    break;
                }
            }
        }