В работе с 1С иногда возникают ситуации, когда отлаженные механизмы внезапно перестают работать без видимых причин. Одна из таких проблем — зависание COM-соединения при попытке организовать обмен данными между базами. Рассмотрим типичный сценарий: обмен между конфигурациями, например, ERP и ЗУП, который раньше работал стабильно, вдруг перестает функционировать. В некоторых случаях, чтобы избежать подобных проблем в будущем, специалисты используют универсальный перенос данных между разными конфигурациями 1С 8.3 по технологии COM+HTTP. Однако, если вы используете стандартное подключение, система может просто зависнуть, курсор мыши превратится в "колесико", и никаких сообщений об ошибках не появится. Давайте разберем по шагам, как диагностировать и решить эту проблему.
Первое, с чего начнем — это локализация проблемы. В нашем случае симптомы следующие:
Простой тестовый код, который также зависает, выглядит так:
СтрокаПодключения = "Srvr=""..."";Ref=""..."";Usr=""..."";Pwd=""..."";";
V82COMConnector= Новый COMОбъект("V83.COMConnector");
Попытка
// На этой строке происходит зависание
Base1С = V82COMConnector.Connect(СтрокаПодключения);
Сообщить("Соединение успешно установлено!");
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Сообщить(ИнформацияОбОшибке);
КонецПопытки;
Важный момент: если проблема проявляется при подключении к любой базе на сервере, это указывает на то, что дело не в данных конкретной информационной базы, а в системном окружении сервера.
Прежде чем переходить к сложным действиям, выполним базовые шаги, которые часто включает в себя администрирование сервера 1С:
Также стоит проверить внешние факторы: не было ли недавних обновлений Windows, не блокирует ли антивирус или брандмауэр активность процессов 1С. Часто администраторы говорят, что "ничего не трогали", но фоновые обновления или срабатывание систем защиты могли произойти незаметно.
Если перезапуски не помогли, наиболее вероятная причина — проблема с регистрацией COM-компоненты 1С, а именно библиотеки comcntr.dll. Часто после попытки перерегистрировать эту библиотеку поведение системы меняется: вместо "мертвого" зависания начинает появляться конкретная ошибка соединения.
Новая ошибка после перерегистрации:
Ошибка при вызове конструктора (COMObject): -2147467259(0x80004005): Неопознанная ошибка
Эта ошибка — явный признак того, что мы на верном пути. Код 0x80004005 является общей ошибкой, но в контексте COM часто указывает на проблемы с правами доступа или некорректной регистрацией компоненты с учетом разрядности используемой платформы. Чтобы не пропускать такие сбои в регламентных заданиях, рекомендуется использовать простой мониторинг ошибок обмена с уведомлением на почту.
Ключевой момент в решении проблемы — правильная регистрация библиотеки comcntr.dll. Разрядность COM-коннектора должна соответствовать разрядности процесса, который его вызывает. Например, если у вас 64-разрядный сервер 1С, для корректной работы COM-соединений, инициируемых сервером, нужна зарегистрированная 64-разрядная компонента.
Разберем процесс по шагам:
bin установленной платформы 1С. Например: C:\Program Files\1cv8\8.3.24.1586\bin\comcntr.dll.
regsvr32.exe:
System32:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.24.1586\bin\comcntr.dll"
SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.24.1586\bin\comcntr.dll"
Как показывает практика, именно связка "перерегистрация DLL + перезапуск службы агента сервера" (или полная перезагрузка сервера) решает проблему "молчаливого" зависания COM.
Если даже после корректной перерегистрации библиотеки ошибка 0x80004005 сохраняется, следует проверить настройки безопасности DCOM.
dcomcnfg).V83.COMConnector (или соответствующий вашей версии).USR1CV8 или другой системный пользователь), должен иметь все необходимые права доступа и активации.Некорректные права DCOM — еще одна частая причина, по которой система не может создать COM-объект, что приводит к ошибкам или зависаниям.