Получаем настоящий объект собственного кластера через COM-агент, читаем 13 фактических настроек и строим объясняющий отчёт с проверкой типов, единиц, нулевых режимов и числовых кодов. Никакие параметры кластера не изменяются.
Где и как запускать
Полный неглобальный серверный общий модуль ДиагностикаКластера85Сервер; своя серверная часть 8.5.1.1343 на новой изолированной Windows x64 VM. Native IClusterInfo и IServerAgentConnection доступны через COM в контексте Интеграция, не как конструируемые встроенные BSL типы.
Подготовка
Здесь только код будущего ручного опыта: COM, сервер, кластер и 1С не запускались. Подготовьте свою новую изолированную 64-битную Windows VM с 8.5.1.1343 и отдельным собственным тестовым агентом/кластером. Не используйте рабочий или общий с чужими базами сервер. Наличие имени учебной CF само по себе владение сервером не доказывает.
На этой будущей VM администратор заранее вручную готовит сервер 1С, регистрацию V85.COMConnector подходящей разрядности, собственный агент на 127.0.0.1:1540 и отдельный тестовый кластер. Регистрация COM, установка платформы и создание кластера в этом коде не выполняются. Нужны собственные реальные учебные администраторы центрального сервера и выбранного кластера с непустыми именами/паролями; минимальные права не обещаются.
В будущем собственном кластере создайте отдельную серверную учебную ИБ и новую пустую CF. Имя конфигурации УчебнаяДиагностикаКластера85, Версия = OWN85:cluster-policy:readonly, ОсновнойРежимЗапуска = Управляемое приложение, режим совместимости = Не использовать. Все её серверные процессы для этого опыта должны исполняться на той же своей VM; учебная CF и её метка не являются средством защиты доступа.
Общие → Общие модули → ДиагностикаКластера85Сервер: Сервер = Да; Глобальный, Привилегированный, Вызов сервера, оба Клиент и Внешнее соединение = Нет; повторное использование возвращаемых значений = Не использовать. Основной блок вставьте целиком в пустой модуль. Клиент не вызывает этот модуль напрямую: его вызывает собственная серверная функция формы.
Общие → Общие формы → создайте управляемую ДиагностикаКластера85. Добавьте семь реквизитов Строка, длина 0 (неограниченная): ИмяКластера85, СерверКластера85, АдминистраторАгента85, ПарольАгента85, АдминистраторКластера85, ПарольКластера85, Результат85. Добавьте ПортКластера85: Число, длина 5, точность 0; Согласие85 и Остановка85: Булево. Поле Остановка85 не выводите для редактирования и не создавайте обработчики сброса.
Выведите поля выбора и двух пар учётных данных; у обоих полей паролей включите РежимПароля = Да. Согласие85 — флажок «Подключиться один раз только к моему изолированному стенду». Результат85 выведите многострочным полем, ТолькоПросмотр = Да. На новой форме фактическое Остановка85 = Ложь проверяется кодом; начальное значение редактора не предполагается и программно не сбрасывается.
Вручную установите оба разных свойства формы: АвтоматическоеСохранениеДанныхВНастройках = АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках = СохранениеДанныхФормыВНастройках.НеИспользовать. Это разные перечисления, не Булево. Обработчики сохранения и ПриОткрытии не создавайте.
В своей форме → Команды создайте Прочитать85, Действие = Прочитать85. ИспользованиеТекущейСтроки и ИспользованиеВыделенныхСтрок = НеИспользует, чтобы обработчик получил только настоящий параметр Команда. Добавьте кнопку. Блок «Модуль своей формы» вставьте целиком вместо пустого автоматически созданного обработчика.
Общие → Подсистемы → создайте УчебныйКластер85. Общие → Общие команды → создайте ОткрытьДиагностикуКластера85 без параметра, включите в состав этой подсистемы и отметьте видимость в её командном интерфейсе. Блок «Модуль своей общей команды» вставьте целиком в её пустой модуль. Два параметра ОбработкаКоманды передаёт платформа; не вызывайте обработчик вручную.
В своей консоли администрирования вручную прочитайте точные ClusterName, HostName и MainPort своего будущего кластера. Имя компьютера из HostName не обязано быть строкой localhost. В форму вводятся именно эти значения; основной порт кластера не заменяйте портом агента 1540 или RAS. Никакие настройки ради красивого результата отчёта не меняйте.
Сохраните будущую учебную конфигурацию, проверьте её для выбранного клиента и сервера, обновите только собственную учебную ИБ. Откройте её в управляемом клиенте 8.5.1.1343 и настоящей общей командой откройте свою форму. Введите фактический выбор/учебные учётные данные, поставьте Согласие85 и один раз нажмите Прочитать85. Нажатие создаёт реальное подключение к агенту своей будущей VM, хотя параметры кластера урок только читает.
Старый отчёт и поля паролей очищаются до защитных проверок; согласие расходуется и Остановка85 фиксируется на клиенте до RPC. Эта же форма не подключается повторно ни после успеха, ни после ошибки. На любом отказе не исправляйте параметры кодом и не переносите опыт на рабочий сервер; администратор вручную проверяет собственный стенд. Очистка строк не гарантирует стирание памяти; внутренний аудит платформы не исключён.
&НаСервере
Функция ПрочитатьНастройки85(Знач ИмяКластера85, Знач СерверКластера85, Знач ПортКластера85, Знач АдминистраторАгента85, Знач ПарольАгента85, Знач АдминистраторКластера85, Знач ПарольКластера85, Знач Подтверждено85) Экспорт
Если ТипЗнч(Подтверждено85) <> Тип("Булево") Или Не Подтверждено85 Тогда
ВызватьИсключение "Подключение к собственному учебному стенду не подтверждено";
КонецЕсли;
Информация85 = Новый СистемнаяИнформация;
Если Информация85.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда
ВызватьИсключение "Нужна серверная часть 8.5.1.1343 на своей 64-битной Windows VM";
КонецЕсли;
Если ТипЗнч(ИмяКластера85) <> Тип("Строка") Или ПустаяСтрока(ИмяКластера85)
Или ТипЗнч(СерверКластера85) <> Тип("Строка") Или ПустаяСтрока(СерверКластера85)
Или ТипЗнч(ПортКластера85) <> Тип("Число") Или ПортКластера85 <= 0 Или Цел(ПортКластера85) <> ПортКластера85
Или ТипЗнч(АдминистраторАгента85) <> Тип("Строка") Или ПустаяСтрока(АдминистраторАгента85)
Или ТипЗнч(ПарольАгента85) <> Тип("Строка") Или ПустаяСтрока(ПарольАгента85)
Или ТипЗнч(АдминистраторКластера85) <> Тип("Строка") Или ПустаяСтрока(АдминистраторКластера85)
Или ТипЗнч(ПарольКластера85) <> Тип("Строка") Или ПустаяСтрока(ПарольКластера85) Тогда
ВызватьИсключение "Укажите фактический выбор своего стенда и его учебные учётные данные";
КонецЕсли;
Соединитель85 = Новый COMОбъект("V85.COMConnector");
Если ТипЗнч(Соединитель85) <> Тип("COMОбъект") Тогда
ВызватьИсключение "Не получен штатный COM-соединитель";
КонецЕсли;
Агент85 = Соединитель85.ConnectAgent("127.0.0.1:1540");
Если ТипЗнч(Агент85) <> Тип("COMОбъект") Тогда
ВызватьИсключение "Не получено штатное соединение с агентом";
КонецЕсли;
Агент85.AuthenticateAgent(АдминистраторАгента85, ПарольАгента85);
ПолученныеКластеры85 = Агент85.GetClusters();
Если ТипЗнч(ПолученныеКластеры85) <> Тип("COMSafeArray") Тогда
ВызватьИсключение "Агент не вернул штатный COMSafeArray";
КонецЕсли;
Кластеры85 = ПолученныеКластеры85.Выгрузить();
Если ТипЗнч(Кластеры85) <> Тип("Массив") Тогда
ВызватьИсключение "Не получен массив реальных кластеров";
КонецЕсли;
Найдено85 = 0;
Кластер85 = Неопределено;
Для Каждого Кандидат85 Из Кластеры85 Цикл
Если ТипЗнч(Кандидат85) <> Тип("COMОбъект") Тогда
ВызватьИсключение "Получен вложенный массив или иной объект вместо кластера";
КонецЕсли;
ИмяКандидата85 = Кандидат85.ClusterName;
СерверКандидата85 = Кандидат85.HostName;
ПортКандидата85 = Кандидат85.MainPort;
Если ТипЗнч(ИмяКандидата85) <> Тип("Строка") Или ТипЗнч(СерверКандидата85) <> Тип("Строка")
Или ТипЗнч(ПортКандидата85) <> Тип("Число") Тогда
ВызватьИсключение "Не подтверждены типы признаков выбора кластера";
КонецЕсли;
Если ИмяКандидата85 = ИмяКластера85 И СерверКандидата85 = СерверКластера85 И ПортКандидата85 = ПортКластера85 Тогда
Найдено85 = Найдено85 + 1;
Кластер85 = Кандидат85;
КонецЕсли;
КонецЦикла;
Если Найдено85 <> 1 Или ТипЗнч(Кластер85) <> Тип("COMОбъект") Тогда
ВызватьИсключение "Собственный учебный кластер не выбран однозначно";
КонецЕсли;
Агент85.Authenticate(Кластер85, АдминистраторКластера85, ПарольКластера85);
ПовторноеИмя85 = Кластер85.ClusterName;
ПовторныйСервер85 = Кластер85.HostName;
ПовторныйПорт85 = Кластер85.MainPort;
Если ТипЗнч(ПовторноеИмя85) <> Тип("Строка") Или ТипЗнч(ПовторныйСервер85) <> Тип("Строка")
Или ТипЗнч(ПовторныйПорт85) <> Тип("Число")
Или ПовторноеИмя85 <> ИмяКластера85 Или ПовторныйСервер85 <> СерверКластера85 Или ПовторныйПорт85 <> ПортКластера85 Тогда
ВызватьИсключение "Повторное чтение не подтвердило выбранный кластер";
КонецЕсли;
Аудит85 = Кластер85.AllowAccessRightAuditEventsRecording;
ПорогОшибок85 = Кластер85.ErrorsCountThreshold;
Завершение85 = Кластер85.ExpirationTimeout;
ДампПамяти85 = Кластер85.KillByMemoryWithDump;
ЗавершатьПроблемные85 = Кластер85.KillProblemProcesses;
СтарыйПериод85 = Кластер85.LifeTimeLimit;
Балансировка85 = Кластер85.LoadBalancingMode;
ЛимитПамяти85 = Кластер85.MaxMemorySize;
ВремяПамяти85 = Кластер85.MaxMemoryTimeLimit;
ПериодПроверки85 = Кластер85.PingPeriod;
ТаймаутПроверки85 = Кластер85.PingTimeout;
Защита85 = Кластер85.SecurityLevel;
Отказоустойчивость85 = Кластер85.SessionFaultToleranceLevel;
Если ТипЗнч(Аудит85) <> Тип("Булево") Или ТипЗнч(ДампПамяти85) <> Тип("Булево")
Или ТипЗнч(ЗавершатьПроблемные85) <> Тип("Булево") Тогда
ВызватьИсключение "Не подтверждены три логические настройки";
КонецЕсли;
Если ТипЗнч(ПорогОшибок85) <> Тип("Число") Или ТипЗнч(Завершение85) <> Тип("Число")
Или ТипЗнч(СтарыйПериод85) <> Тип("Число") Или ТипЗнч(Балансировка85) <> Тип("Число")
Или ТипЗнч(ЛимитПамяти85) <> Тип("Число") Или ТипЗнч(ВремяПамяти85) <> Тип("Число")
Или ТипЗнч(ПериодПроверки85) <> Тип("Число") Или ТипЗнч(ТаймаутПроверки85) <> Тип("Число")
Или ТипЗнч(Защита85) <> Тип("Число") Или ТипЗнч(Отказоустойчивость85) <> Тип("Число") Тогда
ВызватьИсключение "Не подтверждены десять числовых настроек";
КонецЕсли;
Если ПериодПроверки85 < 0 Или ПериодПроверки85 > 65535
Или ТаймаутПроверки85 < 0 Или ТаймаутПроверки85 > 2147483648 Тогда
ВызватьИсключение "Параметры контроля связи не входят в документированные диапазоны";
КонецЕсли;
Строки85 = Новый Массив;
Строки85.Добавить("Выбран собственный учебный кластер. Ниже настройки, а не измеренная исправность сервера.");
Строки85.Добавить("Аудит прав разрешён настройкой кластера: " + Строка(Аудит85) + ". Настройка конкретной ИБ и запись событий не проверялись.");
Если ПорогОшибок85 = 0 Тогда
Строки85.Добавить("Проверка отклонения количества ошибок отключена этим параметром.");
Иначе
Строки85.Добавить("Порог отклонения количества ошибок от среднего по процессам за последние 5 минут, %: " + Строка(ПорогОшибок85));
КонецЕсли;
Строки85.Добавить("Принудительное завершение: " + Строка(Завершение85) + " с = " + Строка(Завершение85 / 60) + " мин.");
Если Завершение85 = 0 Тогда
Строки85.Добавить("Ноль: принудительное завершение по этому параметру не производится.");
КонецЕсли;
Строки85.Добавить("Завершать признанные проблемными процессы с дампом: " + Строка(ЗавершатьПроблемные85));
Строки85.Добавить("Дамп при принудительном завершении из-за критического объёма памяти: " + Строка(ДампПамяти85));
Строки85.Добавить("LifeTimeLimit, устаревшая настройка: " + Строка(СтарыйПериод85) + " с = " + Строка(СтарыйПериод85 / 3600) + " ч. Не рекомендуется с 8.3.27.");
Если СтарыйПериод85 = 0 Тогда
Строки85.Добавить("Ноль: перезапуск по старому параметру не производится; современное расписание здесь не прочитано.");
КонецЕсли;
Строки85.Добавить("Лимит виртуального адресного пространства: " + Строка(ЛимитПамяти85) + " КБ; непрерывное превышение: " + Строка(ВремяПамяти85) + " с = " + Строка(ВремяПамяти85 / 60) + " мин.");
Если ЛимитПамяти85 = 0 Тогда
Строки85.Добавить("Ноль: объём адресного пространства этим свойством не ограничен. Это не текущий расход памяти.");
КонецЕсли;
Строки85.Добавить("Проверочные запросы: период " + Строка(ПериодПроверки85) + " мс = " + Строка(ПериодПроверки85 / 1000) + " с; таймаут " + Строка(ТаймаутПроверки85) + " мс = " + Строка(ТаймаутПроверки85 / 1000) + " с.");
Если ПериодПроверки85 = 0 И ТаймаутПроверки85 = 0 Тогда
Строки85.Добавить("Пара 0/0: действуют параметры командной строки. Их фактические значения этим отчётом не получены.");
ИначеЕсли ПериодПроверки85 > 0 И ТаймаутПроверки85 > 0 Тогда
Строки85.Добавить("Отношение настроек таймаут/период: " + Строка(ТаймаутПроверки85 / ПериодПроверки85) + ". Это не число потерянных запросов и не гарантия времени обнаружения отказа.");
Иначе
Строки85.Добавить("Один параметр контроля связи равен нулю: отношение не вычисляется; дополнительный смысл такого сочетания здесь не подтверждён.");
КонецЕсли;
Если Балансировка85 = 0 Тогда
ОписаниеБалансировки85 = "приоритет доступной производительности";
ИначеЕсли Балансировка85 = 1 Тогда
ОписаниеБалансировки85 = "приоритет доступной памяти";
Иначе
ОписаниеБалансировки85 = "неизвестный код, смысл не угадывается";
КонецЕсли;
Если Защита85 = 0 Тогда
ОписаниеЗащиты85 = "соединение без защиты";
ИначеЕсли Защита85 = 1 Тогда
ОписаниеЗащиты85 = "защита только при аутентификации администратора";
ИначеЕсли Защита85 = 2 Тогда
ОписаниеЗащиты85 = "защита в течение всего сеанса";
Иначе
ОписаниеЗащиты85 = "неизвестный код, смысл не угадывается";
КонецЕсли;
Строки85.Добавить("Выбор рабочего процесса, код " + Строка(Балансировка85) + ": " + ОписаниеБалансировки85 + ". Фактическая производительность не измерялась.");
Строки85.Добавить("Защита соединений менеджера кластера, код " + Строка(Защита85) + ": " + ОписаниеЗащиты85 + ". Шифрование остальных соединений не проверялось.");
Строки85.Добавить("Уровень отказоустойчивости: " + Строка(Отказоустойчивость85) + " рабочих серверов по настройке. Топология, ресурсы и переживание реального отказа не проверялись.");
Строки85.Добавить("Чтения последовательные, не атомарный снимок. Урок не изменяет параметры кластера.");
Возврат СтрСоединить(Строки85, Символы.ПС);
КонецФункцииМодуль своей формы ДиагностикаКластера85
Общие → Общие формы → ДиагностикаКластера85 → пустой модуль формы; команда связана через Действие, оба режима сохранения НеИспользовать.
Настоящая клиентская команда Прочитать85 и собственная &НаСервереБезКонтекста функция формы. Пароли очищаются до RPC, на клиенте расходуется захваченное согласие и запрещается повтор.
&НаКлиенте
Процедура Прочитать85(Команда)
Результат85 = "";
ЛокальныйПарольАгента85 = ПарольАгента85;
ЛокальныйПарольКластера85 = ПарольКластера85;
ПарольАгента85 = "";
ПарольКластера85 = "";
Попытка
Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда.Имя <> "Прочитать85"
Или ИмяФормы <> "ОбщаяФорма.ДиагностикаКластера85"
Или АвтоматическоеСохранениеДанныхВНастройках <> АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать
Или СохранениеДанныхВНастройках <> СохранениеДанныхФормыВНастройках.НеИспользовать Тогда
ВызватьИсключение "Нужны своя команда и форма без сохранения данных в настройках";
КонецЕсли;
Если ТипЗнч(Остановка85) <> Тип("Булево") Или Остановка85
Или ТипЗнч(Согласие85) <> Тип("Булево") Или Не Согласие85 Тогда
ВызватьИсключение "Нужно однократное подтверждение подключения к своему стенду";
КонецЕсли;
Подтверждено85 = Согласие85;
Согласие85 = Ложь;
Остановка85 = Истина;
Получено85 = ПрочитатьНаСервере85(ИмяКластера85, СерверКластера85, ПортКластера85, АдминистраторАгента85, ЛокальныйПарольАгента85, АдминистраторКластера85, ЛокальныйПарольКластера85, Подтверждено85);
ЛокальныйПарольАгента85 = "";
ЛокальныйПарольКластера85 = "";
Если ТипЗнч(Получено85) <> Тип("Строка") Или Получено85 = "" Тогда
ВызватьИсключение "Не получен строковый отчёт";
КонецЕсли;
Результат85 = Получено85;
Исключение
ЛокальныйПарольАгента85 = "";
ЛокальныйПарольКластера85 = "";
Согласие85 = Ложь;
Остановка85 = Истина;
Результат85 = "СТОП. Чтение не подтверждено. Проверку собственного стенда выполняет его администратор; параметры кластера не исправляются и подключение не повторяется.";
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПрочитатьНаСервере85(Знач ИмяКластера85, Знач СерверКластера85, Знач ПортКластера85, Знач АдминистраторАгента85, Знач ПарольАгента85, Знач АдминистраторКластера85, Знач ПарольКластера85, Знач Подтверждено85)
Возврат ДиагностикаКластера85Сервер.ПрочитатьНастройки85(ИмяКластера85, СерверКластера85, ПортКластера85, АдминистраторАгента85, ПарольАгента85, АдминистраторКластера85, ПарольКластера85, Подтверждено85);
КонецФункцииМодуль своей общей команды ОткрытьДиагностикуКластера85
Общие → Общие команды → ОткрытьДиагностикуКластера85 → пустой модуль команды, без параметра, видима в своей учебной подсистеме.
Клиентский штатный ОбработкаКоманды с двумя потреблёнными параметрами; только открытие своей учебной общей формы, без автоматического COM подключения.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды <> Неопределено
Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
ВызватьИсключение "Используйте свою настоящую общую команду без параметра";
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.ДиагностикаКластера85");
КонецПроцедурыРазбор по шагам
Клиент сначала удаляет предыдущий отчёт и забирает введённые пароли в локальные переменные, оставляя поля пустыми. После проверки настоящей команды, своей формы и режимов сохранения он захватывает реальное Булево согласия, расходует его и блокирует повтор этой формы до серверного вызова.
Собственная серверная функция формы передаёт реальные значения своему серверному общему модулю. Он проверяет подтверждение, имя/версию учебной CF, фактическую версию платформы и 64-битную Windows; эти проверки маршрута не являются доказательством владения кластером.
Штатный локальный COM-соединитель подсоединяется к своему агенту и аутентифицирует собственного администратора центрального сервера. GetClusters возвращает настоящий COMSafeArray; его Выгрузить создаёт Массив. Вложенные массивы или элементы другого типа прекращают опыт до чтения их свойств.
По фактическим имени, серверу и основному порту выбирается ровно один настоящий объект кластера. Этот удержанный объект передаётся Authenticate с учебными учётными данными. Повторное чтение трёх признаков подтверждает выбор; кластер не создаётся через фиктивный конструктор или CreateClusterInfo.
У удержанного кластера реально читаются все 13 свойств. Три должны быть Булево, десять — Число. Только после этих проверок строится отчёт; ни один вывод не подставлен как значение по умолчанию.
Отчёт различает разрешение аудита, порог ошибок и два разных условия формирования дампов. Секунды переводятся в минуты или часы, миллисекунды — в секунды. Память остаётся в исходных КБ; это лимит адресного пространства, не измеренная память процесса.
При PingPeriod/PingTimeout = 0/0 отдельно объясняется использование параметров командной строки. При двух положительных значениях вычисляется только отношение настроек timeout/period. При одном нуле деление не производится и недокументированный смысл не угадывается.
Числовые коды балансировки и защиты расшифровываются по справке; неизвестный код остаётся неизвестным. Настроенная отказоустойчивость не выдаётся за реально проверенный отказ сервера. LifeTimeLimit помечен устаревшим, его значение не рекомендуется назначать.
Клиент получает только строковый отчёт, а не COM-объекты или пароли. Исключение даёт общий СТОП без технического текста и повторного подключения. Успешная аутентификация не делает чтения атомарными и не доказывает эффективность настроек.
Как проверить результат
Будущая ручная проверка выполняется только на своём подготовленном изолированном стенде. До нажатия нет COM-подключения или расчёта. Убедитесь в обоих режимах НеИспользовать и маскированных полях паролей; не сохраняйте скриншоты с введёнными секретами.
В серверном отладчике проверьте: ПолученныеКластеры85 — COMSafeArray, Кластеры85 — настоящий Массив, выбранный объект взят именно из него, Найдено85 = 1. Повторные имя/сервер/порт равны введённым признакам своей консоли.
Проверьте реальные 13 прочитанных значений: три логические настройки и десять числовых. Сверьте их с собственной консолью, учитывая, что между чтениями состояние могло измениться. Код не должен присваивать значения ни одному свойству кластера.
На фактических положительных значениях вручную проверьте арифметику: секунды /60 дают минуты, LifeTimeLimit /3600 — часы, миллисекунды /1000 — секунды. При положительной паре Ping отношение равно фактическому таймауту, делённому на фактический период. При другой паре деление отсутствует.
Если фактические оба Ping равны нулю, ожидайте пояснение о командной строке без выдуманных эффективных значений. Не выставляйте эти нули программно. Значения диапазонов берутся из справки, не из предположений о defaults.
Сверьте числовые подписи: балансировка 0/1, защита 0/1/2, уровень отказоустойчивости — число рабочих серверов по настройке. Ни число дампов, ни загрузка CPU, ни текущий расход памяти, ни реальная аварийная устойчивость в отчёте не заявлены.
Отдельный опыт только на новой форме своего стенда: снимите согласие и нажмите команду. Старый отчёт и поля паролей очищены, виден СТОП; до COM вызов не дошёл. Повторное нажатие на этой форме не должно подключаться.
Другой отдельный опыт на новой форме: введите заведомо неверное имя своего учебного кластера, сохранив собственные учебные учётные данные. Выбор не станет однозначным, отчёт не выдаётся за успешный; после ошибки нет повторного подключения или изменения настроек. Никакие ошибки паролей не проверяйте на рабочих аккаунтах.
После успешного чтения снова нажмите на той же форме: старый отчёт очищается, новый результат СТОП, нового подключения нет. Урок не был скомпилирован и выполнен в 1С при подготовке справочника; все перечисленные наблюдения предстоит проверить вручную.
Ожидаемый результат
После будущего успешного ручного опыта свой отчёт содержит 13 фактически прочитанных настроек, защищённые расчёты и документированные расшифровки. Это не измерение аварий, производительности, шифрования всех соединений или реального расхода памяти. Запуск 1С и COM здесь не проверялся.
На что обратить внимание
Это урок чтения, но сами свойства имеют разные режимы: часть native свойств допускает чтение и запись, часть только чтение. Код не присваивает значения свойствам и не вызывает RegCluster, Kill, CreateClusterInfo или установщик COM.
COMSafeArray не подменяется Массивом от читателя. У многомерного COMSafeArray Выгрузить создаёт вложенные массивы; код отвергает их вместо объявления кластером. Тип COMОбъект — оболочка, а реальный интерфейс кластера подтверждён документированным producer и успешными фактическими чтениями.
Имя CF, метка версии, loopback и признаки кластера не система безопасности. Собственная новая изолированная VM обязательна независимо от этих проверок. Реальная аутентификация использует настоящие учебные учётные данные, не выдуманный token.
Согласие и запрет повтора фиксируются на клиенте до RPC; не полагайтесь на синхронизацию серверных реквизитов после исключения. Это управление одной учебной формой, не защита от произвольного ручного вызова серверной функции и не гарантия конкурентной блокировки.
LifeTimeLimit не рекомендуется начиная с 8.3.27; справка советует РасписаниеПерезапуска. Здесь старое значение только диагностируется. Современное расписание не читается и никакая рекомендация назначить legacy параметр не даётся.
В полной странице PingTimeout условие нулевых значений ошибочно упоминает Каталог. Текст справки не исправляется скрытно; смысл пары PingPeriod/PingTimeout = 0/0 взят из отдельной полной страницы PingPeriod. Для одного нуля специальный смысл не обещается.
В подсказке Authenticate для параметра Кластер назван GetServerWorkingProcesses. Урок не использует этот путь: страница самого Кластер серверов и полный GetClusters прямо документируют получение нужных объектов.
MaxMemoryTimeLimit = 0 не объявляется отключением: отдельный смысл нуля в этой странице не задан. Таймеры настройки не позволяют вычислить фактический момент перезапуска, а ratio Ping не означает число потерянных запросов.
Пароли не выводятся и не журналируются кодом; поля и локальные клиентские строки очищаются. Это не гарантированное стирание памяти и не запрет внутреннего аудита или логов платформы. COM-подключение и аутентификация сами являются реальными действиями будущего опыта.
Наличие прав на аутентификацию не обещает минимальный набор прав на все чтения. На любом отказе — СТОП без retry, перенастройки, перезапуска или фиктивного закрытия COM через недокументированный метод. Штатное открытие своей формы тоже может обращаться к серверу своей учебной ИБ.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.