public void InitTEC(FormChangeMode.MODE_TECCOMPONENT mode, /*TYPE_DATABASE_CFG typeCfg, */ HMark markQueries, bool bIgnoreTECInUse, int[] arTECLimit, bool bUseData = false) { //Logging.Logg().Debug("Admin::InitTEC () - вход..."); if ((mode == FormChangeMode.MODE_TECCOMPONENT.TEC) || (mode == FormChangeMode.MODE_TECCOMPONENT.ANY)) //??? зачем '.ANY' { this.m_list_tec = DbTSQLConfigDatabase.DbConfig().InitTEC(bIgnoreTECInUse, arTECLimit, bUseData) as DbTSQLConfigDatabase.ListTEC; } else { this.m_list_tec = DbTSQLConfigDatabase.DbConfig().InitTEC(mode, bIgnoreTECInUse, arTECLimit, bUseData) as DbTSQLConfigDatabase.ListTEC; } initQueries(markQueries); initTECComponents(); try { CurrentKey = new FormChangeMode.KeyDevice() { Id = allTECComponents.First(comp => comp.Mode == mode).m_id, Mode = mode }; } catch (Exception e) { Logging.Logg().Exception(e, $"HADmin::InitTEC (mode={mode}) - не найден 1-ый элемент для инициализации списка", Logging.INDEX_MESSAGE.NOT_SET); } }
public override bool IsRDGExcel(FormChangeMode.KeyDevice key_tec) { bool bRes = false; foreach (TECComponent comp in allTECComponents) { if (comp.tec.m_id == key_tec.Id) { if (comp.tec.GetAddingParameter(TEC.ADDING_PARAM_KEY.PATH_RDG_EXCEL).ToString().Length > 0) { bRes = true; break; } else { ; } } else { ; } } return(bRes); }
public void addTextBoxColumn(string name, FormChangeMode.KeyDevice key_main, FormChangeMode.KeyDevice key_owner) { DataGridViewTextBoxColumn insColumn = new DataGridViewTextBoxColumn(); insColumn.Frozen = false; insColumn.Width = 66; insColumn.HeaderText = name; insColumn.Name = "column" + (Columns.Count - 1); insColumn.ReadOnly = false; insColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; try { Columns.Insert(Columns.Count - 1, insColumn); } catch (Exception e) { Logging.Logg().Exception(e, string.Format("DataGridViewAdminNSS::addTextBoxColumn (name={0}, id={1}, id_owner={2}) - Columns.Insert", name, key_main.Id, key_owner.Id), Logging.INDEX_MESSAGE.NOT_SET); } insColumn.Tag = new ColumnTag() { KeyMain = key_main, KeyOwner = key_owner }; if (key_owner.Mode == FormChangeMode.MODE_TECCOMPONENT.TEC) { Columns[Columns.Count - 1 - 1].Frozen = true; Columns [Columns.Count - 1 - 1].ReadOnly = true; Columns [Columns.Count - 1 - 1].DefaultCellStyle = dgvCellStyleGTP; } else { ; } }
public override void GetRDGValues(FormChangeMode.KeyDevice key, DateTime date) { //delegateStartWait (); FillListKeyTECComponentDetail(key.Id); new Thread(new ParameterizedThreadStart(threadGetRDGValuesWithDate)).Start(date); //threadGetRDGValuesWithDate (date); //delegateStopWait (); }
public override void ImpRDGExcelValues(FormChangeMode.KeyDevice key, DateTime date) { //delegateStartWait(); ClearListRDGValues(); new Thread(new ParameterizedThreadStart(threadImpRDGExcelValues)).Start(date); //threadGetRDGExcelValues (date); //delegateStopWait(); }
public void BaseGetRDGValue(FormChangeMode.KeyDevice key, DateTime date) { if (!(date == DateTime.MinValue)) { base.GetRDGValues(key, (DateTime)date); } else { base.GetRDGValues(key, true); } }
public IDevice FindTECComponent(FormChangeMode.KeyDevice key) { IDevice dev; if ((key.Mode == FormChangeMode.MODE_TECCOMPONENT.TEC) || (key.Mode == FormChangeMode.MODE_TECCOMPONENT.ANY)) { dev = m_list_tec.FirstOrDefault(tec => tec.m_id == key.Id); } else { dev = FindTECComponent(key.Id); } return(dev); }
public override Errors SaveChanges() { Errors errRes = Errors.NoError, bErr = Errors.NoError; INDEX_WAITHANDLE_REASON indxEv = INDEX_WAITHANDLE_REASON.SUCCESS; m_evSaveChangesComplete.Reset(); lock (m_lockResSaveChanges) { m_listResSaveChanges.Clear(); } FormChangeMode.KeyDevice prevKeyTECComponent = CurrentKey; foreach (RDGStruct [] curRDGValues in m_listCurRDGValues) { bErr = Errors.NoError; ResetSyncState(); if (m_listKeyTECComponentDetail[m_listCurRDGValues.IndexOf(curRDGValues)].Mode == FormChangeMode.MODE_TECCOMPONENT.TG) { indxEv = WaitAny(Constants.MAX_WATING, true); if (indxEv == INDEX_WAITHANDLE_REASON.SUCCESS) { CurrentKey = m_listKeyTECComponentDetail[m_listCurRDGValues.IndexOf(curRDGValues)]; curRDGValues.CopyTo(m_curRDGValues, 0); bErr = base.SaveChanges(); } else { ASUTP.Logging.Logg().Error($"AdminTS_TG::SaveChanges () - <{indxEv}>...", ASUTP.Logging.INDEX_MESSAGE.NOT_SET); break; } } else { ; } lock (m_lockResSaveChanges) { m_listResSaveChanges.Add(bErr); if (!(bErr == Errors.NoError) && (errRes == Errors.NoError)) { errRes = bErr; } else { ; } } } CurrentKey = prevKeyTECComponent; //if (indxEv == 0) //if (errRes == Errors.NoError) m_evSaveChangesComplete.Set(); //else ; //??? почему AdminValues saveComplete?.Invoke((m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.PBR_SAVED) == true) ? (int)StatesMachine.SavePPBRValues : (int)StatesMachine.SaveAdminValues); return(errRes); }
public abstract void GetRDGValues(FormChangeMode.KeyDevice key, DateTime date);
/// <summary> /// Добавить значения для экспорта /// </summary> /// <param name="compValues">Значения (админ. + ПБР) для одного из компонентов ТЭЦ</param> /// <param name="date">Дата, за которую получены значения</param> /// <returns>Очередной индекс для запроса значений из БД</returns> public FormChangeMode.KeyDevice AddValueToExportRDGValues(RDGStruct[] compValues, DateTime date) { FormChangeMode.KeyDevice keyRes = new FormChangeMode.KeyDevice(); if ((date - DateTime.MinValue.Date).Days > 0) { if ((_listTECComponentKey.Count > 0) && (!(CurrentKey.Id < 0)) && (!(_listTECComponentKey [0].Id < 0))) { if (CurrentKey.Id - _listTECComponentKey[0].Id == 0) { //??? ошибка не в этом методе //Logging.Logg().Action(string.Format("AdminTS_KomDisp::AddValueToExportRDGValues () - получены значения для [ID={0}, Index={1}, за дату={2}, кол-во={3}] компонента..." // , _listTECComponentKey[0].Id, _listTECComponentKey[0], date, compValues.Length) // , Logging.INDEX_MESSAGE.D_006); actionReport(string.Format("получены значения для [ID={0}, Index={1}, за дату={2}, кол-во={3}] компонента..." , _listTECComponentKey[0].Id, _listTECComponentKey[0], date, compValues.Length)); if ((_msExcelIOExportPBRValues.AddTECComponent(allTECComponents.Find(comp => comp.m_id == CurrentKey.Id)) == 0) && (_msExcelIOExportPBRValues.SetDate(date) == true)) { TECComponentComplete(-1, true); // дубликатов быть не должно (см. добавление элементов) //Console.WriteLine(@"AdminTS_KomDisp::AddValueToExportRDGValues () - обработка элемента=[{0}], остатолось элементов={1}", indxTECComponents, _lisTECComponentIndex.Count); // добавить значения по составному ключу: [DateTime, Index] _msExcelIOExportPBRValues.AddPBRValues(CurrentKey.Id, compValues); keyRes = FirstTECComponentKey; // проверить повторно после удаления элемента if (keyRes == FormChangeMode.KeyDevice.Empty) { // все значения по всем компонентам получены/добавлены Logging.Logg().Action(string.Format("AdminTS_KomDisp::AddValueToExportRDGValues () - получены все значения для всех компонентов...") , Logging.INDEX_MESSAGE.NOT_SET); actionReport(string.Format("получены все значения для всех компонентов...")); _msExcelIOExportPBRValues.Run(); // установить штатного признак завершения keyRes.Id = 0; } else { // очередной индекс компонента для запрооса ; } } else { Logging.Logg().Error(string.Format($"AdminTS_KomDisp::AddValueToExportRDGValues () - компонент с ключом [{CurrentKey.ToString ()}] не может быть добавлен (пред. опреация экспорта не завершена)...") , Logging.INDEX_MESSAGE.NOT_SET); // завершить обработку _listTECComponentKey.Clear(); _msExcelIOExportPBRValues.Abort(); // установить признак аварийного завершения keyRes.Id = -1; errorReport("Экспорт ПБР-значений"); } } else { // текущий индекс и 0-ой элемент массива индексов должны совпадать Logging.Logg().Error(string.Format($"AdminTS_KomDisp::AddValueToExportRDGValues () - текущий ключ <{CurrentKey.ToString ()}> и 0-ой <{_listTECComponentKey [0].ToString()}> элемент массива индексов не совпадают...") , Logging.INDEX_MESSAGE.NOT_SET); } } else { //??? ошибка, т.к. выполнен запрос и получены значения, а индекс компонента не известен Logging.Logg().Error(string.Format("AdminTS_KomDisp::AddValueToExportRDGValues () - получены значения для неизвестного компонента ключ={0}..." , CurrentKey.ToString()) , Logging.INDEX_MESSAGE.NOT_SET); } } else { // дата для полученных значений неизвестна ; } _eventUnitTestExportPBRValuesRequest?.Invoke(keyRes, date, CurrentKey, _listTECComponentKey); return(keyRes); }
private Errors saveCSVValues(FormChangeMode.KeyDevice key, object pbr_number) { Errors errRes = Errors.NoSet; RDGStruct[] curRDGValues = new RDGStruct[m_curRDGValues.Length]; int hour = -1; double val = -1F; string name_future = string.Empty; List <DataRow> rowsTECComponent = null; CONN_SETT_TYPE typeValues = CONN_SETT_TYPE.COUNT_CONN_SETT_TYPE; if (pbr_number is string) { // если строка, то импортируется указанный номер ПБР typeValues = CONN_SETT_TYPE.PBR; } else if (pbr_number is CONN_SETT_TYPE) { //!!! только CONN_SETT_TYPE.ADMIN typeValues = (CONN_SETT_TYPE)pbr_number; } else { ; } // проверить был ли определен тип сохраняемых значений // и имеет ли таблица соответствующую типу значений структуру (присутствуют ли в таблице необходимые поля) if ((!(typeValues == CONN_SETT_TYPE.COUNT_CONN_SETT_TYPE)) && (CheckNameFieldsOfTable(m_tableValuesResponse, _listCSVValuesFields[(int)typeValues]) == true)) { //Получить значения для сохранени name_future = allTECComponents.Find(comp => comp.m_id == key.Id).name_future; rowsTECComponent = new List <DataRow>(m_tableValuesResponse.Select(@"GTP_ID='" + name_future + @"'")); //Вариант №2 - тестовый //foreach (DataRow r in m_tableValuesResponse.Rows) // if (name_future.Equals(r["GTP_ID"]) == true) // rowsTECComponent.Add(r); // else // ; //Проверить наличие записей для ГТП if (rowsTECComponent.Count > 0) { //!!! должно быть 24 записи (обеспечивается дополнением при загрузке) if (rowsTECComponent.Count < 24) { Logging.Logg().Error(string.Format(@"AdminTS_KomDisp::saveCSVValues () - для ГТП(ИД={0}) количество записей={1} ..." , name_future, rowsTECComponent.Count) , Logging.INDEX_MESSAGE.NOT_SET); } else { ; } foreach (DataRow r in rowsTECComponent) { hour = int.Parse(r[@"SESSION_INTERVAL"].ToString()); try { switch (typeValues) { case CONN_SETT_TYPE.PBR: HMath.doubleParse(r[@"TotalBR"].ToString(), out curRDGValues[hour].pbr); HMath.doubleParse(r[@"PminBR"].ToString(), out curRDGValues[hour].pmin); HMath.doubleParse(r[@"PmaxBR"].ToString(), out curRDGValues[hour].pmax); curRDGValues[hour].pbr_number = pbr_number as string; ////Отладка //Console.WriteLine(@"GTP_ID=" + allTECComponents[indx].name_future + @"(" + hour + @") TotalBR=" + curRDGValues[hour].pbr + @"; PBRNumber=" + curRDGValues[hour].pbr_number); break; case CONN_SETT_TYPE.ADMIN: HMath.doubleParse(r[@"REC"].ToString(), out curRDGValues[hour].recomendation); curRDGValues[hour].deviationPercent = Int16.Parse(r[@"IS_PER"].ToString()) == 1; HMath.doubleParse(r[@"DIVIAT"].ToString(), out curRDGValues[hour].deviation); curRDGValues[hour].fc = Int16.Parse(r[@"FC"].ToString()) == 1; break; default: break; } } catch (Exception e) { Logging.Logg().Exception(e , $@"AdminTS_KomDisp::saveCSVValues () - GTP_ID={FindTECComponent(key).name_shr}, час ({hour})..." , Logging.INDEX_MESSAGE.NOT_SET); errRes = Errors.ParseError; } if (errRes == Errors.ParseError) { break; } else { } ; } if (errRes == Errors.NoSet) { //Очистить тек./массив с данными ClearValues(); //Копировать полученные значения в "текущий массив" curRDGValues.CopyTo(m_curRDGValues, 0); CurrentKey = key; errRes = SaveChanges() //Errors.NoSet //Errors.NoError ; } else { ; //errRes = Errors.ParseError; } } else { errRes = Errors.ParseError; } if (errRes == Errors.ParseError) { //Пропустить запись ГТП, разрешить переход к следующей //Псевдо-закончена обработка всех событий completeHandleStates(INDEX_WAITHANDLE_REASON.SUCCESS); } else { ; } } else { ; } return(errRes); }
private void threadCSVValues(object type) { Errors errRes = Errors.NoError; Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = ProgramBase.ss_MainCultureInfo; //new System.Globalization.CultureInfo(@"en-US") FormChangeMode.KeyDevice key; //Определить тип загружаемых значений CONN_SETT_TYPE typeValues = (CONN_SETT_TYPE)type; object arg; INDEX_WAITHANDLE_REASON indxEv = INDEX_WAITHANDLE_REASON.SUCCESS; FormChangeMode.KeyDevice prevKeyTECComponents = CurrentKey; string strPBRNumber = string.Empty; // ...только для ПБР if (typeValues == CONN_SETT_TYPE.PBR) {//Только для ПБР //Противоположные операции при завершении потока 'threadPPBRCSVValues' //Разрешить запись ПБР-значений if (m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.PBR_ENABLED) == true) { m_markSavedValues.Marked((int)INDEX_MARK_PPBRVALUES.PBR_SAVED); } else { ; } //Запретить запись Админ-значений if (m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.ADMIN_ENABLED) == true) { m_markSavedValues.UnMarked((int)INDEX_MARK_PPBRVALUES.ADMIN_SAVED); } else { ; } strPBRNumber = getNamePBRNumber((int)GetPropertiesOfNameFilePPBRCSVValues()[1] - 1); } else { ; } //Снять все признаки причин прекращения выполнения обработки событий ResetSyncState(); foreach (TECComponent comp in allTECComponents) { if (comp.IsGTP == true) //Является ГТП { arg = null; key = new FormChangeMode.KeyDevice() { Id = comp.m_id, Mode = comp.Mode }; indxEv = WaitAny(Constants.MAX_WATING, true); // System.Threading.Timeout.Infinite switch ((INDEX_WAITHANDLE_REASON)indxEv) { case INDEX_WAITHANDLE_REASON.SUCCESS: switch (typeValues) { case CONN_SETT_TYPE.ADMIN: arg = typeValues; break; case CONN_SETT_TYPE.PBR: arg = strPBRNumber; break; default: break; } if (Equals(arg, null) == false) { errRes = saveCSVValues(key, arg); //if (! (errRes == Errors.NoError)) // ; //Ошибка ??? //else // ; } else { ; } break; case INDEX_WAITHANDLE_REASON.ERROR: Logging.Logg().Error($"AdminTS_KomDisp::threadCSVValues () - ошибка для <{key.ToString ()}>..." , Logging.INDEX_MESSAGE.NOT_SET); break; //case INDEX_WAITHANDLE_REASON.BREAK: в этом объекте не задействован (см. InitSyncState) // break; case INDEX_WAITHANDLE_REASON.TIMEOUT: Logging.Logg().Warning($"AdminTS_KomDisp::threadCSVValues () - время ожидания <{Constants.MAX_WATING} мсек> истекло для <{key.ToString ()}>..." , Logging.INDEX_MESSAGE.NOT_SET); break; default: //Ошибка ??? //break; //completeHandleStates(); Logging.Logg().Warning($"AdminTS_KomDisp::threadCSVValues () - неизвестное состояние объектов синхронизации при ожидании для <{key.ToString ()}>..." , Logging.INDEX_MESSAGE.NOT_SET); break; } } else { ; } } //Очистить таблицу, полученную из CSV-файла m_tableValuesResponse.Clear(); m_tableValuesResponse = null; if (typeValues == CONN_SETT_TYPE.PBR) {//Только для ПБР //Противоположные операции в 'ImpPPBRCSVValuesRequest' //Запретить запись ПБР-значений // , запрет устанавливается автоматически //Разрешить запись Админ-значений if (m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.ADMIN_ENABLED) == true) { m_markSavedValues.Marked((int)INDEX_MARK_PPBRVALUES.ADMIN_SAVED); } else { ; } } else { ; } //Обновить значения на вкладке GetRDGValues(prevKeyTECComponents, false); }
public override Errors SaveChanges() { Errors errRes = Errors.NoError, bErr = Errors.NoError; int indxEv = -1; m_evSaveChangesComplete.Reset(); lock (m_lockResSaveChanges) { m_listResSaveChanges.Clear(); } FormChangeMode.KeyDevice prevKeyTECComponent = CurrentKey; foreach (RDGStruct [] curRDGValues in m_listCurRDGValues) { bErr = Errors.NoError; for (INDEX_WAITHANDLE_REASON i = INDEX_WAITHANDLE_REASON.ERROR; i < (INDEX_WAITHANDLE_REASON.ERROR + 1); i++) { ((ManualResetEvent)m_waitHandleState[(int)i]).Reset(); } if (m_listKeyTECComponentDetail[m_listCurRDGValues.IndexOf(curRDGValues)].Mode == FormChangeMode.MODE_TECCOMPONENT.TG) { indxEv = WaitHandle.WaitAny(m_waitHandleState); if (indxEv == 0) { CurrentKey = m_listKeyTECComponentDetail[m_listCurRDGValues.IndexOf(curRDGValues)]; curRDGValues.CopyTo(m_curRDGValues, 0); bErr = base.SaveChanges(); } else { break; } } else { ; } lock (m_lockResSaveChanges) { m_listResSaveChanges.Add(bErr); if (!(bErr == Errors.NoError) && (errRes == Errors.NoError)) { errRes = bErr; } else { ; } } } CurrentKey = prevKeyTECComponent; //if (indxEv == 0) //if (errRes == Errors.NoError) m_evSaveChangesComplete.Set(); //else ; //??? почему AdminValues saveComplete?.Invoke((m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.PBR_SAVED) == true) ? (int)StatesMachine.SavePPBRValues : (int)StatesMachine.SaveAdminValues); return(errRes); }
public override Errors SaveChanges() { Errors errRes = Errors.NoError, bErr = Errors.NoError; int indxEv = -1; m_evSaveChangesComplete.Reset(); lock (m_lockResSaveChanges) { m_listResSaveChanges.Clear(); } FormChangeMode.KeyDevice prevKeyTECComponent = CurrentKey; foreach (RDGStruct [] curRDGValues in m_listCurRDGValues) { bErr = Errors.NoError; for (INDEX_WAITHANDLE_REASON i = INDEX_WAITHANDLE_REASON.ERROR; i < (INDEX_WAITHANDLE_REASON.ERROR + 1); i++) { ((ManualResetEvent)m_waitHandleState[(int)i]).Reset(); } if (m_listKeyTECComponentDetail[m_listCurRDGValues.IndexOf(curRDGValues)].Mode == FormChangeMode.MODE_TECCOMPONENT.TG) { indxEv = WaitHandle.WaitAny(m_waitHandleState); if (indxEv == 0) { CurrentKey = m_listKeyTECComponentDetail[m_listCurRDGValues.IndexOf(curRDGValues)]; curRDGValues.CopyTo(m_curRDGValues, 0); bErr = base.SaveChanges(); } else { break; } } else { ; } lock (m_lockResSaveChanges) { m_listResSaveChanges.Add(bErr); if (!(bErr == Errors.NoError) && (errRes == Errors.NoError)) { errRes = bErr; } else { ; } } } CurrentKey = prevKeyTECComponent; //if (indxEv == 0) //if (errRes == Errors.NoError) m_evSaveChangesComplete.Set(); //else ; if (!(saveComplete == null)) { saveComplete(); } else { ; } return(errRes); }
private void threadCSVValues(object type) { Errors errRes = Errors.NoError; Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = ProgramBase.ss_MainCultureInfo; //new System.Globalization.CultureInfo(@"en-US") //Определить тип загружаемых значений CONN_SETT_TYPE typeValues = (CONN_SETT_TYPE)type; int indxEv = -1; FormChangeMode.KeyDevice prevKeyTECComponents = CurrentKey; string strPBRNumber = string.Empty; // ...только для ПБР if (typeValues == CONN_SETT_TYPE.PBR) {//Только для ПБР //Противоположные операции при завершении потока 'threadPPBRCSVValues' //Разрешить запись ПБР-значений if (m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.PBR_ENABLED) == true) { m_markSavedValues.Marked((int)INDEX_MARK_PPBRVALUES.PBR_SAVED); } else { ; } //Запретить запись Админ-значений if (m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.ADMIN_ENABLED) == true) { m_markSavedValues.UnMarked((int)INDEX_MARK_PPBRVALUES.ADMIN_SAVED); } else { ; } strPBRNumber = getNamePBRNumber((int)GetPropertiesOfNameFilePPBRCSVValues()[1] - 1); } else { ; } //Снять все признаки причин прекращения выполнения обработки событий for (HHandler.INDEX_WAITHANDLE_REASON i = HHandler.INDEX_WAITHANDLE_REASON.ERROR; i < (HHandler.INDEX_WAITHANDLE_REASON.ERROR + 1); i++) { ((ManualResetEvent)m_waitHandleState[(int)i]).Reset(); } foreach (TECComponent comp in allTECComponents) { if (comp.IsGTP == true) //Является ГТП { indxEv = WaitHandle.WaitAny(m_waitHandleState); if (indxEv == 0) { switch (typeValues) { case CONN_SETT_TYPE.ADMIN: errRes = saveCSVValues(new FormChangeMode.KeyDevice() { Id = comp.m_id, Mode = comp.Mode }, typeValues); break; case CONN_SETT_TYPE.PBR: errRes = saveCSVValues(new FormChangeMode.KeyDevice() { Id = comp.m_id, Mode = comp.Mode }, strPBRNumber); break; default: break; } //if (! (errRes == Errors.NoError)) // ; //Ошибка ??? //else // ; } else { //Ошибка ??? //break; //completeHandleStates(); ; } } else { ; } } //Очистить таблицу, полученную из CSV-файла m_tableValuesResponse.Clear(); m_tableValuesResponse = null; if (typeValues == CONN_SETT_TYPE.PBR) {//Только для ПБР //Противоположные операции в 'ImpPPBRCSVValuesRequest' //Запретить запись ПБР-значений // , запрет устанавливается автоматически //Разрешить запись Админ-значений if (m_markSavedValues.IsMarked((int)INDEX_MARK_PPBRVALUES.ADMIN_ENABLED) == true) { m_markSavedValues.Marked((int)INDEX_MARK_PPBRVALUES.ADMIN_SAVED); } else { ; } } else { ; } //Обновить значения на вкладке GetRDGValues(prevKeyTECComponents); }