В процессе разработки и администрирования систем на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью программного управления сеансами пользователей или кластером серверов. Для этих целей обычно используется объект v83.COMConnector. Однако в некоторых ситуациях стандартный код, который успешно работал годами, начинает выдавать ошибку: «Поле объекта не обнаружено (RMngrPortDefault)». Проанализируем причины этой проблемы и разберем по шагам методы её устранения.
Ошибка чаще всего проявляется в типовых или отраслевых конфигурациях (например, в решениях WMS или при использовании библиотек стандартных подсистем), где реализован механизм автоматического завершения сеансов. Рассмотрим фрагмент кода, на котором происходит сбой:
COMСоединитель = Новый COMОбъект("v83.COMConnector");
// ... фрагмент логики определения порта ...
Иначе
НомерПортаКластера = COMСоединитель.RMngrPortDefault;
КонецЕсли;
В нормальных условиях объект COMConnector при создании сразу инициализирует ряд констант, включая RMngrPortDefault, которая по умолчанию соответствует порту 1541. Если система сообщает, что поле не обнаружено, это означает, что COM-объект создался «пустым» или его интерфейс не был полностью проинициализирован в операционной системе Windows. Выясним причину такого поведения.
Наиболее частая причина — некорректная регистрация программного идентификатора (ProgID) в реестре Windows или конфликт версий после обновления платформы 1С. Для решения этой задачи нам необходимо вручную перерегистрировать основную библиотеку COM-соединителя.
Выполним следующие шаги:
cd "C:\Program Files\1cv8\8.3.XX.XXXX\bin".
regsvr32 comcntr.dll
После появления сообщения об успешной регистрации библиотеки попробуем снова запустить код. В большинстве случаев этот простой шаг восстанавливает доступ к свойствам объекта.
Если ваша конфигурация работает на 64-битном сервере 1С, а вызываемый код пытается инициализировать 32-битную версию компоненты (или наоборот), может возникнуть ситуация «неполной» видимости свойств объекта. Рассмотрим, как создать обертку в службах компонентов Windows, чтобы обеспечить стабильную работу V83.COMConnector.
Проанализируем алгоритм настройки:
1C_COM_Connector) и выберем тип «Серверное приложение».USR1CV8).comcntr.dll из папки bin актуальной версии платформы.Этот метод позволяет изолировать работу COM-объекта и делает его свойства доступными для процессов любой разрядности.
Иногда ошибка Поле объекта не обнаружено вызвана тем, что у пользователя, под которым запускается сеанс 1С, недостаточно прав на чтение веток реестра HKEY_CLASSES_ROOT\CLSID, описывающих интерфейс IISO_COMConnector.
Проверим и настроим права:
regedit.V83.COMConnector.Если проблему не удается решить административными мерами (например, в облачной среде или при отсутствии прав администратора на сервере), мы можем применить защитное программирование. Поскольку RMngrPortDefault — это фактически константа, мы можем предусмотреть её ручное определение.
Рассмотрим пример безопасного получения порта:
Попытка
НомерПортаКластера = COMСоединитель.RMngrPortDefault;
Исключение
// Если поле не обнаружено, используем стандартное значение порта 1С
НомерПортаКластера = 1541;
ЗаписьЖурналаРегистрации("COM-соединение", УровеньЖурналаРегистрации.Предупреждение, , ,
"Не удалось получить RMngrPortDefault, использовано значение по умолчанию 1541. Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Этот подход гарантирует, что ваша обработка не «упадет» с критической ошибкой, и сеансы пользователей будут корректно завершены, даже если COM-объект ведет себя нестабильно.
Выяснив причину ошибки, мы понимаем, что она редко связана с логическими ошибками в самом коде 1С. В 90% случаев это системный сбой регистрации компонентов. Рекомендуется начать с перерегистрации библиотеки comcntr.dll, а если это не помогает — настроить приложение COM+. Использование конструкции Попытка...Исключение станет хорошим дополнением для обеспечения отказоустойчивости системы.