При организации обмена данными между базами 1С часто используется механизм COM-соединения. Однако на этапе вызова метода Connect программисты нередко сталкиваются с ошибкой: "Произошла исключительная ситуация (v83.comconnector.1). Ошибка при вызове конструктора COMОбъект". Эта проблема особенно актуальна при переходе на новые версии платформы, смене разрядности сервера или переносе файловых баз на серверную ОС. В этой статье мы подробно разберем, как диагностировать и устранить причины этой ошибки, настроить системные компоненты и правильно написать код подключения.
Ошибка при создании COMОбъект обычно означает, что операционная система не может найти зарегистрированную библиотеку comcntr.dll, либо у текущего пользователя (под которым запущен процесс 1С) недостаточно прав для доступа к ней. Ситуация осложняется в 64-битных системах, где 32-битный COM-объект не может быть напрямую вызван 64-битным сервером 1С без использования специальной "обертки" в виде приложения COM+.
Первым делом проверим, зарегистрирована ли компонента в реестре Windows. Важно использовать версию библиотеки, в точности соответствующую установленной платформе. Проанализируем команды для регистрации в зависимости от разрядности:
SysWOW64:
cd C:\Windows\SysWOW64\
regsvr32 "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"
Здесь 8.3.X.XXXX — номер вашей текущей версии платформы. Если платформа 64-битная, используем путь C:\Program Files\1cv8\... и стандартную папку System32. Обратите внимание, что если ранее была зарегистрирована библиотека от старой версии, желательно сначала выполнить ее разрегистрацию с ключом /u.
Если регистрация regsvr32 прошла успешно, но ошибка в 1С сохраняется (особенно при выполнении кода на стороне сервера), нам необходимо настроить Службы компонентов. Это позволит 64-битному процессу сервера 1С взаимодействовать с COM-объектом.
Рассмотрим по шагам процесс настройки:
V83COMConnector в списке нет, создадим его: правой кнопкой на "Приложения COM+" — Создать — Приложение. Выбираем "Создать новое приложение", вводим имя "V83COMConnector" и выбираем тип "Серверное приложение".comcntr.dll из папки bin нужной версии платформы.После этих манипуляций система создаст в реестре необходимые записи, позволяющие использовать 1С-коннектор как независимый сервис.
Проанализируем правильный подход к написанию кода для создания соединения. Важно разделять формирование строки подключения для файлового и серверного вариантов. Рассмотрим пример надежной функции:
Функция ПодключитьсяКБазе(ПутьКБазе, Логин, Пароль) Экспорт
// Выбираем правильное программное имя COM-объекта
ИмяОбъекта = "V83.COMConnector";
Попытка
Connector = Новый COMОбъект(ИмяОбъекта);
Исключение
Сообщить("Не удалось создать объект COMConnector. Проверьте регистрацию comcntr.dll");
Возврат Неопределено;
КонецПопытки;
// Формируем строку подключения для файловой базы
// Для серверной формат будет: "Srvr=""ServerName"";Ref=""BaseName"";"
СтрокаСоединения = "File=""" + ПутьКБазе + """;Usr=""" + Логин + """;Pwd=""" + Пароль + """;";
Попытка
ВнешнееСоединение = Connector.Connect(СтрокаСоединения);
Возврат ВнешнееСоединение;
Исключение
Сообщить("Ошибка при вызове Connect: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Обратите внимание на использование двойных кавычек в строке соединения. Если путь содержит пробелы, это критически важно. Также выясним одну деталь: при работе на сервере убедитесь, что путь к файловой базе является локальным для сервера или указан через UNC-путь (\\Server\Share\Base), к которому у пользователя службы 1С есть полные права NTFS.
Иногда даже после всех настроек ошибка не уходит. Проанализируем ситуацию с правами доступа к временным папкам. COM-соединение 1С активно использует папку Temp того пользователя, от имени которого запущено приложение COM+. Убедимся, что у пользователя, указанного на вкладке Удостоверение, есть права на чтение и запись в папках:
C:\Windows\TempC:\Users\[ИмяПользователя]\AppData\Local\TempЕсли на компьютере установлено несколько версий платформы 8.3, в реестре могут возникнуть конфликты. Система может пытаться запустить v83.comconnector, ссылаясь на старый путь к bin. В таком случае помогает повторная принудительная регистрация компоненты именно той версии, которая является основной для работы, как мы рассматривали в первом шаге.
Мы выяснили, что успешное COM-соединение в 1С зависит от трех факторов: корректной регистрации DLL, настройки прав доступа в службах COM+ и правильно сформированной строки подключения в коде. Придерживаясь описанного алгоритма, мы сможем гарантировать стабильную работу обмена данными между базами, независимо от их типа и версии платформы.