При обновлении платформы 1С:Предприятие с версии 8.3.21 на 8.3.25 многие специалисты сталкиваются с критической проблемой: перестают работать обработки, использующие COM-соединение. Ошибка часто проявляется при попытке инициализации объекта COMObject("V83.COMConnector"). В этой статье мы подробно разберем, почему это происходит, как правильно перерегистрировать компоненты и какие «подводные камни» скрывает реестр Windows и службы компонентов на терминальных серверах.
Рассмотрим стандартную ситуацию: после установки нового релиза платформы (например, 8.3.25.1394) старые механизмы обмена данными перестают функционировать. Если восстановить их оперативно не удается, как временное решение может подойти универсальный перенос данных между разными конфигурациями 1С 8.3 (удобно использовать универсальную обработку обмена данными через COM-соединение), но наша цель — починить текущий механизм. Проблема часто усугубляется тем, что на сервере может быть установлено несколько версий платформы одновременно, или же используется терминальный доступ. Выясним причину: при создании объекта V83.COMConnector система обращается к реестру Windows, чтобы найти путь к библиотеке comcntr.dll. Если в реестре остались ссылки на старую папку (например, от версии 8.3.21), а сама папка была удалена или доступ к ней ограничен, возникает ошибка инициализации.
Проанализируем типичный фрагмент кода, который вызывает сбой:
Процедура ПодключитьсяКБазе(Команда)
Попытка
v8 = Новый COMObject("V83.COMConnector");
// Дальнейший код подключения
Исключение
Сообщить("Ошибка при создании COM-объекта: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Прежде чем приступать к глубоким настройкам, проверим соответствие разрядности. Платформа 8.3.25 активно использует 64-битную архитектуру. Если ваш клиент (тонкий или толстый) запущен как 64-битное приложение, ему требуется 64-битная версия comcntr.dll. Разберем по шагам, как это проверить:
C:\Program Files\1cv8\..., а 32-битная в C:\Program Files (x86)\1cv8\....&НаКлиенте, то библиотека должна быть зарегистрирована на локальной рабочей станции пользователя. Если &НаСервере — то на сервере приложений 1С.Иногда стандартная установка платформы не обновляет записи в реестре должным образом — для решения проблемы есть автоматическая настройка и запуск обмена данными через COM-подключение. Рассмотрим процедуру принудительной перерегистрации. Выполним следующие действия от имени администратора в командной строке (CMD):
regsvr32 /u "C:\Program Files\1cv8\8.3.21.1895\bin\comcntr.dll"
regsvr32 "C:\Program Files\1cv8\8.3.25.1394\bin\comcntr.dll"
Важный момент: если вы используете и 32-битные, и 64-битные клиенты, процедуру нужно повторить для обеих библиотек из соответствующих папок bin.
Рассмотрим ситуацию, когда regsvr32 рапортует об успехе, но ошибка сохраняется. Выясним причину: в платформе 8.3.25 замечены проблемы с обновлением ветки TypeLib. Проанализируем состояние реестра вручную (через regedit). Нам необходимо проверить следующие ключи:
V83.COMConnector.Особое внимание уделим пользователям терминал-сервера. Если у одних пользователей COM работает, а у других нет, это верный признак «мусора» в ветке HKEY_CURRENT_USER. Посмотрим на механизм VirtualStore. Если пользователь когда-либо запускал регистрацию под своей учетной записью без прав администратора, Windows могла создать копию настроек в HKEY_CURRENT_USER\Software\Classes. Система всегда отдает приоритет настройкам пользователя (HKCU) над глобальными (HKLM). Рекомендуем удалить все записи, связанные с V83.COMConnector в ветке HKEY_CURRENT_USER\Software\Classes\CLSID, чтобы принудить систему использовать общие настройки сервера.
Для стабильной работы 64-битной компоненты в 32-битных приложениях (и наоборот), а также для изоляции процессов, часто используют «обертку» в службах компонентов Windows. Этот подход детально описан в материале про запуск COM-Объекта 1С 7.7 или 1С 8.х в виде "УДАЛЕННОГО COM+", но давайте разберем, как обновить эту настройку конкретно для 8.3.25:
comcntr.dll версии 8.3.25.Проанализируем архитектурный аспект. В сообщениях форума упоминается, что обработка запускается &НаКлиенте. Это создает зависимость от настроек каждого конкретного рабочего места. Чтобы выявить все пострадавшие модули перед исправлением, может потребоваться проверка работоспособности внешних отчетов/обработок, Мы рекомендуем переписать вызов COM-объекта на серверную сторону. Посмотрим на пример правильной структуры:
&НаКлиенте
Процедура ВыполнитьОбмен(Команда)
Результат = ВыполнитьПодключениеНаСервере(Объект.ПутьКБазе);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВыполнитьПодключениеНаСервере(ПутьКБазе)
COMСоединитель = Новый COMObject("V83.COMConnector");
// Параметры подключения
СтрокаСоединения = "File=""" + ПутьКБазе + """;Usr=""Admin"";Pwd=""123"";";
Попытка
БазаИсточник = COMСоединитель.Connect(СтрокаСоединения);
// Логика переноса данных
Возврат "Успех";
Исключение
Возврат "Ошибка подключения: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
Перенос кода в контекст &НаСервере позволяет настраивать COM-компоненту только в одном месте — на сервере 1С, что избавляет от необходимости «лечить» реестр на каждом терминальном пользователе или компьютере — так работает обработка переноса документов из УТ 10.3 в УТ 11.5 через COM.
В новых релизах платформы (8.3.25) библиотека comcntr.dll может иметь обновленную цифровую подпись. В некоторых случаях система предотвращения выполнения данных (DEP) или антивирусное ПО могут блокировать загрузку библиотеки из «незнакомого» пути. Разберем профилактические меры:
C:\Program Files\1cv8\ в исключения антивируса.1cv8.exe и 1cv8c.exe в список исключений.Подводя итог, отметим, что переход на 8.3.25 требует внимательного отношения к путям в реестре. Если вы столкнулись с «невидимой» ошибкой, когда все файлы на месте, а объект не создается — ищите старые записи в HKEY_CURRENT_USER или некорректно настроенное приложение в COM+.