public void Test_SetAdminValues()
        {
            #region Проверка переключения режимов работы
            try {
                panel.ModeGetRDGValues = AdminTS.MODE_GET_RDG_VALUES.DISPLAY | AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST;
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);
                Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);

                panel.ModeGetRDGValues = AdminTS.MODE_GET_RDG_VALUES.EXPORT;
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);
                Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);

                panel.ModeGetRDGValues |= AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST;
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);

                //??? на практике исключение этого флага не потребуется
                //panel.ModeGetRDGValues &= ~AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST;
                //Assert.IsTrue ((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
                //Assert.IsFalse ((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);

                panel.ModeGetRDGValues = AdminTS.MODE_GET_RDG_VALUES.EXPORT;
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
                Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);

                panel.ModeGetRDGValues = AdminTS.MODE_GET_RDG_VALUES.DISPLAY;
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);
                Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);

                panel.ModeGetRDGValues |= AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST;
                panel.ModeGetRDGValues  = AdminTS.MODE_GET_RDG_VALUES.DISPLAY;
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);
                Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
            } catch (InvalidOperationException ioe) {
                Assert.IsTrue(string.Equals(ioe.Message, "PanelAdmin.ModeGetRDGValues::set - взаимоисключающие значения..."));
            }
            #endregion

            // проверка наличия необходимых "статических" форм
            Assert.IsNotNull(FormMain.formGraphicsSettings);

            string mesDebug = string.Empty;

            FormChangeMode.KeyDevice prevKey = FormChangeMode.KeyTECComponentEmpty
            , nextKey = FormChangeMode.KeyTECComponentEmpty;
            Action onEventUnitTestSetDataGridViewAdminCompleted;
            PanelAdmin.DelegateUnitTestNextIndexSetValuesRequest delegateNextIndexSetValuesRequest;
            Task taskPerformButtonSetClick
            , taskPerformComboBoxTECComponentSelectedIndex;
            TaskStatus taskStatusPerformButtonSetClick
            , taskStatusPerformComboBoxTECComponentSelectedIndex;
            CancellationTokenSource cancelTokenSource;

            onEventUnitTestSetDataGridViewAdminCompleted = null;

            taskPerformButtonSetClick =
                taskPerformComboBoxTECComponentSelectedIndex =
                    null;

            cancelTokenSource = new CancellationTokenSource();
            // вызывается при ретрансляции панелью события имитации отправления запроса на обновление значений
            delegateNextIndexSetValuesRequest = delegate(FormChangeMode.KeyDevice next_key, TECComponent comp, DateTime date, CONN_SETT_TYPE type, IEnumerable <int> list_id_rec, string [] queries) {
                Assert.IsNotNull(list_id_rec);
                Assert.IsFalse(list_id_rec.ToArray().Length < 24);
                //TODO: проверка значений массива на истинность (сравнить с идентификаторами из таблицы БД)

                nextKey = next_key;

                mesDebug = $"ТЭЦ={comp.tec.name_shr}; комп.={comp.name_shr};{Environment.NewLine}([{ASUTP.Database.DbTSQLInterface.QUERY_TYPE.INSERT.ToString()}]: [{queries[(int)ASUTP.Database.DbTSQLInterface.QUERY_TYPE.INSERT]}])"
                           + $"{Environment.NewLine}([{ASUTP.Database.DbTSQLInterface.QUERY_TYPE.UPDATE.ToString()}]: [{queries[(int)ASUTP.Database.DbTSQLInterface.QUERY_TYPE.UPDATE]}]"
                           + $"{Environment.NewLine}(идентификаторы: [{string.Join(";", list_id_rec.Select(id => id.ToString()).ToArray())}]";

                Logging.Logg().Debug(mesDebug, Logging.INDEX_MESSAGE.NOT_SET);
                System.Diagnostics.Debug.WriteLine(mesDebug);
            };
            // вызывается при завершении заполнения 'DatagridView' значениями
            onEventUnitTestSetDataGridViewAdminCompleted = delegate() {
                mesDebug = "Handler On 'EventUnitTestSetDataGridViewAdminCompleted'...";

                Logging.Logg().Debug(mesDebug, Logging.INDEX_MESSAGE.NOT_SET);
                System.Diagnostics.Debug.WriteLine(mesDebug);

                if (prevKey.Equals(nextKey) == true)
                {
                    // старт задачи сохранения значений
                    taskPerformButtonSetClick = Task.Factory.StartNew(delegate() {
                        panel.PerformButtonSetClick(delegateNextIndexSetValuesRequest);
                    });
                }
                else
                if (!(nextKey.Id < 0))
                {
                    taskPerformComboBoxTECComponentSelectedIndex = Task.Factory.StartNew(delegate() {
                        // установить новый индекс (назначить новый компонент-объект)
                        panel.PerformComboBoxTECComponentSelectedKey(prevKey = nextKey);
                    });
                }
                else
                {
                    ;
                }
            };

            try {
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);

                panel.EventUnitTestSetDataGridViewAdminCompleted += onEventUnitTestSetDataGridViewAdminCompleted;

                //task.ContinueWith (t => {
                //}
                //, cancelTokenSource.Token);

                int cnt   = 0
                , cnt_max = 26;
                // исходные состояния задач
                taskStatusPerformButtonSetClick =
                    Equals(taskPerformButtonSetClick, null) == false ? taskPerformButtonSetClick.Status : TaskStatus.WaitingForActivation;
                taskStatusPerformComboBoxTECComponentSelectedIndex =
                    Equals(taskPerformComboBoxTECComponentSelectedIndex, null) == false ? taskPerformComboBoxTECComponentSelectedIndex.Status : TaskStatus.WaitingForActivation;

                while ((cnt++ < cnt_max) &&
                       (!(nextKey == FormChangeMode.KeyTECComponentEmpty)))
                {
                    // ожидать
                    Thread.Sleep(1000);
                    // сообщение для индикации ожидания
                    System.Diagnostics.Debug.WriteLine($"Ожидание: счетчик <{cnt}> из <{cnt_max}>...");
                }

                // состояния задач по завершению цикла
                taskStatusPerformButtonSetClick =
                    Equals(taskPerformButtonSetClick, null) == false ? taskPerformButtonSetClick.Status : taskStatusPerformButtonSetClick;
                taskStatusPerformComboBoxTECComponentSelectedIndex =
                    Equals(taskPerformComboBoxTECComponentSelectedIndex, null) == false ? taskPerformComboBoxTECComponentSelectedIndex.Status : TaskStatus.WaitingForActivation;
                System.Diagnostics.Debug.WriteLine(string.Format("Окончание ожидания <{0}>, задача-Click is <{1}>, задача-Selected is <{2}>, nextIndex={3}..."
                                                                 , cnt
                                                                 , Equals(taskPerformButtonSetClick, null) == false ? taskPerformButtonSetClick.Status.ToString() : "не создана"
                                                                 , Equals(taskPerformComboBoxTECComponentSelectedIndex, null) == false ? taskPerformComboBoxTECComponentSelectedIndex.Status.ToString() : "не создана"
                                                                 , nextKey));
            } catch (Exception e) {
                System.Diagnostics.Debug.WriteLine(e.Message);

                Assert.Fail(e.Message);
            }
        }
        public void Test_Export_PBRValues()
        {
            panel.ModeGetRDGValues |= AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST;
            panel.ModeGetRDGValues  = AdminTS.MODE_GET_RDG_VALUES.DISPLAY;
            Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);
            Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);
            Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
            // проверка наличия необходимых "статических" форм
            Assert.IsNotNull(FormMain.formGraphicsSettings);
            Assert.IsNotNull(FormMain.formParameters);

            string mesDebug = string.Empty;

            FormChangeMode.KeyDevice prevKey = FormChangeMode.KeyTECComponentEmpty
            , nextKey = FormChangeMode.KeyTECComponentEmpty;
            Action onEventUnitTestSetDataGridViewAdminCompleted;

            AdminTS_KomDisp.DelegateUnitTestExportPBRValuesRequest delegateExportPBRValuesRequest;
            Task       taskPerformButtonExportPBRValuesClick;
            TaskStatus taskStatusPerformButtonExportPBRValuesClick;
            CancellationTokenSource cancelTokenSource;

            onEventUnitTestSetDataGridViewAdminCompleted = null;

            taskPerformButtonExportPBRValuesClick =
                null;

            cancelTokenSource = new CancellationTokenSource();
            // вызывается при ретрансляции панелью события имитации отправления запроса на обновление значений
            delegateExportPBRValuesRequest = delegate(FormChangeMode.KeyDevice next_key, DateTime date, FormChangeMode.KeyDevice current_key, IEnumerable <FormChangeMode.KeyDevice> listTECComponentKey) {
                Assert.IsNotNull(listTECComponentKey);

                mesDebug = string.Format("Handler On 'EventUnitTestExportPBRValuesRequest': NextKey={0}, Date={1}, CurrentKey={2}, ListKey=<Count={3}, List={4}>..."
                                         , next_key
                                         , date.ToShortDateString()
                                         , current_key
                                         , listTECComponentKey.Count()
                                         , string.Join(",", listTECComponentKey));

                Logging.Logg().Debug(mesDebug, Logging.INDEX_MESSAGE.NOT_SET);
                System.Diagnostics.Debug.WriteLine(mesDebug);

                prevKey = nextKey;
                nextKey = next_key;

                //TODO: проверка значений аргументов на истинность
                if (nextKey.Id > 0)
                {
                    Assert.AreNotEqual(DateTime.MinValue, date);
                    Assert.IsTrue(listTECComponentKey.Count() > 0);
                    Assert.AreEqual(nextKey, listTECComponentKey.ToArray() [0]);
                }
                else
                {
                    // ожидать (в 'onEventUnitTestSetDataGridViewAdminCompleted') штатное завершение
                    ;
                }
            };
            // вызывается при завершении заполнения 'DatagridView' значениями
            onEventUnitTestSetDataGridViewAdminCompleted = delegate() {
                mesDebug = string.Format("Handler On 'EventUnitTestSetDataGridViewAdminCompleted': PrevIndex={0}, NextIndex={1}..."
                                         , prevKey, nextKey);

                if (prevKey.Equals(nextKey) == true)
                {
                    // старт задачи сохранения значений
                    taskPerformButtonExportPBRValuesClick = Task.Factory.StartNew(delegate() {
                        panel.PerformButtonExportPBRValuesClick(delegateExportPBRValuesRequest);
                    });
                }
                else if (nextKey.Id == 0)
                {
                    Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);
                    Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
                    // штатное завершение
                    nextKey.Id = -1;
                }
                else
                {
                    ;
                }

                Logging.Logg().Debug(mesDebug, Logging.INDEX_MESSAGE.NOT_SET);
                System.Diagnostics.Debug.WriteLine(mesDebug);
            };

            try {
                Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);

                panel.EventUnitTestSetDataGridViewAdminCompleted += onEventUnitTestSetDataGridViewAdminCompleted;

                // исходные состояния задач
                taskStatusPerformButtonExportPBRValuesClick =
                    Equals(taskPerformButtonExportPBRValuesClick, null) == false ? taskPerformButtonExportPBRValuesClick.Status : TaskStatus.WaitingForActivation;

                int cnt   = 0
                , cnt_max = 26;
                while ((cnt++ < cnt_max) &&
                       (!(nextKey.Id < 0)))
                {
                    // ожидать
                    Thread.Sleep(1000);
                    // сообщение для индикации ожидания
                    System.Diagnostics.Debug.WriteLine($"Ожидание: счетчик <{cnt}> из <{cnt_max}>...");
                }

                // состояния задач по завершению цикла
                taskStatusPerformButtonExportPBRValuesClick =
                    Equals(taskPerformButtonExportPBRValuesClick, null) == false ? taskPerformButtonExportPBRValuesClick.Status : taskStatusPerformButtonExportPBRValuesClick;
                System.Diagnostics.Debug.WriteLine(string.Format("Окончание ожидания <{0}>, задача-Click is <{1}>, nextIndex={2}..."
                                                                 , cnt
                                                                 , Equals(taskPerformButtonExportPBRValuesClick, null) == false ? taskPerformButtonExportPBRValuesClick.Status.ToString() : "не создана"
                                                                 , nextKey));

                Assert.IsFalse(cnt > cnt_max);
                Assert.IsFalse((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST);
                Assert.IsTrue((panel.ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY);
            } catch (Exception e) {
                System.Diagnostics.Debug.WriteLine(e.Message);

                Assert.Fail(e.Message);
            }
        }