COMОбъект

Типы · COMObject

Создает COM-объект (например, Word, Excel и т.д.). Методы и свойства СОМ-объектов в дальнейшем становятся доступными через данный объект. В веб-клиенте данный объект поддерживается только в браузере Internet Explorer.

Полное описание, параметры и ограничения

COMОбъект (COMObject)

COMОбъект (COMObject)

Доступен, начиная с версии 8.0.

Конструкторы:
По имени приложения

Описание:

Создает COM-объект (например, Word, Excel и т.д.). Методы и свойства СОМ-объектов в дальнейшем становятся доступными через данный объект.

В веб-клиенте данный объект поддерживается только в браузере Internet Explorer.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

См. также:
Глобальный контекст, метод ПолучитьCOMОбъект
ПолеHTMLДокумента, свойство Документ
ОболочкаHTMLДокумента, метод Получить
ОболочкаActiveDocument, метод Получить
ОболочкаHTMLДокумента, метод ПолучитьCOMОбъект
Расширение поля формы для поля HTML-документа, свойство Документ
Automation сервер, метод NewObject
Внешнее соединение, метод NewObject

Использование в версии:

Доступен, начиная с версии 8.0.

Описание изменено в версии 8.3.21.

Методическая информация

Практические примеры

Прочитать администраторов кластера через COM-интерфейс

Это тип Администратор (IRegUserInfo), а не АдминистрированиеАдминистратор. Получаем его через COM-соединитель и GetClusterAdmins.

Где и как запускать

Управляемая форма внешней обработки с серверной функцией в Windows. Отдельный учебный кластер; чтение через COM, не через ras.

Подготовка

  1. Только отдельный учебный сервер 1С 8.5 на Windows с установленным и зарегистрированным V85.COMConnector соответствующей разрядности. Не запускайте в рабочем кластере.

  2. Создайте реквизиты формы АдресАгента, ИмяАгента, ПарольАгента, КлючКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера типа Строка. Поля паролей должны скрывать символы.

  3. АдресАгента — endpoint агента сервера, например 127.0.0.1:1540 на тестовой машине. Это не endpoint ras на 1545.

  4. При пустом КлючКластера код показывает строки имя|компьютер|порт. Скопируйте точную строку нужного учебного кластера в поле и повторите.

  5. Создайте команду ПоказатьАдминистраторовCOM и кнопку. Процедуру и функцию вставьте отдельно в модуль управляемой формы.

  6. Используйте действительные учебные учётные данные агента и кластера. Пустые данные допустимы только там, где администраторы не зарегистрированы.

&НаКлиенте
Процедура ПоказатьАдминистраторовCOM(Команда)
    Сообщить(ПрочитатьАдминистраторовCOMНаСервере(
        АдресАгента, ИмяАгента, ПарольАгента, КлючКластера,
        ИмяАдминистратораКластера, ПарольАдминистратораКластера));
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПрочитатьАдминистраторовCOMНаСервере(АдресАгента, ИмяАгента, ПарольАгента,
    КлючКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера)
    Соединитель = Новый COMОбъект("V85.COMConnector");
    Агент = Соединитель.ConnectAgent(АдресАгента);
    Агент.AuthenticateAgent(ИмяАгента, ПарольАгента);
    Кластеры = Агент.GetClusters();
    Подходящие = Новый Массив;
    Описания = Новый Массив;
    Для Каждого Кластер Из Кластеры Цикл
        Ключ = СтрШаблон("%1|%2|%3", Кластер.ClusterName,
            Кластер.HostName, Кластер.MainPort);
        Описания.Добавить(Ключ);
        Если НРег(Ключ) = НРег(СокрЛП(КлючКластера)) Тогда
            Подходящие.Добавить(Кластер);
        КонецЕсли;
    КонецЦикла;
    Если Не ЗначениеЗаполнено(КлючКластера) Тогда
        Возврат СтрСоединить(Описания, Символы.ПС);
    КонецЕсли;
    Если Подходящие.Количество() <> 1 Тогда
        ВызватьИсключение "Нужно выбрать ровно один учебный кластер";
    КонецЕсли;
    Кластер = Подходящие[0];
    Агент.Authenticate(Кластер, ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    Администраторы = Агент.GetClusterAdmins(Кластер);
    Строки = Новый Массив;
    Для Каждого Администратор Из Администраторы Цикл
        Строки.Добавить(СтрШаблон("%1; %2; парольная=%3; ОС=%4; пользователь ОС=%5",
            Администратор.Name, Администратор.Descr, Администратор.PasswordAuthAllowed,
            Администратор.SysAuthAllowed, Администратор.SysUserName));
    КонецЦикла;
    Если Строки.Количество() = 0 Тогда
        Возврат "Администраторы кластера не зарегистрированы";
    КонецЕсли;
    Возврат СтрСоединить(Строки, Символы.ПС);
КонецФункции

Разбор по шагам

  1. COM-соединитель создаётся в серверном Windows-процессе; ConnectAgent связывает его с агентом сервера.

  2. AuthenticateAgent аутентифицирует администратора центрального сервера.

  3. Кластер выбирается по показанному составному ключу; неоднозначный выбор прекращает выполнение.

  4. Authenticate отдельно проверяет администратора выбранного кластера.

  5. GetClusterAdmins возвращает описания IRegUserInfo; читаем английские свойства Name, Descr и способы аутентификации.

  6. Password доступен только для записи и не включён в вывод. Регистрация, удаление и изменение администраторов не выполняются.

Как проверить результат

  1. При пустом ключе видны доступные кластеры; после выбора — администраторы именно выбранного кластера.

  2. Сравните имена и способы аутентификации с консолью администрирования тестового сервера.

  3. Неверный или неоднозначный ключ даёт исключение до запроса списка администраторов.

Ожидаемый результат

Прочитаны сведения об администраторах учебного кластера через COM без изменения сервера.

На что обратить внимание

  1. COM требует Windows, подходящей разрядности и регистрации компоненты; в Linux этот код не применяется.

  2. Для 8.3 используется соответствующий V83.COMConnector; здесь явно выбран зарегистрированный V85 для 8.5.

  3. Английские свойства этого интерфейса нельзя заменить русскими свойствами объекта ras.

  4. Список содержит сведения кроме паролей; не пытайтесь прочитать Password.

  5. Ошибки подключения, несовместимости версий и аутентификации не подавляются.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Разделить весь срок соединения, последние пять минут и текущий вызов

На реальных соединениях показываются три разных временных среза. В миллисекунды пересчитываются только показатели сервисов с документированной единицей, остальные длительности остаются в исходной единице.

Где и как запускать

Полный модуль управляемой формы собственной пустой учебной базы на отдельном локальном Windows-стенде 8.5.1.1343. COM-вызовы выполняются только при самостоятельном запуске пользователем; здесь не запускались.

Подготовка

  1. Нужен отдельный собственный локальный серверный стенд 1С 8.5.1.1343 на Windows без рабочих баз. Здесь выполняется только авторская подготовка кода: реальное подключение агентом справочника не выполнялось.

  2. Администратор стенда заранее устанавливает сервер и регистрирует V85.COMConnector той же версии и разрядности, что серверный процесс учебной базы. Код не запускает regsvr32, не устанавливает платформу и не открывает COM 8.3 вместо 8.5.

  3. В своём стенде создайте единственный целевой кластер с точным именем УчебныйКластер85 и новую пустую серверную базу с именем УчебнаяБаза85. У описания этой базы задайте точное значение syntax-guide85:owned-com. Не переименовывайте рабочую базу или кластер ради обхода защит.

  4. У собственной учебной конфигурации задайте имя метаданных УчебнаяКонфигурацияСинтаксиса. Серверная функция должна выполняться на той же Windows-машине, что агент сервера и выбранный рабочий процесс: обращения жёстко ограничены 127.0.0.1.

  5. Заведите отдельные действительные учебные учётные данные администратора агента, администратора кластера и администратора базы с правом Администратор. В этих уроках имена и пароли намеренно должны быть непустыми; анонимный режим не используется.

  6. Создайте свою учебную обработку с управляемой формой. Реквизиты: ПортАгента и ПортКластера — Число без дробной части; КлючПроцесса, ИмяАгента, ПарольАгента, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ИмяАдминистратораБазы, ПарольАдминистратораБазы, JSONРезультат — Строка; Занято — Булево, начально Ложь. Длина JSONРезультат 0.

  7. Поля трёх паролей выведите в Режиме пароля и не сохраняйте в настройках формы, истории или файле. JSONРезультат выведите многострочным полем только для просмотра. Добавьте команду ПолучитьУчебныйCOMСнимок с одноимённым клиентским обработчиком.

  8. Вставьте весь приведённый модуль формы, включая обе вспомогательные функции. ПортАгента берите из реальной настройки ragent, ПортКластера — из настройки менеджера кластера. Порт ras сюда не подходит.

  9. Первый раз оставьте КлючПроцесса пустым. Каталог покажет только локальные процессы выбранного учебного кластера. Скопируйте точный ключ порт|PID живого процесса из JSON, повторно введите очищенные пароли и повторите команду. PID не придумывайте; после перезапуска процесса получите каталог заново.

  10. Для диагностики соединений откройте одно или два своих клиентских окна УчебнаяБаза85 и выполните обычные учебные действия, например собственный константный запрос. Не создавайте нагрузку на рабочем сервере; измеряемые числа зависят от реальных действий.

  11. Снимок содержит только выбранные поля, не целые COM-объекты. Пароль СУБД, код разрешения входа, параметр блокировки и строка внешнего управления сеансами выводятся только как признаки наличия. Наличие строки не доказывает её корректность или доступность сервиса.

  12. Если вы сами запустите урок, произойдут административные обращения к своему локальному агенту и рабочему процессу. Настройки не меняются, сеансы не завершаются, база не создаётся и не удаляется. Здесь запуск в 1С и подключение не проверялись.

&НаКлиенте
Процедура ПолучитьУчебныйCOMСнимок(Команда)
    Если Занято Тогда
        Возврат;
    КонецЕсли;
    Занято = Истина;
    Попытка
        JSONРезультат = УчебныйCOMСнимокНаСервере(ПортАгента, ПортКластера, КлючПроцесса,
            ИмяАгента, ПарольАгента, ИмяАдминистратораКластера, ПарольАдминистратораКластера,
            ИмяАдминистратораБазы, ПарольАдминистратораБазы);
    Исключение
        JSONРезультат = "Снимок не получен. Проверьте собственный Windows-стенд, COM 8.5, разрядность, порты, ключ процесса, учебные имена и права. Сырую ошибку с учётными данными не публикуйте.";
    КонецПопытки;
    ПарольАгента = "";
    ПарольАдминистратораКластера = "";
    ПарольАдминистратораБазы = "";
    Занято = Ложь;
КонецПроцедуры

&НаСервереБезКонтекста
Функция УчебныйCOMСнимокНаСервере(ПортАгента, ПортКластера, КлючПроцесса,
    ИмяАгента, ПарольАгента, ИмяАдминистратораКластера, ПарольАдминистратораКластера,
    ИмяАдминистратораБазы, ПарольАдминистратораБазы)
    Система = Новый СистемнаяИнформация;
    Если Система.ТипПлатформы <> ТипПлатформы.Windows_x86
        И Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда
        ВызватьИсключение "COM-урок требует серверного выполнения на Windows";
    КонецЕсли;
    Порты = Новый Массив;
    Порты.Добавить(ПортАгента);
    Порты.Добавить(ПортКластера);
    Для Каждого Порт Из Порты Цикл
        Если ТипЗнч(Порт) <> Тип("Число") Тогда
            ВызватьИсключение "Порты должны быть числами";
        КонецЕсли;
        Если Порт <> Цел(Порт) ИЛИ Порт < 1 ИЛИ Порт > 65535 Тогда
            ВызватьИсключение "Недопустимый порт локального стенда";
        КонецЕсли;
    КонецЦикла;
    Если ТипЗнч(КлючПроцесса) <> Тип("Строка") Тогда
        ВызватьИсключение "Ключ процесса должен быть строкой";
    КонецЕсли;
    УчётныеДанные = Новый Структура;
    УчётныеДанные.Вставить("ИмяАгента", ИмяАгента);
    УчётныеДанные.Вставить("ПарольАгента", ПарольАгента);
    УчётныеДанные.Вставить("ИмяКластера", ИмяАдминистратораКластера);
    УчётныеДанные.Вставить("ПарольКластера", ПарольАдминистратораКластера);
    УчётныеДанные.Вставить("ИмяБазы", ИмяАдминистратораБазы);
    УчётныеДанные.Вставить("ПарольБазы", ПарольАдминистратораБазы);
    Для Каждого Поле Из УчётныеДанные Цикл
        Если ТипЗнч(Поле.Значение) <> Тип("Строка") Тогда
            ВызватьИсключение "Учебные учётные данные должны быть строками";
        КонецЕсли;
        Если ПустаяСтрока(Поле.Значение) Тогда
            ВызватьИсключение "Введите все три непустые учебные пары учётных данных";
        КонецЕсли;
    КонецЦикла;
    ЛокальноеИмя = НРег(ИмяКомпьютера());
    АдресАгента = "tcp://127.0.0.1:" + Формат(ПортАгента, "ЧГ=0");
    Соединитель = Новый COMОбъект("V85.COMConnector");
    Агент = Соединитель.ConnectAgent(АдресАгента);
    Если Агент.ConnectionString <> АдресАгента Тогда
        ВызватьИсключение "Не совпала строка выбранного локального подключения";
    КонецЕсли;
    Агент.AuthenticateAgent(ИмяАгента, ПарольАгента);
    Кластер = Неопределено;
    СовпаденийКластера = 0;
    Для Каждого Найденный Из Агент.GetClusters() Цикл
        Если Найденный.ClusterName = "УчебныйКластер85"
            И УчебныйЛокальныйУзел(Найденный.HostName, ЛокальноеИмя)
            И Найденный.MainPort = ПортКластера Тогда
            Кластер = Найденный;
            СовпаденийКластера = СовпаденийКластера + 1;
        КонецЕсли;
    КонецЦикла;
    Если СовпаденийКластера <> 1 Тогда
        ВызватьИсключение "Нужен единственный собственный локальный УчебныйКластер85 с указанным портом";
    КонецЕсли;
    Агент.Authenticate(Кластер, ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    КраткаяБаза = Неопределено;
    СовпаденийБазы = 0;
    Для Каждого НайденнаяБаза Из Агент.GetInfoBases(Кластер) Цикл
        Если НайденнаяБаза.Name = "УчебнаяБаза85" И НайденнаяБаза.Descr = "syntax-guide85:owned-com" Тогда
            КраткаяБаза = НайденнаяБаза;
            СовпаденийБазы = СовпаденийБазы + 1;
        КонецЕсли;
    КонецЦикла;
    Если СовпаденийБазы <> 1 Тогда
        ВызватьИсключение "Не найдена единственная собственная база с точным маркером описания";
    КонецЕсли;
    Каталог = Новый Массив;
    Процесс = Неопределено;
    СовпаденийПроцесса = 0;
    Для Каждого НайденныйПроцесс Из Агент.GetWorkingProcesses(Кластер) Цикл
        Если УчебныйЛокальныйУзел(НайденныйПроцесс.HostName, ЛокальноеИмя)
            И НайденныйПроцесс.MainPort >= 1 И НайденныйПроцесс.MainPort <= 65535
            И НайденныйПроцесс.MainPort = Цел(НайденныйПроцесс.MainPort)
            И НЕ ПустаяСтрока(НайденныйПроцесс.PID) Тогда
            Ключ = Формат(НайденныйПроцесс.MainPort, "ЧГ=0") + "|" + НайденныйПроцесс.PID;
            Каталог.Добавить(Новый Структура("Ключ,Хост", Ключ, НайденныйПроцесс.HostName));
            Если Ключ = КлючПроцесса Тогда
                Процесс = НайденныйПроцесс;
                СовпаденийПроцесса = СовпаденийПроцесса + 1;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Если ПустаяСтрока(КлючПроцесса) Тогда
        Возврат СериализоватьСвойСнимок(Новый Структура("УчебныеПроцессы", Каталог));
    КонецЕсли;
    Если СовпаденийПроцесса <> 1 Тогда
        ВызватьИсключение "Нужен один живой локальный процесс с ключом из своего каталога";
    КонецЕсли;
    РабочееСоединение = Соединитель.ConnectWorkingProcess("tcp://127.0.0.1:" + Формат(Процесс.MainPort, "ЧГ=0"));
    СовпаденийПолнойБазы = 0;
    Для Каждого НайденнаяПолнаяБаза Из РабочееСоединение.GetInfoBases() Цикл
        Если НайденнаяПолнаяБаза.Name = КраткаяБаза.Name И НайденнаяПолнаяБаза.Descr = КраткаяБаза.Descr Тогда
            СовпаденийПолнойБазы = СовпаденийПолнойБазы + 1;
        КонецЕсли;
    КонецЦикла;
    Если СовпаденийПолнойБазы <> 1 Тогда
        ВызватьИсключение "Рабочий процесс не подтвердил свою учебную базу";
    КонецЕсли;
    РабочееСоединение.AddAuthentication(ИмяАдминистратораБазы, ПарольАдминистратораБазы);
    База = Неопределено;
    СовпаденийПослеВхода = 0;
    Для Каждого НайденнаяПослеВхода Из РабочееСоединение.GetInfoBases() Цикл
        Если НайденнаяПослеВхода.Name = "УчебнаяБаза85" И НайденнаяПослеВхода.Descr = "syntax-guide85:owned-com" Тогда
            База = НайденнаяПослеВхода;
            СовпаденийПослеВхода = СовпаденийПослеВхода + 1;
        КонецЕсли;
    КонецЦикла;
    Если СовпаденийПослеВхода <> 1 Тогда
        ВызватьИсключение "После аутентификации изменился выбор учебной базы";
    КонецЕсли;
    Снимок = Новый Структура;
    Снимок.Вставить("База", База.Name);
    Снимок.Вставить("ПроцессPID", Процесс.PID);
    Снимок.Вставить("ПортПроцесса", Процесс.MainPort);
    Соединения = РабочееСоединение.GetInfoBaseConnections(База);
    Строки = Новый Массив;
    Для Каждого Подключение Из Соединения Цикл
        СтрокаСоединения = Новый Структура;
        СтрокаСоединения.Вставить("ConnID", Подключение.ConnID);
        СтрокаСоединения.Вставить("callsAll", Подключение.callsAll);
        СтрокаСоединения.Вставить("callsLast5Min", Подключение.callsLast5Min);
        СтрокаСоединения.Вставить("bytesAll", Подключение.bytesAll);
        СтрокаСоединения.Вставить("bytesLast5Min", Подключение.bytesLast5Min);
        СтрокаСоединения.Вставить("dbmsBytesAll", Подключение.dbmsBytesAll);
        СтрокаСоединения.Вставить("dbmsBytesLast5Min", Подключение.dbmsBytesLast5Min);
        СтрокаСоединения.Вставить("durationAll", Подключение.durationAll);
        СтрокаСоединения.Вставить("durationLast5Min", Подключение.durationLast5Min);
        СтрокаСоединения.Вставить("durationCurrent", Подключение.durationCurrent);
        СтрокаСоединения.Вставить("durationAllDBMS", Подключение.durationAllDBMS);
        СтрокаСоединения.Вставить("durationLast5MinDBMS", Подключение.durationLast5MinDBMS);
        СтрокаСоединения.Вставить("durationCurrentDBMS", Подключение.durationCurrentDBMS);
        СтрокаСоединения.Вставить("durationAllService", Подключение.durationAllService);
        СтрокаСоединения.Вставить("durationLast5MinService", Подключение.durationLast5MinService);
        СтрокаСоединения.Вставить("durationCurrentService", Подключение.durationCurrentService);
        СтрокаСоединения.Вставить("CurrentServiceName", Подключение.CurrentServiceName);
        Если Подключение.callsAll > 0 Тогда
            СтрокаСоединения.Вставить("ДлительностьNativeНаСерверныйВызов", Подключение.durationAll / Подключение.callsAll);
            СтрокаСоединения.Вставить("СервисныеМсНаСерверныйВызов", Подключение.durationAllService / Подключение.callsAll);
        Иначе
            СтрокаСоединения.Вставить("ПояснениеСреднего", "Нет вызовов: деление не выполняется");
        КонецЕсли;
        Если Подключение.callsLast5Min > 0 Тогда
            СтрокаСоединения.Вставить("ДлительностьNativeНаВызовЗа5Мин", Подключение.durationLast5Min / Подключение.callsLast5Min);
        КонецЕсли;
        СтрокаСоединения.Вставить("СервисВсегоСекунды", Подключение.durationAllService / 1000);
        СтрокаСоединения.Вставить("СервисТекущийСекунды", Подключение.durationCurrentService / 1000);
        СтрокаСоединения.Вставить("СервисЗа5МинСекунды", Подключение.durationLast5MinService / 1000);
        Строки.Добавить(СтрокаСоединения);
    КонецЦикла;
    Снимок.Вставить("КоличествоСоединений", Строки.Количество());
    Снимок.Вставить("Соединения", Строки);
    Возврат СериализоватьСвойСнимок(Снимок);
КонецФункции

&НаСервереБезКонтекста
Функция СериализоватьСвойСнимок(Снимок)
    Писатель = Новый ЗаписьJSON;
    Писатель.УстановитьСтроку();
    ЗаписатьJSON(Писатель, Снимок);
    Возврат Писатель.Закрыть();
КонецФункции


&НаСервереБезКонтекста
Функция УчебныйЛокальныйУзел(ИмяУзла, ЛокальноеИмя)
    Возврат НРег(ИмяУзла) = ЛокальноеИмя ИЛИ НРег(ИмяУзла) = "localhost" ИЛИ ИмяУзла = "127.0.0.1";
КонецФункции

Разбор по шагам

  1. Проверить имя учебной конфигурации, типы портов и реквизитов до COM. Порты целые в диапазоне 1..65535; секреты не сериализуются.

  2. ConnectAgent обращается только к 127.0.0.1. ConnectionString должна совпасть с построенной строкой без паролей. COM AuthenticateAgent принимает имя, пароль, в отличие от русскоязычного API ras.

  3. Выбрать УчебныйКластер85 по точному имени, локальному хосту и порту менеджера. Отсутствие или неоднозначность не заменяются выбором первого элемента.

  4. Проверить краткое описание УчебнаяБаза85 и точный маркер. Каталог живых локальных процессов позволяет взять настоящий порт|PID, а не подставить 1545 или придуманный PID.

  5. ConnectWorkingProcess использует найденный динамический порт процесса, не порт агента или ras. До аутентификации базы читаются только Name и Descr.

  6. AddAuthentication принимает только имя администратора базы и пароль, не дополнительный аргумент с именем базы. После него заново выбрать свою базу; полные поля читаются только далее.

  7. В конце показать явно перечисленные скалярные поля JSON. После успеха или ошибки очищаются все три пароля и снимается флаг Занято.

  8. Получить полные соединения своей базы. У каждой строки сохранить ConnID, чтобы не сравнивать случайно разных клиентов.

  9. callsAll/bytesAll и dbmsBytesAll описывают весь срок соединения; показатели Last5Min — окно последних пяти минут, не последнюю команду.

  10. durationCurrent и durationCurrentDBMS относятся к текущему вызову. durationCurrentService и CurrentServiceName описывают вызов сервиса кластера в момент снимка.

  11. Для трёх Service-длительностей справка прямо указывает миллисекунды. Поэтому только их делим на 1000 для секунд.

  12. Для durationAll/durationCurrent/durationLast5Min и DBMS-аналогов эта страница не сообщает единицу: сохраняем Native, не объявляем автоматически миллисекундами.

  13. Среднюю длительность вычислять только при положительном количестве вызовов своего интервала. При нуле не подставлять выдуманное среднее.

  14. Сервисные миллисекунды на серверный вызов — нормировка по общему callsAll, не средняя длительность одного отдельного вызова сервиса.

  15. Повторите команду после собственного константного запроса в клиентском окне. Цифры зависят от реального стенда; код не создаёт нагрузку сам.

Как проверить результат

  1. У каждой строки есть ConnID и отдельные all/Last5Min/current-поля. Временные окна не складываются друг с другом.

  2. При callsAll=0 средние поля не вычисляются; есть пояснение. При callsLast5Min=0 отдельного среднего за окно нет.

  3. Service-секунды равны своим миллисекундам /1000. Для Native-длительностей никакая неподтверждённая единица не заявлена.

Ожидаемый результат

Построен понятный диагностический снимок вызовов, трафика и разных интервалов времени без смешивания единиц.

На что обратить внимание

  1. COM здесь работает в серверном Windows-процессе. Loopback означает эту машину, не компьютер тонкого клиента; Linux и незарегистрированный соединитель этому уроку не соответствуют.

  2. Присутствие учебных имён и маркера не заменяет права доступа. Не запускайте в рабочем кластере; отделите стенд от production.

  3. Порт агента, порт менеджера кластера, порт ras и динамический порт рабочего процесса — разные значения.

  4. COMSafeArray перечисляется циклом Для Каждого. Это не Массив 1С и не список UUID ras; не приписывайте ему методы или свойства другой коллекции.

  5. Снимки и выбранные процессы могут устареть между запросами. После перезапуска повторите каталог; не пытайтесь автоматически завершить мешающий процесс.

  6. Сырые COM-ошибки могут раскрывать чувствительные сведения. Разбирайте подготовку в отладчике своего стенда, не добавляйте ОписаниеОшибки в публичный JSON.

  7. Последние пять минут являются частью накопительного срока; их сумму с all нельзя считать общим значением.

  8. CurrentServiceName пусто означает отсутствие выполняемого вызова сервиса по этому свойству, не отсутствие всей активности клиента.

  9. Не выводите SLA или причину медленной работы по одному снимку. Реальная диагностика требует серии согласованных наблюдений.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.